hive分桶

Posted 海绵不老

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive分桶相关的知识,希望对你有一定的参考价值。

hive分桶

创建分桶表

    建表时指定了CLUSTERED BY,这个表称为分桶表!
	分桶:  和MR中分区是一个概念! 把数据分散到多个文件中!
	
		create table stu_buck(id int, name string)
		clustered by(id) 
		SORTED BY (id desc)
		into 4 buckets
		row format delimited fields terminated by '\\t';

导入数据

创建临时表:

	create table stu_buck_tmp(id int, name string)
	row format delimited fields terminated by '\\t';

向临时表导入数据

	 load data local inpath '/home/atguigu/hivedatas/student' into table  stu_buck_tmp;

导入数据之前:
需要打开强制分桶开关: set hive.enforce.bucketing=true;
需要打开强制排序开关: set hive.enforce.sorting=true;
导数据:

 insert into table stu_buck select * from stu_buck_tmp;

抽样查询

格式:select * from 分桶表 tablesample(bucket x out of y on 分桶表分桶字段);
要求:
①抽样查询的表必须是分桶表!
②bucket x out of y on 分桶表分桶字段
假设当前表一共分了z个桶
x: 从当前表的第几桶开始抽样
0<x<=y
y: z/y 代表一共抽多少桶!
要求y必须是z的因子或倍数!

怎么抽: 从第x桶开始抽样,每间隔y桶抽一桶,知道抽满 z/y桶

bucket 1 out of 2 on id:  从第1桶(0号桶)开始抽,抽第x+y*(n-1),一共抽2桶   : 0号桶,2号桶

select * from stu_buck tablesample(bucket 1 out of 2 on id)

bucket 1 out of 1 on id:  从第1桶(0号桶)开始抽,抽第x+y*(n-1),一共抽4桶   : 0号桶,2号桶,1号桶,3号桶

bucket 2 out of 4 on id:  从第2桶(1号桶)开始抽,一共抽1桶   : 1号桶

bucket 2 out of 8 on id:  从第2桶(1号桶)开始抽,一共抽0.5桶   : 1号桶的一半

以上是关于hive分桶的主要内容,如果未能解决你的问题,请参考以下文章

hive分桶

Hive的分桶

Hive(10):Hive分桶表

Hive - 分桶和分区

在选择查询中使用 hive 分桶

Hive 教程-分区表与分桶表