• 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数据场景,以及后续频繁变化处理***

  • 相关阅读:
    Makefile 跟着走快点
    MariaDB 复合语句和优化套路
    Unity Shader常用函数,标签,指令,宏总结(持续更新)
    ThreadLocal 简述
    Java全排列排序
    Thrift入门
    Nginx + Keepalived 双机热备
    Linux 虚拟IP
    Java 反编译
    Spring拦截器
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14193982.html
Copyright © 2020-2023  润新知