Подтвердить что ты не робот

Поддержка функции UNION в BigQuery SQL

У BigQuery пока нет поддержки для UNION: https://developers.google.com/bigquery/docs/query-reference

(Я не имею в виду объединение таблиц вместе для источника. У этого есть.)

Скоро ли это?

4b9b3361

Ответ 1

Если вы хотите 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, это не сработало)

В качестве альтернативы вы можете запустить два запроса и добавить результат.

Ответ 2

Недавно BigQuery добавила поддержку Стандартный SQL, , включая операцию UNION.


При отправке запроса через веб-интерфейс просто снимите флажок "Использовать устаревший SQL" в разделе "Версия SQL": введите описание изображения здесь

Ответ 3

Вы всегда можете сделать:

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

Он делает то же самое, что:

SELECT * from query1 UNION select * from query 2;

Ответ 4

Союзы действительно поддерживаются. Выдержка из ссылки, которую вы опубликовали:

Примечание.. В отличие от многих других систем на базе 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;

Ответ 5

Обратите внимание: если вы используете стандартный SQL, теперь оператор запятой означает JOIN - вам нужно использовать синтаксис 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