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:
ANY_VALUEAPPROX_COUNT_DISTINCTAPPROX_QUANTILESAPPROX_TOP_COUNTAPPROX_TOP_SUMARRAY_CONCAT_AGGAVGBIT_ANDBIT_ORBIT_XORCORRCOUNTCOUNTIFCOVAR_POPCOVAR_SAMPLOGICAL_ANDLOGICAL_ORMAXMAX_BYMINMIN_BYSTDDEVSTDDEV_POPSTDDEV_SAMPSUMVAR_POPVAR_SAMPVARIANCE
Funciones de agregación no admitidas
No se admiten las siguientes funciones de agregación:
ARRAY_AGGAVG(Privacidad diferencial)COUNT(Privacidad diferencial)- Son funciones que contienen expresiones
DISTINCT. GROUPINGPERCENTILE_CONT(Privacidad diferencial)ST_CENTROID_AGGST_EXTENTST_UNION_AGGSTRING_AGGSUM(Privacidad diferencial)
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:
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ónAPPENDS. La palabraTABLEdebe preceder a este argumento.timestamp_column: Es un literal deSTRINGque 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 únicotimestamp_columnadmitido. No se admiten las columnas definidas por el usuario.window_size: Es un valorINTERVALque 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 valorTIMESTAMPque indica la hora de inicio inclusiva del período al que pertenece el registro.window_end: Es un valorTIMESTAMPque 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
TUMBLEsolo se admite en las consultas continuas de BigQuery. - Cuando inicias una consulta continua con la función
TUMBLE, solo puedes usar la funciónAPPENDS. No se admite la funciónCHANGES. - La columna de tiempo del sistema de BigQuery definida por
_CHANGE_TIMESTAMPes el únicotimestamp_columnadmitido. 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_startywindow_end. Debes incluir al menos una de estas columnas en la instrucciónGROUP BYdentro de la instrucciónSELECTque realiza la agregación de la ventana. - Cuando usas la función
TUMBLEcon 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?
- Obtén más información para realizar JOIN, agregaciones y funciones de ventana.
- Obtén más información sobre las consultas continuas de BigQuery.
- Obtén más información para unir datos de varios flujos.