如何在标准SQL中解码BASE64?

8

我正试图使用BigQuery中的标准SQL解密一列Base64值为已解密的字符串,但迄今为止没有任何进展。

我发现有一个名为FROM_BASE64()的函数,但是 -

A. 官方文档显示它将BASE64转换为BYTES,这意味着我需要进行额外的转换。

B. FROM_BASE64()甚至都不起作用-查询运行了,但结果始终是我输入的相同编码字符串。

SELECT FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw==')

返回值

"aGVsbG8tc3RhY2tvdmVyZmxvdw=="

这里最好的方法是什么?
1个回答

13

Base64是一种字节级编码算法,这就解释了为什么FROM_BASE64()的输出结果是BYTES

只要您不需要显示解码后的字节,就可以根据需要在查询中使用它们。但原始字节可能无法直接在BigQuery中“可显示”,所以它可能选择以BASE64形式显示它们。因此,您的示例将简单地将字符串文字解码为字节,然后将结果重新编码回Base64,这就解释了为什么您会看到输入字符串作为输出。

您可以将BYTES转换为STRING,但前提是原始字节代表有效的UTF-8编码字符串。 或者,您可以使用SAFE_CONVERT_BYTES_TO_STRING()BYTES解码为STRING,用Unicode代码点U+FFFD替换任何非有效的UTF-8字节。

另外,您也可以使用FORMAT()以十六进制\x##格式显示每个BYTES中的字节。


2
哇!这就处理好了:

SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw=='))

hello-stackoverflow
- Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接