一、参数配置
开启动态分区功能
set hive.exec.dynamic.partition=true;
允许所有分区都是动态的
set hive.exec.dynamic.partition.mode=nonstrict;
其他相关参数调优
每个 mapper 或者 reducer 可以允许创建的最大分区数,默认是100
set hive.exec.max.dynamic.partitions.pernode=1000;
每个动态分区语句可以创建的最大动态分区数,默认是1000
set hive.exec.max.dynamic.partitions =1000;
全局可以创建的最大文件个数
set hive.exec.max.created.files =10000;
二、实战
统计 payment_info 的每个支付渠道,每天的总金额,以日期来作为动态分区
create table default.payment_info_count (
payment_type string,
total_amount double
)
partitioned by (day string);
原始表的建表语句
create table default.payment_info (
id bigint,
out_trade_no string,
order_id string,
user_id string,
alipay_trade_no string,
total_amount double,
subject string,
payment_type string,
payment_time string
);
统计 sql,(注意的是,系统默认以最后一个字段作为分区)
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table default.payment_info_count partition(day)
select payment_type,
total_amount,
day
from (
select payment_type,
sum(total_amount) total_amount,
to_date(payment_time) day
from payment_info
group by to_date(payment_time),payment_type
) t1;