• hive之insert导入分区数据


     

    数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区。水平分区是对表进行行分区。而垂直分区是对列进行分区,一般是通过对表的垂直划分来减少目标表的宽度,常用的是水平分区。

     

    1、分区参数介绍

     
    • hive.exec.dynamic.partition:是否启动动态分区。默认false。

    • hive.exec.dynamic.partition.mode:打开动态分区后,动态分区的模式为strict和nonstrict。

      • strict可设置为静态和半动态,要求至少包含一个静态分区列。

      • nonstrict可设置为静态、半动态和动态,动态必须设置此参数。

    • hive.exec.max.dynamic.partitions:允许的最大的动态分区的个数。默认1000。

    • hive.exec.max.dynamic.partitions.pernode:一个mapreduce job所允许的最大的动态分区的个数。默认是100。

     

    2、分区表的创建

     

    (1)分区表创建

     
    create table test.user_list(
    user_id  string,
    msisdn   string,
    imsi     string)
    partitioned by (city string,sdate string)
    row format delimited fields terminated by ',';
    
     

    (2)临时表创建(辅助分区表测试)

     
    create table test.user_list_tmp(
    user_id  string,
    msisdn   string,
    imsi     string
    city     string,
    sdate    string)
    row format delimited fields terminated by ',';
    
     

    3、数据插入方式

     

    (1)静态分区插入数据:

     
    insert into table user_list partition(city='HANGZHOU',sdate='20200101')   
    select 
        t.user_id,
        t.msisdn,
        t.imsi
    from test.user_list_tmp t
    
     

    (2)动静混合分区插入数据

     
    set hive.exec.dynamic.partition=true;  
    set hive.exec.dynamic.partition.mode=strick;
    --set hive.exec.dynamic.partition.mode=nonstrick;
    insert into table user_list partition(city='HANGZHOU',sdate)   
    select 
        t.user_id,
        t.msisdn,
        t.imsi,
        t.sdate
    from test.user_list_tmp t
    
     

    注意:动静分区混合时,静态分区参数必须放置在前面。

     

    (3)动态分区插入数据

     
    set hive.exec.dynamic.partition=true;  
    set hive.exec.dynamic.partition.mode=nonstrick;
    insert into table user_list partition(city,sdate)   
    select 
        t.user_id,
        t.msisdn,
        t.imsi,
        t.city,
        t.sdate
    from test.user_list_tmp t
    
     

    4、insert into 和 insert overwrite

     

    insert into示例:

     
    insert into table user_list partition(city='HANGZHOU',sdate='20200101')  
    select 
        t.user_id,
        t.msisdn,
        t.imsi
    from test.user_list_tmp t
    
     

    insert overwrite示例:

     
    insert overwrite table user_list partition(city='HANGZHOU',sdate='20200101')   
    select 
        t.user_id,
        t.msisdn,
        t.imsi
    from test.user_list_tmp t
    
     

    两者区别:insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入。

  • 相关阅读:
    LeetCode 842. Split Array into Fibonacci Sequence
    LeetCode 1087. Brace Expansion
    LeetCode 1219. Path with Maximum Gold
    LeetCode 1079. Letter Tile Possibilities
    LeetCode 1049. Last Stone Weight II
    LeetCode 1046. Last Stone Weight
    LeetCode 1139. Largest 1-Bordered Square
    LeetCode 764. Largest Plus Sign
    LeetCode 1105. Filling Bookcase Shelves
    LeetCode 1027. Longest Arithmetic Sequence
  • 原文地址:https://www.cnblogs.com/Maggieli/p/12125033.html
Copyright © 2020-2023  润新知