鉴于 这是我的JSON
...
"actions": [
{
"action_type": "link_click",
"value": "1"
},
{
"action_type": "page_engagement",
"value": "1"
},
{
"action_type": "post_engagement",
"value": "1"
},
.....
]
}
...
我想将每个action_type
的值映射到我的外部表
CREATE EXTERNAL TABLE raw_marketing_other.facebook_ad_cost_dtl_hrly (
...
linkClick : int
pageEngagement : int
...
)
例如,linkClick
列将具有从该json对象派生的值1
。
问题 这在serdeProperties的映射中是否可行?像这样的东西。
create table ...
...
ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe'
WITH serdeproperties(
"mapping.linkClick" = "actions[action_type="link_click].value",
...
注意:其中actions [action_type =“link_click]”是否意味着返回具有该条件的json对象的第一个出现?
如果通过自定义映射无法实现,那么还有其他解决方案吗?
答案 0 :(得分:1)
我只是按原样加载数据,然后使用get_json_object
UDF查询它。
这些方面的东西:
SELECT *
FROM my_table
WHERE get_json_object(json_column, '$.actions.action_type') = 'link_click';