博客
关于我
Hive 动态分区入门
阅读量:666 次
发布时间:2019-03-15

本文共 2895 字,大约阅读时间需要 9 分钟。

什么是动态分区?

分区的值由数据来确定,而不是说load数据的时候自行制定

如何动态分区?

前提条件

-- 属性说明:hive.exec.dynamic.partition=true:是否支持动态分区操作hive.exec.dynamic.partition.mode=strict/nonstrict:  严格模式/非严格模式  严格模式:动态分区导入数据时,必须指定至少一个静态值。  非严格模式:动态分区导入数据时,可以不指定静态值hive.exec.max.dynamic.partitions=1000: 总共允许创建的动态分区的最大数量  动态导入数据时,每个表支持的最大动态分区数量hive.exec.max.dynamic.partitions.pernode=100:in each mapper/reducer node 每个MapTask/reduceTask最多同时处理的分区数量

创建分区表.创建的时候跟静态一样的,无所谓动态静态

create external table dy_part1(    sid     int,    name    string,    gender  string,    age     int,    academy string)    partitioned by (dt string)    row format delimited fields terminated by ',';

为了给动态分区表导入数据,创建一个临时表并用数据填充

create external table tmp_part1(sid int,name string,gender string,age int,academy string,dat string)row format delimited fields terminated by ',';load data local inpath '/data/student2.txt' into table tmp_part1;95001,李勇,男,20,CS,2017-8-3195002,刘晨,女,19,IS,2017-8-3195003,王敏,女,22,MA,2017-8-3195004,张立,男,19,IS,2017-8-3195005,刘刚,男,18,MA,2018-8-3195006,孙庆,男,23,CS,2018-8-3195007,易思玲,女,19,MA,2018-8-3195008,李娜,女,18,CS,2018-8-3195009,梦圆圆,女,18,MA,2018-8-3195010,孔小涛,男,19,CS,2017-8-3195011,包小柏,男,18,MA,2019-8-3195012,孙花,女,20,CS,2017-8-3195013,冯伟,男,21,CS,2019-8-3195014,王小丽,女,19,CS,2017-8-3195015,王君,男,18,MA,2019-8-3195016,钱国,男,21,MA,2019-8-3195017,王风娟,女,18,IS,2019-8-3195018,王一,女,19,IS,2019-8-3195019,邢小丽,女,19,IS,2018-8-3195020,赵钱,男,21,IS,2019-8-3195021,周二,男,17,MA,2018-8-3195022,郑明,男,20,MA,2018-8-31

接下来该插入数据了. 分区依据的是临时表的最后一个字段,默认就是这样的!

hive> insert into dy_part1 partition(dt) select * from tmp_part1;FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict

报错,那修改一下吧

启动插入,这个走了MR,会比较慢.

hive> set hive.exec.dynamic.partition.mode=nonstrict;hive> insert into dy_part1 partition(dt) select * from tmp_part1;Automatically selecting local only mode for queryWARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.Query ID = root_20201128223704_8e1db866-a4ee-413e-9e5d-a192bbfad7eeTotal jobs = 3
hive> select * from dy_part1;OK95001   李勇    男      20      CS      2017-8-3195002   刘晨    女      19      IS      2017-8-3195003   王敏    女      22      MA      2017-8-3195004   张立    男      19      IS      2017-8-31...95016   钱国    男      21      MA      2019-8-3195017   王风娟  女      18      IS      2019-8-3195018   王一    女      19      IS      2019-8-3195020   赵钱    男      21      IS      2019-8-31hive> show partitions dy_part1;dt=2017-8-31dt=2018-8-31dt=2019-8-31

动态分区表还能不能load数据?

可以的,只要你指定分区就可以.不指定分区是不行的!

比如

load data local inpath '/data/student2.txt' into table dy_part1 partition (dt='2020-1-1');

动态分区的缺点

动态分区的字段,不能不同值太多,否则就是灾难, 会在hdfs上生成大量小文件,大量小文件MR搞起来很慢! 所以,动态分区用的时候,要看时机

总结

  • 动态分区,使用时要留意回避其缺点!

转载地址:http://nvsmz.baihongyu.com/

你可能感兴趣的文章
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-动静分离实例:搭建静态资源服务器
查看>>
Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
查看>>
Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置自带的stub状态实现活动监控指标
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
nginx:/usr/src/fastdfs-nginx-module/src/common.c:21:25:致命错误:fdfs_define.h:没有那个文件或目录 #include
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>