如何使用间隔交叉加入 Big Query?
Posted
技术标签:
【中文标题】如何使用间隔交叉加入 Big Query?【英文标题】:How to cross join in Big Query using intervals? 【发布时间】:2013-12-06 20:50:57 【问题描述】:如何在 Google Big Query 中使用区间连接两个表?
我有两张桌子:
Table CarsGPS:
ID | Car | Latitude | Longitude
1 | 1 | -22.123 | -43.123
2 | 1 | -22.234 | -43.234
3 | 2 | -22.567 | -43.567
4 | 2 | -22.678 | -43.678
...
Table Areas:
ID | LatitudeMin | LatitudeMax | LongitudeMin | LongitudeMax
1 | -22.124 | -22.120 | -43.124 | -43.120
2 | -22.128 | -22.124 | -43.128 | -43.124
...
我想交叉加入这些表,以使用 Google Big Query 检查每辆车经过的区域。
在一个普通的 SQL 服务器中,我会做:
SELECT A.ID, C.Car
FROM Cars C, Areas A
WHERE C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND
C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax
但 Google Big Query 只允许我使用连接表之间的完全匹配进行连接(甚至 JOIN EACH)。而“FROM X, Y”表示 UNION,而不是 JOINS。
所以,这不是一个选择:
SELECT A.ID, C.Car
FROM Cars C
JOIN EACH
Areas A
ON C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND
C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax
那么,我怎样才能运行类似的东西来识别每个区域内经过的汽车?
非常感谢,
【问题讨论】:
【参考方案1】:BigQuery 现在支持 CROSS JOIN。您的查询如下所示:
SELECT A.ID, C.Car
FROM Cars C
CROSS JOIN Areas A
WHERE C.Latitude BETWEEN A.LatitudeMin AND A.LatitudeMax AND
C.Longitude BETWEEN A.LongitudeMin AND A.LongitudeMax
【讨论】:
乔丹,预计何时发布此版本有什么消息吗? 语法有什么独特之处吗?我仍然收到“错误:ON 子句必须是 AND of = 每个表中一个字段名的比较,所有字段名都以表名为前缀” 使用 CROSS JOIN 时不要使用 ON -- 只需使用 WHERE 限制。 @JordanTigani BigQuery 现在支持 CROSS JOIN 真是太好了!只是想提一下,它还没有在语法文档中:developers.google.com/bigquery/query-reference#joins 谢谢,我们将很快更新文档以添加一些新的查询语法特性和功能,这些特性和功能目前尚未记录。以上是关于如何使用间隔交叉加入 Big Query?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中有效地使用 big.matrix 进行交叉验证?