Plataformas de datos del cliente

Sintaxis de tuberías de BigQuery: SQL más fácil, rápido y legible

Cualquiera que haya trabajado con SQL Conoce la relación de amor-odio que conlleva. SQL es potente, estandarizado y expresivo, pero también es uno de los lenguajes menos intuitivos para leer y mantener a gran escala. Cuanto más compleja es la consulta, más difícil resulta comprender qué sucede realmente y en qué orden.

Eso se debe a que SQL no funciona en el orden que uno piensa. Se empieza escribiendo SELECT, pero la base de datos en realidad no procesa eso primero. El motor comienza con el FROM La cláusula, luego une los datos, los filtra, los agrega y solo más tarde aplica la ordenación y la proyección. El resultado es una consulta que se escribe hacia atrás en relación con la forma en que se ejecuta.

Esta discrepancia entre sintaxis y ejecución hace que SQL sea cognitivamente pesado y computacionalmente costoso. Los analistas a menudo recurren a subconsultas o expresiones de tabla comunes (CTEPara simular un flujo de arriba hacia abajo, se añade complejidad y redundancia innecesarias. Incluso los usuarios experimentados terminan depurando bloques de lógica anidados en lugar de centrarse en el problema que están resolviendo.

Para abordar esto, BigQuery Las instrucciones supports1 se ejecutan en el mismo orden en que se leen. En lugar de escribir la lógica de adentro hacia afuera, se escribe paso a paso, como un flujo de datos: cada línea representa una transformación distinta. El resultado es un SQL más fácil de entender, más fácil de depurar y mucho más intuitivo para el análisis de datos moderno.

Sintaxis de la tubería de Google 1
Fuente: Google

La imagen superior ilustra el problema principal que resuelve la sintaxis de tubería. En SQL tradicional, orden sintáctico (la forma en que escribes una consulta) no está alineada con orden semántico (cómo lo procesa realmente la base de datos). Por ejemplo, SELECT Aparece en la parte superior, pero el motor no lo evalúa hasta después de que se hayan realizado la unión, el filtrado, la agrupación y la ordenación.

Esta secuencia representa el flujo lógico y sintáctico de una consulta de tubería de BigQuery —de arriba a abajo, de izquierda a derecha—, reflejando cómo la base de datos procesa realmente los datos.

  • DE: El punto de partida de cualquier consulta de tubería. Define la tabla o subconsulta inicial desde la que fluyen los datos. En la sintaxis de tubería, FROM Puede funcionar de forma independiente como una consulta válida y actúa como la entrada a una canalización secuencial.
  • ENTRAR: Extiende la tabla actual con columnas y filas adicionales de otra tabla o subconsulta. Se puede utilizar varias veces en secuencia (|> JOIN table USING (key)), lo que permite leer árboles de unión profunda a la izquierda sin subconsultas anidadas.
  • CONJUNTO: Actualiza los valores de columna existentes en su lugar (|> SET column = expression). Funciones como SELECT * REPLACE(...) en SQL estándar, pero es más legible y modular cuando se utiliza como un paso de una canalización.
  • EXTENDER: Agrega columnas calculadas al conjunto de datos existente (|> EXTEND expression AS new_column). Similar a SELECT *, nueva_columna en SQL estándar, pero permite la creación incremental de campos derivados entre otras operaciones como uniones y filtros.
  • SOLTAR: Elimina una o más columnas del conjunto de datos actual (|> DROP column_name). Equivalente a SELECT * EXCEPT(column) en SQL estándar y a menudo se utiliza para simplificar la salida o reducir el tamaño de los datos intermedios.
  • DÓNDE: Filtra las filas que cumplen una condición (|> WHERE condition). Puede aparecer en cualquier punto del proceso, antes o después de la agregación, eliminando la necesidad de usar palabras clave diferentes como HAVING o QUALIFY.
  • AGREGAR: Realiza agregaciones de tabla completa o agrupadas (|> AGGREGATE SUM(column) AS total GROUP BY category). Sustituye las funciones GROUP BY y de agregación dentro de SELECT, simplificando la sintaxis y alineándola con el orden lógico de las operaciones.
  • ORDENAR POR: Ordena las filas en orden ascendente o descendente (|> ORDER BY column DESCGenera una tabla de resultados ordenada que puede ser seguida por operadores como LIMIT.
  • LÍMITE: Restringe el número de filas en el resultado (|> LIMIT 10Funciona después ORDER BY o en tablas no ordenadas, conservando la secuencia natural de filtros y agregaciones.
  • LLAME: Ejecuta una función con valores de tabla o un modelo de aprendizaje automático utilizando la tabla actual como entrada (|> CALL ML.PREDICT(MODEL project.model_name)Elimina la necesidad de llamadas a funciones anidadas, creando un flujo de trabajo lineal y legible.
  • SELECCIONE: Define la proyección final de las columnas que se incluirán en la salida (|> SELECT column1, column2). Sirve como operación de cierre en un pipeline, similar a la operación final. SELECT en una consulta SQL estándar.

A continuación se presentan los escenarios más comunes en los que la sintaxis de tubería simplifica la lógica SQL, lo que hace que las consultas sean más limpias y rápidas de realizar.

Agregación de datos sin subconsultas

Las agregaciones son el punto donde SQL empieza a parecer un laberinto. Si quieres contar algo, y luego contar esos recuentos, de repente te encuentras en un infierno de paréntesis.

SQL

SELECT c_count, COUNT(*) AS custdist
FROM (
  SELECT c_custkey, COUNT(o_orderkey) AS c_count
  FROM customer
  JOIN orders ON c_custkey = o_custkey
  WHERE o_comment NOT LIKE '%unusual%packages%'
  GROUP BY c_custkey
)
GROUP BY c_count
ORDER BY custdist DESC;

Sintaxis de tubería

FROM customer
|> JOIN orders ON c_custkey = o_custkey
   AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) AS c_count GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist GROUP BY c_count
|> ORDER BY custdist DESC;

Se acabó el anidamiento y la doble agrupación. Cada paso fluye de forma lógica y se puede modificar de forma independiente sin necesidad de reescribir toda la consulta.

Limpieza y transformación de columnas paso a paso

Cuando necesitas convertir texto a minúsculas, calcular totales y eliminar columnas adicionales, SQL estándar te obliga a reescribir varias consultas. SELECT declaraciones. La sintaxis de tubería introduce SET, EXTEND y DROP operadores para que pueda aplicar los cambios en secuencia.

SQL

SELECT o_custkey, ROUND(o_totalprice) AS total_price
FROM (
  SELECT
    o_custkey,
    o_totalprice,
    LOWER(o_orderstatus) AS o_orderstatus
  FROM orders
)
WHERE total_price > 1000;

Sintaxis de tubería

FROM orders
|> SET o_orderstatus = LOWER(o_orderstatus)
|> EXTEND ROUND(o_totalprice) AS total_price
|> WHERE total_price > 1000
|> SELECT o_custkey, total_price;

Cada operación se basa en la anterior, lo que facilita el seguimiento de las transformaciones y la reutilización de la lógica.

Filtrado posterior a la agregación sin recordar “HABIENDO”

Una de las peculiaridades de SQL es que el momento de aplicación de los filtros cambia según la cláusula. Se utiliza WHERE antes de agrupar y HAVING después, pero en realidad, ambos simplemente filtran filas. La sintaxis de tubería te permite usar WHERE Siempre igual, sin importar dónde lo coloques.

SQL

SELECT department, COUNT(*) AS emp_count
FROM employees
WHERE active = TRUE
GROUP BY department
HAVING COUNT(*) > 5;

Sintaxis de tubería

FROM employees
|> WHERE active = TRUE
|> AGGREGATE COUNT(*) AS emp_count GROUP BY department
|> WHERE emp_count > 5;

Ahora puedes escribir filtros en el mismo orden en que los piensas: primero filtra los datos, luego agrúpalos y, finalmente, vuelve a filtrar los resultados.

Depuración de consultas sin tablas temporales

En SQL estándar, comprobar un resultado intermedio requiere crear una tabla temporal o envolver el código en varias CTE. Con la sintaxis de tubería, se puede ejecutar la consulta hasta cualquier punto de la cadena de comandos.

SQL

WITH filtered AS (
  SELECT * FROM orders WHERE o_totalprice > 500
),
summed AS (
  SELECT o_custkey, SUM(o_totalprice) AS total
  FROM filtered GROUP BY o_custkey
)
SELECT * FROM summed WHERE total > 10000;

Sintaxis de tubería

FROM orders
|> WHERE o_totalprice > 500
|> AGGREGATE SUM(o_totalprice) AS total GROUP BY o_custkey
|> WHERE total > 10000;

Cada prefijo de la consulta se puede ejecutar de forma independiente, lo que significa que puedes examinar los datos en cualquier momento. Es una forma más clara e interactiva de depurar e iterar.

Encadenamiento de modelos y funciones sin anidamiento

Al trabajar con funciones con valores de tabla o modelos de aprendizaje automático de BigQuery, el anidamiento puede volverse rápidamente ilegible. La sintaxis de tubería reemplaza esas llamadas anidadas con encadenamiento lineal mediante CALL.

SQL

SELECT *
FROM ML.PREDICT(
  MODEL `project.sentiment_model`,
  (SELECT text FROM reviews)
);

Sintaxis de tubería

SELECT text FROM reviews
|> CALL ML.PREDICT(MODEL `project.sentiment_model`);

Si aplica varios modelos o transformaciones, simplemente apile líneas CALL adicionales; no se requieren paréntesis.

Pivotar datos sin consultas SELECT anidadas

La pivotación de datos siempre ha sido un proceso tedioso, que a menudo requiere varias subconsultas. La sintaxis de tuberías lo simplifica en una secuencia fluida.

SQL

SELECT *
FROM (
  SELECT n_name, c_acctbal, c_mktsegment
  FROM customer JOIN nation USING (n_nationkey)
)
PIVOT(SUM(c_acctbal) FOR n_name IN ('PERU', 'KENYA', 'JAPAN'));

Sintaxis de tubería

FROM customer
|> JOIN nation USING (n_nationkey)
|> SELECT n_name, c_acctbal, c_mktsegment
|> PIVOT(SUM(c_acctbal) FOR n_name IN ('PERU', 'KENYA', 'JAPAN'));

La consulta ahora se lee como una historia: comienza con tus datos, únelos, selecciona lo que necesitas y luego pivota.

Por qué la sintaxis de tuberías es revolucionaria

La sintaxis de tuberías no reinventa SQL, sino que lo clarifica. Conserva toda la potencia de la estructura declarativa de SQL, pero elimina la complejidad cognitiva de escribir la lógica de forma inversa.

Para los científicos de datos, analistas e ingenieros, eso significa:

  • Consultas más fáciles de leer, escribir y depurar
  • Se acabó el tener que lidiar con subconsultas o CTE para tareas sencillas.
  • Una lógica simplificada que refleja tu forma de pensar real.
  • Mejor rendimiento y menos operaciones redundantes

La sintaxis de tuberías de BigQuery es SQL para la era moderna de los datos: lineal, intuitiva y optimizada para el análisis de datos en el mundo real.

Guillermo Karr

Bill es el Científico de Datos Jefe de OpenINSIGHTS y gestiona las operaciones de ciencia de datos para clientes minoristas. Tiene un doctorado en Matemáticas de la Universidad de Illinois en Urbana-Champaign y una maestría en ciencias e ingeniería computacionales. Durante su… Más "
Volver al botón superior
Cerrar

Adblock detectado

Dependemos de anuncios y patrocinios para mantenernos Martech Zone Gratis. Considere desactivar su bloqueador de anuncios o apóyenos con una membresía anual asequible y sin publicidad (US$10):

Regístrese para obtener una membresía anual