BigQuery中项目.数据库.列名别名设置及表连接语法问题
BigQuery 关联表时的语法问题解决
问题描述
我第一次发帖,问题可能比较基础。在做BigQuery小型作品集项目时,尝试通过reviews.listing_id = listings.id对两个表执行INNER JOIN操作,却一直遇到字符串错误和意外输入错误。不清楚是必须使用完整表路径(比如mark-data-analytics.AirBnB_data.listings.id = mark-data-analytics.AirBnB_data.reviews.listing_id),还是可以给表设置别名(如mark-data-analytics.AirBnB_data.listings AS listings)后,用listings.id = reviews.listing_id来关联。
最初尝试的错误代码
SELECT host_id, host_url, host_name, COUNT(*) AS num_dirty_reviews FROM reviews INNER JOIN `mark-data-analytics.AirBnB_data.listings` ON `mark-data-analytics.AirBnB_data.reviews.listing_id` = `mark-data-analytics.AirBnB_data.listings.id` WHERE comments LIKE "%dirty%" GROUP BY host_id, host_url, host_name ORDER BY num_dirty_reviews DESC;
错误原因分析
FROM子句仅写了reviews,未指定完整的项目-数据集-表路径,BigQuery无法识别该表的位置ON子句中使用了完整路径,但FROM里的表未正确声明,导致语法冲突
可运行的优化代码
感谢Thom A的帮助,以下是可正常运行且更规范的写法:
SELECT listings.host_id, listings.host_url, listings.host_name, COUNT(*) AS num_dirty_reviews FROM `mark-data-analytics.AirBnB_data.reviews` AS reviews INNER JOIN `mark-data-analytics.AirBnB_data.listings` AS listings ON reviews.listing_id = listings.id WHERE reviews.comments LIKE "%dirty%" GROUP BY listings.host_id, listings.host_url, listings.host_name ORDER BY num_dirty_reviews DESC;
关键说明
- 可以给表设置别名,大幅简化代码,关联时直接用
别名.字段即可,无需重复写完整路径 - 所有表都必须在
FROM/JOIN中明确指定完整路径,并用反引号包裹(因为路径包含连字符,BigQuery要求特殊字符用反引号转义) - 当多个表存在同名字段时,必须用别名前缀指定字段来源,避免歧义报错
- 优化后的代码去掉了冗余的表声明,采用标准INNER JOIN语法,同时给
comments字段加上表别名前缀,逻辑更严谨
内容的提问来源于stack exchange,提问作者MarkM
相关产品推荐
相关产品推荐

