[一起学Hive]之六-Hive的动态分区

代码示例讲解Hive分区分桶以及自定义函数 导入数据: 1、 load data local inpath '/root/tes.txt' into table test.usr; 将本地的数据导入到hive中 2、从hdfs集群导入数据 load data inpath 'hdfs://node01:9000/user/tes.txt' into table test.te; LOAD DATA命令,可分为LOAD DA... 阅读详情

[一起学Hive]之六-Hive的动态分区

  • 博客分类: 
  • hive

hivehive动态分区 

       前面文章介绍了Hive中是支持分区的。

       关系型数据库(如Oracle)中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用Hive的动态分区,需要进行相应的配置。

       先看一个应用场景,源表t_lxw1234的数据如下:

Sql代码 

 收藏代码

  1. SELECT day,url FROM t_lxw1234;  
  2. 2015-05-10 url1  
  3. 2015-05-10 url2  
  4. 2015-06-14 url1  
  5. 2015-06-14 url2  
  6. 2015-06-15 url1  
  7. 2015-06-15 url2  
  8. ……  

      目标表为:

   

Sql代码 

 收藏代码

  1. CREATE TABLE t_lxw1234_partitioned (  
  2. url STRING  
  3. ) PARTITIONED BY (month STRING,day STRING)  
  4. stored AS textfile;  

 

     

需求:将t_lxw1234中的数据按照时间(day),插入到目标表t_lxw1234_partitioned的相应分区中。

如果按照之前介绍的往指定一个分区中Insert数据,那么这个需求很不容易实现。

这时候就需要使用动态分区来实现,使用动态分区需要注意设定以下参数:

  • hive.exec.dynamic.partition

默认值:false

是否开启动态分区功能,默认false关闭。

使用动态分区时候,该参数必须设置成true;

  • hive.exec.dynamic.partition.mode

默认值:strict

动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。

一般需要设置为nonstrict

  • hive.exec.max.dynamic.partitions.pernode

默认值:100

在每个执行MR的节点上,最大可以创建多少个动态分区。

该参数需要根据实际的数据来设定。

比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。

  • hive.exec.max.dynamic.partitions

默认值:1000

在所有执行MR的节点上,最大一共可以创建多少个动态分区。

同上参数解释。

  • hive.exec.max.created.files

默认值:100000

整个MR Job中,最大可以创建多少个HDFS文件。

一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于100000,可根据实际情况加以调整。

  • hive.error.on.empty.partition

默认值:false

当有空分区生成时,是否抛出异常。

一般不需要设置。

 

      那么,上面的需求可以使用如下的语句来完成:

Sql代码 

 收藏代码

  1. SET hive.exec.dynamic.partition=true;  
  2. SET hive.exec.dynamic.partition.mode=nonstrict;  
  3. SET hive.exec.max.dynamic.partitions.pernode = 1000;  
  4. SET hive.exec.max.dynamic.partitions=1000;  
  5.    
  6. INSERT overwrite TABLE t_lxw1234_partitioned PARTITION (month,day)  
  7. SELECT url,substr(day,1,7) AS month,day  
  8. FROM t_lxw1234;  

 

    

注意:在PARTITION (month,day)中指定分区字段名即可;

在SELECT子句的最后两个字段,必须对应前面PARTITION (month,day)中指定的分区字段,包括顺序。

执行结果如下:

Loading data to table liuxiaowen.t_lxw1234_partitioned partition (month=null, day=null)

Loading partition {month=2015-05, day=2015-05-10}

Loading partition {month=2015-06, day=2015-06-14}

Loading partition {month=2015-06, day=2015-06-15}

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-05, day=2015-05-10} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-06, day=2015-06-14} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

Partition liuxiaowen.t_lxw1234_partitioned{month=2015-06, day=2015-06-15} stats: [numFiles=1, numRows=2, totalSize=10, rawDataSize=8]

 

使用show partitions t_lxw1234_partitioned;查看目标表有哪些分区:

hive> show partitions t_lxw1234_partitioned;

OK

month=2015-05/day=2015-05-10

month=2015-06/day=2015-06-14

month=2015-06/day=2015-06-15

 

Hive相关文章(持续更新):

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

 

1 
顶

0 
踩

分享到:  

[一起学Hive]之八-使用Hive命令行 | [一起学Hive]之七-向Hive表中加载数据

评论

1 楼 annmi_cai 2016-03-11  

顶顶更健康

发表评论

 您还没有登录,请您登录后再发表评论

相关资源推荐

5、Hive数据仓库——Hive分区及动态分区 Hive数据仓库——Hive分区及动态分区 阅读详情

相关推荐

Hive 动态分区 INSERT OVERWRIT

DML: 会按字段顺序插入,select出的前面的字段会放入非分区字段中,后面的几个字段则会写到分区字段中。 use bdm; set mapred.output.compress=true; set hive.exec.compress.output=true; set mapred.output.compression.codec=com.hadoop.compression.lzo.Lz...

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 1万+

hive中简单介绍分区表

hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与数据。 下面的语句创建了一个简单的分区表: create table p

东杰书屋 3万+

运算放大器电路仿真实践:从零实现完整示例

通过一个完整的运算放大器电路仿真示例,深入掌握电路仿真的关键步骤与技巧,帮助电子爱好者和工程师快速上手实际项目设计。

weixin_34725745的博客 1320

hive动态分区实践

一、业务需求: 数据从上一个接口传来,入hive库中的相应数据表时,需要根据数据中的某个时间字段值进行分区,分区字段为month_id(年月,如201901),day_id(日,如07),part_id(小时分钟,如1205),并且part_id是每五分钟形成一个分区,如12:04的数据需要入part_id=1205的分区,12:08的数据需要入part_id=1210分区。 二、使用hive动态...

weixin_42102379的博客 361

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1135

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 232

hive 动态分区参数设置

使用Hive动态分区需要注意设定以下参数: 1.是否开启动态分区功能,默认false关闭。  默认值:false hive.exec.dynamic.partition =false 1 使用动态分区时候,该参数必须设置成true; hive.exec.dynamic.partition =true 1 2.动态分区的模式:  默认值:strict hive.exec.dynamic.pa...

ronaldo-liu的博客 1万+

开发simulink 以及stm32半物理仿真碰到的问题,以及处理方法,Error:External Mode Open Protocol Connect command failed(实测有用)

串口实现的,但是在测试的时候发现,这个串口可以正常发送和接收数据,但是一旦把这个串口只让其进行版物理仿真就报错。直接刷写程序是可以的,最后查到问题了。我要实现半物理仿真,就是通过matlab实现可以直接控制stm32板子,实际上是通过xcp on。然后点击simulink上的观测按钮就可以直接和stm32平台进行通讯了。3,还是使用串口3,但是重新需要设置一下com口,因为重新插拔了一下,按照这个设置方法就可以。2,重新加载ioc文件。

pvmsmfchcs的博客 1501

hive 动态分区实现 (hive-1.1.0)

hive 动态分区实现 (hive-1.1.0) 笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来。(执行计划如下) insert overwrite table public_t_par partition(delivery_datekey) sel...

weixin_30408309的博客 634

105、LLC谐振变换器的LTspice仿真建模

文章摘要:本文分享了LLC谐振变换器在LTspice中的仿真建模经验。作者从实际调试中炸管的教训出发,指出数学计算无法捕捉瞬态问题,必须通过仿真验证。详细介绍了半桥LLC主电路搭建、理想元件选择、开环增益扫频、闭环控制实现等关键步骤,重点讲解了启动过程、ZVS验证和短路保护等高风险工况的仿真技巧。文章提供了实用参数设置建议和LTspice代码片段,强调先开环后闭环的调试顺序,并提醒仿真结果需保留20%设计裕量。最后总结了谐振电流波形观察、死区时间优化等经验性建议。

Jack010169的博客 229

QT实现OPCUA服务端客户端(附完整源码)

QT实现OPCUA服务端客户端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1824

Hive的分区(partition)-动态分区

Hive的分区 一、概述 分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。hive中支持两种类型的分区: 静态分区SP(static partition) 动态分区DP(dynamic partition) 静态分区与动态分区的主要区别在于静态分区是手动指定...

shammy_feng的博客 2万+

太美了!现代女主jk海军风穿搭四视图

哪个女孩子初高中的时候不买几套JK衣服啊,穿上完全是青春女孩。那还愣着干啥,不得也给你的漫剧女主也穿上!直接就是分享三套JK穿搭,红棕双麻花辫配经典水手服,是那种乖乖巧巧的元气学妹;粉色羊毛卷双马尾,搭配蝴蝶结和小挎包甜度直接拉满;还有灰棕色侧麻花辫,浅蓝上衣配黑色百褶裙,温柔里又带点小酷。下面把这三套角色的完整提示词分享出来,喜欢哪套就拿去参考,改改发型和配色,还能继续解锁新角色!

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 59

Hive动态分区多种插入方式总结

首先看官方文档的一段描述:点击直达链接 In the dynamic partition inserts, users can give partial partition specifications, which means just specifying the list of partition column names in the PARTITION clause. The column values are optional. If a partition column value is gi

雷恩Layne 8832

Lammps实现Ar的沸腾过程(包含in文件)

Lammps实现简单的沸腾过程

Rockyoung 3505

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hive使用动态分区插入数据详解

目录 一、静态分区弊端 二、动态分区的使用 一、静态分区弊端 往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 二、动态分区的使用 1、创建一个单一字段分区表 hive> create table dpartition(id int ,name string ) partiti

Markble 5880

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

hive动态分区

什么动态分区,动态分区好处 往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。 准备工作 准备数据 order_created.

张俊杰 的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hive动态分区问题总结

Hive 配置动态分区 insert into table xxx partition(xxxx) select ... 使用动态分区时首先需要的一些配置: 是否开启动态分区 hive.exec.dynamic.partition 动态分区是否使用严格模式 hive.exec.dynamic.partition.mode MR总共可创建最大分区数 hive.exec.max.dynamic.partition.partitions(默认1000) 当前节点可创建的最大分区数 hive.exec.max.

雾岛与鲸的博客 3692

datax导入hive动态分区

配置hive支持动态分区 <property> <name>hive.exec.dynamic.partition</name> <value>true</value> <description>Whether or not to allow dynamic partitions in DML/DDL.</description> </property> <propert

Jatham_C的博客 9251

浅谈Hive的动态分区以及Impala的动态分区

一、需求场景: 当你有一张hive表,里面也有一个字段是时间字段,每天的数据是按这个时间字段导入进去的,这时候你就需要有动态分区这个东西了。分区是在处理大型事实表时常用的方法。分区的好处在于缩小查询扫描范围,从而提高速度。分区分为两种:静态分区static partition和动态分区dynamic partition。静态分区和动态分区的区别在于导入数据时,是手动输入分区名称,还是通过数据来判...

duketyson2009的博客 2926

【hive创建动态分区】hive使用动态分区插入数据详解

【hive创建动态分区】hive使用动态分区插入数据详解 往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 1.创建一个单一字段分区表 create table dpartition(i...

helloxiaozhe的博客 8889

Hive动态分区详解

往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。 1、创建一个单一字段分区表 hive> create table dpartition(id int ,name string ) partitioned by(ct string ); 2、往表里装载数据,并且动态建立分区,以city...

Markble 1万+

什么是hive的静态分区和动态分区,hive动态分区详解

关于hive的静态分区和动态分区怎么用,又有什么区别呢, hive动态分区详解

鲁边的博客 2976
上一篇: 用java取得linux系统cpu、内存的实时信息
下一篇: [一起学Hive]之五-Hive的视图和分区
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值