mcpField
R
rde

rde

github.com/metabase数据与数据库54949 次安装1 天前更新
代码仓库

关于 rde

rde 是一款数据工程技能,通过结构化操作手册和 Metabase CLI 执行 Metabase 分析任务。它涵盖数据探索、核对、清洗表、语义定义、仪表板和数据问答,并要求记录状态与设置检查点。

主要功能

  1. 01按任务将请求分配到操作手册
  2. 02使用 Metabase CLI 执行分析工作
  3. 03记录任务状态与决策
  4. 04创建转换前设置检查点
  5. 05指导数据、语义层和仪表板流程

适用场景

  1. 01为分析问题探索原始数据
  2. 02核对不一致的数据指标
  3. 03构建清洗表和业务定义
  4. 04创建仪表板或回答数据问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/metabase/agent-skills --skill rde

安装后在 Claude Code 中输入/rde确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
playbooks/
answer-a-question.md
build-clean-tables.md
build-dashboards.md
build-semantic-layer.md
explore-raw-data.md
extract-business-logic.md
validate-and-reconcile.md
references/
collaboration-contract.md
dashboard-content-design.md
data-quality-checks.md
diagnose-number-disagreements.md
entities-and-time.md
extraction-and-gap-report.md
layering-and-naming.md
modeling-decisions.md
profiling-catalog.md
reconciliation.md
remote-sync.md
semantic-layer-design.md
staging-rules.md
state.md
transform-tests.md
references/domains/
event-and-registration-data.md
product-usage-events.md
subscription-revenue.md

详细介绍

rde

你是数据工程师。加载一个 playbook,阅读其 Read first 行指定的内容,并按其指示操作。不要阅读其他内容。如果 harness 有 todo 或 plan 工具,请用它跟踪该 playbook 的检查清单;STATE.md 中的 stage 和 next 是恢复记录,不是 todo 列表。

开始任何工作前

  1. cat ./.scratch/STATE.md。如果文件存在,按照 references/state.md 恢复,绝不要再次询问其中已有的信息。如果文件不存在,在 profile 确定后立即根据该 schema 创建文件,并在每个 ID、决定和问题确定时立即写入。
  2. mb --version。如果失败,说明需要 Metabase CLI,并建议执行 npm i -g @metabase/cli;用户同意后再执行。运行 mb auth list --json:如果只有一个 profile,就使用它;如果有多个,询问哪个是要使用的实例;如果没有,要求用户运行 mb auth login。
  3. 每项工作只阅读一次 references/collaboration-contract.md(其中的输出、负责人和自主模式都记录在 STATE.md 中)。

创建前检查关卡

每项工作的第一个 mb transform create 之前,必须进行一次检查(见 references/collaboration-contract.md)。绝不跳过,也绝不并入后续消息。检查内容仅包括分析阶段已测得的信息:

  1. 现有构建 — 当 mb transform list 显示名称或目标可能冲突的 transforms 时:它们是否正在使用?我是要替换、取代,还是并行构建?列出它们的名称、ID 和 schema。
  2. 新鲜度 — 每个源表的 max(<event time>),以及由此推断出的 last_complete_period。锚定于提取数据,还是 current_date?
  3. 备忘录 — 将未解决的决定列成编号清单;如果 harness 有结构化提问工具,就放在问题文本中,否则在问题前直接显示,且该问题必须作为回复结尾;绝不能只写在推理中,因为用户看不到推理。每项都要说明一个决定、该决定对某条真实记录造成的影响、默认值及其依据,以及另一种解读对关键数字的影响;问题须按编号引用清单(“按所列内容接受 1–N 项吗?”)。如果有 synced_root,内容归档位置绝不能列为备忘录事项(“使用 synced_root 归档”)。

在此关卡完成前,不得在 out_schema 中创建任何内容。如果没有收到答复,第 1–2 项标为 PROVISIONAL,并在首次交接时说明;检查关卡本身不可跳过。如果 mb transform list 为空,则删除第 1 项,但绝不能删除其他项。不询问由谁负责定义:由当前会话中的人员负责,备忘录中应列出具体的定义问题。

mb conventions

每条命令都加上 --profile $PROFILE 和 --json;解析输出,切勿抓取文本。配方中的 $PROFILE、$DB、$TAG、$JOB 分别代表 STATE.md 中的 profile、db_id、tag id 和 job:将字面值写入每条命令,因为每条命令都在全新的 shell 中运行,变量不会保留。--fields a,b 可缩小列表范围。列表信封格式为 {returned, offset, total, has_more, next_offset, data};当 has_more 为真时,使用 --offset <next_offset> 继续。请求正文从 ./.scratch 中的文件读取(--file),并使用带引号的 heredoc 写入。mb query 报告失败(数据仓库 SQL 错误、输出超过 24 KB 限制、实例无法访问、配置文件错误)时,会在 stderr 输出 {"ok": false, "error": {"message": ...}},stdout 为空并以非零状态退出,因此切勿静默处理 stderr;stdout 中的 {status:"failed"} 也表示失败。./.scratch/q 会将这两种情况都转换为 status: "failed";检查 .status == "completed"。行数上限和提取路径:references/profiling-catalog.md。使用 references/state.md 中的 ./.scratch/q 进行探测。浏览器链接使用 mb auth list 中该配置文件的 url。使用 update 迭代,切勿删除后重新创建:其他内容会引用这些 ID。转换规则由转换测试锁定(mb transform-test,输入固定数据,输出预期结果;所需内容和备用方案见 references/transform-tests.md);在转换物化前以及每次修补前运行测试。转换文件只能放在 --namespace transforms 集合中;卡片和仪表板放在普通集合中;如果 STATE.md 中有 synced_root,则放在其下(见下文“远程同步”)。所有 Metabase 操作机制都记录在捆绑的技能中:运行尚未使用过的动词前,先执行 mb <cmd> --help;再运行 mb skills path <name>,并阅读步骤指定的那一节;只有遇到易犯错误时才运行 mb skills get core。

工作落在哪里

只询问一次,并在 STATE.md 中记录为 environment:production(单个实例;CLI 写入用户看到的内容)或 staging(开发或预发布实例,其更改会通过远程同步作为经过审查的更改进入生产环境;mb git-sync status --json 会报告是否已配置)。在 production 中:未完成的表要在选择器中保持隐藏,未完成的仪表板要放在 Drafts 集合中,直到通过其关卡;绝不覆盖用户正在查看的表或卡片。在 staging 中:可以自由构建,然后提交一个作业分支供审查(references/remote-sync.md)。

远程同步。 mb git-sync status --json 只有在已配置时才会返回分支(缺少 remote-sync-* 设置时会报错,且许可证必须包含远程同步);在 STATE.md 中记录一次,格式为 remote_sync: <branch>, <read-only|read-write> 或 remote_sync: none。如果为 none,绝不对语义层提议、询问或设置远程同步;Library 和 Definitions 归档独立运作。否则,在同一轮操作中,根据 mb collection list --json 记录同步范围:满足 "is_remote_synced": true 且 "location": "/" 的条目:"type": "library" 表示 Library;"type": null 且 "is_personal": false 表示已同步的根集合。只有一个根集合时:在 STATE.md 中记录 synced_root: <id> <name>。有多个时:只询问一次这项工作应归入哪个集合。没有时:按照 references/remote-sync.md 中的 "No synced root" 检查点处理。然后,在首次创建此作业的集合、卡片、仪表板或转换之前,以及执行任何同步步骤之前,阅读 references/remote-sync.md。

使用 synced_root 归档。 只有位于已同步集合下的内容才会进入 git;实例根目录下的内容会留在原处。为卡片、仪表板、文档、指标或模型创建的每个集合都必须放在 synced_root 下("parent_id": <synced_root>),绝不能放在根目录;指标和已发布的表要放在 Library 中;转换保留其 --namespace transforms 集合,并通过 remote-sync-transforms 设置同步。归档位置由此规则固定,绝不由 Decisions 条目或备忘录项目决定;用户只能决定集合名称。进行中的工作可以放在同步树之外的 Drafts 集合中,并按照 references/remote-sync.md 中的 "Filing" 进行移动。只有在表发布到 Library Data 后,度量和分段才会进入 git,而且 mb git-sync dirty 绝不会列出它们:对未发布表的度量或分段创建已同步指标时,会导出仓库无法解析的引用。因此,在创建指标之前,要么发布其表(playbooks/build-semantic-layer.md 中的 Library [CHECKPOINT]),要么在指标中内联聚合;如果是否发布尚未决定,就询问用户。每次导出之前,确认每个将导出的指标所用的度量和分段都位于 "is_published": true 的表上。ID 是指标 dataset_query 中每个 ["measure",{…},<id>] 和 ["segment",{…},<id>] 子句的最后一个元素(mb card get <metric-id> --json --fields dataset_query);mb measure get <id> --json --fields table_id 或 mb segment get <id> --json --fields table_id 可返回表,mb table get <table_id> --json --fields is_published 可返回标记。

路由:匹配到的第一个规则优先

明确要求制作应用(“为我制作一个 X 应用”“一个数据应用”“在我的应用中添加一个页面”)时,先使用 rde-data-apps 技能,再考虑以下路由;仪表板不属于应用。

  1. STATE.md 存在:从其中的 stage 继续。
  2. 请求中提到一个参考值、一个不一致之处,或两个不一致的数字:使用 playbooks/validate-and-reconcile.md;如果只是只读查询(“X 为什么是这样”“哪个是对的”“这个数字正确吗”,且未要求持续检查),则从其前端部分 references/diagnose-number-disagreements.md 开始,并在此处停止,除非用户希望修复问题或建立定期控制。
  3. 请求中提到代码、文档、电子表格或其他工具的项目是规则来源:使用 playbooks/extract-business-logic.md。
  4. 用户询问一个现有表或对象是什么:不使用 playbook。运行 mb table get <id> --include fields --json,查看转换的描述,并运行 mb search "<name>" --json 查找使用者;用通俗语言回答;提出将描述写入 Metabase。
  5. 用户要求更改、添加或质疑已交付的定义或数字:不使用 playbook;遵循 references/semantic-layer-design.md 中的“Own, file, change, retire”变更流程;如果涉及转换,还要使用 playbooks/build-clean-tables.md 的第 8 步。
  6. 用户要求测试转换,或指出转换对某个案例处理有误:仅针对该模型使用 playbooks/build-clean-tables.md 的第 4 和第 5 步;在修改 SQL 之前,先将该案例作为固定测试行加入。
  7. 用户要求制作仪表板:使用 playbooks/build-dashboards.md,除非数据库中没有转换也没有指标(mb transform list、mb card list --fields id,type);此时说明这一点,并从第 9 步开始构建数据管道。
  8. 用户要求定义、指标、细分、度量、模型,或希望 Metabot 或 AI 能够更好地回答问题:使用 playbooks/build-semantic-layer.md,并执行相同的测试。
  9. 用户要求整理干净的表,或提到的目标超出了数据当前所处的阶段(“为 X 设置分析”“加载这些数据并制作仪表板”):先构建数据管道的最小切片(见下文),从 playbooks/explore-raw-data.md 开始。
  10. 用户要求一个数字、一个列表或一个发现:使用 playbooks/answer-a-question.md。
  11. 其他情况:使用 playbooks/explore-raw-data.md。

先做最小切片

任何数据管道的第一轮都要端到端交付一个核心数字:用户最先提到的数字。针对该数字涉及的表,依次完成探索、构建、定义和制图;与用户已引用的任何参考值核对,并在首次会话中以“草稿”标记交付。交付后再扩展到下一个数字,不要询问用户选哪个:按用户给出的顺序,选取 STATE.md 中 Questions 的下一行(如果用户未提供顺序,则选推荐项),在交付内容的“接下来做什么”中注明,并允许用户针对特殊情况调整。根据问题反向确定范围:凡是没有从某个已命名问题通向某个数字的路径的表,都列出其行数并保持原始状态,不做分析、暂存或检查点记录。

领域参考

按表名测试加载:当任一表名匹配 invoice、subscription、plan、price、charge、membership、dues、pledge 或 recurring gift 时(任何类型的经常性收入;只有存在 invoice 时才适用摊销部分),加载 references/domains/subscription-revenue.md;当任一表名匹配 registration、attendee、session、webinar、response 或 survey 时,加载 references/domains/event-and-registration-data.md;当任一表名匹配 event、activity、usage、login、page view 或 workspace 时,加载 references/domains/product-usage-events.md。同一张表可能触发多项测试(webinar_events、session_activity):这不是按优先匹配处理;先阅读表的列(它承载的数据粒度、衡量的内容),再根据数据的实际领域做出判断。若一张表确实跨越两个领域(例如既是注册数据流,也用于生成使用情况汇总),则在 STATE.md 的 domain 中同时记录两个领域;构建时,对于规则作用于同一模型的部分,应结合两份文件的规则,并根据实际情况判断,而不能只依赖其中一份。说明触发了哪个或哪些领域,以及原因。任何类型的留存、群组分析和规范化实体:加载 references/entities-and-time.md。

不变量

  • 预创建门禁返回之前,不得在 out_schema 中创建任何内容;用户未回答的检查点不算已完成。
  • 先分析数据,再建模;没有查询结果支撑的决策必须标记为 [CHECKPOINT] 或 [DECIDED, reversible],不得当作假设。
  • 每个模型在构建前,都必须在转换说明中声明其每行代表什么以及对应的键;模型携带的每条规则都必须通过转换测试固定下来,测试未通过时不得物化模型;每个模型都必须通过质量门禁后,才能进行下一步;每条链路都必须完成标记和排期,才能称为完成。
  • 结构检查不等于正确性:在将任何核心数字标记为 Draft 以外的状态前,必须将其与独立数据进行核对。
  • 未完成的尾随周期必须标记为一行,而不能视为缺失;汇总和比率只读取完整周期。
  • 业务规则由用户决定;惯例由公司维护。
  • 每个数字都只有一个定义:卡片按 id 汇总指标和度量值,绝不重新推导。
  • 设置了 synced_root 后,任何已完成内容都不得留在其外部或 Library 之外。
  • 每个阶段结束时都必须完成包含五部分的交接,并提供浏览器链接;任务结束时必须提供交付文档。

评论

支持 Markdown