27

BigQuery 似乎还不支持 UNION: https ://developers.google.com/bigquery/docs/query-reference

(我的意思不是为了源将表联合在一起。它有。)

是不是快到了?

4

6 回答 6

61

如果您想要 UNION 以便可以组合查询结果,您可以在 BigQuery 中使用子选择:

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

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 UNION 而不是 UNION ALL,这将不起作用)

或者,您可以运行两个查询并附加结果。

于 2012-05-18T01:26:53.100 回答
5

BigQuery 最近增加了对标准 SQL的支持,包括UNION操作


通过 Web UI 提交查询时,只需确保取消选中 SQL 版本标题下的“使用旧版 SQL”: 在此处输入图像描述

于 2016-12-11T15:12:01.570 回答
3

你总是可以这样做:

SELECT * FROM (query 1), (query 2);

它与以下内容相同:

SELECT * from query1 UNION select * from query 2;
于 2014-10-24T23:30:06.903 回答
2

请注意,如果您使用的是标准 SQL,则逗号运算符现在意味着JOIN-如果您想要 union ,则必须使用UNION语法:

在旧版 SQL 中,逗号运算符在应用于表时具有 UNION ALL 的非标准含义。在标准 SQL 中,逗号运算符具有 JOIN 的标准含义。

例如:

#standardSQL
SELECT
    column_name,
    count(*)
from
    (SELECT * FROM me.table1 UNION ALL SELECT * FROM me.table2)
group by 1
于 2017-12-06T00:24:00.650 回答
1

这对我使用大查询的 StandardSQL 进行 UNION INTERSECT 非常有帮助。

#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

于 2018-09-13T20:26:45.733 回答
0

确实支持工会。您发布的链接的摘录:

注意:与许多其他基于 SQL 的系统不同,BigQuery 使用逗号语法来表示表联合,而不是联合。这意味着您可以对具有兼容模式的多个表运行查询,如下所示:

// 发现几天内的可疑活动

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;
于 2013-04-08T21:09:57.943 回答