一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的

在Hive的DWD层和DWS层建立动态分区表后,发现动态插入数据时可以指定分区名,也可以不指定分区名。因此,研究一下它们的区别以及使用场景,从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名?

二、两种情形介绍

(一)动态分区表动态加载数据不指定分区

(二)动态分区表动态加载数据指定分区

三、两种情形区别

如果指定分区名的话就只能导入指定分区的数据;

如果不指定分区名的则可以导入所有分区的数据

四、两种情形使用场景

(一)动态分区表动态加载数据不指定分区名

不指定分区名的话意味着可以导入所有分区的数据,这种情形适用于历史数据

因为历史数据属于不同的分区,不能指定固定的分区名

(二)动态分区表动态加载数据指定分区名

指定分区名的话意味着就只能导入指定分区的数据,这种情形适用于每天的增量数据

因为在数仓项目尤其是离线数仓中,通常每天都是一个文件数据,每天处理前一天的增量数据,因此最好指定分区名,这样每天只需要增量导入前一天的数据。

以下是海豚调度HiveSQL任务的脚本——DWD层动态分区表加载数据指定分区

#! /bin/bash
source /etc/profile

nowdate=`date --date='0 days ago' "+%Y%m%d"`
yesdate=`date -d yesterday +%Y-%m-%d`

hive -e "
use hurys_dc_dwd;

set hive.vectorized.execution.enabled=false;
set hive.auto.convert.join=false;
set mapreduce.map.memory.mb=10150;
set mapreduce.map.java.opts=-Xmx6144m;
set mapreduce.reduce.memory.mb=10150;
set mapreduce.reduce.java.opts=-Xmx8120m;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set hive.exec.parallel=true;
set hive.support.concurrency=false;
set mapreduce.map.memory.mb=4128;
set hive.vectorized.execution.enabled=false;

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
set hive.exec.max.dynamic.partitions=1500;

insert  overwrite  table  dwd_turnratio partition(day='$yesdate')
select
       regexp_replace(device_no,'\t+','') device_no,
       create_time,
       volume_sum,
       volume_left,
       volume_straight,
       volume_right,
       (volume_sum-volume_left-volume_straight-volume_right) volume_turn
from hurys_dc_ods.ods_turnratio
where volume_sum >= 0 and  day= '$yesdate'
group by device_no, create_time, volume_sum, volume_left, volume_straight, volume_right
"

另附DWD层建表语句

--1.转向比数据内部表——动态分区  dwd_turnratio
create  table  if not exists  dwd_turnratio(
    device_no       string       comment '设备编号(点位)',
    create_time     timestamp    comment '创建时间',
    volume_sum      int          comment '指定时间段内通过路口的车辆总数',
    volume_left     int          comment '指定时间段内通过路口的左转车辆总数',
    volume_straight int          comment '指定时间段内通过路口的直行车辆总数',
    volume_right    int          comment '指定时间段内通过路口的右转车辆总数',
    volume_turn     int          comment '指定时间段内通过路口的掉头车辆总数'
)
comment '转向比数据表——动态分区'
partitioned by (day date)   --分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。
stored as orc               --表存储数据格式为orc
;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天地风雷水火山泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值