Firehose 数据转换 lambda - 从单个运动记录生成多个记录
Firehose data transformation lambda - produce multiple records from single kinesis record
我创建了一个 Kinesis 数据流,我正在向其中输入格式如下的记录:
{
"ufo": 5,
"unicorn": 7,
"something else": 9,
}
我正在尝试编写一个转换 lambda,它将转换以上记录并将三个记录插入 Redshift。 Redshift table 模式是这样的:
CREATE TABLE my_table(
timestamp DATETIME,
name TEXT,
count INT
) SORTKEY(timestamp);
所以本质上 - 从单个 Kinesis 记录我需要在 Redshift 中生成三行。
Documentation of transformation lambda 没有解释我想要实现的目标是否可行。我已经尝试在编码之前将所有有效载荷包装在数组中,但这会导致 Redshift 端处理错误。我还尝试 return 具有相同记录 ID 的多条记录 - 这也会导致错误。
我遇到了 this bit of documentation,它表明多个 JSON 对象可以存储在一个由 COPY 命令提供的 JSON 文件中。根据文档,文件中可以有多个 JSON 对象,JSON 个对象之间只能放置白色字符。
所以我丢弃了这样的对象:
{"timestamp": "2020/07/17 00:00:00", "name": "ufo", "count": 5}
{"timestamp": "2020/07/17 00:00:00", "name": "unicorn", "count": 7}
{"timestamp": "2020/07/17 00:00:00", "name": "something else", "count": 9}
由于 AWS 正在重试失败的记录,调试起来非常混乱 - 我在对象之间添加了新行(这是文档中的建议),起初我以为我遇到了错误,但错误是重试之前的尝试。
我创建了一个 Kinesis 数据流,我正在向其中输入格式如下的记录:
{
"ufo": 5,
"unicorn": 7,
"something else": 9,
}
我正在尝试编写一个转换 lambda,它将转换以上记录并将三个记录插入 Redshift。 Redshift table 模式是这样的:
CREATE TABLE my_table(
timestamp DATETIME,
name TEXT,
count INT
) SORTKEY(timestamp);
所以本质上 - 从单个 Kinesis 记录我需要在 Redshift 中生成三行。
Documentation of transformation lambda 没有解释我想要实现的目标是否可行。我已经尝试在编码之前将所有有效载荷包装在数组中,但这会导致 Redshift 端处理错误。我还尝试 return 具有相同记录 ID 的多条记录 - 这也会导致错误。
我遇到了 this bit of documentation,它表明多个 JSON 对象可以存储在一个由 COPY 命令提供的 JSON 文件中。根据文档,文件中可以有多个 JSON 对象,JSON 个对象之间只能放置白色字符。
所以我丢弃了这样的对象:
{"timestamp": "2020/07/17 00:00:00", "name": "ufo", "count": 5}
{"timestamp": "2020/07/17 00:00:00", "name": "unicorn", "count": 7}
{"timestamp": "2020/07/17 00:00:00", "name": "something else", "count": 9}
由于 AWS 正在重试失败的记录,调试起来非常混乱 - 我在对象之间添加了新行(这是文档中的建议),起初我以为我遇到了错误,但错误是重试之前的尝试。