zoukankan      html  css  js  c++  java
  • Hive查询结果批量插入分区

    在hive的数据建表时,为了查询的高效性,我们经常会对表建立分区,例如下面的表

    create external table dm_fan_photo_icf_basic(user string, item string, hot int) 
    PARTITIONED BY (day string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '	'
    stored as textfile
    location '/user/hive/fan/photo/icf/basic/';

    这是一个外部表,以(day)作为分区,在一般情况下,要插入新的数据必须要指定分区,例如

    insert into table dm_fan_photo_icf_basic
    PARTITIONED BY (day = '20130620')
    select * from table_test where day = 20130620;

    上面会把表table_test里面字段day = 20130620的数据插入到表dm_fan_photo_icf_basic中,并为这些新数据建立一个分区有时候要插入的数据可能不止一天,可能是一个月,这时候按照常规情况下就要写多个sql,然后把分区字段名改成相应的日期,一方面代码不简洁,另一方面这需要启动多个job,且没有充分利用集群的优势,如果能一次性把所有数据都插入不同分区,那么效率就提上来了,如果要把table_test表里面20130620至当天的数据插入表dm_fan_photo_icf_basic中,并且要对应到相应的分区,此时,可利用如下的方面

    set hive.exec.dynamic.partition.mode=nonstrict;
    set hive.exec.dynamic.partition=true;
    insert into table dm_fan_photo_icf_basic
    PARTITIONED BY (day)
    select * from table_test where day >= 20130620
    distribute by day;

    其中前俩个设置是必须的,因为这是一种动态分区插入,在默认情况下是静态的

    最后面的distribute by day也是必须的,这是指定了分区

  • 相关阅读:
    马士兵Java学习之路
    @Component, @Repository, @Service的区别
    编译器警告:CGContextSaveGState: invalid context 0x0
    Other Linker Flags到底是什么
    Xcode常用快捷键(持续更新-20160811)
    iOS应用文件夹
    iOS compare 字符串比较
    去掉UITableView多余的空白行分割线
    iOS 查询数组中的对象
    UISearchController使用
  • 原文地址:https://www.cnblogs.com/juefan/p/3171464.html
Copyright © 2011-2022 走看看