配置单元json数据解析

配置单元json数据解析,json,hadoop,hive,Json,Hadoop,Hive,我的JSON数据在表JSON_table和列JSON_col中是这样的 { "href": "example.com", "Hosts": { "cluster_name": "test", "host_name": "test.iabc.com" }, "metrics": { "cpu": { "cpu_user": [ [

我的JSON数据在表JSON_table和列JSON_col中是这样的

{
    "href": "example.com",
    "Hosts": {
        "cluster_name": "test",
        "host_name": "test.iabc.com"
    },
    "metrics": {
        "cpu": {
            "cpu_user": [
                [
                    0.7,
                    1499795941
                ],
                [
                    0.3,
                    1499795951
                ]
            ]
        }
    }
}
我想以下面的格式将其放入一个表json\u data

+-------------+-------+------------+
| metric_type | value | timestamp  |
+-------------+-------+------------+
| cpu_user    | 0.7   | 1499795941 |
+-------------+-------+------------+
| cpu_user    | 0.3   | 1499795951 |
+-------------+-------+------------+
我尝试使用get_json_对象获取值

select get_json_object(json_col,'$.metrics.cpu.cpu_user[1]') from json_table
,这给了我

[0.3,1499795951]

如何从这里使用explode函数来获得所需的输出?

您还可以基于JSON数据实现SerDe和InputFormat接口,而不是使用UDF

以下是一些参考:


您还可以基于JSON数据实现SerDe和InputFormat接口,而不是使用UDF

以下是一些参考:




那么,你是说Hive UDF或内部函数不能解析JSON?我只是给你一个替代方法,我没有说UDF不能解析JSON。你是说Hive UDF或内部函数不能解析JSON吗?我只是给你一个替代方法,我没有说UDF不能像charmWorks那样解析JSON
select  'cpu_user'      as metric_type 
       ,val_ts[0]       as val
       ,val_ts[1]       as ts

from   (select  split(m.col,',') as val_ts

        from    json_table j
                lateral view explode(split(regexp_replace(get_json_object(json_col,'$.metrics.cpu.cpu_user[*]'),'^\\[\\[|\\]\\]$',''),'\\],\\[')) m
        ) m
;
+-------------+-----+------------+
| metric_type | val |     ts     |
+-------------+-----+------------+
| cpu_user    | 0.7 | 1499795941 |
| cpu_user    | 0.3 | 1499795951 |
+-------------+-----+------------+