分区表和桶表

分区表:

假设有海量的数据保存在HDFS的某个和hive表名对应的目录下,使用hive进行操作的时候,往往会搜索这个目录下的所有文件,这有时候是十分耗时的,如果我们知道这些数据的某些特征,可以事先对它们进行分类,再把数据loadHDFS上的时候,它们就会被放到不同的子目录下,然后使用hive进行操作的时候,就可以在where字句中对这些特征进行过滤,那么对数据的操作就只会在符合条件的子目录下进行,其他不符合条件的目录下的内容就不会被读取,在数据量非常大的时候,这样会节省大量的时间,这种把表中的数据分散的存放到子目录下的方式,就是分区表。


分区表,hive优化手段之一,从目录的层面控制搜索数据的范围。

1)CREATE TABLE t3(id int,name string,age int) PARTITIONED BY (Year INT, Month INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

2)查看表结构

desc formatted t2 ;

3//添加分区,创建目录

$hive>alter table t3 add partition (year=2014, month=11);

$hive>alter table t3 add partition (year=2014, month=12);

4)显式表的分区信息

$hive>SHOW PARTITIONS t3;

5)删除分区

hive>ALTER TABLE employee_partitioned DROP IF EXISTS PARTITION (year=2014, month=11);

6加载数据到分区表

hive>load data local inpath '/home/centos/customers.txt' into table t3 partition(year=2014,month=11);

数据:

1,zhangsan,15

2,lisi,22

3,wangwu,18

桶表

hive中,数据库,表,分区都是对应到HDFS上的路径,当往表中上传数据的时候,数据会传到对应的路径下,形成新的文件,文件名的格式是00000_0_ ...,每次插入文件都会形成新的文件,命名也是有规律的,桶表就是对应不同的文件的。


1)创建桶表

$hive>CREATE TABLE t4(id int,name string,age int) CLUSTERED BY (id) INTO 3 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

2)加载数据不会进行分桶操作

$hive>load data local inpath '/home/centos/customers.txt' into table t4 ;

3)删除表不支持 delete from t4

4)dfs -rmr /user/hive/watehouse/**

5) insert into t4 values(6,'jerry',10);


总结:分区表在文件夹上面进行过滤,桶表在文件上进行过滤


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值