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

Hive学习小记-(13)表字段变动频繁时用map格式 

存成map之后转横表纵表的加工都很方便,参考:https://www.cnblogs.com/foolangirl/p/14264709.html

 转map之后每天insert overwrite数据场景,以及后续频繁变化处理***

posted @ 2020-12-26 21:58  foolangirl  阅读(230)  评论(0编辑  收藏  举报