BigQuery ne semble pas encore prendre en charge UNION: https://developers.google.com/bigquery/docs/query-reference
(Je ne parle pas de l'union des tables ensemble pour la source. Il a cela.)
Est-ce qu'il arrive bientôt?
Si vous souhaitez que UNION vous permette de combiner les résultats de la requête, vous pouvez utiliser des sous-sélections Dans 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);
Ceci est presque exactement équivalent au 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;
(notez que si vous voulez SQL UNION et pas UNION ALL, cela ne fonctionnera pas)
Vous pouvez également exécuter deux requêtes et ajouter le résultat.
BigQuery a récemment ajouté la prise en charge de SQL standard ,, y compris l'opération UNION
.
Lorsque vous soumettez une requête via l'interface utilisateur Web, veillez à décocher "Utiliser SQL hérité" sous la rubrique Version SQL:
Vous pouvez toujours faire:
SELECT * FROM (query 1), (query 2);
Il fait la même chose que:
SELECT * from query1 UNION select * from query 2;
Cela m’a beaucoup aidé à faire un UNION INTERSECT avec StandardSQL de Big Query.
#standardSQL
WITH
a AS (
SELECT
*
FROM
table_a),
b AS (
SELECT
*
FROM
table_b)
SELECT
*
FROM
a INTERSECT DISTINCT
SELECT
*
FROM
b
J'AI/MODIFIÉ CET EXEMPLE DE: https://Gist.github.com/yancya/bf38d1b60edf972140492e3efd0955d0
Les syndicats sont en effet pris en charge. Un extrait du lien que vous avez posté:
Remarque: Contrairement à de nombreux autres systèmes basés sur SQL, BigQuery utilise la syntaxe par virgule pour indiquer les unions de tables et non les jointures. Cela signifie que vous pouvez exécuter une requête sur plusieurs tables avec des schémas compatibles comme suit:
// Trouver une activité suspecte sur plusieurs jours
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;
Notez que si vous utilisez du SQL standard, l'opérateur virgule signifie maintenant JOIN
- vous avez pour utiliser la syntaxe UNION
si vous voulez une union :
Dans SQL hérité, l'opérateur de virgule a la signification non standard de UNION ALL lorsqu'il est appliqué aux tables. En SQL standard, l'opérateur par virgule a la signification standard de JOIN.
Par exemple:
#standardSQL
SELECT
column_name,
count(*)
from
(SELECT * FROM me.table1 UNION ALL SELECT * FROM me.table2)
group by 1