hive load数据自动分区进行增量更新

从业务系统导入数据到hive时往往是根据业务日期做增量更新, 而hive默认是不支持单行数据修改和删除的, 一般方案就是数据按业务日期做分区, 这样就可以每天进行分区的覆盖更新,实现过程如下:

1. 使用sqoop把数据写入临时order_tmp表, 表结构如下:

CREATE TABLE if not exists  `order_tmp`(
  `order_id` string,
  `order_type` int,
  `create_time` string,
  `user_id` string,
  `amont` double,
  `dt` string)
COMMENT 'Imported by sqoop on 2017/05/02 17:34:49';

 

2. 正式表order表结构如下, 其中tmp表的dt字段将用于正式表的分区字段

CREATE TABLE if not exists  `order`(
  `order_id` string,
  `order_type` int,
  `create_time` string,
  `user_id` string,
  `amont` double)
COMMENT 'Imported by sqoop on 2017/05/02 17:34:49'
partitioned by (dt string) stored as rcfile;

3.把tmp表数据更新到正式表, 实现动态分区

###设置动态分区
set hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions=100000;
SET hive.exec.max.dynamic.partitions.pernode=100000;
###默认以查询结果的最后一个字段作为动态分区字段
INSERT OVERWRITE TABLE order PARTITION (ts) select * from order_tmp;

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*