BigQuery 原生语义聚合函数 AI.AGG 深度解析

BigQuery 发布了一个预览期的新函数 AI.AGG,把”对海量非结构化数据做语义聚合”直接做进了 GoogleSQL。过去十多年,BigQuery 擅长的是结构化数据的确定性聚合:算财务总和、数活跃用户、算历史均值,PB 级数据也能秒级返回。但面对应用日志、客服记录、产品图片、诊断报告这类非结构化数据,传统 SQL 引擎一直没有原生能力去做语义层面的聚合与提炼。

卡点在于 LLM 上下文窗口。即使强如 Gemini,也没法把几百万行文本塞进一个 prompt,只会触发严重截断或硬性执行失败。过去要解决这个问题,数据工程团队得自建外部 map-reduce 管道、管理限流退避、递归拼接分块摘要,复杂度很高。

AI.AGG 把语义聚合建模成分布式 map-reduce 问题,用一条 SQL 就能对几百万行数据执行自然语言指令。引擎在数据库内部自动编排四步:行级校验,单行超过 10 MiB 直接丢弃或报错;按所选 Gemini 端点的 token 限额做动态分批;对每个批次并行执行 prompt,经 Vertex AI 生成中间语义摘要;最后把中间输出再分批,以完全相同指令递归合成,直到每个 SQL GROUP BY 子句产出一个最终聚合字符串。

一个关键区别:AI.AGG 要求深度推理来跨批次综合概念,所以每个阶段都依赖全权重 LLM,而 AI.CLASSIFY 这类行级函数可以走蒸馏 CPU 代理模型。多模态方面,配合 BigQuery Object Tables 和 OBJ.GET_ACCESS_URL,可以不经迁移或转码,直接对 Cloud Storage 里成千上万张图片做视觉洞察聚合。

几个工程要点。NULL 排除规则:用 STRUCT 传多列时,只要一个字段为 NULL,整行就被静默丢弃,需要显式用 IFNULL(description, ‘No data provided’) 包默认值。Prompt 工程要按数据工程的纪律来:把 prompt 当 API 契约,明确要求”只返回合法 JSON 数组、不要 markdown 代码块”;用字符串拼接加显式标签(如 ‘- Description: ‘)锚定模型,防止字段混淆;要求缺失信息返回严格 null 而不是瞎猜;在 prompt 里放一个结构示例做 few-shot 锚定。

官方给出两个典型用例。一是高并发系统日志诊断:按系统组件分组几百万条日志,生成可读的诊断摘要。提示技巧是让模型先描述组件的”正常操作”再找异常,抑制模型在健康日志上幻觉出错误。二是构建”agentic 数据云”:用 AI.AGG 读取大量遗留工单,合成分类清单并输出为严格 JSON 数组,再用 JSON_VALUE_ARRAY 拆开,直接喂给 AI.CLASSIFY 做行级分类,在 SQL 内编排出一条端到端的自动化数据标注管道。

成本与治理:递归分批架构决定了发给 Gemini 的总 token 数一定大于源数据 token 数,必须用严格 WHERE 和 LIMIT 预过滤。跨引用大型静态数据时可用 Gemini Context Caching 降输入成本,用 AI.COUNT_TOKENS 预估成本。AI.AGG 运行在 BigQuery 治理框架内,支持 VPC-SC 防数据外泄;批处理中遇瞬时错误会跳过对应行,而不是让整个查询崩溃。

预览期护栏:每个 SQL group 的最终输出上限 10,000 tokens;单行 payload 不超过 10 MiB;多模态每行图像少于 10 张,否则被静默跳过;建议单查询最多处理 2,000 万行、输出最多 1,000 个不同 SQL group。

Semantic data aggregation with BigQuery and AI.AGG

查看原文