使用内联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
EXPERTE
gefragt vor 6 Monaten35 Aufrufe
1 Antwort
0

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

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen