Ventanas escalonadas - Guía para desarrolladores de Amazon Kinesis Data Analytics for SQL Applications

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ventanas escalonadas

El uso de las ventanas escalonadas es un método de definición de ventanas adecuado para analizar grupos de datos que llegan erráticamente. Es ideal para cualquier caso de uso de análisis de series temporales, como un conjunto de ventas relacionadas o registros de un archivo de registros.

Por ejemplo, Registros de flujo de VPC tiene una ventana de captura de 10 minutos aproximadamente. Sin embargo, pueden tener una ventana de captura de hasta 15 minutos si acumula datos en el cliente. Las ventanas escalonadas son ideales para agrupar estos registros para su análisis.

Las ventanas escalonadas solucionan el problema de los registros relacionados no incluidos en la misma ventana de tiempo restringido, por ejemplo, si se han utilizado ventanas de saltos.

Resultados parciales con ventanas de saltos

Existen ciertas limitaciones en el uso de Ventanas de saltos de tamaño constante para la agrupación de datos con retraso o desordenados.

Si las ventanas de saltos se utilizan para analizar grupos de datos relacionados con el tiempo, los registros individuales podrían caer en ventanas separadas. Por lo tanto, los resultados parciales de cada ventana se deben combinar más tarde para ofrecer resultados completos para cada grupo de registros.

En la siguiente consulta de ventana de saltos, los registros se agrupan en ventanas por hora de fila, hora del evento y clave de cotización:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( TICKER_SYMBOL VARCHAR(4), EVENT_TIME timestamp, TICKER_COUNT DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS TICKER_COUNT FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR(EVENT_TIME TO MINUTE), STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '1' MINUTE);

En el siguiente diagrama, una aplicación cuenta el número de operaciones que recibe, en función del momento en que se han producido las operaciones (hora del evento) con un grado de detalle de un minuto. La aplicación puede utilizar una ventana de saltos para agrupar los datos en función de la hora de la fila y la hora del evento. La aplicación recibe cuatro registros que llegan minuto a minuto. Agrupa los registros por hora de la fila, hora del evento y clave de cotización. Como algunos de los registros llegan después de que termine la primera ventana de saltos, los registros no entrarán todos en la misma ventana de saltos de un minuto.

El diagrama anterior tiene los siguientes eventos.

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

El conjunto de resultados de la aplicación de la ventana de saltos tiene un aspecto similar al siguiente.

ROWTIME EVENT_TIME TICKER_SYMBOL COUNT
11:01:00 11:00:00 AMZN 2
11:02:00 11:00:00 AMZN 1
11:02:00 11:01:00 AMZN 1

En el conjunto de resultados anterior, se devuelven tres resultados:

  • Un registro con un ROWTIME de 11:01:00 que agrupa los dos primeros registros.

  • Un registro a las 11:02:00 que agrupa solo el tercer registro. Este registro tiene un ROWTIME dentro de la segunda ventana, pero un EVENT_TIME dentro de la primera ventana.

  • Un registro a las 11:02:00 que agrupa solo el cuarto registro.

Para analizar todo el conjunto de resultados, los registros deben agruparse en el almacén de persistencia. Esto añade complejidad y requisitos de procesamiento a la aplicación.

Resultados completos con ventanas escalonadas

Para mejorar la precisión de los registros de datos de tiempo, Kinesis Data Analytics ofrece un nuevo tipo de ventana llamadaVentanas escalonadas. En este tipo de ventana, la ventana se abre cuando llega el primer evento que coincide con la clave de partición y no a un intervalo de tiempo fijo. La ventana se cierra en función de la antigüedad especificada, que se mide desde el momento en que se abrió la ventana.

Una ventana escalonada es una ventana con restricción de tiempo distinta para cada grupo de claves de una cláusula de ventana. La aplicación agrupa cada resultado de la cláusula de ventana en su propia ventana de tiempo, en lugar de usar una sola ventana para todos los resultados.

En la siguiente consulta de ventana escalonada, los registros se agrupan en ventanas por hora del evento y clave de cotización:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), event_time TIMESTAMP, ticker_count DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS ticker_count FROM "SOURCE_SQL_STREAM_001" WINDOWED BY STAGGER ( PARTITION BY FLOOR(EVENT_TIME TO MINUTE), TICKER_SYMBOL RANGE INTERVAL '1' MINUTE);

En el siguiente diagrama, los registros se agrupan en ventanas escalonadas por hora del evento y clave de cotización:

El diagrama anterior tiene los siguientes eventos, que son los mismos que los que analizó la aplicación de ventana de saltos:

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

El conjunto de resultados de la aplicación de ventana escalonada tiene un aspecto similar al siguiente.

ROWTIME EVENT_TIME TICKER_SYMBOL Recuento
11:01:20 11:00:00 AMZN 3
11:02:15 11:01:00 AMZN 1

El registro devuelto agrupa los tres primeros registros de entrada. Los registros se agrupan en ventanas escalonadas de un minuto. La ventana escalonada comienza cuando la aplicación recibe el primer registro AMZN (con un ROWTIME de 11:00:20). Cuando finaliza la ventana escalonada de un minuto (a las 11:01:20), se escribe un registro con los resultados incluidos dentro de la ventana escalonada (en función de ROWTIME y EVENT_TIME) en la secuencia de salida. Gracias al uso de una ventana escalonada, todos los registros en los que el valor de ROWTIME y EVENT_TIME esté comprendido en una ventana de un minuto se emitirán como un único resultado.

El último registro (con un EVENT_TIME fuera de la agregación de un minuto) se agrega por separado. Esto se debe a que EVENT_TIME es una de las claves de partición que se utiliza para separar los registros en conjuntos de resultados y la clave de partición EVENT_TIME para la primera ventana es 11:00.

La sintaxis de la ventana escalonada se define en una cláusula especial, WINDOWED BY. Esta cláusula se utiliza en lugar de la cláusula GROUP BY para streaming de agregaciones. La cláusula aparece inmediatamente detrás de la cláusula WHERE opcional y antes de la cláusula HAVING.

La ventana escalonada se define en la cláusula WINDOWED BY y toma dos parámetros: claves de partición y duración de la ventana. Las claves de partición dividen la transmisión de la secuencia de datos entrante y definen cuándo se abre la ventana. Una ventana escalonada se abre cuando el primer evento con una clave de partición única aparece en la secuencia. La ventana escalonada se cierra después de un periodo de tiempo fijo definido por la duración de la ventana. La sintaxis se muestra en el siguiente ejemplo de código:

... FROM <stream-name> WHERE <... optional statements...> WINDOWED BY STAGGER( PARTITION BY <partition key(s)> RANGE INTERVAL <window length, interval> );