You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中未指定类型的NULL为何被识别为INT64?查询报错解析

BigQuery中NULL类型推断导致的运算符不匹配问题

问题重现

可正常执行的查询

select 
  col1=col2 as col3 
from (
  select 
    null as col1,
    cast(null as string) as col2  
  union all
    select 
    "abc" as col1,
    "abc" as col2  
)

执行结果:

Rowcol3
1null
2true

报错的查询

select 
  col1=col2 as col3 
from (
  select 
    null as col1,
    cast(null as string) as col2  
)

报错信息:
No matching signature for operator = for argument types: INT64, STRING. Supported signature: ANY = ANY at [2:3]

原因解释

BigQuery对未指定类型的NULL有默认类型推断规则:当没有上下文能明确NULL的类型时,会默认将其推断为INT64类型。

  • 在带UNION ALL的查询中,子查询的第二个分支明确将col1设为STRING类型("abc"),BigQuery在执行UNION ALL时会做类型兼容处理,自动把第一个分支中默认是INT64的col1转换为STRING类型,最终子查询的col1和col2都是STRING类型,因此col1=col2的比较可以正常执行。
  • 在没有UNION ALL的查询中,col1没有额外的类型参考上下文,BigQuery就会按默认规则把它推断为INT64类型;而col2被显式转换为STRING类型,两种类型无法直接用=运算符比较,因此触发了签名不匹配的报错。

如果要修复这个报错,只需要显式指定col1的类型,比如改为cast(null as string) as col1,让它和col2类型一致即可。

内容的提问来源于stack exchange,提问作者seeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:05