Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-04-14 GMT+08:00

Stream SQL Join

Función de código abierto mejorada: Stream SQL Join

Flink's Table API&SQL es una API de consulta integrada para Scala y Java que permite la composición de consultas de operadores relacionales como selección, filtrado y unión de una manera intuitiva. Para obtener más información sobre Table API & SQL, visite el sitio web oficial en https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/index.html.

Introducción a Stream SQL Join

SQL Join se utiliza para consultar datos basados en la relación entre columnas en dos o más tablas. Flink Stream SQL Join le permite unir dos tablas de streaming y consultar resultados de ellas. Se admiten consultas similares a las siguientes:

SELECT o.proctime, o.productId, o.orderId, s.proctime AS shipTime 
FROM Orders AS o 
JOIN Shipments AS s 
ON o.orderId = s.orderId 
AND o.proctime BETWEEN s.proctime AND s.proctime + INTERVAL '1' HOUR;

Actualmente, Stream SQL Join debe realizarse dentro de una ventana especificada. La operación de unión para datos dentro de la ventana requiere al menos un predicado de unión equivalente y una condición de unión que limite el tiempo en ambos lados. Tal condición puede definirse mediante dos predicados de rango (<, <=, >=, >) apropiados, un predicado de BETWEEN o un único predicado de igualdad que compara el mismo tipo de atributos de tiempo (tales como tiempo de procesamiento o tiempo de evento) de ambas tablas de entrada.

El siguiente ejemplo hará el join de todos los pedidos con sus envíos correspondientes si el pedido fue enviado cuatro horas después de que se recibió el pedido.

SELECT *
FROM Orders o, Shipments s
WHERE o.id = s.orderId AND
o.ordertime BETWEEN s.shiptime - INTERVAL '4' HOUR AND s.shiptime
  1. La unión de Stream SQL sólo admite inner join.
  2. La cláusula ON debe incluir una condición de unión igual.
  3. Los atributos de tiempo solo admiten el tiempo de procesamiento y el tiempo de evento.
  4. La condición de ventana solo admite el intervalo de tiempo delimitado, por ejemplo o.proctime BETWEEN s.proctime - INTERVAL '1' HOUR AND s.proctime + INTERVAL '1' HOUR. El rango ilimitado, tal como o. proctime > s.proctime no es compatible. Se debe incluir el atributo proctime de dos flujos. o.proctime BETWEEN proctime () AND proctime () + 1 no es compatible.