01产品
定义一次,随处可查。
每个Metric只有一个YAML定义。无论从哪里查询,得到的都是同一条正确的SQL:联接自动找到,合计保持正确。
entities:
- name: Order
table: public.orders
primary_key: id
dimensions:
- name: region
type: string
measures:
- name: revenue
expr: amount
agg: sum
- name: order_count
expr: id
agg: count
metrics:
- name: avg_order_value
expr: revenue / order_count
format: currency{ "metrics": ["avg_order_value"],
"dimensions": ["region"] }SELECT o.region,
SUM(o.amount) / COUNT(o.id)
AS avg_order_value
FROM public.orders o
GROUP BY o.region;| region | avg_order_value |
|---|---|
| EMEA | 118.40 |
| NA | 131.52 |
| APAC | 104.77 |
工作方式
从数据仓库到答案,只需四步
无论自托管还是托管,都是同样的四步。
- 01
运行Query Runner
以只读角色安装在数据仓库旁边。密码与审计日志都由它保管。
$ query-runner -config runner.yaml ✓ listening :8787 ✓ warehouse reachable (read-only role)
- 03
发布版本
发布会把模型与访问规则一起冻结。每次变更都作为下一个版本发布。
✓ published v7 model + access rules, frozen together # example
- 04
分发访问权限
应用获得密钥,智能体通过OAuth登录。每个调用方只能看到您授权的Metric。
app-finance key governed 4 metrics agent-sales OAuth governed 2 metrics
编译器
联接(JOIN)不必自己写
只需描述一次表之间的关系。datahashi选择联接路径,并在联接前先求和,因此一对多联接不会让合计虚高。
Order.order_totalmeasure
声明一次Order → Refund一对多联接
扇出安全Refund.reasondimension
按退款原因汇总的order_total,全部原因 · 示例数据1,284,930✓ 无重复计算
联接路径由模型解析。在联接可能重复行之前,总计已先汇总。
规模扩大之后
到一百个Metric时依然成立的事
访问模式
对智能体收窄,对分析师放宽
governed密钥只能看到命名的Metric。explore密钥额外开放原始字段,便于动手分析。模式按密钥固定。
命名Metric · 精选View · 智能体默认模式
原始Measure × dimension · 深入即席分析
- ✓请求Metric · avg_order_value, revenue
- ✓查询精选view · finance_summary
- ✗请求原始measure · 403 forbidden
- ✗读取原始字段 · 此密钥不可见
可移植性
沿用现有的数据仓库
请求从不指明数据仓库,因此日后迁移时,调用方无需任何改动。
- Snowflake
- BigQuery
- Postgres
- MySQL
Rollup会预先计算最常见的问题,让它们无需访问数据仓库。
归属
每个Metric都有负责人
定义中可以写明负责的团队。变更以新版本发布,调用方可以固定在自己信任的版本上。
# model.yaml
- name: Order
owner: "Finance Analytics"
# a caller pins the version it trusts
{ "metrics": ["avg_order_value"],
"version": "7" }