在 Redshift 中将 Base64 转换为十六进制 / python
Converting Base64 to Hex in Redshift / python
我们正在将我们的数据库从 Postgres 迁移到 Redshift,我们在将 Base64 字符串转换为 Hex 时遇到了一些挑战。
在旧情况下(在 postgres 中)我们有一个函数:
CREATE OR REPLACE FUNCTION hex_to_int(hexval character varying)
RETURNS integer
LANGUAGE plpgsql
IMMUTABLE STRICT
AS $$
DECLARE
result int;
BEGIN
EXECUTE 'SELECT x''' || hexval || '''::int' INTO result;
RETURN result;
END;
$$
我们在 select 中称其为:
SELECT
encode(decode('AQDAAi0EAAoFAAcN5A=='::text, 'base64'::text), 'hex'::text) AS hexresult
FROM table
结果显示为:0100c0022d04000a0500070de4
Redshift 似乎不支持 plpgsql 函数,现在正在寻找其他方法来执行此操作。
I have tried to do this with base64.b64decode
结果我看到:
此 Amazon Redshift User-Defined Function 会将 base64 转换为十六进制数字:
CREATE FUNCTION f_base64hexdigits (s varchar)
RETURNS varchar
IMMUTABLE
AS $$
import base64
import binascii
return binascii.hexlify(base64.b64decode(s))
$$ LANGUAGE plpythonu;
这样使用:
SELECT f_base64hexdigits('AQDAAi0EAAoFAAcN5A==')
输出:
0100c0022d04000a0500070de4
我们正在将我们的数据库从 Postgres 迁移到 Redshift,我们在将 Base64 字符串转换为 Hex 时遇到了一些挑战。
在旧情况下(在 postgres 中)我们有一个函数:
CREATE OR REPLACE FUNCTION hex_to_int(hexval character varying)
RETURNS integer
LANGUAGE plpgsql
IMMUTABLE STRICT
AS $$
DECLARE
result int;
BEGIN
EXECUTE 'SELECT x''' || hexval || '''::int' INTO result;
RETURN result;
END;
$$
我们在 select 中称其为:
SELECT
encode(decode('AQDAAi0EAAoFAAcN5A=='::text, 'base64'::text), 'hex'::text) AS hexresult
FROM table
结果显示为:0100c0022d04000a0500070de4
Redshift 似乎不支持 plpgsql 函数,现在正在寻找其他方法来执行此操作。
I have tried to do this with base64.b64decode
结果我看到:
此 Amazon Redshift User-Defined Function 会将 base64 转换为十六进制数字:
CREATE FUNCTION f_base64hexdigits (s varchar)
RETURNS varchar
IMMUTABLE
AS $$
import base64
import binascii
return binascii.hexlify(base64.b64decode(s))
$$ LANGUAGE plpythonu;
这样使用:
SELECT f_base64hexdigits('AQDAAi0EAAoFAAcN5A==')
输出:
0100c0022d04000a0500070de4