BigQuery执行比较查询时为何出现‘unrecognized name’错误?
问题分析与修复方案
错误原因
核心问题是你引用的校验列仅存在于首次查询的临时结果集中,并未被持久化到原表,也未在后续比较查询的上下文里定义:
- 首次查询通过计算生成了三个临时校验列,但这些列只是查询输出的临时字段,并未真正添加到目标数据表中
- 后续执行比较查询时,直接引用这些未在当前查询中定义的临时列名,数据库无法识别,因此抛出
unrecognized name错误
修复方案
方案1:持久化校验列到原表
若需长期使用这些校验列,先通过ALTER TABLE将其添加为表的正式计算列:
ALTER TABLE 你的表名 ADD COLUMN 校验列1 数据类型 AS (你的校验表达式) STORED; ADD COLUMN 校验列2 数据类型 AS (你的校验表达式) STORED; ADD COLUMN 校验列3 数据类型 AS (你的校验表达式) STORED;
完成后即可在后续查询中直接引用这些正式列。
方案2:内嵌校验逻辑到比较查询
若无需持久化,可将校验逻辑直接写入比较查询,或用CTE/子查询封装临时校验列:
直接内嵌逻辑
SELECT *, (你的校验表达式) AS 校验列1, (你的校验表达式) AS 校验列2, (你的校验表达式) AS 校验列3 FROM 你的表名 WHERE (你的校验表达式) <> 待对比列;
使用CTE封装临时列
WITH 临时校验表 AS ( SELECT *, (你的校验表达式) AS 校验列1, (你的校验表达式) AS 校验列2, (你的校验表达式) AS 校验列3 FROM 你的表名 ) SELECT * FROM 临时校验表 WHERE 校验列1 <> 待对比列;
内容的提问来源于stack exchange,提问作者Chukwu
相关产品推荐
相关产品推荐

