Agent Skills
返回列表
📊

结构化导出差异比对

数据分析 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/compare-recurring-csv-tsv-or-json-exports-and-emit-row-level-change-sets-before-syncs

技能介绍

问题:diff 告诉你文件变了,却没说业务上发生了什么

周期性导出的 CSV、TSV 或 JSON 快照(订单、用户表、任务结果、埋点分片)总是在变。diff one.csv two.csv 只能告诉你“第 47 行不同”,回答不了下面这些:

  • 哪些记录是新增的?
  • 哪些记录被删除了?
  • 哪些记录还在,但字段值被修改了,改了哪个?
  • 这个差异能不能被下游脚本直接消费?

当你需要在同步进数据库、触发告警或写变更日志之前,把两期导出之间的差异讲清楚,你需要的是一份行级变更集(change set),而不是逐行比对的文本。

工作方式:先按稳定键对齐,再分类

这个技能的核心是 csv-diff。它不假设两份文件的行顺序一致,而是先按一个稳定的键(id 这类主键列或字段)把记录对齐,再逐字段比较,把结果分成三类:

  • 新增行:只在第二份快照中出现的键
  • 删除行:只在第一份快照中出现的键
  • 修改行:键相同,但至少一个字段的值变了

输出可以是人类可读的文本,方便直接贴进 issue 或 PR 描述;也可以是机器友好的 JSON,交给同步任务、通知机器人或审计日志解析。两种形态都只包含变化本身,不带无关上下文。

由于底层就是一个 Python 库,你也可以在自己的代码里直接 import,把它嵌进已有数据管道,而不必只当命令行工具用。

适用边界

几个实际会踩的坑:

  • 键必须稳定且唯一。 键在两份快照里重复或为空,行的对应关系就会错乱,新增/删除的判定随之失真。没有稳定键的导出无法使用这个方案。
  • 只覆盖结构化文件。 输入是 CSV、TSV 或 JSON,格式更松散的(原始日志、XML、嵌套深度不一的 JSON)不在范围内。
  • 字段集合变化需显式指定。 两份快照的列或字段不一致时,比较结果取决于你让它关注哪些字段,而不是它自己推断业务含义。
  • 它描述差异,不执行同步。 输出是变更集,写入目标系统、重试与补偿仍由你自己的流程负责。
  • 环境前置条件:Python 3 与 pip,以及两份可直接比较的快照。上游文档还提供 --extra 这类格式化参数,用于把 {id} 这样的变量注入输出模板。

示例输入很简单,就是一个带 id,name,age 三列的 one.csv——这恰好说明它的价值在于把“键匹配 + 字段级比较 + 变更分类”这套逻辑固化下来,让你不再手写 pandas 脚本。

使用场景

  • 每周收到两份用户导出表,需要在同步进数据库前确认本周新增了哪些用户、注销了哪些账号。
  • 数据平台每天把任务结果导出为 JSON,要核对相邻两天哪些记录变了、具体改了哪个字段。
  • 发布数据快照前,按稳定主键比对两版 CSV,生成机器可读的 JSON 变更日志供审计系统落库。
  • 两份 TSV 导出列顺序和行顺序都不同,需要按 id 重新对齐后找出真正被改动的行。

适合人员

  • 数据工程师:常要在把 CSV 或 JSON 快照写入生产库之前,拿到新增、删除、修改的行级清单做核对。
  • 后端开发者:在数据迁移或定时同步任务里直接导入 csv-diff,把变更集嵌进自己的管道。
  • 数据分析人员:拿到两版导出后不想手写 pandas 脚本,想要一份可直接贴进 issue 的差异说明。
  • 运维或平台负责人:给同步任务加一道前置检查,异常变更先出报告再决定是否继续同步。