动态分区插入可以基于查询语句分出出要插入的分区名称。比如,下面向分区表插入数据的SQL:

insert into table chavin.emp_pat partition(dname,loc)

select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno,d.dname,d.loc

from dept d join emp e on d.deptno=e.deptno;

hive会根据select字段的最后两个字段确定分区字段的值(上面sql中即根据d.dname,d.loc的值确定partition(dname,loc)中dname和loc的值),分区字段值的确定是根据位置而不是根据内容确定的,这点尤其需要注意。当然,对于多分区表的插入,可以混合使用静态分区和动态分区的方法,并且静态分区字段必须出现在动态分区字段之前,如下:

insert into table chavin.emp_pat partition(dname=' NEW YORK',loc)

select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno,d.dname,d.loc

from dept d join emp e on d.deptno=e.deptno

where d.dname=' NEW YORK';

针对于hive 0.13.1版本,动态分区插入默认是开启的,但是默认是以strict模式执行。在strict模式下,要求至少有一个分区字段是静态分区字段。

hive动态分区插入的一些属性如下:

hive (chavin)> set hive.exec.dynamic.partition;

hive.exec.dynamic.partition=true

--true表示开启动态分区插入功能。

hive (chavin)> set hive.exec.dynamic.partition.mode;

hive.exec.dynamic.partition.mode=strict

--设置为nonstrict模式,表示所有分区都可以是动态分区字段。

hive (chavin)> set hive.exec.max.dynamic.partitions.pernode;

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

--每个mapper或reduce任务可以创建的最大分区数,如果mapper或reduce任务创建了比这个值大的分区数,则抛出致命错误。

hive (chavin)> set hive.exec.max.dynamic.partitions;

hive.exec.max.dynamic.partitions=1000

--一个动态分区创建语句可以创建的最大动态分区数,如果创建数量超过这个值,则抛出致命错误。

hive (chavin)> set hive.exec.max.created.files;    

hive.exec.max.created.files=100000

--全局可以创建的最大文件个数,有一个全局hadoop计数器会跟踪记录创建的文件数,如果超过了限制值则抛出致命错误信息。

hive (chavin)> set dfs.datanode.max.xcievers;

dfs.datanode.max.xcievers=4096

--datanode参数,配置在hdfs-site.xml中,表示一次可以打开的最大文件个数。

如下是动态分区插入的一个小例子:

1)创建分区表:

create table chavin.EMP_pat

(

EMPNO    int,

ENAME    string,

JOB      string,

MGR      int,

HIREDATE string,

SAL      float,

COMM     float,

DEPTNO   int

) partitioned by(dname string,loc string)

row format delimited fields terminated by '\t';

2)设置动态分区参数,向分区表插入数据:

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

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

insert into table chavin.emp_pat partition(dname,loc)

select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno,d.dname,d.loc

from dept d join emp e on d.deptno=e.deptno;

HQL之动态分区调整的更多相关文章

  1. 第4节 hive调优:动态分区调整问题

    执行如下截图中的语句时卡住了: 原因:yarn未启动,hive底层是要提交mapreduce到yarn上才能计算结果的. 之前启动yarn时,未执行jps查看是否已经启动.其实未启动成功: [root ...

  2. Hive动态分区详解

    目录 动态分区调整 注意 动态分区插入 动静分区结合 例子 动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false)hive.exec.dynamic.partition=t ...

  3. Hive学习之动态分区及HQL

    Hive动态分区 1.首先创建一个分区表create table t10(name string) partitioned by(dt string,value string)row format d ...

  4. sqoop导oracle数据到hive中并动态分区

    静态分区: 在hive中创建表可以使用hql脚本: test.hql USE TEST; CREATE TABLE page_view(viewTime INT, userid BIGINT, pag ...

  5. Hive Experiment 2(表动态分区和IDE)

    1.使用oracle sql developer 4.0.3作为hive query的IDE. 下载hive-jdbc driver http://www.cloudera.com/content/c ...

  6. 日志案例分析(PV,UV),以及动态分区

    1.实现的流程 需求分析 时间:日,时段 分区表:两级 PV UV 数据清洗 2015-08-28 18:19:10 字段:id,url,guid,tracktime 数据分析 导出 2.新建源数据库 ...

  7. 对现有Hive的大表进行动态分区

    分区是在处理大型事实表时常用的方法.分区的好处在于缩小查询扫描范围,从而提高速度.分区分为两种:静态分区static partition和动态分区dynamic partition.静态分区和动态分区 ...

  8. Hive分区(静态分区+动态分区)

    Hive分区的概念与传统关系型数据库分区不同. 传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区. Hive的分区方式:由于Hive实 ...

  9. hive:默认允许动态分区个数为100,超出抛出异常:

    在创建好一个分区表后,执行动态分区插入数据,抛出了错误: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Erro ...

随机推荐

  1. C#反射实现

    一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的外部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制,它可以动态的分析程 ...

  2. git checkout -b mybranch和git checkout mybranch

      创建分支: $ git branch mybranch切换分支: $ git checkout mybranch创建并切换分支: $ git checkout -b mybranch更新maste ...

  3. php static 变量的例子

    class test { public static function a(){} public function b(){} } $obj = new test; 调用 代码 test::a(); ...

  4. 经典的sql语句,将返回结果合并为一个字符串

    declare @ts varchar(999) select @ts=isnull(@ts+',','')+name from sysobjects where xtype='U' select @ ...

  5. [100]awk运算-解决企业统计pv/ip问题

    awk运算 awk以脚本方式运行 #!/bin/awk BEGIN{ arr[1]="maotai"; arr[2]="maotai" for(k in arr ...

  6. C#中的Action<>和Func<>

    其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...

  7. tail -f 实时查看日志文件 linux查看日志后100行

    tail -f 实时查看日志文件 tail -f 日志文件logtail - 100f 实时查看日志文件 后一百行tail -f -n 100 catalina.out linux查看日志后100行搜 ...

  8. 24款最好的jQuery日期时间选择器插件

    如果你正在创建一个网络表单,有很多事情你需要在你的应用程序中使用.有时您需要特别的输入,从用户的日期和时间,如发票日期,生日,交货时间,或任何其他此类信息.如果你有这样的需要,可以极大地从动态的jQu ...

  9. Linux+树莓派3开发总结——树莓派远程文件共享winows

    http://blog.csdn.net/xqf1528399071/article/details/52192134 ———————————————————————————————————————— ...

  10. USB学习笔记连载(二十一):CY7C68013A进行数据传输(一)

    官方手册中给出了bulkloop参考例程,此例程是PC从端口2发送出数据,然后从端口6接收到数据,那么根据这个思想,可以进行修改,使得PC机接收到的数据不是从EP2发送过来的,而是从外部逻辑,比如FP ...