当前位置: 首页 > article >正文

Hive创建分区表并插入数据

业务中经常会遇到这种需求:数据每天全量更新,但是要求月底将数据单独保存一份以供后期查询某月节点的信息。这时就要考虑用到Hive的分区表实现,即按照月份创建分区表,相当于新的月份数据保存在新表,进而实现保存了历史数据。

分区表创建

分区表的创建本质是在HDFS创建了一个分区字段为名称的文件夹,插入数据时根据分区字段取值插入到文件中。

静态分区表

定义:静态分区在插入数据时要指定分区名,支持load、insert两种插入方式,主要用于分区少,分区名可以确定的情况。

动态分区表

定义:动态分区在插入数据时根据指定字段取值生成分区,只能使用insert方式插入数据。在定义时如果既有静态分区字段又有动态分区字段,动态分区字段放在最后。

分区表创建
create table tableName(
	field_name1 string,
	field_name2 string
)
partitioned by (p_field string,pmt string comment '年月')
row format delimited fields terminated by ','
STORED AS ORC
TBLPROPERTIES("orc.compress"="SNAPPY")   //压缩格式,或者使用语句stored as parquet
tblproperties ("skip.header.line.count"="1"); // 除去首行

数据载入

静态分区载入数据
-- 1、手动加载数据(会在所选数据库下生成/tableName/2023-10文件)
load data local inpath '/path/xxxx.csv' into table tableName partition (pmt='2023-10');

-- 2、insert插入数据(增量插入)
insert into tableName partition(p_field='aaa',pmt='2023-10')
select
	field_name1,
	field_name2
from
	tmp_tableName

-- 3、insert插入数据(全量插入)
insert overwrite table tableName partition(p_field='aaa',pmt='${date}')
select
	field_name1,
	field_name2
from
	tmp_tableName
动态分区插入数据
-- 1、动静分区
-- 设置动态分区参数
set hive.exec.dynamic.partition=true;  //开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrick; //默认参数strick也可实现动静分区

insert overwrite table tableName partition(p_field='aaa',pmt)
select
	field_name1,
	field_name2
from
	tmp_tableName

-- 2、动态分区
set hive.exec.dynamic.partition=true;  //开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrick; 

insert overwrite table tableName partition(p_field,pmt)
select
	field_name1,
	field_name2
from
	tmp_tableName

-- 3、相关调优参数
set  hive.exec.max.dynamic.partitions.pernode=1000  //每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions =1000  //一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.created.files =10000  //全局可以创建的最大文件个数,超出报错。

http://www.kler.cn/news/109003.html

相关文章:

  • bat文件学习
  • 基于STM32的示波器信号发生器设计
  • LeetCode 917 仅仅反转字母 简单
  • GnuTLS recv error (-110): The TLS connection was non-properly terminated
  • C#学习相关系列之多线程(七)---Task的相关属性用法
  • 算法训练|数据流中的中位数
  • Visual Studio Code的下载与安装
  • 电脑提示由于找不到vcruntime140.dll文件,教你四个解决方案
  • 中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料
  • Postgresqlddl在事务中可以回滚,truncate时relfilenode在当前会话会改变
  • Linux命令解压多个tar.gz包
  • rust学习
  • 关于错误javax.net.ssl.SSLException: Received close_notify during handshake
  • 腾讯云轻量应用服务器地域怎么选择比较好?
  • 两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list
  • 程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)rust解法
  • java集合之List接口实现类常用方法详解
  • Gitee 发行版
  • 【音视频】Linux | FFmpeg源码搭建
  • explain查询sql执行计划返回的字段的详细说明
  • LeetCode——哈希表(Java)
  • uni-app中tab选项卡的实现效果 @click=“clickTab(‘sell‘)“事件可传参数
  • No175.精选前端面试题,享受每天的挑战和学习
  • 【算法与数据结构】--算法应用--算法和数据结构的案例研究
  • ubuntu部署个人网盘nextCloud使用docker-compose方式
  • 性能优化必读 | AntDB-M高性能设计之线程池协程模型
  • Docker底层原理:Cgroup V2的使用
  • centos7 部署 Flink
  • 设计模式——单例模式详解
  • 随笔:使用Python爬取知乎上相关问题的所有回答