[英]How to extract a field from an array of JSON objects in AWS Athena?
我在 AWS Athena 的列中有以下 JSON 數據結構:
[
{
"event_type": "application_state_transition",
"data": {
"event_id": "-3368023833341021830"
}
},
{
"event_type": "application_state_transition",
"data": {
"event_id": "5692882176024811076"
}
}
]
我想以某種方式提取event_id
字段的值,例如以列表的形式:
["-3368023833341021830", "5692882176024811076"]
(盡管我不堅持這一點,只要我能得到我的事件 ID。)
我想使用JSON_EXTRACT
函數並認為它使用與jq
完全相同的語法。 在jq
中,我可以使用以下查詢語法輕松獲得我想要的內容:
.[].data.event_id
但是,在 AWS Athena 中,這會導致錯誤,因為語法顯然與jq
不完全兼容。 有沒有其他方法可以達到我想要的結果?
JSON_EXTRACT
支持非常有限的一組 json 路徑。 根據 Athena 引擎版本,您可以通過將列轉換為映射數組並通過數組函數處理該數組來處理列:
-- sample data
with dataset(json_col) as (
values ('[
{
"event_type": "application_state_transition",
"data": {
"event_id": "-3368023833341021830"
}
},
{
"event_type": "application_state_transition",
"data": {
"event_id": "5692882176024811076"
}
}
]')
)
-- query
select transform(
cast(json_parse(json_col) as array(map(varchar, json))),
m -> json_extract(m['data'], '$.event_id'))
from dataset;
輸出:
_col0 |
---|
[“-3368023833341021830”,“5692882176024811076”] |
或者對於第 3 個 Athena 引擎版本,您可以嘗試使用 Trino 的json_query
:
-- query
select JSON_QUERY(json_col, 'lax $[*].data.event_id' WITH ARRAY WRAPPER)
from dataset;
請注意,兩者的返回類型會有所不同 - 在第一種情況下,您將擁有array(json)
而在第二種情況下 - 只有varchar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.