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 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, como un promedio de 30 minutos, mediante el almacenamiento de los datos necesarios en la memoria mientras se ejecuta la consulta.

Las funciones 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 muestran una tabla que incluye todas las columnas originales y dos columnas adicionales: window_start y window_end. Estas columnas identifican el intervalo de tiempo para cada ventana. Para obtener más información sobre las operaciones con estado, consulta Operaciones con estado compatibles.

Las TVF de ventanas solo son compatibles con las consultas continuas de BigQuery.

Las TVF de ventanas son distintas de las llamadas a funciones de ventanas.

Funciones de agregación compatibles

Se admiten las siguientes funciones de agregación:

Funciones de agregación no compatibles

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 rotatorias) del tamaño especificado. Por ejemplo, una ventana de 5 minutos agrupa 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. Debido a 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: un literal 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 la única timestamp_column compatible. No se admiten las columnas definidas por el usuario.

  • window_size: un valor INTERVAL que define la duración de cada ventana rotatoria. Los tamaños de ventana pueden ser de un máximo de 24 horas. Por ejemplo: INTERVAL 30 SECOND.

Salida

La función TUMBLE muestra una salida con las siguientes columnas:

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

  • window_start: un valor TIMESTAMP que indica la hora de inicio inclusiva de la ventana a la que pertenece el registro

  • window_end: un valor TIMESTAMP que indica la hora de finalización exclusiva de la ventana a la que pertenece el registro

Materialización de salida

En una consulta continua de BigQuery, una agregación con ventanas no produce 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 esa ventana.

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

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

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 hora del sistema de BigQuery definida por _CHANGE_TIMESTAMP es la única timestamp_column compatible. No se admiten las columnas definidas por el usuario.
  • Los tamaños de ventana pueden ser de un máximo de 24 horas.
  • Cuando se ejecuta la función de ventanas TUMBLE, se producen dos columnas de salida 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 ventanas.
  • Cuando usas la TUMBLE función con 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 según la capacidad de procesamiento (ranuras) consumida mientras se ejecuta el trabajo. Este modelo basado en el procesamiento también se aplica a las operaciones con estado, como las ventanas. Debido a que las ventanas requieren que BigQuery almacene el “estado” mientras la consulta está activa, consume recursos de ranuras adicionales. En general, cuanto más contexto o datos se almacenen dentro de una ventana, como cuando se usan duraciones de ventana más largas, más estado debe conservar BigQuery. Esto genera un mayor uso de ranuras.

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?