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

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

1.创建一个单一字段分区表

create table dpartition(id int ,name string )partitioned by(ct string );

2.往表里装载数据,并且动态建立分区,以city建立动态分区

hive.exec.dynamici.partition=true; #开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nonstrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。
insert overwrite table dpartition partition(ct) select id ,name,city from mytest_tmp2_p;

**要点:**因为dpartition表中只有两个字段,所以当我们查询了三个字段时(多了city字段),所以系统默认以最后一个字段city为分区名,因为分区表的

分区字段默认也是该表中的字段,且依次排在表中字段的最后面。所以分区需要分区的字段只能放在后面,不能把顺序弄错。如果我们查询了四个字段的话,则会报错,因为该表加上分区字段也才三个。要注意系统是根据查询字段的位置推断分区名的,而不是字段名称。

hive>–查看可知,hive已经完成了以city字段为分区字段,实现了动态分区。

show partitions dpartition;

**注意:**使用,insert…select 往表中导入数据时,查询的字段个数必须和目标的字段个数相同,不能多,也不能少,否则会报错。但是如果字段的类型不一致的话,则会使用null值填充,不会报错。而使用load data形式往hive表中装载数据时,则不会检查。如果字段多了则会丢弃,少了则会null值填充。同样如果字段类型不一致,也是使用null值填充。

3.多个分区字段时,实现半自动分区(部分字段静态分区,注意静态分区字段要在动态前面)

​​​​​

创建一个只有一个字段,两个分区字段的分区表

create table ds_parttion(id int ) partitioned by (state string ,ct string );

2.往该分区表半动态分区插入数据

set hive.exec.dynamici.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table ds_parttion
partition(state='china',ct) #state分区为静态,ct为动态分区,以查询的city字段为分区名
select id ,city from  mytest_tmp2_p;

4.多个分区字段时,全部实现动态分区插入数据

set hive.exec.dynamici.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table ds_parttion partition(state,ct) select id ,country,city from mytest_tmp2_p;

**注意:**字段的个数和顺序不能弄错。

5.动态分区表的属性

使用动态分区表必须配置的参数 :

set hive.exec.dynamic.partition =true(默认false),表示开启动态分区功能
set hive.exec.dynamic.partition.mode = nonstrict(默认strict),表示允许所有分区都是动态的,否则必须有静态分区字段

动态分区相关的调优参数:

set  hive.exec.max.dynamic.partitions.pernode=100 (默认100,一般可以设置大一点,比如1000)
#表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions =1000(默认值)
#表示一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.created.files =10000(默认)
#全局可以创建的最大文件个数,超出报错。

hive之动态分区插入数据及其参数配置相关推荐

  1. hive分区用2个字段有何限制_关于Hive使用动态分区插入数据详解

    1.创建一个单一字段分区表 hive>  create table dpartition(id int ,name string ) partitioned by(ct string  ); 2 ...

  2. Spark 调用 hive使用动态分区插入数据

    spark 调用sql插入hive 失败 ,执行语句如下 spark.sql("INSERT INTO default.test_table_partition partition(prov ...

  3. 【Hive】动态分区插入

    使用动态分区插入数据时,无需指定分区键值,系统根据插入的数据,自动分配分区. 动态分区需注意以下几点: 需有一个同构的普通表做为源表: 分区键值和源表字段之间是根据位置来判断的,而不是根据命名来匹配的 ...

  4. shell脚本中向hive动态分区插入数据

    在hive上建表与普通分区表创建方法一样: 1 CREATE TABLE `dwa_m_user_association_circle`( 2 `device_number` string, 3 `o ...

  5. Impala动态分区插入数据慢

    文章目录 一.背景分析 二.Impala分区 三.操作步骤 四.结果分析 五.主机配置 一.背景分析 有近20年的广告数据,需要对外提供查询分析服务(对数据进行Ad-Hoc式查询,Ad-Hoc:即席查 ...

  6. 数仓回刷历史数据--hive设置动态分区,并向动态分区内刷入历史数据

    数仓回刷历史数据–hive设置动态分区,并向动态分区内刷入历史数据 内容目录 数仓回刷历史数据--hive设置动态分区,并向动态分区内刷入历史数据 一.问题介绍 二.问题解决思路 1 . 解决复杂逻辑 ...

  7. pypark hive 开启动态分区_Hive分区与分桶

    分区.分桶的作用: 我们知道在传统的DBMs系统中,一般都具有表分区的功能,通过表分区能够在特定的区域检索数据,减少扫描成本,在一定程度上提高了查询效率,当然我们还可以通过进一步在分区上建立索引,进一 ...

  8. Mysql中循环拼接参数_利用循环向数据库中插入数据,参数重复的问题

    又看了些资料,发现对于说参数存在的问题可以把SqlCommand的创建放到For循环里,可以只连一次数据库,但是效率还是没提高.效率的问题不在于对数据库的开关,而是还是逐条地插入数据.而且数据库连接有 ...

  9. Hive建表及插入数据浅析

    通过已有表创建新表(仅创建表结构) create table new_table like old_table; 通过已有表创建新表,并复制已有表数据 create table new_table a ...

最新文章

  1. 一个男人和一个女人的故事
  2. Windows 10 搭建Python开发环境(PyCharm )
  3. mysql 表名不加单引号_当表名“ match”没有用单引号引起来时,MySQL引发错误?...
  4. unity DOTS的学习总结之Job System
  5. 修改域的NetBIOS名称
  6. GraphX中Pregel单源点最短路径(转)
  7. Shiro 的 HelloWorld
  8. java drawline_JAVA drawLine()方法怎么用?
  9. 龙芯2h芯片不能进入pmon_基于龙芯2F架构的PMON分析与优化
  10. 代码静态检测——QAC
  11. 流量卡之家:物联网僵尸网络和DDoS攻击:构建网络风险防火墙
  12. python中多行语句可以使用反斜杠来实现吗_Python中的多行语句可以使用反斜杠来实现...
  13. srb话题x-s x-b3-traceid
  14. 第二篇:mig IP的创建
  15. 面试技巧---白话文
  16. 比心app源码,html 获取时间
  17. 手机访问计算机FTP服务器
  18. 做好自动化运维平台必备技能
  19. java数组包含某个元素_java中判断数组是否包含某元素的方法
  20. 分布式 ID 解决方案帮你总结好啦!收藏拿去面试去。

热门文章

  1. Flutter仿美团应用开发笔记-入门篇
  2. 初识ObjectBox--Android平台
  3. vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
  4. Shell脚本学习-阶段十一-RAID故障恢复/数据重建
  5. java的actioncontext_【疑惑】ActionContext ac = ActionContext.getContext();?
  6. 计算几何-Andrew法-凸包
  7. Javascript四种调用模式中的this指向
  8. 【编译原理笔记17】代码优化:数据流分析,到达定值分析,到达定值方程的计算
  9. 服务器系统咋关机呀,各种服务器系统的关机
  10. 计算机通过逻辑电路实现运算,计算机组成与体系结构数据表示与运算算法和逻辑电路实现.ppt...