Hive编程指南08---模式设计

    xiaoxiao2021-03-25  139

    Hive模式设计

    按天划分的表

        表名中加入一个时间戳,table_2017_03_01

        //对于Hive,应该使用分区表

        CREATE TABLE <table> (col1 Type) PARTITION BY (day INT)

    关于分区

        分桶表数据存储,可以解决找不到好的、大小相对合适的分区方式

    唯一键和标准化

        

    同一份数据多种处理

        INSERT OVERWRITE TABLE <to_table1>

        SELECT * FROM <from_table> WHERE ..;

        INSERT OVERWRITE TABLE <to_table2>

        SELECT * FROM <from_table> WHERE ..;

        FROM <from_table>

        INSERT OVERWRITE <to_table1> SELECT * WHERE ...

        INSERT OVERWRITE <to_table2> SELECT * WHERE ...

    对于每个表的分区

        中间表的时候(同时运行两个实例,可能会相互影响),建议使用分区表

    分桶表数据存储

        分桶是将数据集分解成更容易管理的若干部分

        CREATE TABLE <table>(col1 Type, col2 Type, col2 Type)

        PARTITIONED BY (par Type)

        CLUSTERED BY (col1 Type) INTO 96 BUCKETS;

        //插入数据

        set hive.enforce.bucketing=true;

        INSERT OVERWRITE TABLE <table> PARTITION (par = '')

        SELECT col1, col2, col3 FROM <other_talbe> WHERE par=''

        //如果没有hive.enforce.bucketing属性,使用set mapred.reduce.tasks设置和分桶个数相匹配的reducer个数,然后在SELECT语句后增加CLUSTER BY语句

        set mapred.reduce.tasks=96;

        INSERT OVERWRITE TABLE <table> PARTITION (par = '')

        SELECT col1, col2, col3 FROM <other_talbe> WHERE par=''  CLUSTER BY col1;

        利于执行mpa-side JOIN

    为表增加列

        在原始数据文件上,新增字段。无法在已有字段的开始或者中间增加新字段

        ALTER TABLE <table> ADD COLUMNS(col Type)

    使用列存储表

        一般使用行式存储,SerDe列式来以混合列式格式存储信息

    1.重复数据

        一个表中,某些字段会有重复数据,比如年龄,使用列存储效果会很好

      

    2.多列

        

    (几乎)总是使用压缩

    转载请注明原文地址: https://ju.6miu.com/read-8101.html

    最新回复(0)