Hive 动态分区和二级分区

一、参数配置

开启动态分区功能

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;

你可能感兴趣的:(Hive)