zoukankan      html  css  js  c++  java
  • hive SQL 静态分区和 动态分区

    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
    

      

  • 相关阅读:
    P2045 方格取数加强版
    P2774 方格取数问题
    日记——OI历程
    6.30考试
    6.29考试
    数论...
    6.28数论测试
    洛谷P3802 小魔女帕琪
    hosts
    博客设置
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/10715451.html
Copyright © 2011-2022 走看看