Hive 分区介绍:

hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition)

hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。

分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与数据。

分区改变了HIVE 对数据存储的组织方式,hive 会创建反应分区结构的子目录,就是那些实际的目录名称。

对数据进行分区,最主要的原因就是为了更快的查询。

可以通过,show partitions 表名  查看表中存在的所有分区,

或者

describe extended  表名

desc 表名

动态分区:

当需要创建非常多的分区的时候,Hive提供了动态分区的功能:

可以基于查询的参数,推断出需要创建分区的名称。

INSERT OVERWRITE TABLE emp PARTITION (country, state)  SELECT ..., ... , se.cnty, se.st

FROM staged_emp se;

  

需要注意,字段值和分区之间的关系是根据位置而不是字段名称来进行匹配的。

动态分区也可以和静态分区混合使用,但是静态分区必须出现在动态分区之前。

举例:使用动态分区要先设置hive.exec.dynamic.partition参数值为true,默认值为false;

动态分区的使用方法很简单,假设我想向stat_date='20110728'这个分区下面插入数据,至于province插入到哪个子分区下面让数据库自己来判断,那可以这样写:

insert overwrite table partition_test partition(stat_date='20110728',province)

select member_id,name,province from partition_test_input where stat_date='20110728';

stat_date叫做静态分区列,province叫做动态分区列。

select子句中需要把动态分区列按照分区的顺序写出来,静态分区列不用写出来。这样stat_date='20110728'的所有数据,会根据province的不同分别插入到/user/hive/warehouse/partition_test/stat_date=20110728/下面的不同的子文件夹下,如果源数据对应的province子分区不存在,则会自动创建,非常方便,

而且避免了人工控制插入数据与分区的映射关系存在的潜在风险。

注意,动态分区不允许主分区采用动态列而副分区采用静态列,这样将导致所有的主分区都要创建副分区静态列所定义的分区:

insert overwrite table partition_test partition(stat_date,province='liaoning')

select member_id,name,province from partition_test_input where province='liaoning';

  

FAILED: SemanticException [Error 10094]: Line 1:49 Dynamic partition cannot be the parent of a static partition ''liaoning''

问题:一般是建表的时候,分区表的顺序出现了问题,静态分区一定要再动态分区的前面。

动态分区可以允许所有的分区列都是动态分区列,但是要首先设置一个参数hive.exec.dynamic.partition.mode :

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

  

hive SQL 静态分区和 动态分区的更多相关文章

  1. 什么是hive的静态分区和动态分区,它们又有什么区别呢?hive动态分区详解

    面试官问我,什么是hive的静态分区和动态分区,这题我会呀. 简述 分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列. 这样查询时使用分区列进行过滤,只需根据列值直 ...

  2. Hive的静态分区和动态分区

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/6831884.html 转载请注明出处 虽然之前已经用过很多次hive的分区表,但是还是找时间快速回顾总结 ...

  3. Hive中静态分区和动态分区总结

    目录 背景 第一部分 静态分区 第二部分 动态分区 第三部分 两者的比较 第四部分 动态分区使用的问题 参考文献及资料 背景 在Hive中有两种类型的分区:静态分区(Static Partitioni ...

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

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

  5. 【HIVE】(2)分区表、二级分区、动态分区、分桶、抽样

    分区表: 建表语句中添加:partitioned by (col1 string, col2 string) create table emp_pt(id int, name string, job ...

  6. Hive静态分区和动态分区

    一.静态分区 1.创建分区表 hive (default)> create table order_mulit_partition( > order_number string, > ...

  7. Hive静态分区和动态分区,对应Mysql中的元数据信息

    静态分区: 手动指定分区加载数据,就是常说的静态分区的使用.但是在日常工作中用的比较多的是动态分区. 创建: hive> create table order_mulit_partition( ...

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

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

  9. hive学习(六) 参数和动态分区

    1.hive 参数.变量 1.1hive的命名空间: hive当中的参数.变量,都是以命名空间开头  

随机推荐

  1. python专题 --- 递归

    如果一个函数在函数内部调用自身本身,这个函数就是递归函数 举例如阶乘函数,其数学递归定义如下: 对应的算法实现 def fact(n): if n==1: return 1 return n * fa ...

  2. 解决和排查 "必须使用适当的属性和方法修改 User-Agent" 错误时遇到的一些坑

    解决 必须使用适当的属性和方法修改 User-Agent 错误 问题描述:近在项目中有一个需求为需要在 Http 的Header里面添加一个User-Agent参数,当请求时.项目本身的目标框架是 . ...

  3. getting data from the keybroad

    public static String getString() throws IOException{ InputStreamReader isr = new InoutStreamReader(S ...

  4. SpringBoot邮件发送

    这篇文章介绍springboot的邮件发送. 由于很简单就没有分出server和imp之类,只是在controller简单写个方法进行测试. 首先pom文件加入spring-boot-starter- ...

  5. linux修改文件为可执行文件

    修改shell为可执行文件 chmod +x test2.sh chmod 751 file   给file的属主分配读.写.执行(7)的权限,给file的所在组分配读.执行(5)的权限,给其他用户分 ...

  6. 初窥Java--1(下载JADK,搭建环境变量)

    window系统安装java 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  7. [HAOI2015]树上染色

    Description: 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你 ...

  8. sqlserver的like '%xxx%'优化,全文索引

    2000万行的数据表,首先对Address字段做'%xxx%'模糊查询 这是估计的查询计划 这是估计的实际查询结果,用了37秒才查询完成 还是之前的数据,但是这一次使用'xxx%'来做查询,现在还没有 ...

  9. 2017.08.08【NOIP提高组】模拟赛B组

    Summary 今天的题目也不算很难,唯一一道没做出来的题目是以前做过的,太不应该了. Problem T1 油滴扩展 题目大意 给你一堆点,你准备要在这么多的点当中滴油.你可以自己安排顺序,每次滴油 ...

  10. Android Studio 修改主题和字体

    打开设置 或   修改主题 修改字体 参考资料 Android Studio主题以及字体修改