Hive 动态分区 INSERT OVERWRITE

Hive 专栏收录该内容
121 篇文章 2 订阅

DML: 会按字段顺序插入,select出的前面的字段会放入非分区字段中,后面的几个字段则会写到分区字段中。

use bdm;
set mapred.output.compress=true;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
set hive.exec.dynamic.partition=true;  -- 可以使用动态分区
set hive.exec.dynamic.partition.mode=nonstrict; -- 所有分区字段都可以由查询得出。
set hive.exec.max.dynamic.partitions=100000;
set hive.exec.max.dynamic.partitions.pernode=100000;
set hive.exec.reducers.bytes.per.reducer = 400000000;
set hive.exec.parallel=true;
set hive.auto.convert.join=true;
set mapreduce.job.running.map.limit=50000;
set yarn.app.mapreduce.am.command-opts=-Xmx8192m;
set yarn.app.mapreduce.am.resource.mb=9216;
set hive.lzo.paralle.read.index.thread = 50;  

INSERT OVERWRITE TABLE tmp.test_dym_par_1121 PARTITION (dt,data_type,dh)
SELECT
report_time
,'2019-11-21' as dt
,'TIME' as data_type
,'12' as dh
from tmp.test_1030

DDL:

CREATE EXTERNAL TABLE `tmp.test_dym_par_1121`(
  `data` string COMMENT '时间数据')
PARTITIONED BY ( 
  `dt` string, 
  `data_type` string, 
  `dh` string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
  'com.hadoop.mapred.DeprecatedLzoTextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

执行结果:前后一致,结果正确。

hive> dfs -du -h hdfs://abc/tmp.db/test_dym_par_1121/dt=2019-11-21/data_type=TIME/dh=12 ;
4.7 K  hdfs://abc/tmp.db/test_dym_par_1121/dt=2019-11-21/data_type=TIME/dh=12/000000_0.lzo
hive> select count(*) from tmp.test_1030 ;
1022

hive> select count(*) from tmp.test_dym_par_1121 ;
1022
hive> select * from tmp.test_dym_par_1121  where dt = '2019-11-21' limit 10;
OK
2019-05-01 16:44:23	2019-11-21	TIME	12
2019-05-01 16:44:07	2019-11-21	TIME	12
2019-05-01 16:44:07	2019-11-21	TIME	12
2019-05-01 16:39:46	2019-11-21	TIME	12
2019-05-01 16:39:44	2019-11-21	TIME	12
2019-05-01 16:39:39	2019-11-21	TIME	12
2019-05-01 16:27:11	2019-11-21	TIME	12
2019-05-01 16:26:31	2019-11-21	TIME	12
2019-05-01 16:25:30	2019-11-21	TIME	12
2019-05-01 16:24:35	2019-11-21	TIME	12
Time taken: 0.175 seconds, Fetched: 10 row(s)

设置如下参数开启动态分区:

hive.exec.dynamic.partition=true

默认值:false

描述:是否允许动态分区

hive.exec.dynamic.partition.mode=nonstrict

默认值:strict

描述:strict是避免全分区字段是动态的,必须有至少一个分区字段是指定有值的

设置如下参数配置动态分区的使用环境:

hive.exec.max.dynamic.partitions.pernode=100

默认值:100

描述:each mapper or reducer可以创建的最大动态分区数

hive.exec.max.dynamic.partitions=1000

默认值:1000

描述:一个DML操作可以创建的最大动态分区数

hive.exec.max.created.files=100000

默认值:100000

描述:一个DML操作可以创建的文件数

 

设置如下参数取消一些限制(HIVE 0.7后没有此限制):

hive.merge.mapfiles=false

默认值:true

描述:是否合并Map的输出文件

hive.merge.mapredfiles=false

默认值:false

描述:是否合并Reduce的输出文件

 

更多企业内的技术应用和使用技巧,请移步至我的公众号【程序员实用技能】

图片

 

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值