hive表之分桶

2019-10-21  本文已影响0人  飞不高的老鸟

一、提高表数据的查询效率。
二、随机取样。

hive 分桶表如何创建并加载数据?

创建分桶表。

hive> create table bucket_test(userid int, name string) clustered by (userid) into 4 buckets
    > Row format delimited
    > Fields terminated by ','
    > Lines terminated by '\n';
OK

向分桶表中加载数据之前,我们需要配置分桶相关的参数。

hive> set hive.enforce.bucket=true;
hive> load data local inpath 'xxx/test.txt' into table  bucket_test;
hive> select * from bucket_test;
OK
105729360   zhangsan
105729384   lisi
105729420   wangwu
105729448   zhaoliu
105729497   lisa
105729374   lucy
105729434   lily
105729530   json
105729587   jack
-rwxrwx--x 1 test hive 76 5月 21 11:34 000000_0
-rwxrwx--x 1 test hive 19 5月 21 11:34 000001_0
-rwxrwx--x 1 test hive 57 5月 21 11:34 000002_0
-rwxrwx--x 1 test hive 38 5月 21 11:34 000003_0

hive分桶表的优势?

  1. 这个优势在两张大表进行关联查询时可以明显提现出来。由于两张表在同一属性(如 userid)进行分桶处理,在进行关联时,只需要关联相对应的桶号即可,不用进行全表的扫描处理。
  2. 通过分桶关联,可以将 jion 操作转为 map jion 操作,在 map 端进行 jion。
  3. 两张表的桶数不一定相同,倍数关系也有相同的优势。

在有些情况下,我们不需要知道全表数据的情况,而只需要选取一部分样本数据进行分析,此时分桶表就可以充分体现其随机的优势。

hive> select * from bucket_test TABLESAMPLE(BUCKET 1 out of 4 on userid);
OK
105729360   zhangsan
105729384   lisi
105729420   wangwu
105729448   zhaoliu

其中 1 是从第一个桶开始取数,4 表示桶数的因子份数据,4/4。备注:这里的因子也可以是桶数的倍数(如8,这里数据量为 4/8)。

总结

上一篇下一篇

猜你喜欢

热点阅读