【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 '\n' 
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 '\n' 
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表的划分。

posted @ 2017-11-02 14:09  sqdmydxf  阅读(509)  评论(0编辑  收藏  举报