预览只说明表有数据
抽样必须写方法和比例
聚合默认走全量
LIMIT 不是随机样本
答案标明行数与水位
结论:样例可以认结构,不能当总体
打开一张订单表,前 20 行里客单价很高,不能据此说全公司平均客单价就是这个数。预览的作用是确认字段、粒度和有没有数据;平均、总和、占比和“最差的十家店”必须在约定总体上聚合。若工具只把样例送进模型,模型仍可能用很确定的语气报出一个平均数,而这个数只代表那几行。
企业问数应默认走全量聚合,或走已经声明偏差的预聚合表。只有用户明确要“看几行例子”时,才返回样例,并且标题写成样例,不写成结论。Kimball 对粒度的要求在这里同样适用:先声明一行是什么,再决定能不能把这些行平均。
预览、LIMIT 和随机抽样不是一回事
表预览通常是存储顺序或主键顺序上的前若干行,新店、测试单或某一天的分区会挤在前面。PostgreSQL 文档说明,没有唯一 ORDER BY 的 LIMIT 得到的是不可预测子集,优化器还可能因 LIMIT 改变计划。把 LIMIT 100 的平均值当成总体平均,偏差既不稳定,也不能用“样本量大”来辩护。
随机抽样是第三条路。若使用 TABLESAMPLE 一类机制,答案必须写明抽样方法、比例或行数,以及这是估计而不是全量。比例未知的“我看了一些行”,不能叫抽样。对金额总和,抽样几乎总是错的:样本之和不是总体之和。总和、计数和需要守恒的指标,不应从样本外推,除非同时给出区间并得到业务负责人同意。
画像统计也不能冒充本次查询
有的系统为了加速,预先统计字段的常见值、空值率和近似基数。这些画像能帮助理解“状态字段里有没有 CLOSED”,不能代替“上周 CLOSED 订单的销售额”。画像的水位、过滤范围和本次问题往往不一致。模型若把常见值列表当成本次过滤结果,就会漏掉长尾状态,或把历史高频值说成这周的结构。
正确用法是:画像只用于澄清和选择字段;数字来自针对本次过滤的聚合查询。两次查询的行数要一起返回。NIST 的人工智能风险管理框架把测量当作治理的一部分。这里可测的失败是:答案中的合计无法由审计到的查询复现,或复现查询明显带有 LIMIT、样例开关。
两条路径与适用条件
路径一是全量或授权全集上的聚合,适合经营数字、对账和排名。成本更高,但答案可以写“基于可见的 128440 行”。路径二是带标签的样例或抽样,适合查看数据长什么样、或在探索阶段估计分布。它要求界面不能把样例图放进经营日报,导出文件也要带抽样标记。
两条路径不能在一句话里拼接。不能用全量的总销售额,配上样例里算出来的平均折扣。若预聚合表被选用,要说明它的粒度、刷新时间和与明细可能的差异,而不是把它伪装成刚刚扫过的全表。
反例与验收
反例:只读前 50 行就说平均销售额;用 LIMIT 100 找异常门店,门店顺序随执行计划变化;把字段画像里的高频渠道写成“本月主要渠道”;样本金额直接外推成全月预测。验收时同一问题应能看到执行的聚合范围、是否含 LIMIT 或 TABLESAMPLE、行数和水位。关掉样例权限后,经营问题仍应返回全量聚合或明确拒绝,而不是退回预览。
追问“把刚才那些行去掉再平均”必须作用在同一总体的过滤上,而不是在模型上下文里的 20 行上做心算。AskTable.ai 可作为问数入口候选。本文不证明其当前版本已禁止用预览或画像代替聚合;要用一笔已知全量总和的表核验。
