配置单元json数据解析
我的JSON数据在表JSON_table和列JSON_col中是这样的配置单元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": [ [
{
"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 |
+-------------+-----+------------+