Formateador de SQL para BigQuery
Pega una consulta de BigQuery (GoogleSQL) y obténla formateada al instante. Las rutas `project.dataset.table` entre comillas invertidas, las expresiones STRUCT y ARRAY y los parámetros de consulta @nombrados se tratan correctamente.
Una consulta BigQuery, antes y después
La consulta sin formato de abajo es el ejemplo cargado en el editor de arriba, y la salida es exactamente lo que devuelve este formateador con las opciones por defecto. No se ha retocado nada a mano.
WITH sessions AS (SELECT user_id, session_id, TIMESTAMP_TRUNC(event_ts, HOUR) AS hr, ARRAY_AGG(event_name ORDER BY event_ts) AS events FROM `my-project.analytics.events` WHERE event_ts BETWEEN @start_ts AND @end_ts AND platform = @platform GROUP BY user_id, session_id, hr) SELECT hr, count(DISTINCT user_id) AS users, APPROX_QUANTILES(ARRAY_LENGTH(events), 100)[OFFSET(95)] AS p95_events FROM sessions WHERE ARRAY_LENGTH(events) > @min_events GROUP BY hr ORDER BY hr WITH
sessions AS (
SELECT
user_id,
session_id,
TIMESTAMP_TRUNC(event_ts, HOUR) AS hr,
ARRAY_AGG(
event_name
ORDER BY
event_ts
) AS events
FROM
`my-project.analytics.events`
WHERE
event_ts BETWEEN @start_ts AND @end_ts
AND platform = @platform
GROUP BY
user_id,
session_id,
hr
)
SELECT
hr,
count(DISTINCT user_id) AS users,
APPROX_QUANTILES(ARRAY_LENGTH(events), 100) [OFFSET(95)] AS p95_events
FROM
sessions
WHERE
ARRAY_LENGTH(events) > @min_events
GROUP BY
hr
ORDER BY
hr Sintaxis de BigQuery que soporta
Un formateador genérico destroza la sintaxis propia del dialecto o la rechaza directamente. Estas son las construcciones de BigQuery contra las que se prueba este formateador.
@name Los parámetros de consulta nombrados de BigQuery se detectan y se agrupan, así que un parámetro reutilizado en varias CTE se rellena una sola vez.
`project.dataset.table` Las rutas de tabla completas entre comillas invertidas se mantienen en una sola pieza.
UNNEST(array) El aplanado de arrays conserva la estructura de su cláusula.
arr[OFFSET(0)] Los subíndices de array OFFSET y ORDINAL se conservan literalmente.
STRUCT<...> Las declaraciones de tipo struct no se parten.
Preguntas frecuentes del formateador de BigQuery
¿Detecta los parámetros @nombrados?
Sí. Los parámetros @name de BigQuery aparecen en el panel de Parámetros, agrupados por nombre, y se pueden rellenar para producir una consulta ejecutable.
¿Va a destrozar mis rutas de tabla entre comillas invertidas?
No. `project.dataset.table` se trata como un único identificador entrecomillado y pasa sin cambios.
¿Maneja expresiones UNNEST, STRUCT y ARRAY?
Sí. UNNEST mantiene su estructura de cláusula en vez de reformatearse como una función corriente, las declaraciones de tipo STRUCT no se parten a mitad de declaración, y ARRAY_AGG con un ORDER BY interno conserva ese orden unido a la agregación a la que pertenece.
¿Sobreviven al formateo los subíndices OFFSET y ORDINAL?
Sí, literalmente. Una expresión encadenada como APPROX_QUANTILES(x, 100)[OFFSET(95)] vuelve exactamente como se escribió en lugar de partirse por el corchete, que es lo que convierte una consulta de percentiles que funciona en un error de sintaxis.
¿Puedo editar el WHERE de una sola CTE en una consulta GoogleSQL larga?
Sí. El WHERE de cada bloque WITH aparece por separado bajo el nombre de ese bloque, así que puedes abrir el que te interesa, editar sus condiciones como árbol o como grafo y dejar todos los demás bloques sin tocar.
¿Funciona con el SQL heredado de BigQuery?
No: esta página se centra en GoogleSQL, que es el dialecto estándar de BigQuery y en el que deberían escribirse las consultas nuevas. Las referencias a tablas entre corchetes del SQL heredado no se analizan. Si todavía tienes SQL heredado, migrarlo aprovecha mejor tu tiempo que formatearlo.