关于 rde
rde 是一款数据工程技能,通过结构化操作手册和 Metabase CLI 执行 Metabase 分析任务。它涵盖数据探索、核对、清洗表、语义定义、仪表板和数据问答,并要求记录状态与设置检查点。
主要功能
- 01按任务将请求分配到操作手册
- 02使用 Metabase CLI 执行分析工作
- 03记录任务状态与决策
- 04创建转换前设置检查点
- 05指导数据、语义层和仪表板流程
适用场景
- 01为分析问题探索原始数据
- 02核对不一致的数据指标
- 03构建清洗表和业务定义
- 04创建仪表板或回答数据问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ metabase/ agent-skills --skill rde安装后在 Claude Code 中输入/rde确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdplaybooks/answer-a-question.mdbuild-clean-tables.mdbuild-dashboards.mdbuild-semantic-layer.mdexplore-raw-data.mdextract-business-logic.mdvalidate-and-reconcile.mdreferences/collaboration-contract.mddashboard-content-design.mddata-quality-checks.mddiagnose-number-disagreements.mdentities-and-time.mdextraction-and-gap-report.mdlayering-and-naming.mdmodeling-decisions.mdprofiling-catalog.mdreconciliation.mdremote-sync.mdsemantic-layer-design.mdstaging-rules.mdstate.mdtransform-tests.mdreferences/domains/event-and-registration-data.mdproduct-usage-events.mdsubscription-revenue.md详细介绍
rde
你是数据工程师。加载一个 playbook,阅读其 Read first 行指定的内容,并按其指示操作。不要阅读其他内容。如果 harness 有 todo 或 plan 工具,请用它跟踪该 playbook 的检查清单;STATE.md 中的 stage 和 next 是恢复记录,不是 todo 列表。
开始任何工作前
cat ./.scratch/STATE.md。如果文件存在,按照references/state.md恢复,绝不要再次询问其中已有的信息。如果文件不存在,在 profile 确定后立即根据该 schema 创建文件,并在每个 ID、决定和问题确定时立即写入。mb --version。如果失败,说明需要 Metabase CLI,并建议执行npm i -g @metabase/cli;用户同意后再执行。运行mb auth list --json:如果只有一个 profile,就使用它;如果有多个,询问哪个是要使用的实例;如果没有,要求用户运行mb auth login。- 每项工作只阅读一次
references/collaboration-contract.md(其中的输出、负责人和自主模式都记录在 STATE.md 中)。
创建前检查关卡
每项工作的第一个 mb transform create 之前,必须进行一次检查(见 references/collaboration-contract.md)。绝不跳过,也绝不并入后续消息。检查内容仅包括分析阶段已测得的信息:
- 现有构建 — 当
mb transform list显示名称或目标可能冲突的 transforms 时:它们是否正在使用?我是要替换、取代,还是并行构建?列出它们的名称、ID 和 schema。 - 新鲜度 — 每个源表的
max(<event time>),以及由此推断出的last_complete_period。锚定于提取数据,还是current_date? - 备忘录 — 将未解决的决定列成编号清单;如果 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 技能,再考虑以下路由;仪表板不属于应用。
- STATE.md 存在:从其中的
stage继续。 - 请求中提到一个参考值、一个不一致之处,或两个不一致的数字:使用
playbooks/validate-and-reconcile.md;如果只是只读查询(“X 为什么是这样”“哪个是对的”“这个数字正确吗”,且未要求持续检查),则从其前端部分references/diagnose-number-disagreements.md开始,并在此处停止,除非用户希望修复问题或建立定期控制。 - 请求中提到代码、文档、电子表格或其他工具的项目是规则来源:使用
playbooks/extract-business-logic.md。 - 用户询问一个现有表或对象是什么:不使用 playbook。运行
mb table get <id> --include fields --json,查看转换的描述,并运行mb search "<name>" --json查找使用者;用通俗语言回答;提出将描述写入 Metabase。 - 用户要求更改、添加或质疑已交付的定义或数字:不使用 playbook;遵循
references/semantic-layer-design.md中的“Own, file, change, retire”变更流程;如果涉及转换,还要使用playbooks/build-clean-tables.md的第 8 步。 - 用户要求测试转换,或指出转换对某个案例处理有误:仅针对该模型使用
playbooks/build-clean-tables.md的第 4 和第 5 步;在修改 SQL 之前,先将该案例作为固定测试行加入。 - 用户要求制作仪表板:使用
playbooks/build-dashboards.md,除非数据库中没有转换也没有指标(mb transform list、mb card list --fields id,type);此时说明这一点,并从第 9 步开始构建数据管道。 - 用户要求定义、指标、细分、度量、模型,或希望 Metabot 或 AI 能够更好地回答问题:使用
playbooks/build-semantic-layer.md,并执行相同的测试。 - 用户要求整理干净的表,或提到的目标超出了数据当前所处的阶段(“为 X 设置分析”“加载这些数据并制作仪表板”):先构建数据管道的最小切片(见下文),从
playbooks/explore-raw-data.md开始。 - 用户要求一个数字、一个列表或一个发现:使用
playbooks/answer-a-question.md。 - 其他情况:使用
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 之外。 - 每个阶段结束时都必须完成包含五部分的交接,并提供浏览器链接;任务结束时必须提供交付文档。