一百七十四、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
;
相关推荐
一张假钞9 小时前
Spark SQL读写Hive Table部署
hive·sql·spark
想做富婆10 小时前
Hive:窗口函数[ntile, first_value,row_number() ,rank(),dens_rank()]和自定义函数
数据仓库·hive·hadoop
好记性+烂笔头16 小时前
4 Hadoop 面试真题
大数据·hadoop·面试
B站计算机毕业设计超人2 天前
计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习
hadoop·python·机器学习·spark·网络爬虫·课程设计·数据可视化
字节全栈_rJF2 天前
Hive 整合 Spark 全教程 (Hive on Spark)
hive·hadoop·spark
好记性+烂笔头2 天前
2 MapReduce
大数据·hadoop·mapreduce
字节全栈_ZKt2 天前
Hadoop集群中Hbase的介绍、安装、使用_root@master001 hadoop]# start-hbase
大数据·hadoop·hbase
一张假钞2 天前
Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
java·hadoop·hdfs·sqoop
weixin_307779132 天前
设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法
数据仓库·hive·python·sql
想做富婆2 天前
Hive:窗口函数(1)
数据仓库·hive·hadoop