【Hive-小文件合并】Hive外部分区表利用Insert overwrite的暴力方式进行小文件合并

news/2024/5/20 4:03:15 标签: hive, hadoop, 数据仓库, hdfs

这里我们直接用实例来讲解,Hive外部分区表有单分区多分区的不同情况,这里我们针对不同情况进行不同的方式处理。

  • 利用overwrite合并单独日期的小文件

1、单分区

# 开启此表达式:`(sample_date)?+.+` 
set hive.support.quoted.identifiers=none;

# 此sql是将20230713分区的小文件进行合并
# `(sample_date)?+.+`:表示select 出除了sample_date分区字段以外的所有字段(字段较多的时候用这种方式很便捷)
insert overwrite table `test`.`table` 
partition(sample_date='20230713') 
select `(sample_date)?+.+` 
from `test`.`table` where sample_date='20230713';

2、多分区

# 开启此表达式:`(sample_date|msgtype)?+.+`
set hive.support.quoted.identifiers=none;

# 此sql是将20230713分区的小文件进行合并(但是注意还有子分区:msgtype)
# `(sample_date|msgtype)?+.+`:表示select 出除了sample_date和msgtype这两个分区字段以外的所有字段(字段较多的时候用这种方式很便捷)
insert overwrite table `test`.`table` 
partition(sample_date='20230713') 
select `(sample_date|msgtype)?+.+` 
from `test`.`table` where sample_date='20230713';
  • 利用overwrite合并一定分区范围内的小文件

1、单分区

注意: 合并一定分区范围内的小文件,select 后必须是 *,否则会报错。

insert overwrite table `test`.`table` 
partition(sample_date) 
select *
from `test`.`table` 
where sample_date between '20230712' and '20230713';

2、多分区

注意: 合并一定分区范围内的小文件不管单分区还是多分区,select 后必须都是 *,否则会报错。

insert overwrite table `test`.`table` 
partition(sample_date, partition_name) 
select * 
from `test`.`table` 
where sample_date between '20230802' and '20230803';

http://www.niftyadmin.cn/n/5003743.html

相关文章

定时线程池原理解析

基本使用 ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来在给定的延迟之后运行任务,或者定期执行任务。 public class ScheduledThreadPoolExecutorTest {public static void main(String[] args) {ScheduledThreadPoolExecutor threadPoolExecu…

RouterOS-配置PPPoEv4v6 Server

1 接口 ether3 出接口 ether4 内网接口 2 出接口 出接口采用PPPoE拨号SLAAC获取前缀,手动配置后缀 2.1 选择出接口interface,配置PPPoE client模式 2.2 配置PPPoE client用户名和密码 2.3 从PPPoE client获取前缀地址池 2.4 给出接口选择前缀并配置…

Kotlin 环境下解决属性初始化问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

若依 MyBatis改为MyBatis-Plus

主要内容:升级成mybatis-plus,代码生成也是mybatis-plus版本 跟着我一步一步来,就可完成升级! 检查:启动程序,先保证若依能启动 第一步:添加依赖 这里需要在两个地方添加,一个是最…

JavaScript学习笔记01

JavaScript笔记01 什么是 JavaScript JavaScript 是一门世界上最流行的脚本语言,它是一种弱类型的脚本语言,其代码不需要经过编译,而是由浏览器解释运行,用于控制网页的行为。 发展历史 参考:JavaScript的起源故事…

AI:07-基于卷积神经网络的海洋生物的识别

当涉及海洋生物的识别和研究时,基于深度学习的方法已经展现出了巨大的潜力。深度学习模型可以利用大量的图像和标记数据来自动学习特征,并实现高准确度的分类任务。本文将介绍如何使用深度学习技术来实现海洋生物的自动识别,并提供相应的代码示例。 数据收集和预处理 要训…

adb server version (19045) doesn‘t match this client (41); killing.的解决办法

我是因为安装了360手机助手,导致adb版本冲突。卸载之后问题解决 根据这个思路,如果产生"adb server version (19045) doesn’t match this client (41); killing."的错误,检查一下是否有多个版本的adb服务。

Codeforces Round 806 (Div. 4) D 字符串

题目链接:Codeforces Round 806 (Div. 4) D 给你长度最多为 8的 n个字符串 s1,s2,…,sn。 对于每个字符串 si,判断是否存在两个字符串 sj和 sk,使得 sisjsk。也就是说,si��是sj��和…