BigQuery Unnest操作结果不一致:无卫星月球未显示问题求助
问题原因及修复方案
你当前使用的逗号分隔隐式连接等价于INNER JOIN逻辑——当某颗月球没有卫星时,moons.satellite对应空集合,INNER JOIN会直接过滤掉该行,因此看不到该月球的记录。
过去能显示月球名称+NULL卫星名的情况,大概率是以下两种原因之一:
- 你之前实际使用的是LEFT JOIN UNNEST的显式写法,左连接会保留主表的所有行,哪怕关联的子数组为空,对应列会自动填充NULL;
- BigQuery在版本迭代中调整了隐式UNNEST的语义:旧版本对空数组的UNNEST会生成一行带NULL的记录,现在严格遵循标准SQL逻辑,空数组UNNEST后无结果,自然不会保留对应行。
要恢复你需要的效果,将查询改为显式左连接UNNEST即可:
SELECT planet, moons.name, satellite.name FROM your_table LEFT JOIN UNNEST(your_table.moons) AS moons LEFT JOIN UNNEST(moons.satellite) AS satellite
这样即使月球没有卫星,对应的行也会被保留,satellite.name列会显示为NULL。
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

