Operaciones de streaming de datos: uniones de secuencias - Guía para desarrolladores de aplicaciones de Amazon Kinesis Data Analytics para SQL

Para proyectos nuevos, le recomendamos que utilice el nuevo servicio gestionado para Apache Flink Studio en lugar de aplicaciones de Kinesis Data Analytics para SQL. El servicio gestionado para Apache Flink Studio combina la facilidad de uso con capacidades analíticas avanzadas, lo que le permite crear aplicaciones sofisticadas de procesamiento de flujos en cuestión de minutos.

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.

Operaciones de streaming de datos: uniones de secuencias

Puede tener varias secuencias en la aplicación en su aplicación. Puede escribir JOIN consultas para evaluar los datos de estas secuencias. Suponga, por ejemplo, que tiene la siguiente secuencia en la aplicación:

  • OrderStream— Recibe los pedidos de stock que se están realizando.

    (orderId SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)
  • TradeStream— Recibe las operaciones bursátiles resultantes de esos pedidos.

    (tradeId SqlType, orderId SqlType, ticker SqlType, amount SqlType, ticker SqlType, amount SqlType, ROWTIME TimeStamp)

Los siguientes son ejemplos de consultas JOIN que correlacionan datos en estas secuencias.

Ejemplo 1: Informar sobre las órdenes que se negocian en menos de un minuto

En este ejemplo, su consulta une OrderStream y TradeStream. No obstante, como solo queremos operaciones que tienen lugar en el minuto siguiente a las órdenes, la consulta define la ventana de 1 minuto para TradeStream. Para obtener información sobre consultas en ventana, consulte Ventanas deslizantes.

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.amount AS tradeAmount FROM OrderStream AS o JOIN TradeStream OVER (RANGE INTERVAL '1' MINUTE PRECEDING) AS t ON o.orderId = t.orderId;

Puede definir las ventanas de forma explícita utilizando la cláusula WINDOW y escribiendo las consultas anteriores de la siguiente manera:

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.amount AS tradeAmount FROM OrderStream AS o JOIN TradeStream OVER t ON o.orderId = t.orderId WINDOW t AS (RANGE INTERVAL '1' MINUTE PRECEDING)

Al incluir esta consulta en el código de la aplicación, este se ejecuta de forma continua. Para cada uno de los registros que llegan en OrderStream, la aplicación emite una salida si hay operaciones dentro de la ventana de 1 minuto a partir del momento en que se cursó la orden.

La unión en las consultas anteriores es una unión interna donde la consulta emite los registros en OrderStream para los que existe un registro en TradeStream (y viceversa). Con una unión exterior puede crear otro escenario interesante. Supongamos que desea órdenes bursátiles para las que no se han producido operaciones al cabo de un minuto de emitir la orden y también operaciones comunicadas dentro de la misma ventana, pero para otras órdenes. Este es un ejemplo de unión exterior.

SELECT STREAM ROWTIME, o.orderId, o.ticker, o.amount AS orderAmount, t.ticker, t.tradeId, t.amount AS tradeAmount, FROM OrderStream AS o LEFT OUTER JOIN TradeStream OVER (RANGE INTERVAL '1' MINUTE PRECEDING) AS t ON o.orderId = t.orderId;