AWS Kinesis Firehose - 按纪元以外的时间戳进行动态分区

Ben*_*min 7 amazon-web-services amazon-kinesis amazon-kinesis-firehose aws-event-bridge

FirehoseEventbridge事件中读到的内容类似于:

{
  "detail": {
    "key1": "some value",
    "key2": "some value",
    "Timestamp": "2022-01-21T19:01:05Z"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在将事件保存到s3. 我尝试像这样提取年份:

.detail.Timestamp| strftime("%Y")
Run Code Online (Sandbox Code Playgroud)

Timestamp我知道如果以格式给出字段,这会起作用epoch,但现在我收到错误(通过保存到文件中firehose):

{
  . . .
  "errorCode": "DynamicPartitioning.MetadataExtractionFailed",
  "errorMessage": "strftime/1 requires parsed datetime inputs",
  . . .
}
Run Code Online (Sandbox Code Playgroud)

从我的事件包含的时间戳中提取年份(和其他时间部分)的正确语法是什么?

Ben*_*min 12

回答我自己的问题:

我意识到选择用于分区的键的方法是使用jq语法。因此,使用是从纪元| strftime("%Y")时间中提取年份的方法。为了从我的时间格式中提取它,我需要添加另一个步骤.| strptime("%Y-%m-%dT%H:%M:%SZ")

完整的解决方案是:.detail.Timestamp| strptime("%Y-%m-%dT%H:%M:%SZ")| strftime("%Y").

在了解这实际上是之后jq,这里的答案How to extract theyear from JSON date using jq就完成了我的难题。