我有两张桌子。
表 1 是单列整数。
表 2 有三列:start_integer、end_integer、data
简单的查询是将整数列与数据连接起来,其中
integer >= start_integer AND integer <= end_integer
在许多 SQL 实现中,这可以通过左条件 JOIN ... ON BETWEEN 来完成
SELECT tbl1.integer, tbl2.data FROM tbl1
LEFT JOIN tbl2 ON tbl1.integer BETWEEN tbl2.start_integer AND
tbl2.end_integer;
但似乎 BigQuery 仅支持仅使用 = 条件的 JOIN ON。
这可以通过交叉联接来完成,但 BigQuery 抱怨我的表太大。 CROSS JOIN EACH 无效。
如何在 BigQuery SQL 的限制内完成此连接任务?
以下是我的 BigQuery SQL:
SELECT tbl1.integer, tbl2.data
FROM bq:data.tbl1
CROSS JOIN bq:data.tbl2
WHERE tbl1.integer BETWEEN tbl2.start_integer AND tbl2.end_integer;
返回错误:
错误:4.1 - 4.132:JOIN 运算符的右侧表必须是小表。如果左侧表较小,则切换表,或者如果两个表都大于所描述的最大值,则使用 JOIN EACHhttp://goo.gl/wXqgHs http://goo.gl/wXqgHs.
好消息(2016)! BigQuery 现在确实支持不等式联接 - 请务必取消选中“使用旧版 SQL 选项”。
查询示例:
SELECT *
FROM (
SELECT 1 x
) a JOIN (
SELECT 2 y
) b
ON a.x<b.y
使用旧版 SQL:
Error: ON clause must be AND of = comparisons of one field name from each table, ...
使用标准 SQL:
1 2
- Docs: https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql
- 讨论:https://code.google.com/p/google-bigquery/issues/detail?id=448#c31 https://code.google.com/p/google-bigquery/issues/detail?id=448#c31
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)