在Redshift / python中将Base64转换为Hex

时间:2018-04-01 11:49:36

标签: base64 hex amazon-redshift decode encode

我们正在将我们的数据库从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 
encode(decode('AQDAAi0EAAoFAAcN5A=='::text, 'base64'::text), 'hex'::text) AS hexresult 
FROM table

结果显示为:0100c0022d04000a0500070de4

Redshift似乎不支持plpgsql函数,现在正在寻找另一种方法来执行此操作。

I have tried to do this with base64.b64decode

结果我看到了:

1 个答案:

答案 0 :(得分:1)

此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