Как декодировать BASE64 в стандартном SQL? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь разархивировать столбец значений base64 в декодированные строки с помощью стандартного SQL в BigQuery, но пока безуспешно.

Я обнаружил, что есть функция с именем FROM_BASE64(), но -

A.В документации это выглядит так, как будто она преобразует BASE64 в байты, что означает, что мне нужно дополнительное преобразование.

B.FROM_BASE64() даже не работает - запрос выполняется, но результаты всегда совпадают с той кодированной строкой, которую я ввел.

SELECT FROM_BASE64('aGVsbG8tc3RhY2tvdmVyZmxvdw==')

возвращает

"aGVsbG8tc3RhY2tvdmVyZmxvdw=="

Что было бы лучшеподходить сюда?

1 Ответ

0 голосов
/ 25 октября 2018

Base64 - это алгоритм кодирования уровня байт , поэтому на выходе 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##.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...