使用内联jq表达式的Kinesis Firehose动态分区

0

【以下的问题经过翻译处理】 根据AWS博客文章[Dynamic Partitioning](https://aws.amazon.com/blogs/big-data/kinesis-data-firehose-now-supports-dynamic-partitioning-to-amazon-s3/),我已经配置了一个firehose传输流,将API调用转换为Parquet输出到S3,现在根据数据中的字段“playtype”进行了分区。

然而,在某些行中,此分区字段中的值为空,这会导致这些行出现错误。因此,我想调整动态分区键的jq表达式,在出现空值的情况下,用默认值来替换空值。但是,我对语法有些困惑。

字段指定的JQ表达式为.playtype

因此,我尝试过以下内容:

.playtype //“some-hardcoded-default”
.playtype | if . == null or . == "" then "some-hardcoded-default" else . end

这些在jqplay中评估为有效的jq-但在实践中即在firehose中返回“jq语法错误”。如何正确指定此逻辑?即在该字段上进行分区,但如果值为空或为null,则使用“some-hardcoded-default”。 谢谢!

profile picture
专家
已提问 5 个月前28 查看次数
1 回答
0

【以下的回答经过翻译处理】 根据上面评论中的用户建议进行尝试,并告诉我们结果。我们目前无法检查jqplay的有效性,因为jqplay被阻止访问了。我相信为每个表达式加上括号应该可以解决这个问题。然而,如果这样做不起作用,我建议您使用转换Lambda函数,就像这里提到的这样:https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html 在输入数据中没有字段的情况下,这样您将对字段有更多的控制权。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则