分享

hive能否动态解析json

BB_BDATA 2018-10-18 14:43:23 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 8 16978
各位大神,现有数据包含json格式,数据如下:TABLE:A
event_id   object

P10000    {"logType":4,"role":1,"account":"136******21"}

P10001    {"activityId":1,"activityName":"青春真好 - 中学生电影"}
P10002    {"teacherSign":"","receiverIds":"sZeqjkyVTqOWbQ/68SxNTA==,","content":"缴费成功!","sendTime":"2018-10-15 23:47:35"}

另有一份维表
TABLE:B
event_id object_id object_name
P10000    account        账号
P10000    role             角色
P10000    logType       登录方式   
P10001    account        账号
P10001    role             角色
P10001    regSource    注册源
P10002    content        内容
P10002    teacherSign  教师署名   
P10002    receiverIds   接收人ID   
P10002    sendTime     通知发送时间

现考虑,能否关联此维表,在解析json时,用一条sql输出各个event_id对应的object_id 的value,例如
P10000   logType   4
P10000   role         1
P10000   account   136******21

尝试办法:
select m.event_id,d.object_id,get_json_object(m.object,d.object_id) as value
from A m join B d
on m.event_id=d.event_id  limit 10;

输出:
P10000  account           NULL
P10000  role                 NULL
P10000  logType           NULL


输出value都是null,分析原因是get_json_object的第二个参数一般都是用get_json_object(object,'$.logType')这种方式去解析object的logType
而传入其他表的字段,解析失败导致
各位大神,有没有相关经验,请指导一二,谢谢

已有(8)人评论

跳转到指定楼层
fly2015 发表于 2018-10-19 11:09:44
get_json_object(object,'$.'+d.object_id)试试这样呢
回复

使用道具 举报

jixianqiuxue 发表于 2018-10-18 20:01:30
看你如何建表的,加入带有ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’来告诉HIVE用JsonSerDe来解析JSON可以直接引用:
例如:


select m.event_id,d.d.object_id,m.object_id, as value
from A m join B d
on m.event_id=d.event_id  limit 10;

回复

使用道具 举报

BB_BDATA 发表于 2018-10-19 18:42:40
fly2015 发表于 2018-10-19 11:09
get_json_object(object,'$.'+d.object_id)试试这样呢

尝试了下,解析结果还是null
回复

使用道具 举报

書生丶 发表于 2018-10-27 01:16:33
这个mapreduce程序呢?
回复

使用道具 举报

書生丶 发表于 2018-10-27 01:18:05
不对  是写个udf然后正则匹配试试。。
回复

使用道具 举报

BB_BDATA 发表于 2018-10-29 10:20:15
書生丶 发表于 2018-10-27 01:18
不对  是写个udf然后正则匹配试试。。

嗯应该可以实现,想了解下直接用hql有没有实现方案
回复

使用道具 举报

書生丶 发表于 2018-10-29 22:59:10
要想动态。。还是需要正则匹配。。但是只能想到。。但是也是不会具体怎么写。。
回复

使用道具 举报

書生丶 发表于 2018-11-13 15:36:57
用一个serde就能动态解析,stored as +"一个Apache的serde类"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条