- 최신
- 최다 투표
- 가장 많은 댓글
Hi there, please try as per above user suggestion in the comments and let us know the results. jqplay is currently blocked on our end so couldn't check the validity. I believe having brackets for each expression should fix the issue. However if that doesn't work, I would recommend you to resort to using a transformation Lambda function like mentioned here: https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html in the case where field is not present in the incoming data. That way you would have a lot more control on the fields.
AWS-User-4356880 is correct! Many thanks. I had used a transformation lambda function as you also suggest and this works too but the former was a much simpler, quicker way to go.
I can confirm the example provided by AWS-User-4356880
works! Using an if
statement in a Kinesis Data Firehose works. For exmaple:
Source data might looks like this:
{
"playerName": "Alex",
"score": 1200,
"playtype": "single",
"level": 5,
"duration": "15 minutes"
}
Dynamic partitioning keys can look like:
- Key:
playtype_val
- JQ expression:
(.playtype| if . == null or . == "" then "hardcodedefault" else . end)
And S3 bucket prefix as:
intel/history/!{partitionKeyFromQuery:interaction_type}/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/
What this does is:
- If the field is empty or missing, it returns the hardcodeddefault,
- Else it returns the value inside the field
- And the
/timestamp=
is a built in feature that allows you to create S3 partitions from the timestamp of the event (no need to define an expression).
관련 콘텐츠
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 10달 전
(.playtype | if . == null or . == "" then "some-hardcoded-default" else . end)
put it inside the brackets , it will work .