从JSONserde中的JSON数组访问兄弟的值?

时间:2017-08-23 18:22:46

标签: hadoop hive

鉴于 这是我的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对象的第一个出现?

如果通过自定义映射无法实现,那么还有其他解决方案吗?

参考文献: https://github.com/rcongiu/Hive-JSON-Serde

1 个答案:

答案 0 :(得分:1)

我只是按原样加载数据,然后使用get_json_object UDF查询它。

这些方面的东西:

SELECT *
FROM my_table
WHERE get_json_object(json_column, '$.actions.action_type') = 'link_click';