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

hive>  create table dpartition(id int ,name string )

partitioned by(ct string  );

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

hive> set hive.exec.dynamic.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已经完成了以city字段为分区字段,实现了动态分区。

hive > show partitions dpartition;

partition

ct=beijing

ct=beijing1

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

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

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

hive (fdm_sor)> create table ds_parttion(id int )

> partitioned by (state string ,ct string );

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

hive>

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;

3.查询结果显示:

hive (fdm_sor)> select *  from ds_parttion where state='china'

> ;

ds_parttion.id  ds_parttion.state       ds_parttion.ct

4       china   beijing

3       china   beijing

2       china   beijing

1       china   beijing

4       china   beijing1

3       china   beijing1

2       china   beijing1

1       china   beijing1

hive (fdm_sor)> select *  from ds_parttion where state='china' and ct='beijing';

ds_parttion.id  ds_parttion.state       ds_parttion.ct

4       china   beijing

3       china   beijing

2       china   beijing

1       china   beijing

hive (fdm_sor)> select *  from ds_parttion where state='china' and ct='beijing1';

ds_parttion.id  ds_parttion.state       ds_parttion.ct

4       china   beijing1

3       china   beijing1

2       china   beijing1

1       china   beijing1

Time taken: 0.072 seconds, Fetched: 4 row(s)

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分区用2个字段有何限制_关于Hive使用动态分区插入数据详解相关推荐

  1. hive分区用2个字段有何限制_[特性]Hive动态分区功能使用

    [特性]Hive动态分区功能使用 2016-01-31 21:40 说明 Hive有两种分区,一种是静态分区,也就是普通的分区.另一种是动态分区.动态分区在数据导入时,会根据具体的字段值自行决定导入, ...

  2. hive分区用2个字段有何限制_[Hive]新增字段(column)后,旧分区无法更新数据问题...

    问题描述: 实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段. 如果使用如下语句新增列,可以成功添加列col1.但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区 ...

  3. 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据

    应用场景: 我们需要设计一个数据库来保存多个文档中每个文档的关键字.假如我们每个文档字符都超过了1000,取其中出现频率最大的为我们的关键字. 假设每个文档的关键字都超过了300,每一个文件的0-29 ...

  4. python动态生成数据库表_使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据...

    应用场景: 我们须要设计一个数据库来保存多个文档中每一个文档的keyword. 假如我们每一个文档字符都超过了1000,取当中出现频率最大的为我们的keyword. 如果每个文档的keyword都超过 ...

  5. python在sql添加数据库_使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据...

    应用场景: 我们需要设计一个数据库来保存多个文档中每个文档的关键字.假如我们每个文档字符都超过了1000,取其中出现频率最大的为我们的关键字. 假设每个文档的关键字都超过了300,每一个文件的0-29 ...

  6. sql 插入text字段包含特殊字符_Kettle(PDI)转换中输出之插入/更新详解

    概述 Insert / update(插入 / 更新)此步骤首先使用一个或多个查询关键字查找表中的一行.如果找不到该行,则插入该行.如果可以找到它,并且要更新的字段相同,则不执行任何操作.如果它们不完 ...

  7. hive中如何把13位转化为时间_【hive常用函数一】日期函数

    使用hive进行数据处理的过程种,遇到不少问题,总结之前的一些开发经验,把之前的一些处理技巧mark一下: 使用通用的哑表dual作为测试表用. 1.时间戳转换 日期格式转换时间戳只能精确到秒(即长度 ...

  8. mysql 删除id为null的数据_mysql删除字段为空的数据详解

    在mysql中空与空值是两码事的,也就是大家说null或""这种了,下面我总结了一些关于在mysql null与""值的删除与理解方法与大家分享. 空值与NUL ...

  9. hive之动态分区插入数据及其参数配置

    hive使用动态分区插入数据详解 往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低.因为hive是批处理系统,所以hiv ...

最新文章

  1. PCL点云配准(1)
  2. 深度学习发现古人类遗址,AI 考古比胡八一更高效
  3. 查看IIS上面的每个网站分别用了多少内存
  4. 5G时代下的网络营销对移动端网站建设形成怎样的冲击?
  5. opencv matlab测距,基于MATLAB和OpenCV的双目视觉测距系统的实现
  6. 程序设计中的驼峰原则
  7. 关于单链表的头插法和尾插法
  8. 机器学习12推荐系统
  9. sharepoint站点移植方案
  10. LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)
  11. SharePoint Welcome.ascx 控件自定义样式的另类解决方式
  12. iOS-按钮单选与多选逻辑处理
  13. 实战OO设计——类的关系:依赖、关联、聚合和组合
  14. 华为顶尖应届生最高年薪超 200 万;抖音服务器宕机;GitLab 12.1 发布 | 极客头条...
  15. 判断DataTable为空,获取值,查询数据,datarow转datatable
  16. 计算机网络知识汇总(超详细整理)
  17. OpenCL(matmpy)
  18. nginx反向代理进行统一鉴权
  19. 编译祁大神的iguana,大神就是大神.
  20. java代理模式教你中间商赚差价

热门文章

  1. LVS的DR工作模型解析
  2. tf.trainable_variables() and tf.all_variables()
  3. Django框架详细介绍---cookie、session、自定义分页
  4. jquery-easyui环境的搭建及测试
  5. DVWA演练平台之SQL注入(全新认识)
  6. 关于vue,angularjs1,react之间的对比
  7. 设计模式学习--------3.简单工厂模式学习
  8. Excel制作考勤管理
  9. JavaScript 3D图表
  10. 光脚丫学LINQ(002):筛选数据