观察(#5717 落地过程中量出的残留,非 #5717 范围)
packages/services/service-analytics/src/analytics-service.ts 的 isMissingSourceError 自己的文档写着:
Deliberately scoped to MISSING SOURCE (table/object/relation) — not column/syntax errors, which stay hard failures so real query bugs still surface.
但 Postgres 的缺列措辞里含有一段完整的缺表措辞:
column "label" of relation "acct" does not exist
relation "acct" does not exist 是它的子串,所以:
命中的后果与 #5717 描述的一致:missingSourceRelation 会把 acct 当成「缺失的关系」,于是要么降级成空网格(若 acct 就是 dataset 自己的 object),要么报成跨库拓扑错误(若是 join 表)——两者都不是真相,真相是一个列名写错了,正是文档说要让它响亮失败的那一类。
为什么今天无害(observation 类)
analytics 是只读面。Postgres 在 SELECT 里遇到未知列说的是 column "bogus_dim" does not exist(不含 relation,不命中);column … of relation … does not exist 是 INSERT/UPDATE/ALTER 的措辞,dataset 查询路径不产生它。所以这是一条「判据比文档宽」的静默残留,不是今天有人踩得到的缺陷。
量化(#5717 的 13 条仓内真实措辞语料):收紧前后该串均为 HIT,是 13 条里唯一一条「判据与自身文档不一致」的。
可能的方向(不预判,留给 triage)
参考
观察(#5717 落地过程中量出的残留,非 #5717 范围)
packages/services/service-analytics/src/analytics-service.ts的isMissingSourceError自己的文档写着:但 Postgres 的缺列措辞里含有一段完整的缺表措辞:
relation "acct" does not exist是它的子串,所以:queryDataset里还有第二个 message 嗅探器isMissingSourceError,命中即静默返回空结果 ——dataset-compiler的一条拒收措辞已经命中它,只因抛点在 try 之外才没出事 #5717 之前的宽判据(includes('relation') && includes('does not exist'))命中;queryDataset里还有第二个 message 嗅探器isMissingSourceError,命中即静默返回空结果 ——dataset-compiler的一条拒收措辞已经命中它,只因抛点在 try 之外才没出事 #5717 收紧后的锚定判据(/relation\s+["']?…["']?\s+does not exist/i)同样命中 —— 收紧的是「任意同时含两词的句子」,不是这一支。命中的后果与 #5717 描述的一致:
missingSourceRelation会把acct当成「缺失的关系」,于是要么降级成空网格(若acct就是 dataset 自己的 object),要么报成跨库拓扑错误(若是 join 表)——两者都不是真相,真相是一个列名写错了,正是文档说要让它响亮失败的那一类。为什么今天无害(observation 类)
analytics 是只读面。Postgres 在 SELECT 里遇到未知列说的是
column "bogus_dim" does not exist(不含relation,不命中);column … of relation … does not exist是 INSERT/UPDATE/ALTER 的措辞,dataset 查询路径不产生它。所以这是一条「判据比文档宽」的静默残留,不是今天有人踩得到的缺陷。量化(#5717 的 13 条仓内真实措辞语料):收紧前后该串均为 HIT,是 13 条里唯一一条「判据与自身文档不一致」的。
可能的方向(不预判,留给 triage)
packages/rest/src/rest-server.ts:825先用/column\s+["'\]([a-z0-9_]+)["'`]\s+of relation\s+\S+\s+does not exist/i` 把缺列摘出来再判缺表(analytics 的 filter 拒收到不了调用方:service 侧多数拒收没有 ADR-0112 信封,REST 面又用 message 正则嗅探,一律答 500 #5352 面),照抄这一手即可。queryDataset里还有第二个 message 嗅探器isMissingSourceError,命中即静默返回空结果 ——dataset-compiler的一条拒收措辞已经命中它,只因抛点在 try 之外才没出事 #5717 方向 A(驱动侧结构化 code)一并解决 —— 该方向分诊已裁定需要时独立立单,涉 drivers 面。参考
packages/services/service-analytics/src/analytics-service.ts(isMissingSourceError/missingSourceRelation)queryDataset里还有第二个 message 嗅探器isMissingSourceError,命中即静默返回空结果 ——dataset-compiler的一条拒收措辞已经命中它,只因抛点在 try 之外才没出事 #5717(第二个 message 嗅探器 —— 本条是它收紧后剩下的残留)、PR 见 [finding]queryDataset里还有第二个 message 嗅探器isMissingSourceError,命中即静默返回空结果 ——dataset-compiler的一条拒收措辞已经命中它,只因抛点在 try 之外才没出事 #5717 的实现分支packages/rest/src/rest-server.ts:825(缺列先摘的既有先例)、packages/rest/src/rest.test.ts:2417(该措辞的既有用例)