Hive学习小记-(5)表字段变动频繁时用json格式
建表场景
create test_json( id int ,student string ) row format delimited fields terminated by ' ';
-- 假数据: 1 {"name":"zhangsan","age":17,"sex":"F"} --这里一定记得字符串要加双引号 2 {"name":"lisi","age":23,"sex":"M"} -- 上传文件之后 load data inpath 'file_path' into table test_json;
select * from test_json #可以查询
select id,get_json_object(student,'$.name') from test_json #可以查询,但这里写'$[name]'查不出来
每天insert overwrite数据场景,以及后续频繁变化处理
-- 先创建一张抽数源表,并灌好数据 create table student( id int ,name string ,age int ,sex string
,phone string ) row format delimited fields terminated by ' ';
load data inpath 'file_path' into table student;
-- 从源表加工到json string表,这里一定要调好格式!!!不然后面解析不了 insert overwrite table test_json select id,concat('{\"name\":\"',name,'\",\"age\":',age,',\"sex\":\"',cast(sex as string),'\"}') --频繁变化字段直接加在json from student as a
-- 这样的话从源表加工到json string表的字段若频繁变化,可以都加工到json字段中,下游应用时解析对应字段即可 --查看json格式 select * from test_json --查看json string字段中需要的name字段 select id,get_json_object(student,'$.name') from test_json
TIPS
另一种可以直接把json字符串存成map格式字段map_col,这样取json串中某个值可以使用 map_col['key1'].insert数据也更方便,比使用get_json_object或json_tuple解析方便多了
参考:https://blog.csdn.net/oZuoLuo123/article/details/91410987
存成map之后转横表纵表的加工都很方便,参考:https://www.cnblogs.com/foolangirl/p/14264709.html