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

wampserver搭建网站做交互式的网站怎么做

wampserver搭建网站,做交互式的网站怎么做,临沂建设工程信息网,网站设计上市公司使用 PySpark 批量清理 Hive 表历史分区 在大数据平台中,Hive 表通常采用分区方式存储数据,以提升查询效率和数据管理的灵活性。随着数据的不断积累,历史分区会越来越多,既占用存储空间,也影响元数据管理性能。因此&a…

使用 PySpark 批量清理 Hive 表历史分区

在大数据平台中,Hive 表通常采用分区方式存储数据,以提升查询效率和数据管理的灵活性。随着数据的不断积累,历史分区会越来越多,既占用存储空间,也影响元数据管理性能。因此,定期清理过期的历史分区是数据治理的重要环节。本文将介绍如何利用 PySpark 批量清理 Hive 表的历史分区。

一、背景说明

Hive 分区表常用于按时间(如按天、月)组织数据。随着时间推移,早期的分区数据可能已不再需要,但这些分区依然占用 HDFS 空间和 Hive 元数据。手动删除分区效率低且容易出错,采用 PySpark 可以实现自动化、批量化的分区清理。

二、实现思路

  1. 通过 SparkSession 连接 Hive(可以通过hive引擎执行)。
  2. 获取目标表的所有分区信息。
  3. 根据设定的保留策略(如保留最近 N 天),筛选出需要删除的历史分区。
  4. 批量执行分区删除操作。

三、代码实现

以下为 PySpark 批量清理 Hive 表历史分区的示例代码:

#******************************************************************#
##author: david.zhou
##create time: 2025-02-26 13:24:11
#******************************************************************#
#!/usr/bin/env python
# -*- coding: utf-8 -*-from pyspark.sql import SparkSession
from datetime import datetime, timedelta
import logging# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')# 生成需要检查的历史日期列表(检查1098天的历史分区)
#check_days = 1098
TABLE_PARTITON_CHECK_DAYS = 100# 配置要处理的表和保留天数
TABLES_CONFIG = {'ods.ods_sec_admin_operate_log': 60,'sale.dwd_pc_wx_msg_df': 60
}def is_external_table(spark, table_name):"""判断 Hive 表是否为外部表"""# 查询表的元数据result = spark.sql(f"DESCRIBE FORMATTED {table_name}").collect()# 查找是否包含 "EXTERNAL" 标志for row in result:if 'EXTERNAL' in row[1]:print(f"{table_name} is_external_table result is {row}")return Truereturn Falsedef get_spark_session():return SparkSession.builder \.appName("HivePartitionCleaner") \.enableHiveSupport() \.config("spark.sql.sources.partitionOverwriteMode", "dynamic") \.getOrCreate()def generate_partition_dates(end_date, days):"""生成需要检查的历史分区日期列表"""dates = []current = end_datefor i in range(days):dates.append(current.strftime('%Y%m%d'))current = current - timedelta(days=1)return dates# 检查分区是否存在
def check_partition_exists(spark, table_name, partition_spec):partitions = spark.sql(f"SHOW PARTITIONS {table_name} PARTITION ({partition_spec}) ").collect()if not partitions:return Falseelse:return Truedef drop_partitions(spark, table_name, retention_days):"""按日期循环删除历史分区"""logging.info(f"开始处理表 {table_name}, 保留 {retention_days} 天数据")try:# 计算截止日期cutoff_date = datetime.now() - timedelta(days=retention_days)logging.info(f"开始处理表 {table_name}, 保留 {retention_days} 天数据, 将清理 {cutoff_date} 之前分区数据")# 生成需要检查的历史日期列表(检查1098天的历史分区)#check_days = 1098partition_dates = generate_partition_dates(cutoff_date, TABLE_PARTITON_CHECK_DAYS)dropped_count = 0for dt in partition_dates:try:# 构建删除单个分区的SQL# TODO: 非 pt 分区单独处理drop_sql = f"""ALTER TABLE {table_name} DROP IF EXISTS PARTITION (pt='{dt}')"""# 执行SQL并获取结果logging.info(f"准备删除分区SQL: {drop_sql}")result = spark.sql(drop_sql)if not check_partition_exists(spark, table_name, f"pt='{dt}'"):print(f"分区 pt='{dt}' 删除成功")dropped_count += 1logging.info(f"成功删除分区: {table_name} - pt={dt}")else:print(f"分区 pt='{dt}' 删除失败")except Exception as e:logging.error(f"删除分区失败 {table_name} - pt={dt}: {str(e)}")continuelogging.info(f"表 {table_name} 处理完成: 删除分区数 {dropped_count}")except Exception as e:logging.error(f"处理表 {table_name} 时发生错误: {str(e)}")def main():logging.info("开始批量清理分区任务")spark = get_spark_session()try:for table_name, retention_days in TABLES_CONFIG.items():#is_external_table(spark, table_name)if is_external_table(spark, table_name):print(f"表 {table_name} 是外部表")logging.error(f"{table_name} 是外部表")else:print(f"表 {table_name} 不是外部表")drop_partitions(spark, table_name, retention_days)finally:spark.stop()logging.info("批量清理分区任务完成")if __name__ == "__main__":main()

四、注意事项

  • 请根据实际表结构调整 table_namept
  • 删除分区操作不可恢复,建议先在测试环境验证。
  • 可将脚本集成到定时任务(如 Airflow、Oozie)中,实现自动化清理。
  • 脚本缺少外部表删除分区,删除表存储文件操作,如果需要可以自行补充。

五、总结

通过 PySpark 批量清理 Hive 表历史分区,可以有效释放存储空间,提升 Hive 元数据管理效率。该方法简单高效,适用于大多数基于时间分区的 Hive 表维护场景。


文章转载自:

http://m0ftNoiW.qhmqL.cn
http://Pw4B9UZm.qhmqL.cn
http://WXZ8iRe5.qhmqL.cn
http://vBpntnmS.qhmqL.cn
http://CNzxHI77.qhmqL.cn
http://zDdeYfms.qhmqL.cn
http://r99ikYKm.qhmqL.cn
http://CBVPyXUh.qhmqL.cn
http://VusnXSib.qhmqL.cn
http://bdnF7XpU.qhmqL.cn
http://0WYpdCqt.qhmqL.cn
http://xfiHovB8.qhmqL.cn
http://zn0xcoEZ.qhmqL.cn
http://FNpzl3HE.qhmqL.cn
http://xnITxjQJ.qhmqL.cn
http://B6zIZQG5.qhmqL.cn
http://gPPXkDOf.qhmqL.cn
http://dODH6P7g.qhmqL.cn
http://xSO3rkv8.qhmqL.cn
http://0Diy6NFQ.qhmqL.cn
http://Z8oRIBq3.qhmqL.cn
http://0pLFpSek.qhmqL.cn
http://6cf29EAy.qhmqL.cn
http://D7hjCRDH.qhmqL.cn
http://V5rlix2v.qhmqL.cn
http://vX4wzJco.qhmqL.cn
http://gOf1ukqQ.qhmqL.cn
http://RSYBxWQL.qhmqL.cn
http://7EctH5BK.qhmqL.cn
http://OhoscX1J.qhmqL.cn
http://www.dtcms.com/wzjs/661828.html

相关文章:

  • 网站开发流行营销型网站大全
  • 用什么做视频网站比较好镇江平面设计
  • 海淘网站是谁做的视频网站开发需求分析
  • 怎么用flash做网站网站建设ppt答辩
  • 云南城市建设职业学院网站网站策划编辑的工作内容
  • 漳州正规网站建设费用繁体企业网站源码
  • 北京网站排名有哪些网站是做数据展示
  • 建设工程质量网站高端的西安网页设计
  • 国外专门做视频翻译网站浙江十大外贸公司排名
  • 外包公司做网站价格重视网站建设
  • 如何利用某个软件做一个网站discuz论坛seo设置
  • 顾问完美一键优化
  • dede 网站图标互联网创业项目零成本
  • 哪几个做内贸的网站比较好一点长沙经开区建设局网站
  • wordpress 站点身份页面设计简洁明快
  • 南充建设公司网站wordpress 二维码插件下载
  • 购物网站设计流程图云南集优科技网站
  • 网站正在建设中末班设计公司网页模板
  • 网站建设公司服务wordpress设置网址错
  • 策划会展网站建设wordpress阿里云邮箱
  • 鱼爪网商城网站如何建设网站建设公司汕头的
  • 全屏产品网站网站开发建设价格附件
  • 网站建设中敬请期待直播平台开发方案
  • 阿里巴巴新网站怎么做运营寄生虫网站排名代做
  • 哪些网站能够免费做公考题关于网站开发的自我评价
  • 顺企网哈尔滨网站建设怎么提高网站的访客量
  • 做vi设计的网站广州网站制作培训
  • 环保主题静态网站模板下载浙江购物网站开发设计
  • 有谁帮做网站的wordpress网站缩
  • 网站建设必备网站改版后 搜索不到