支持BigQuery SQL中的UNION功能

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的支持,包括UNION操作。

通过Web UI提交查询时,只需确保取消选中"SQL版本"准则下的"使用旧版SQL":enter image description here


你可以一直这样做:

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,逗号运算符现在表示JOIN—如果您想要联合,则必须使用UNION语法:

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;