BigQuery多表关联报错:提示找不到c表已存在的SA2_NAME_2016列
报错根因
两个问题直接触发报错,附带一个隐性拼写问题:
- 别名
c的子查询仅返回了geometry字段,未包含关联条件需要使用的SA2_NAME_2016。BigQuery中子查询对外层可见的字段只有子查询SELECT子句显式声明的字段,即使该字段在子查询的源表中存在,只要没在子查询里查出来,外层关联时就会判定字段不存在,这是本次报错的核心原因。 - 外层SELECT语句中引用的
c.geomtry存在拼写错误,正确字段名为geometry,漏写了中间的字母e,就算解决了关联字段的问题,这行也会触发字段不存在报错。 - (避坑提示)当前SQL里的表路径包含横杠特殊字符,BigQuery标准SQL下需要用反引号包裹全表路径,避免解析器把横杠识别为减号触发其他解析错误。
修复后的SQL
只需要调整c表的子查询字段列表、修正几何字段的拼写、给带特殊字符的表名加反引号即可,代码如下:
select a.Avg__O_Sample_A_5G, a.Avg__O_Sample_A_All_5G, a.Avg__O_Sample_iOS_5G, a.Avg__O_Sample_iOS_All_5G, b.*, c.geometry -- 修正原拼写错误:原写法geomtry漏写字母e from `o-a-c-prd.R_A_K_SCORE_BREAKDOWN.Churn_May` as a left join ( select * from `o-a-c-prd.R_A_K_SCORE_BREAKDOWN.A_K_MAY` where Month = '2022-05' ) as b on a.SA2 = b.SA2_NAME_2016 join ( -- 补充关联所需的SA2_NAME_2016字段 select geometry, SA2_NAME_2016 from `o-a-c-prd.R_P_Polygons.SA2_GEO_PUB_T` ) as c on a.SA2 = c.SA2_NAME_2016
补充说明
如果SA2_GEO_PUB_T表数据量较大,子查询不要写select *,只查实际需要用到的geometry和SA2_NAME_2016即可,能有效减少扫描数据量,降低查询费用、提升执行速度。
内容的提问来源于stack exchange,提问作者Taz
相关产品推荐
相关产品推荐

