一百七十四、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
;
相关推荐
德彪稳坐倒骑驴6 小时前
Hive电商分析项目 Azkaban自动化运行
hive·hadoop·自动化
yumgpkpm10 小时前
Cloudera CDP/CMP华为鲲鹏版下 Spark应用加速,华为昇腾芯片的实用配置过程
hive·hadoop·elasticsearch·flink·kafka·hbase·cloudera
m0_7482523810 小时前
ervlet 编写过滤器
数据仓库·hive·hadoop
talle20211 天前
Hadoop分布式资源管理框架【Yarn】
大数据·hadoop·分布式
yumgpkpm1 天前
基于GPU的Spark应用加速 Cloudera CDP/华为CMP鲲鹏版+Nvidia英伟达联合解决方案
大数据·数据库·人工智能·hadoop·elasticsearch·spark·cloudera
talle20211 天前
Hadoop分布式文件系统【HDFS】
大数据·hadoop·hdfs
亲爱的非洲野猪2 天前
SpringBoot启动流程深度剖析:从@SpringBootApplication到Servlet容器就绪
hive·spring boot·servlet
星火开发设计2 天前
深入浅出HDFS:分布式文件系统核心原理与实践解析
大数据·数据库·hadoop·学习·hdfs·分布式数据库·知识
`林中水滴`2 天前
Hive系列:Hive 整合 HBase
hive·hbase
Hello.Reader2 天前
Hadoop Formats 在 Flink 里复用 Hadoop InputFormat(flink-hadoop-compatibility)
大数据·hadoop·flink