HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的数据,可能分区是pt=20121023这样,那么路径中它就会变成:/hdfs/path/pt=20121023/data_files。通过路径来标识的好处是,如果我们需要取特定分区的数据,只需要把这个路径下的数据取出来就可以了,不用扫描全部的数据。

HIVE默认是静态分区。但是有时候可能需要动态创建不同的分区,比如商品信息,我想根据它是否在线分成两个分区,这样后续如果要取在线商品,就只需要从在线的分区获取即可。动态分区可以通过下面的设置来打开:

[sql] view plain copy
  1. set hive.exec.dynamic.partition=true;
  2. set hive.exec.dynamic.partition.mode=nonstrict;

然后代码里就可以这么写:

[sql] view plain copy
  1. insert overwrite table tbl_name partition(pt, if_online)
  2. select field1, field2, ..., pt, if_online
  3. from tbl
  4. where xxx;

注意输入字段的最后面必须是动态分区字段。

看一下与静态分区写法的区别:

[sql] view plain copy
  1. insert overwrite table tbl_name partition(pt=20121023, if_online=1)
  2. select field1, field2, ..., fieldn
  3. from tbl
  4. where xxx;

动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。

另外使用动态分区时需要注意的比较重要的一点是,动态分区会为每一个分区分配reduce数。比如说你在脚本上面写了:set mapred.reduce.tasks=100;

并且有两个分区:pt, if_online。如果结果集中pt=20121023,if_online=0/1,那么它就会为pt=20121023/if_online=0,pt=20121023/if_online=1各分配100个reduce。也就是说,namenode会同时处理200个文件的写操作。这在分区值很多的情况下,会成为一个灾难,容易直接把namenode给搞挂掉,是非常危险的。因此使用动态分区时,一定要清楚地知道产生的动态分区值,并且合理地设置reduce数量。
转自:http://blog.csdn.net/iquicksandi/article/details/8535956

HIVE 动态分区与静态分区相关推荐

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

    原文地址: https://www.cnblogs.com/yongjian/archive/2017/03/29/6640951.html   Hive分区的概念与传统关系型数据库分区不同.   传 ...

  2. Hive之——Hive分区(静态分区+动态分区)

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

  3. Hive分区——Partition(静态分区,动态分区)详解

    文章目录 分区目的 分区的创建 1.创建建表时候不管动态还是静态分区 2.执行load 装载数据 3.查看表结构,查询分区表的数据 4.静态分区: 5.动态分区: 多分区 表分区的增删改查 分区目的 ...

  4. hive静态分区,动态分区,分桶区别

    文章目录 绪论 创建静态分区表 1.准备数据 2.建表语句 3.添加分区,加载数据 4.进入网页(50070)查看 创建动态分区表 1.准备数据 2.建表语句 1.首先创建普通表 2.加载数据 3.创 ...

  5. 深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区

    深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区 分区是hive存放数据的一种方式.将列值作为目录来存放数据,就是一个分区. 这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的 ...

  6. Hive分区表:静态分区、动态分区、多重分区介绍

    01 分区表的引入.产生背景 现有6份数据文件,分别记录了<王者荣耀>中6种位置的英雄相关信息.现要求通过建立一张表t_all_hero,把6份文件同时映射加载. create table ...

  7. hive动态分区shell_Hive动态分区 参数配置及语法

    Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...

  8. 解决Hive动态分区小文件过多问题

    一.问题描述 为了支撑相应的业务需求,本次生产环境通过Hive SQL来完成动态插入分区表数据的脚本开发.但是,动态分区的插入往往会伴随产生大量的小文件的发生.而小文件产生过多的影响主要分为以下两种情 ...

  9. Hive的基本操作之表分区

    由于hive在查询时会做全表扫描,有些情况下我们只需要查询部分数据,为了避免全表扫描消耗资源和性能,我们可以实现表分区使之扫描部分表. 在hive中分区字段是一个伪字段,并不实际存储数据,但可以作为条 ...

最新文章

  1. 2021年大数据Kafka(九):kafka消息存储及查询机制原理
  2. .net中的认证和授权(学习笔记)
  3. python怎么由列表生成m*n的矩阵_Python进阶系列:Python遍历的秘密
  4. mysql 连接 选库 查询
  5. 域嵌套太深_pyspark如何修改嵌套结构域
  6. MySQL数据库是非关系_MySQL(数据库)基础知识、关系型数据库yu非关系型数据库、连接认证...
  7. html cookie传参,页面间固定参数,通过cookie传值的实现方法
  8. java网络通信:HTTP协议
  9. Oracle的distinct关键字
  10. SRL——无人机区域定位系统
  11. CentOS7更改时区两步解决
  12. Linux中的常用命令
  13. java jmx教程_【JAVA】JMX简单使用方法
  14. Caused by: java.lang.NoSuchMethodException: init [class android.content.Context, interface andr解决
  15. 教你让XP等32位操作系统支持4G以上大内存,并且不出错
  16. data: function () { return {}} ——你不应该在一个子组件内部改变 prop
  17. Guava源码解析五:Splitter源码解析
  18. JS中every()和some()的对比使用丨蓄力计划
  19. 针对Linux系统主机,进入修复模式,解决开机报错问题
  20. 解决awvs安装后访问不了登录页面

热门文章

  1. 自己拍摄的视频剪辑时如何消音?
  2. xtrabackup增量备份实例
  3. OPPO2019春季校园招聘C/C++开发(手机方向)面试总结
  4. python读取手机屏幕图像_[Python]从安卓手机获取屏幕截图
  5. 电插锁的防雷防静电保护方案
  6. html自动播放音乐(无播放器)
  7. LinkedHashMap源码解析——基于JDK1.8
  8. 制作一杯热咖啡图片的PS实例教程
  9. ArcMap获取要素(点、线、面)外包络面(含凹面)的一个方法
  10. 【GoLang】go 微服务框架 Web框架学习资料