#相关参数--每一个执行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;
创建动态分区表
创建普通表
创建分区表
将普通表insert到分区表
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;CREATETABLE psnbucket(
id INT,
name STRING,
age INT)--以age列分4个桶CLUSTEREDBY(age)INTO4 BUCKETS
ROW FORMAT DELIMITED
FIELDSTERMINATEDBY',';insertintotable psnbucket select id, name, age from psn31;--分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。 --对于hive中每一个表、分区都可以进一步进行分桶。 --由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
抽样查询
--只有抽样查询场景才会用select*from bucket_table tablesample(bucket 1outof4oncolumns);
TABLESAMPLE(BUCKET x OUTOF y)--x:从几号桶开始取数据,下标从1开始--y:取桶的个数,必须为该表总bucket数的倍数或因子,桶个数/y--建议取因子,直接取当前桶的全部数据
假如说总共有4桶
怎么抽: 从第x桶开始抽样,每间隔y桶抽一桶,直到抽满 z/y桶
bucket 1 out of 2
从1开始抽,每2个抽一个。
1,3
bucket 2 out of 1
需要y>x>0,所以就不行
bucket 1 out of 1
从1开始抽,每1个都抽
一共抽4桶 : 0号桶,2号桶,1号桶,3号桶
bucket 2 out of 4
从第2桶开始抽,每4个抽一个,因为没有5桶,所以只抽2桶
bucket 2 out of 88是4的倍数,4/8=0.5,所以从2桶开始抽,抽2的半桶
动态分区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.p