讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Python ETL 作业的幂等重跑保障

落伟同学_4881

落伟同学_4881

发布时间:2026-02-13 23:22:02

|

460人浏览过

|

来源于php中文网

原创

关键在于用 run_id 或 batch_date 作逻辑分区键,写入前显式清理对应分区数据,禁用 auto-commit 并手动提交 Kafka offset,统一使用 UTC 时间(如 pendulum.today('UTC'))避免时区不一致。

python etl 作业的幂等重跑保障

如何让 Python ETL 任务支持多次重跑不重复写入

关键不是“防止重跑”,而是让每次跑都产出一致结果——靠状态标记 + 写入前清理,而不是靠锁或外部调度判断。否则一旦中间出错、手动触发重跑,数据就乱了。

常见错误现象:KeyError(查不到上次运行时间)、IntegrityError(主键冲突)、下游表里出现双份订单记录。

  • 用 run_id 或 batch_date 作为逻辑分区键,所有写入目标(数据库表、Parquet 路径、S3 前缀)必须显式包含它
  • 写入前先执行清理:对数据库用 DELETE FROM table WHERE batch_date = '2024-04-01';对文件系统用 shutil.rmtree() 或 fs.delete()
  • 避免依赖“上次成功时间”字段做增量判断——这个值可能滞后、被人工改过、或在并发重跑时不可靠

用 pandas.to_sql(..., if_exists='replace') 安全吗

不安全,尤其在有外键、索引、权限控制的生产库中。if_exists='replace' 实际是 DROP TABLE + CREATE TABLE,会丢失原表结构元信息,还可能触发级联删除或锁表。

使用场景:仅限临时表、测试环境、或你完全掌控 DDL 的宽表落地环节。

立即学习“Python免费学习笔记(深入)”;

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 生产环境一律改用 if_exists='append' + 显式 DELETE 清理,确保约束、索引、注释保留
  • 如果目标表没有 batch_date 字段,别硬加——先 ALTER TABLE ADD COLUMN,再清理写入
  • 注意 pandas.to_sql 默认不开启事务,大批次写入建议包在 connection.begin() 里

Airflow 中 task 重试时怎么避免重复消费 Kafka 数据

不是靠 Airflow 的 retries 参数控制,而是靠消费者自己管理 offset 提交时机——必须在数据落库/落盘成功后,才提交 offset。

常见错误现象:task 失败重试 → offset 已提交 → 重试时从新位置开始读 → 漏数据;或者 offset 没提交 → 每次都重读 → 重复写入。

  • 用 KafkaConsumer 时,禁用 enable_auto_commit=True,改用手动 commit()
  • 把 consumer.commit() 放在写入逻辑的 finally 块之后,且只在写入成功时调用
  • 如果用 confluent-kafka,注意 msg.offset() 是下一条,真正要 commit 的是 msg.offset() + 1

为什么用 datetime.now() 生成 batch_date 总出问题

因为本地时区、Docker 容器时区、Airflow worker 时区三者不一致,导致同一批任务在不同节点上生成的 batch_date 不同,清理和覆盖失效。

性能影响:看似只是个时间函数,但间接造成跨天数据混写、分区路径错乱、甚至 Hive 表 MSCK REPAIR 失败。

  • 统一用 pendulum.today('UTC').date().isoformat() 或 Airflow 的 {{ ds }} 模板变量
  • 禁止在 Python 脚本里调用 datetime.now() 或 date.today()
  • 如果必须用当前时间(比如打日志),至少用 datetime.utcnow() 并明确标注 UTC

最麻烦的其实是跨系统时间对齐——比如 Airflow DAG 设的是 UTC 0 点调度,但你的 ETL 脚本读的是服务器本地时间,差 8 小时,batch_date 就永远错一天,清理动作压根找不到目标分区。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

360

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

272

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

891

2026.04.13

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3246

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

710

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

684

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

750

2026.02.04

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

618

2023.10.25

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn