6.Hive动态分区和分桶

动态分区

hive的动态分区配置
--hive设置hive动态分区开启
	set hive.exec.dynamic.partition=true;
	默认:true
--hive的动态分区模式
	set hive.exec.dynamic.partition.mode=nostrict;
	默认:strict(至少有一个分区列是静态分区)
#相关参数
--每一个执行mr节点上,允许创建的动态分区的最大数量(100),分区目录
	set hive.exec.max.dynamic.partitions.pernode;
--所有执行mr节点上,允许创建的所有动态分区的最大数量(1000)	
	set hive.exec.max.dynamic.partitions;
--所有的mr job允许创建的文件的最大数量(100000)	
	set hive.exec.max.created.files;
创建动态分区表
  1. 创建普通表
  2. 创建分区表
  3. 将普通表insert到分区表
  4. insert into table goods partition(cat_id) select goods_id,goods_status,cat_id from tmp1;

分桶

--设置hive支持分桶
--hive1.x的写法,2.x不这么写了默认启动分桶
set hive.enforce.bucketing=true;

CREATE TABLE psnbucket(
	id INT,
	name STRING,
	age INT
)
--以age列分4个桶
CLUSTERED BY (age) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

insert into table psnbucket select id, name, age from psn31;

--分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。 
--对于hive中每一个表、分区都可以进一步进行分桶。 
--由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
抽样查询
--只有抽样查询场景才会用
select * from bucket_table tablesample(bucket 1 out of 4 on columns);

TABLESAMPLE(BUCKET x OUT OF y) 
--x:从几号桶开始取数据,下标从1开始
--y:取桶的个数,必须为该表总bucket数的倍数或因子,桶个数/y
--建议取因子,直接取当前桶的全部数据
假如说总共有4桶
怎么抽: 从第x桶开始抽样,每间隔y桶抽一桶,直到抽满 z/y桶

bucket 1 out of 21开始抽,每2个抽一个。
13

bucket 2 out of 1
需要y>x>0,所以就不行

bucket 1 out of 11开始抽,每1个都抽
一共抽4桶 : 0号桶,2号桶,1号桶,3号桶

bucket 2 out of 4
从第2桶开始抽,每4个抽一个,因为没有5桶,所以只抽2桶

bucket 2 out of 8
84的倍数,4/8=0.5,所以从2桶开始抽,抽2的半桶
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值