hadoop - 从 JSONserde 中的 JSON 数组访问 sibling 的值?

标签 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

最佳答案

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

沿着这些线的东西:

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

关于hadoop - 从 JSONserde 中的 JSON 数组访问 sibling 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846908/

相关文章:

hadoop - 可以将 Hbase 用于 Hive 吗?

hadoop - 使用 Talend 中的 tHiveRow 组件运行多个 Hive 查询

hadoop - 在Sqoop导出和导入期间如何处理数据错误

sql - 如何将 .sql 文件加载到 Scala?

hadoop - Hive CLI启动引发错误无法识别的Hadoop主要版本号:1.0.4

hadoop - 在将巨大的文件加载到hadoop集群中时,如果客户端在将数据传输到数据节点时失败,该怎么办?

hadoop - hive 中支持的最大字段数(列)是多少?

hadoop - 在HIVE表中加载日志文件

hadoop - 使用UNION ALL进行Hive插入查询优化

在 HIVE 中查找函数