【发布时间】:2012-05-25 13:51:12
【问题描述】:
BigQuery 似乎尚不支持 UNION: https://developers.google.com/bigquery/docs/query-reference
(我的意思不是为了源将表联合在一起。它有。)
快到了吗?
【问题讨论】:
标签: sql google-bigquery union
BigQuery 似乎尚不支持 UNION: https://developers.google.com/bigquery/docs/query-reference
(我的意思不是为了源将表联合在一起。它有。)
快到了吗?
【问题讨论】:
标签: sql google-bigquery union
如果您想要 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,这将不起作用)
或者,您可以运行两个查询并附加结果。
【讨论】:
【讨论】:
你总是可以这样做的:
SELECT * FROM (query 1), (query 2);
它的作用与:
SELECT * from query1 UNION select * from query 2;
【讨论】:
请注意,如果您使用的是标准 SQL,则逗号运算符现在表示 JOIN - you have to use the UNION syntax if you want a 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
【讨论】:
这对我使用大查询的 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 窃取/修改了这个示例
【讨论】:
确实支持联合。您发布的链接的摘录:
注意:与许多其他基于 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;
【讨论】: