• 【Hive】表分类


    Hive中的表有多种类型,每种类型的表都有其适用的场景

    用于记录每种表的特性,创建方式以及一些注意事项

    1. internal/managed[内部表/托管表]

    由Hive完全管理表和数据的生命周期
    默认创建的表是内部表
    删除表的时候,数据也被删除

    2. external[外部表]

    是由LOCATION属性指定数据存放地,而不是由默认的warehouse决定的
    删除表的时候,表的元数据被删除了,但是数据还在

    创建示例

    CREATE EXTERNAL TABLE if not exists test_ext ( 
    name string, 
    str_arr ARRAY<string>, 
    t_struct STRUCT<sex:string,age:int>, 
    t_map MAP<string,int>, 
    t_map_arr MAP<string,ARRAY<string>> ) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LOCATION '/user/xw/data/tmp';

    3. 临时表

    在hive session结束时被删除

    4. 分区表

    针对目录[将目录切分为子目录]

    显示分区

    SHOW PARTITIONS <table_name>;

    建立分区表

    create table test_partition(id int, name string, age int) 
    comment 'table description' PARTITIONED BY (year INT, month INT) row format 
    delimited fields terminated by ',' lines terminated by '
    ' 
    stored as textfile;

     分区表需要手动激活分区[即给分区建立子目录]

    alter table test_partition add partition(year=2017,month=3) partition(year=2017,month=4);

    删除分区

    alter table test_partition drop if exists partition(year=2017,month=3);

    向分区表加载数据

    load data local inpath '/home/xw/tmp/table.txt' overwrite into table test_partition partition(year=2016,month=2);

    常用的partition keys

    date and time
    locations
    business logics

    5. bucket表

    针对文件[将文件切割成片段]
    将指定列根据hash算法进行切割,对应列的值相同的记录始终会被划分到同一个桶中
    每个bucket的大小的设定:一个比较好的选择是将每个bucket的大小设置为hadoop的blocksize的两倍,例如,blocksize是256MB,则将每个bucket的大小设为512MB

    建立bucket表

    create table test_bucket(id int, name string, age int) 
    comment 'bucket table' clustered by(id) into 2 buckets row format delimited fields terminated by ',' lines terminated by '
    ' 
    stored as textfile;

    加载数据到bucket表

    INSERT OVERWRITE TABLE test_bucket SELECT * FROM test;

    注:不能使用load来加载数据,load加载数据只是将数据put到hdfs上,不经过MR,因而不会划分桶
    bucket的划分紧紧依赖于底层的数据加载,为了能够正确加载数据到bucket表中,我们可以:
    1.将reduce的数量设为自定义的bucket数
      set map.reduce.tasks = 2;
    2.设置可以强制划分bucket表
      set hive.enforce.bucketing = true;
    数据的加载是通过MR进行的,MR中shuffle过程中的拷贝即分区,就可以实现桶表的划分,MR中默认是按照key进行hash分区的,设置reduce的数目与划分bucket表的数量一致,就正好实现了bucket表的划分。

  • 相关阅读:
    GCC默认的标准不是ANSI C,而是GNU C90
    C/C++预定义宏
    GCC对C标准的支持
    Tupper's selfreferential formula
    VC++对C标准的支持
    一道笔试题
    C语言标准
    FLVPlayback视频
    getDefinitionByName与ApplicationDomain.getDefinition
    SVN
  • 原文地址:https://www.cnblogs.com/sqdmydxf/p/7771605.html
Copyright © 2020-2023  润新知