我正在尝试使用BigQuery中的Standard SQL将一列base64值散列为解码的字符串,并且到目前为止还算不上成功。
我发现有一个名为FROM_BASE64()
的函数,但-
A。该文档使它看起来好像将BASE64转换为BYTES,这意味着我需要进行额外的转换。
B。 FROM_BASE64()
甚至无法正常工作-查询会运行,但是结果始终是我输入的完全相同的编码字符串。
SELECT FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw==')
返回
"aGVsbG8tc3RhY2tvdmVyZmxvdw=="
这里最好的方法是什么?
答案 0 :(得分:3)
Base64是 byte 级编码算法,因此FROM_BASE64()
的输出是BYTES
。
只要不需要显示解码的字节,就可以根据需要在查询中使用它们。但是原始字节在BigQuery中可能无法按原样显示可显示,因此它可能选择在BASE64中显示它们。因此,您的示例仅将字符串文字解码为字节,然后将结果重新编码回Base64,这将解释为什么您将输入字符串视为输出。
您可以将BYTES
强制转换为STRING
,但这仅在原始字节表示有效的UTF-8编码字符串时有效。
或者,您可以使用SAFE_CONVERT_BYTES_TO_STRING()
来将BYTES
解码为STRING
,将所有无效的UTF-8字节替换为Unicode代码点U + FFFD。
或者,您可以使用FORMAT()
以BYTES
的十六进制\x##
格式显示每个字节。