从 53% 查询来自计费看 Cloudflare 的统一数据平台思路

2026-07-03 33 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

Cloudflare 披露了内部统一数据平台 Town Lake,以及面向分析场景的 AI Agent Skipper。最值得注意的数字不是“用了哪些新技术”,而是计费工作负载贡献了约 9.1 万次查询,并占到了整体查询的多数:当 billing 成为数据平台最大用户,说明统一分析平台已经不只是 BI 报表工具,而是在支撑真实的经营、运营和安全决策。

Town Lake 解决的不是“存数据”,而是“跨系统可信查询”

从摘要看,Town Lake 的关键词是统一、治理、跨系统分析。它把 operational、billing、security、business 等不同域的数据放到一个可查询、可治理的湖仓体系里。

这类平台通常要解决三个硬问题:

  • 数据分散:账单、用量、安全事件、客户信息可能来自不同服务和数据库。
  • 口径不一:同一个 customer、account、product、usage 在不同系统里可能有不同字段和生命周期。
  • 查询门槛高:业务团队想问“某类客户本月成本为什么上升”,但答案可能跨越计费、产品用量和安全日志。

Town Lake 的技术栈包括 Trino、Iceberg、R2 和 DataHub。可以理解为:

  • Trino 负责跨数据源 SQL 查询。
  • Iceberg 负责湖仓表格式、快照、Schema 演进等能力。
  • R2 作为对象存储承载数据文件。
  • DataHub 负责元数据、血缘、发现和治理。

这里的重点不是“把所有数据倒进一个桶”,而是让不同团队在统一入口里,用可审计、可治理的方式查到同一套事实。

为什么计费查询会成为主力负载

计费数据天然是公司内部最容易形成高频分析需求的数据之一。它连接了产品、客户、收入、成本、风控和支持团队。

比如一个计费平台可能经常被问到:

  • 某个产品线的用量增长是否真实转化为收入?
  • 哪些账号出现了异常费用波动?
  • 某次价格策略调整影响了哪些客户分层?
  • 客户支持收到的账单投诉是否集中在某个区域、产品或时间窗口?

如果这些问题每次都要工程师从多个系统手写 ETL,再导出 CSV,分析周期会非常慢。Cloudflare 披露 billing 形成多数使用量,恰好说明统一数据平台的价值往往先在“钱和用量”这类高敏感、高频率数据域里显现。

可以这样实践:用 Trino 查询 Iceberg 计费表

下面是一个可改造的最小示例,用 Trino 连接 Iceberg catalog,查询按客户聚合的计费数据。示例不是 Cloudflare 的内部配置,而是基于摘要中提到的技术栈,演示类似平台的落地方式。

你需要替换对象存储地址、访问密钥和 catalog 配置。若使用 S3 兼容存储,R2 也可通过类似 endpoint 的方式接入。

# docker-compose.yml
services:
  trino:
    image: trinodb/trino:latest
    ports:
      - "8080:8080"
    volumes:
      - ./catalog:/etc/trino/catalog
# catalog/iceberg.properties
connector.name=iceberg
iceberg.catalog.type=rest
iceberg.rest-catalog.uri=http://iceberg-rest:8181
fs.native-s3.enabled=true
s3.endpoint=https://<account-id>.r2.cloudflarestorage.com
s3.aws-access-key=<r2-access-key>
s3.aws-secret-key=<r2-secret-key>
s3.path-style-access=true

启动 Trino:

docker compose up -d

假设已经有一张 Iceberg 表 lake.billing.usage_events,可以用 Trino CLI 或 Web UI 执行:

SELECT
  account_id,
  date_trunc('month', usage_time) AS usage_month,
  product,
  sum(quantity) AS total_quantity,
  sum(amount_usd) AS total_amount_usd
FROM lake.billing.usage_events
WHERE usage_time >= date '2025-01-01'
GROUP BY 1, 2, 3
ORDER BY total_amount_usd DESC
LIMIT 20;

这类查询看似普通,但一旦 billing、security、support、product usage 都有统一的 account_id 和时间口径,就可以继续做跨域分析:

SELECT
  b.account_id,
  b.total_amount_usd,
  s.security_events,
  b.product
FROM (
  SELECT account_id, product, sum(amount_usd) AS total_amount_usd
  FROM lake.billing.usage_events
  WHERE usage_time >= current_date - interval '30' day
  GROUP BY 1, 2
) b
LEFT JOIN (
  SELECT account_id, count(*) AS security_events
  FROM lake.security.events
  WHERE event_time >= current_date - interval '30' day
  GROUP BY 1
) s
ON b.account_id = s.account_id
ORDER BY b.total_amount_usd DESC
LIMIT 50;

这就是统一湖仓平台真正有用的地方:不是单表查得更快,而是把原本散落在多个系统里的事实放到同一个分析平面上。

Skipper:自然语言入口不能绕过治理

摘要提到 Skipper 是一个 AI analytics agent,用自然语言统一访问运营、计费、安全和业务数据。这类 Agent 的价值很直接:让更多人能问数据问题,而不必先学会复杂 SQL 或了解每张表的位置。

但在企业数据平台里,自然语言访问不能等于“无限制查库”。尤其是 billing 和 security 数据,涉及金额、客户、事件、权限边界。一个可用的分析 Agent 至少要处理这些边界:

  • 用户是否有权限访问相关数据域。
  • 生成的 SQL 是否只访问允许的 catalog、schema 和字段。
  • 查询结果是否包含敏感字段,需要脱敏或聚合。
  • Agent 的回答是否附带可审计的 SQL、表名和时间范围。

可以这样设计一个最小工作流:

用户问题
  -> 权限检查:用户能访问哪些 DataHub 数据资产
  -> 语义解析:把问题映射到候选表和指标
  -> SQL 生成:限制 catalog/schema/table 白名单
  -> 查询执行:通过 Trino 执行,只读账号
  -> 结果解释:返回摘要、SQL、数据时间范围和置信边界

对业务用户来说,Skipper 这类工具像是“会写 SQL 的分析同事”;对平台团队来说,它更像是一个必须接入权限、元数据和审计系统的受控查询层。

落地建议:先选高价值数据域,再扩大统一入口

如果要借鉴 Cloudflare 的思路,不建议一开始就追求“全公司所有数据统一”。更稳妥的路径是从一个高价值、高频率、跨系统依赖明显的数据域开始,例如计费、用量、客户健康度或安全运营。

一份可执行的检查清单:

  • 先定义核心实体:account、customer、product、invoice、usage event。
  • 为关键表建立 owner、血缘、刷新频率和数据质量规则。
  • 用 Iceberg 这类表格式承接增量写入、快照和 Schema 演进。
  • 用 Trino 提供统一 SQL 查询入口,而不是让每个团队各建一套查询层。
  • 用 DataHub 这类元数据系统暴露表说明、字段含义和权限边界。
  • 引入 AI Agent 前,先把权限、审计和 SQL 白名单做好。

Town Lake 的启发在于:统一数据平台的成功指标不只是存储规模,而是谁在高频使用它、是否能回答跨系统问题、能否在治理边界内扩大数据访问。计费查询占多数这个细节,反而给了一个很务实的判断标准:当最敏感、最复杂、最贴近收入的数据域愿意迁入统一平台,平台才真正进入了核心业务链路。


相关推荐