standard query cast bigquery big sql google-bigquery union

cast - Soporta la función UNION en BigQuery SQL



if big query (6)

BigQuery agregó recientemente soporte para SQL estándar , incluida la operación UNION .

Al enviar una consulta a través de la interfaz de usuario web, solo asegúrese de desmarcar "Usar SQL heredado" en la rúbrica de la versión SQL:

BigQuery no parece tener soporte para UNION todavía: https://developers.google.com/bigquery/docs/query-reference

(No me refiero a unir tablas para la fuente. Tiene eso.)

¿Viene pronto?


Esto me ayudó mucho a hacer un UNION INTERSECT con StandardSQL de gran consulta.

#standardSQL WITH a AS ( SELECT * FROM table_a), b AS ( SELECT * FROM table_b) SELECT * FROM a INTERSECT DISTINCT SELECT * FROM b

STOLE / MODIFICADO ESTE EJEMPLO DESDE: https://gist.github.com/yancya/bf38d1b60edf972140492e3efd0955d0


Los sindicatos son de hecho apoyados. Un extracto del enlace que publicaste:

Nota: A diferencia de muchos otros sistemas basados ​​en SQL, BigQuery usa la sintaxis de coma para indicar uniones de tablas, no uniones. Esto significa que puede ejecutar una consulta en varias tablas con esquemas compatibles de la siguiente manera:

// Encuentra actividad sospechosa durante varios días.

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;


Si desea UNION para poder combinar los resultados de la consulta, puede usar subselecciones en 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);

Esto es casi exactamente equivalente al 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;

(tenga en cuenta que si quiere SQL UNION y no UNION ALL esto no funcionará)

Alternativamente, puede ejecutar dos consultas y anexar el resultado.


Siempre puedes hacer:

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

Hace lo mismo que:

SELECT * from query1 UNION select * from query 2;


Tenga en cuenta que, si está utilizando SQL estándar, el operador de coma ahora significa JOIN - debe usar la sintaxis de UNION si desea una unión :

En SQL heredado, el operador de coma tiene el significado no estándar de UNION ALL cuando se aplica a las tablas. En el SQL estándar, el operador de coma tiene el significado estándar de UNIR.

Por ejemplo:

#standardSQL SELECT column_name, count(*) from (SELECT * FROM me.table1 UNION ALL SELECT * FROM me.table2) group by 1