Мой конвейер выглядит следующим образом:
Firehose -> Lambda (Java SDK AWS) -> (S3 и Redshift)
Незакодированная (необработанная) запись JSON отправляется в Firehose. Затем он запускает лямбда-функцию, которая его немного преобразует. Затем Firehose помещает преобразованную запись в корзину S3 и Redshift.
Чтобы Firehose добавлял преобразованные данные в S3, необходимо, чтобы данные были закодированы в Base64 (и Firehose декодирует их перед добавлением в S3).
Однако у меня есть URL-адрес в данных, который при декодировании =
символы заменяются их эквивалентным символом Unicode (\u003d
), поскольку это символ, который декодер Amazon Base64 использует в качестве заполнения.
https://www.[snipped].com/...?returnurl \ u003dnull \ u0026referrer \ u003dnull
Как я могу сохранить эти =
символа в декодированных данных?
Примечание. Я пробовал использовать Base64.getUrlEncoder()
, но AWS, похоже, поддерживает только Base64.getEncoder()
.
=
на\u003d
. Интересно, что запись S3 также добавляется в Redshift через Firehose, а Redshift действительно показывает символ=
. - person Jacob G.   schedule 18.07.2018\u003d
не эквивалентен=
в текстовом файле utf-8, но он находится в JSON, и, конечно же, интерфейсом Lambda всегда является JSON (хотя это не имеет значения, если входящие и исходящие данные всегда представлены в base64). На самом деле я недостаточно хорошо понимаю вашу настройку, чтобы знать, является ли это полезным предположением с моей стороны. - person Michael - sqlbot   schedule 18.07.2018