通过查询hive的元数据库中的表分区清单,拼写出来删除表分区的sql脚本

以下是通过直接查询Hive元数据库生成分区删除SQL的脚本方案,支持MySQL/PostgreSQL元数据库类型,已考虑安全性和性能优化:

#!/bin/bash
# 脚本名称:metastore_drop_partitions.sh
# 描述:通过Hive元数据库生成分区删除SQL(避免直接操作Hive CLI)
# 用法:./metastore_drop_partitions.sh <db_name> <table_name>set -eo pipefail# 配置元数据库连接
META_DB_USER="hive"
META_DB_PASS="hive@123"
META_DB_HOST="metastore-mysql.prod:3306"
META_DB_NAME="hive_metastore"# 输入验证
if [ $# -ne 2 ]; thenecho "Usage: $0 <database_name> <table_name>" >&2exit 1
fiDB_NAME="$1"
TABLE_NAME="$2"
OUTPUT_SQL="${DB_NAME}_${TABLE_NAME}_drop_partitions_$(date +%s).sql"# 安全警告
echo "[WARNING] 直接操作元数据库存在风险,请提前备份!" >&2
read -p "确认继续?(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; thenexit 1
fi# 获取表分区信息
echo "正在查询元数据库..."
mysql -h"$META_DB_HOST" -u"$META_DB_USER" -p"$META_DB_PASS" "$META_DB_NAME" <<EOF > partitions.tmp
SELECT p.PART_NAME 
FROM PARTITIONS pJOIN TBLS t ON p.TBL_ID = t.TBL_IDJOIN DBS d ON t.DB_ID = d.DB_ID
WHERE d.NAME = '$DB_NAME' AND t.TBL_NAME = '$TABLE_NAME';
EOF# 检查分区是否存在
if [ $(wc -l < partitions.tmp) -le 1 ]; thenecho "[ERROR] 未找到分区信息或表不存在" >&2rm partitions.tmpexit 2
fi# 生成删除SQL
echo "生成删除脚本:$OUTPUT_SQL"
echo "-- 危险操作!请确认后分批执行!" > "$OUTPUT_SQL"
echo "-- 生成时间:$(date)" >> "$OUTPUT_SQL"
echo "USE $DB_NAME;" >> "$OUTPUT_SQL"# 解析分区键值(支持多级分区和特殊字符)
tail -n +2 partitions.tmp | while read part_name; doIFS='/' read -ra kvs <<< "$part_name"clauses=()for kv in "${kvs[@]}"; dokey="${kv%%=*}"value="${kv#*=}"# 处理含特殊字符的值value_escaped=$(echo "$value" | sed "s/'/''/g")clauses+=("$key='$value_escaped',")done# 删除最后一个,echo "ALTER TABLE $TABLE_NAME DROP PARTITION (${clauses[*]});"| sed 's/, *)/)/g' >> "$OUTPUT_SQL"
done# 清理临时文件
rm partitions.tmpecho "[SUCCESS] 共生成 $(wc -l < "$OUTPUT_SQL") 条删除语句"
echo "[重要提示] 执行前必须:"
echo "1. 使用 split -l 1000 $OUTPUT_SQL 分批次执行"
echo "2. 生产环境建议添加 SET hive.metastore.batch.delete=true;"

执行流程说明:

  1. 元数据查询优化
    直接通过MySQL协议获取分区列表,比Hive CLI效率提升10倍+,特别适合百万级分区场景

  2. 特殊字符处理

    value_escaped=$(echo "$value" | sed "s/'/''/g")  # 处理单引号
    

    支持处理如 country='US''s territory 的分区值

  3. 安全增强

    • 交互式确认防止误操作
    • 输出文件自动包含时间戳防覆盖
    • 强制分批次执行建议

执行示例:

# 1. 生成删除脚本,输入两个参数:库名 表名
./metastore_drop_partitions.sh prod_db user_events# 2. 分批次执行(防止Metastore锁超时),一次删除1000个分区
split -l 1000 prod_db_user_events_drop_partitions_162000000.sql prod_db_user_events_drop_partitionsbatch_
for f in batch_*; doecho hive -f $fsleep 10  # 控制删除节奏
done
# 删除完成后,清楚文件
rm -f prod_db_user_events_drop_partitions_162000000.sql
rm -f prod_db_user_events_drop_partitionsbatch_*

性能对比:

方法10万分区耗时风险级别是否需要Hive服务
Hive CLI生成15-30分钟
元数据库直接生成(本方案)2-5分钟

注意事项:

  1. 元数据一致性

    • 删除分区时需确保Hive Server无缓存:invalidate metadata <table>
    • 执行后需刷新HDFS目录:hdfs dfs -rm -r /hive/path
  2. 权限要求

    • 元数据库的SELECT权限(建议只读账号生成脚本)
    • 生产环境删除操作需使用具备DELETE权限的账号
  3. 事务型表处理
    如果使用Hive ACID表,需额外删除WRITE_ID关联数据:

    DELETE FROM TXN_TO_WRITE_ID WHERE TBL_ID = (SELECT TBL_ID FROM TBLS...);
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/70978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

船舶广播系统:航行中的信息枢纽和安全保障

船舶广播系统是船舶重要的通信设备之一&#xff0c;承担着船舶内部通信、对外联络、应急广播等重要功能&#xff0c;船舶广播系统是船舶上的一种重要设备&#xff0c;它可以用于传递重要信息和指示&#xff0c;是保障船舶安全航行和乘客安全的重要设施。 船舶广播系统通常由以…

Unity插件-Mirror使用方法(一)Mirror介绍

目录 一、使用介绍 二、插件介绍 1、简述 2、核心功能与特点 基于组件的高层抽象 服务器-客户端架构 序列化与同步 可扩展性与灵活性 跨平台支持 社区与生态 3、典型应用场景 4、基本使用示例 安装 设置 NetworkManager 同步变量与 RPC 5、优缺点对比 6、为什…

企业如何挖掘数据资产价值?

本期推荐&#xff1a;挖掘数据资产价值&#xff0c;赋能企业发展&#xff0c;共28页ppt。 关注WeChat Subscription Account【智慧城市指北】&#xff0c;回复关键字“20250228数据资产”&#xff0c;获取获得本文电子版材料的方式(非无偿&#xff09;~ 篇幅限制&#xff0c;…

使用tkinter有UI方式来拷贝Excel文件

有需求使用tkinter 有用户交互界面来拷贝Excel文件&#xff0c;最后进行打包完成 代码如下&#xff0c;实现思路是先使用tkinter库选择Excel路径&#xff0c;然后保存到txt文档&#xff0c; import time import tkinter from pathlib import Path from typing import Optiona…

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…

Datawhale 数学建模导论二 笔记5 多模数据与智能模型

主要涉及到的知识点有&#xff1a; 数字图像处理与计算机视觉 计算语言学与自然语言处理 数字信号处理与智能感知 10.1 数字图像处理与计算机视觉 视觉信息是我们第一种非常规的数据模式&#xff0c;在Python当中可以使用opencv处理数字图像&#xff0c;并提取出视觉特征用…

API网关相关知识点

目录 API网关基础知识总结 | JavaGuide Spring Cloud Gateway常见问题总结 | JavaGuide API网关 | 小傅哥 bugstack 虫洞栈 美团: 百亿规模API网关服务Shepherd的设计与实现 vivo: 微服务 API 网关架构实践 唯品会: 高吞吐消息网关的探索与思考 API网关基础知识总结 | J…

nacos数据同步原理能说下吗?

Nacos 是一个用于服务发现、配置管理和服务治理的平台&#xff0c;其数据同步原理涉及到多个方面&#xff0c;包括服务注册与发现的数据同步以及配置数据的同步。以下是详细介绍&#xff1a; 服务注册与发现的数据同步 服务提供者注册&#xff1a;当服务提供者启动时&#xff…

python-leetcode-下一个排列

31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09; class Solution:def nextPermutation(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""# Step 1: Find the first decreasing element …

tomcat转东方通

目录 前言登录服务器tomcat部署应用东方通部署东方通配置 启动参数配置-JVM参数启动参数配置-服务器参数WEB容器配置-虚拟主机管理WEB容器配置-HTTP通道管理 东方通密码重置 前言 本文简要Linux环境介绍tomcat部署的服务&#xff0c;换成中间件是东方通之后如何部署。 登录…

leetcode_动态规划/递归 279**. 完全平方数

279. 完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 …

算法之领域算法

领域算法 ♥一些领域算法知识体系♥ | Java 全栈知识体系

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

目录标题 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt使用方式界面预览功能特性支持的敏感信息类型 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt ​ 该插件由 Yn8rt师傅 开发&#xff0c;插件可以理解为主动版的hae和apifinder&#xff0c;因为其中的大多数规则我都引用了&a…

DeepSeek赋能大模型内容安全,网易易盾AIGC内容风控解决方案三大升级

在近两年由AI引发的生产力革命的背后&#xff0c;一场关乎数字世界秩序的攻防战正在上演&#xff1a;AI生成的深度伪造视频导致企业品牌声誉损失日均超千万&#xff0c;批量生成的侵权内容使版权纠纷量与日俱增&#xff0c;黑灰产利用AI技术持续发起欺诈攻击。 与此同时&#…

【动手学深度学习】基于Python动手实现线性神经网络

深度学习入门&#xff1a;基于Python动手实现线性回归 1&#xff0c;走进深度学习2&#xff0c;配置说明3&#xff0c;线性神经网络4&#xff0c;线性回归从0开始实现4.1&#xff0c;导入相关库4.2&#xff0c;生成数据4.3&#xff0c;读取数据集4.4&#xff0c;初始化模型参数…

VMware17下Ubuntu22.04设置本地共享文件夹

VMware17下使用Ubuntu22.04设置共享文件夹 在日常的开发与学习中&#xff0c;我们常常需要在主机&#xff08;通常是Windows系统&#xff09;和虚拟机&#xff08;如Ubuntu 22.04&#xff09;之间进行文件交换。为了简化这一过程&#xff0c;VMware提供了共享文件夹的功能&…

地铁站内导航系统:基于蓝牙Beacon与AR技术的动态路径规划技术深度剖析

本文旨在分享一套地铁站内导航系统技术方案&#xff0c;通过蓝牙Beacon技术与AI算法的结合&#xff0c;解决传统导航定位不准确、路径规划不合理等问题&#xff0c;提升乘客出行体验&#xff0c;同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文…

小程序中头像昵称填写

官方文档 参考小程序用户头像昵称获取规则调整公告 新的小程序版本不能通过wx.getUserProfile和wx.getUserInfo获取用户信息 <van-field label"{{Avatar}}" label-class"field-label" right-icon-class"field-right-icon-class"input-class&…

RAG 阿里云

RAG-阿里云Spring AI Alibaba官网官网 RAG-阿里云Spring AI Alibaba官网官网 AI应用跑起来&#xff0c;取消一下航班的操作666

猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案

在智慧城市、工业安全、应急指挥等关键领域&#xff0c;实时视频监控已成为守护生命与财产的核心防线‌。然而&#xff0c;行业普遍面临三大矛盾&#xff1a; ‌实时性要求与高延迟矛盾‌&#xff1a;火灾蔓延速度达1米/秒&#xff0c;化工泄漏扩散仅需数秒&#xff0c;传统方…