Información sobre la agregación de ventanas en consultas continuas

Para solicitar asistencia o enviar comentarios sobre esta función, envía un correo electrónico a bq-continuous-queries-feedback@google.com.

Las consultas continuas de BigQuery admiten agregaciones y renderización en ventanas como operaciones con estado. Las operaciones con estado permiten que las consultas continuas realicen análisis complejos que requieren retener información en varias filas o intervalos de tiempo. Esta capacidad te permite calcular métricas a lo largo del tiempo (por ejemplo, un promedio de 30 minutos) almacenando los datos necesarios en la memoria mientras se ejecuta la consulta.

Las funciones de sistema de ventanas asignan datos a componentes lógicos, o ventanas, según la hora del sistema, que indica la hora de confirmación de la transacción que realizó el cambio. En BigQuery, estas funciones son funciones con valores de tabla (TVF) que devuelven una tabla que incluye todas las columnas originales y dos columnas adicionales: window_start y window_end. Estas columnas identifican el intervalo de tiempo de cada ventana. Para obtener más información sobre las operaciones con estado, consulta Operaciones con estado compatibles.

Las TVF de segmentación solo se admiten con consultas continuas de BigQuery.

Las TVF de segmentación son distintas de las llamadas a funciones analíticas.

Funciones de agregación compatibles

Se admiten las siguientes funciones de agregación:

Funciones de agregación no admitidas

No se admiten las siguientes funciones de agregación:

La función TUMBLE

La función TUMBLE asigna datos a intervalos de tiempo que no se superponen (ventanas de saltos de tamaño constante) del tamaño especificado. Por ejemplo, una ventana de 5 minutos agrupa los eventos en intervalos discretos, como [2026-01-01 12:00:00, 2026-01-01 12:05:00) y [2026-01-01 12:05:00, 2026-01-01 12:10:00). Una fila con un valor de marca de tiempo 2026-01-01 12:03:18 se asigna a la primera ventana. Dado que estas ventanas son disjuntas y no se superponen, cada elemento con una marca de tiempo se asigna a exactamente una ventana.

En el siguiente diagrama, se muestra cómo la función TUMBLE asigna eventos a intervalos de tiempo que no se superponen:

La función TUMBLE asigna eventos a intervalos de tiempo que no se superponen.

Puedes usar esta función en el procesamiento de eventos en tiempo real para agrupar eventos por rangos de tiempo antes de realizar cualquier agregación.

Sintaxis

TUMBLE(TABLE table, "timestamp_column", window_size)

Definiciones

  • table: el nombre de la tabla de BigQuery. Debe ser una tabla estándar de BigQuery incluida en la función APPENDS. La palabra TABLE debe preceder a este argumento.

  • timestamp_column: Es un literal de STRING que especifica el nombre de la columna en la tabla de entrada que contiene la hora del evento. Los valores de esta columna asignan cada fila a una ventana. La columna _CHANGE_TIMESTAMP, que define la hora del sistema de BigQuery, es el único timestamp_column admitido. No se admiten las columnas definidas por el usuario.

  • window_size: Es un valor INTERVAL que define la duración de cada ventana de saltos de tamaño constante. Los tamaños de las ventanas pueden ser de hasta 24 horas. Por ejemplo: INTERVAL 30 SECOND.

Salida

La función TUMBLE devuelve un resultado con las siguientes columnas:

  • Todas las columnas de la tabla de entrada en el momento en que se ejecuta la consulta.

  • window_start: Es un valor TIMESTAMP que indica la hora de inicio inclusiva del período al que pertenece el registro.

  • window_end: Es un valor TIMESTAMP que indica la hora de finalización exclusiva del período al que pertenece el registro.

Materialización de la salida

En una consulta continua de BigQuery, una agregación con ventanas no genera resultados para un intervalo de tiempo específico hasta que BigQuery finaliza o cierra esa ventana. Este comportamiento garantiza que BigQuery emita los resultados agregados solo después de procesar todos los datos relevantes para ese período.

Por ejemplo, si realizas una agregación de ventana de 5 minutos de TUMBLE en una tabla de user_clickstream, los resultados del intervalo [10:15; 10:20) solo se emitirán después de que la consulta procese registros con un _CHANGE_TIMESTAMP de las 10:20 o posterior. En ese momento, BigQuery considera que la ventana está cerrada. Además, se abre una ventana y comienza a acumular datos en el momento en que aparece el primer registro perteneciente a ese período específico.

Mientras una ventana permanece abierta, BigQuery debe conservar los resultados de la agregación intermedia. Esto requiere almacenar el estado, lo que significa que BigQuery debe conservar los resultados intermedios de la agregación. Dado que este estado debe permanecer en la memoria activa hasta que se cierre la ventana, usar duraciones de ventana más largas o procesar transmisiones de gran volumen genera una mayor utilización de ranuras para administrar la mayor cantidad de contexto almacenado. Para obtener más información, consulta Consideraciones sobre los precios.

Limitaciones

  • La función TUMBLE solo se admite en las consultas continuas de BigQuery.
  • Cuando inicias una consulta continua con la función TUMBLE, solo puedes usar la función APPENDS. No se admite la función CHANGES.
  • La columna de tiempo del sistema de BigQuery definida por _CHANGE_TIMESTAMP es el único timestamp_column admitido. No se admiten las columnas definidas por el usuario.
  • Los tamaños de las ventanas pueden ser de hasta 24 horas.
  • Cuando se ejecuta la función analítica TUMBLE, se producen dos columnas de resultado adicionales: window_start y window_end. Debes incluir al menos una de estas columnas en la instrucción GROUP BY dentro de la instrucción SELECT que realiza la agregación de la ventana.
  • Cuando usas la función TUMBLE con las uniones de consultas continuas, debes seguir todas las limitaciones de las uniones de consultas continuas.

Consideraciones sobre el precio

Las consultas continuas de BigQuery te facturan en función de la capacidad de procesamiento (ranuras) consumida mientras se ejecuta el trabajo. Este modelo basado en la capacidad de procesamiento también se aplica a las operaciones con estado, como las de ventanas. Dado que la función de ventana requiere que BigQuery almacene el "estado" mientras la consulta está activa, consume recursos de ranuras adicionales. En general, cuanto más contexto o datos se almacenan dentro de un período (por ejemplo, cuando se usan duraciones de períodos más largas), más estado debe conservar BigQuery. Esto genera una mayor utilización de los espacios.

Ejemplos

En la siguiente consulta, se muestra cómo consultar una tabla de viajes en taxi para obtener un promedio de transmisión de la cantidad de viajes, la cantidad de pasajeros y la tarifa promedio por taxi cada 30 minutos, y exportar estos datos a una tabla en BigQuery:

INSERT INTO
 `real_time_taxi_streaming.driver_stats`

WITH ride_completions AS (
 SELECT
   _CHANGE_TIMESTAMP as bq_changed_ts,
   CAST(timestamp AS DATE) AS ride_date,
   taxi_id,
   meter_reading,
   passenger_count
 FROM
   APPENDS(TABLE `real_time_taxi_streaming.taxirides`,
     CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
 WHERE
   ride_status = 'dropoff')

 SELECT
   ride_date,
   window_end,
   taxi_id,
   COUNT(taxi_id) AS total_rides_per_half_hour,
   ROUND(AVG(meter_reading),2) AS avg_fare_per_half_hour,
   SUM(passenger_count) AS total_passengers_per_half_hour
FROM
  tumble(TABLE ride_completions,"bq_changed_ts",INTERVAL 30 MINUTE)
GROUP BY
  window_end,
  ride_date,
  taxi_id

¿Qué sigue?