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也是必须的,这是指定了分区

  • 相关阅读:
    HTTP协议简介
    HTTP缓存带来的“bug”--HTTP 协议 Cache-Control
    PHP7变量的内部实现(一)
    PHP 简单的加密解密方法
    php 制作圆形图片
    python解决图的最短路径问题
    PHP中文关键词匹配
    D25
    D24
    D23
  • 原文地址:https://www.cnblogs.com/juefan/p/3171464.html
Copyright © 2011-2022 走看看