web-dev-qa-db-fra.com

Fonction de support UNION dans BigQuery SQL

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?

20
mdahlman

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.

45
Jordan Tigani

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:  enter image description here

4
olebebo

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;
3
vgt

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

0
Weezy.F

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;
0
Emre Colak

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
0
Joshua Conner