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

  • 相关阅读:
    任务框架--Quartz 配置文件
    地址和值
    线性基学习笔记
    S07
    如何在实际项目中使用PageHelper分页插件
    设计模式:原型模式
    常用JS代码片段
    Thomson Plaza里面的三家店以及水果大会
    13.搜索过滤
    07-多线程
  • 原文地址:https://www.cnblogs.com/juefan/p/3171464.html
Copyright © 2020-2023  润新知