【发布时间】:2018-07-17 16:04:02
【问题描述】:
我的管道如下:
Firehose -> Lambda(AWS 的 Java SDK)->(S3 和 Redshift)
将未编码的(原始)JSON 记录提交给 Firehose。然后它会触发一个 Lambda 函数,对它进行轻微的转换。然后 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()。
【问题讨论】:
-
您确定这不仅仅是您如何显示数据的人工制品?
-
@Michael-sqlbot 我敢肯定;我下载了 S3 文件并使用许多不同的文本编辑器打开它(所有这些都设置为 UTF-8),但它们都将
=替换为\u003d。有趣的是,S3 记录也通过 Firehose 添加到 Redshift,而 Redshift 确实显示=字符。 -
你说的是 Firehose -> S3,还有 Firehose -> Lambda -> S3。我不清楚 Lambda 代码可能扮演什么角色,但似乎这是最有可能的嫌疑人。
\u003d不等同于 utf-8 文本文件中的=,但它是 JSON 格式,当然 Lambda 的接口始终是 JSON 格式(尽管如果输入和输出的数据始终以 base64 表示,则无关紧要)。我实际上并不太了解您的设置,无法知道这对我来说是否有用。 -
@Michael-sqlbot 我很抱歉没有更好地解释它。将未编码的(原始)JSON 记录提交给 Firehose。然后它会触发一个 Lambda 函数,对它进行轻微的转换。 Firehose 然后将转换后的记录放入 S3 存储桶和 Redshift。希望这有助于稍微澄清一下!
标签: java amazon-web-services amazon-s3 aws-lambda amazon-kinesis-firehose