Support UNION function in BigQuery SQL
BigQuery似乎还没有对Union的支持:https://developers.google.com/bigquery/docs/query-reference
(我不是说为了源把表联合在一起。就这样。)
快到了吗?
如果希望联合以便组合查询结果,则可以使用子选择在BigQuery中:
1 2 3 4 5 6 | SELECT foo, bar FROM (SELECT INTEGER(id) AS foo, string(title) AS bar FROM publicdata:samples.wikipedia LIMIT 10), (SELECT INTEGER(YEAR) AS foo, string(state) AS bar FROM publicdata:samples.natality LIMIT 10); |
这几乎完全等同于SQL
1 2 3 4 5 | SELECT id AS foo, title AS bar FROM publicdata:samples.wikipedia LIMIT 10 UNION ALL SELECT YEAR AS foo, state AS bar FROM publicdata:samples.natality LIMIT 10; |
号
(请注意,如果需要SQL联合而不是联合,所有这些都将不起作用)
或者,您可以运行两个查询并附加结果。
BigQuery最近增加了对标准SQL的支持,包括
通过Web UI提交查询时,只需确保取消选中"SQL版本"准则下的"使用旧版SQL":。
你可以一直这样做:
1 | SELECT * FROM (query 1), (query 2); |
。
它的作用与:
1 | SELECT * FROM query1 UNION SELECT * FROM query 2; |
这对我做一个与大查询的StandardSQL相交的联合非常有帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #standardSQL WITH a AS ( SELECT * FROM table_a), b AS ( SELECT * FROM table_b) SELECT * FROM a INTERSECT DISTINCT SELECT * FROM b |
。
我从以下网址窃取/修改了这个示例:https://gist.github.com/yancya/bf38d1b60edf972140492e3efd0955d0
注意,如果您使用的是标准SQL,逗号运算符现在表示
In legacy SQL, the comma operator , has the non-standard meaning of UNION ALL when applied to tables. In standard SQL, the comma operator has the standard meaning of JOIN.
号
例如:
1 2 3 4 5 6 7 | #standardSQL SELECT column_name, COUNT(*) FROM (SELECT * FROM me.table1 UNION ALL SELECT * FROM me.table2) GROUP BY 1 |
。
工会确实得到了支持。从您发布的链接中摘录:
注意:与许多其他基于SQL的系统不同,bigquery使用逗号语法来指示表联合,而不是联接。这意味着您可以对具有兼容模式的多个表运行查询,如下所示:
//几天内发现可疑活动
1 2 3 | SELECT FORMAT_UTC_USEC(event.timestamp_in_usec) AS TIME, request_url FROM [applogs.events_20120501], [applogs.events_20120502], [applogs.events_20120503] WHERE event.username = 'root' AND NOT event.source_ip.is_internal; |