dbt Charts 开源发布:用于 AI 驱动分析的声明式 YAML 仪表板
TL;DR
dbt Charts 0.x 引入了一种声明式的 YAML 语言,用于构建全栈仪表板,使 AI 代理能够以代码形式创建、验证和版本控制图表,同时保留传统 BI 工具的治理和可审计性。
为什么需要一种新的仪表板语言?
答案: 现有的 AI 生成的仪表板将输出分散在 HTML、CSS、JavaScript 和框架文件中,导致审计过程缓慢且消耗大量 token;而 BI 工具则将 AI 限制在狭窄的 UI 表面上。dbt Charts 将图表定义移入单一、可审计的 YAML 文件中,使代理能够读取、编写和验证。
- 代理在 SQL、Git 和 YAML 方面表现出色,但在以 UI 为中心的工具上表现不佳。
- 单一的 YAML 仪表板将变量、查询、图表规格和布局封装为一个自包含的资产。
- 验证可在本地运行(
dct validate),在任何 UI 渲染之前就标记出可视化问题。
核心设计:解耦 BI 堆栈
答案: 现代数据栈已经将数据摄取、转换和计算与 BI 层分离;dbt Charts 通过将 可视化 层提取为代码,完成了这一解耦过程。
- 历史背景 – 传统 BI 工具(如 MicroStrategy、Cognos)将数据摄取 → 转换 → 可视化捆绑在一起。自约 2015 年以来,该堆栈已拆分,使 BI 工具仅保留可视化、UI、语义和托管功能。
- 向对话式交互的转变 – 随着对话式代理成为主要前端,以 UI 为中心的方法成为瓶颈。将图表移至代码,与代理的优势相契合。
YAML 规范
答案: 一个 dbt Charts 仪表板是一个单一的 YAML 文件,用于声明变量、SQL 查询、图表类型和布局行。
variables:
status:
column: main.documents.status
queries:
doc_growth: |
SELECT DATE_TRUNC('month', created_at) AS month,
SUM(COUNT(*)) OVER (ORDER BY month) AS num_docs
FROM main.documents
WHERE {{ filter('status', status) }}
GROUP BY 1
charts:
growth:
title: 所有时间创建的文档
type: area
query: doc_growth
x: month
y: num_docs
rows:
- growth
- SQL 用于数据 –
queries块包含原始 SQL,保留了 dbt 的表达能力。 - Markdown 与 Jinja – 可通过 Markdown 添加说明性文字;Jinja 支持宏和变量插值,与 dbt 的模板机制一致。
- 可扩展性 – 提供超过 1,100 种配置选项,涵盖 16 种图表类型和可组合图表,但大多数默认值通过主题和仪表板扩展继承。
渲染与 CI 集成
答案: dct CLI 可将任意仪表板渲染为 SVG、HTML、PNG、PDF,甚至终端输出,并可托管静态站点以供共享。
# 渲染为 SVG(或 html、png、pdf、terminal)
dct render charts/documents.yml --format svg
# 服务渲染后的图表文件夹
dct serve
- 仪表板与 dbt 模型并列存放(
charts/位于models/旁边),因此单个 PR 可同时修改转换逻辑和可视化内容。 dbt parse && dct validate charts/可在部署前捕获错误的ref()调用或可视化警告。- 未来将支持 dbt 语义层,使图表可引用指标而非原始 SQL。
治理、审计与 AI 反馈循环
答案: dbt Charts 提供严格的 YAML 语法和 SQL 语义验证,以及在图表发布前就暴露的可视化警告。
$ dct render charts/revenue.yml
WARN-BAR-BAND-WIDTH-TOO-NARROW
182 个条带,2 个系列,总宽度 640px
修复建议:合并为更粗的粒度。
WARN-TABLE-COLUMNS-OVERFLOW
表格需要 980px,但可用空间仅为 640px。
修复建议:删除列或扩大槽位宽度。
- 确定性输出(相同 YAML → 相同图表)支持可复现的 CI 流水线。
- 由于规范受版本控制,任何变更均可追溯至特定提交,满足审计要求。
社区与竞争格局
答案: 该项目引发了关于替代方案和定位的讨论。
- Malloy – 一种替代 DSL(Malloyyo/Publisher)也针对 AI 生成的图表,但保持独立生态系统。评论者 @mrtimo 指出 Malloy 提供免费托管,而 dbt Charts 提供可选的 SaaS 层。
- Observable Framework – @bbkane 询问 dbt Charts 的区别;关键差异在于 YAML 优先、与 dbt 集成的规范,而非 Observable 的 Markdown+JS 方式。
- Vega‑Lite – @engrav3er40 担心重叠;Vega‑Lite 是一种视觉语法,而 dbt Charts 将该语法与数据模型治理和 CI 集成结合。
- Evidence、Superset 及其他无头 BI – 多位评论者(如 @theodorewiles、@hackandthink)指出类似基于 YAML 的仪表板定义,但 dbt Charts 独特之处在于嵌入 dbt 转换层,并提供一流的聊天集成。
- 设计重点 – 项目邀请了数据图形设计师 RJ Andrews 创建统一的视觉语言,回应了批评:许多代码驱动的仪表板存在“视觉噪音”问题。
托管平台(dbtCharts.com)
答案: 尽管语言是开源的,dbtCharts.com 提供了公开测试版的 SaaS 层,用于托管、访问控制和对话式分析。
- 连接数据仓库,添加聊天界面(类似 Claude/ChatGPT),权限为只读,并提供可视化编辑器用于微调。
- 所有编辑——无论来自聊天、UI 还是代码——都会提交回 Git 中的同一 YAML 文件,保持单一事实来源。
- 该平台处理仍难以解耦的 BI 职责:托管、认证和协作共享。
反应与开放问题
答案: 早期社区反馈既充满热情,也存在质疑。
- 积极反响 – 用户赞赏其确定性、可审计的资产(@mollifier14、@marcy_74),并看到在 Slack/Teams 中每日 KPI 更新的实际应用场景。
- 批评意见 – 有人认为创新是渐进式的(@dgudkov),质疑选择 YAML 作为“语言”的决定(@carterschonwald、@pgt);也有人指出可视化交互和语义层仍是开放问题(@RobGoretsky、@chupchap)。
- 未来工作 – 计划支持 dbt 语义层、更丰富的交互原语以及更广泛的 UI 集成,以解决这些问题。
快速入门
答案: 要在本地尝试 dbt Charts,请安装 CLI 并渲染一个示例仪表板。
# 通过 uv(或 pip)安装
uv tool install dbt-charts
# 将仪表板渲染为 SVG
dct render charts/documents.yml --format svg
- 仓库:https://github.com/dbt-labs/dbt-charts (Apache 2.0)
- 文档:https://docs.dbtcharts.com/
- 社区 Slack:dbt 社区 Slack 中的 #dbt-charts
总结
答案: dbt Charts 在自由的代码生成与受控的 BI UI 之间填补了空白,提供了一种与 dbt 紧密集成、支持 AI 驱动创作、并通过 CI 就绪验证强制治理的版本控制 YAML 仪表板语言。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- 项目