如何在标准 SQL 中解码 BASE64?

Bri*_*ian 5 sql base64 google-bigquery bigquery-standard-sql

我正在尝试使用 BigQuery 中的标准 SQL 将一列 base64 值解散为解码的字符串,但到目前为止还没有任何运气。

我发现有一个函数叫做FROM_BASE64()但是 -

答:文档使它看起来好像将 BASE64 转换为 BYTES,这意味着我需要额外的转换。

B.FROM_BASE64()甚至不工作 - 查询运行,但结果始终与我输入的编码字符串完全相同。

SELECT FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw==')
Run Code Online (Sandbox Code Playgroud)

返回

"aGVsbG8tc3RhY2tvdmVyZmxvdw=="
Run Code Online (Sandbox Code Playgroud)

这里最好的方法是什么?

Rem*_*eau 8

Base64 是一种字节级编码算法,所以这就是为什么输出FROM_BASE64()BYTES.

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

您可以将 a 转换BYTES为 a STRING,但这仅在原始字节表示有效的 UTF-8 编码字符串时才有效。或者,您可以使用Unicode 代码点 U+FFFD将 aSAFE_CONVERT_BYTES_TO_STRING()解码BYTESSTRING替换任何无效的 UTF-8 字节。

或者,您可以使用FORMAT()BYTES十六进制\x##格式显示每个字节。

  • 哇!处理:`SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw=='))` = `hello-stackoverflow` (2认同)