一百七十四、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
;
相关推荐
油头少年_w1 小时前
大数据导论及分布式存储HadoopHDFS入门
大数据·hadoop·hdfs
工业互联网专业3 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
bigdata-余建新11 小时前
HDFS和HBase跨集群数据迁移 源码
hadoop·hdfs·hbase
Mephisto.java12 小时前
【大数据学习 | kafka高级部分】文件清除原理
大数据·hadoop·zookeeper·spark·kafka·hbase·flume
m0_3755997312 小时前
Hadoop:单节点配置YARN
hadoop·yarn
大数据魔法师15 小时前
Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署
hadoop·分布式·zookeeper
houzhizhen17 小时前
HiveMetastore 的架构简析
hive
数据要素X1 天前
【数据仓库】Hive 拉链表实践
大数据·数据库·数据仓库·人工智能·hive·hadoop·安全
Francek Chen1 天前
【大数据技术基础 | 实验八】HBase实验:新建HBase表
大数据·数据库·hadoop·分布式·zookeeper·hbase
B站计算机毕业设计超人1 天前
计算机毕业设计Hadoop+大模型地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据
大数据·hadoop·爬虫·深度学习·机器学习·数据分析·课程设计