美文网首页
HQL 入门

HQL 入门

作者: 索伦x | 来源:发表于2019-06-12 10:43 被阅读0次

    Hive简介

    a). Hive是一个大数据的数据仓库工具, 提供基于thrift的远程端口
    b). 可以利用zk来做容灾
    c). 支持内部表和外部表(HBASE/Mongodb)

    Hive 分隔符

    lines分隔符:\n//Hive的行分隔符只支持‘\n’
    fields分隔符:默认^A(Ctrl+A),建表时用八进制编码\001表示
    ARRAY、STRUCT中的元素或者MAP中键值对的分隔符:默认^B(\002)
    MAP键和值之间的分隔符:默认^C,八进制编码\003表示;

    使用HIVE需要注意的地方

    a). 不支持update\delete
    b). 大表采用分区表

    Hive数据类型 (原子数据类型/复杂数据类型)

    原子数据类型
    复杂数据类型

    Hive分区表(动态分区与静态分区)

    insert overwrite table tbl_name partition(pt, if_online)  select field1, field2, ..., pt, if_online  from tbl  where xxx;   
    insert overwrite table tbl_name partition(pt=20121023,     if_online=1) select field1, field2, ..., fieldn from tbl where xxx;  
    区别):
     a).静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。
     b).动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区
    

    HQL

    需要注意的地方

    a).hive本身缺陷,需要在每个子查询后面加别名
    select a,b,c from (select a,b,c from (select a,b,c from table) a where rno = 1) tb group by a;
    b). 避免数据倾斜
    表现的情况:任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。
    要尽早的过滤数据和裁剪数据,减少后续处理的数据量,使得join key的数据分布较为均匀,将空字段随机赋予值,这样既可以均匀分发倾斜的数据

    强大的SQL统计功能

    a). 多表插入功能
    from test insert overwrite table test1 partition(dt=20170915,hour=17)
    select id,name,last_time insert overwrite table testx select id,name;
    b). 增量表与全量表的合并(对update的补充)
    insert overwrite table service_all select * from service_tmp
    union all select a.* from service_all a left outer join service_tmp b
    on a.service_code = b.service_code where b.service_code is null;
    c). 窗口函数
    1).与group by对比
    gourp by: 一条记录
    over : 多条记录

    开窗函数over()分析函数包含三个分析子句:
    分组子句(partition by), 排序子句(order by), 窗口子句(rows)
    select id,create_time,amount,sum(amount) over(partition by id order by create_time asc rows between 2 preceding and 2 following ) amount_all
    
    image.png

    相关文章

      网友评论

          本文标题:HQL 入门

          本文链接:https://www.haomeiwen.com/subject/uqskfctx.html