Stream SQL Join
Recurso de código aberto aprimorado: Stream SQL Join
Table API&SQL do Flink é uma API de consulta integrada para Scala e Java que permite a composição de consultas a partir de operadores relacionais como seleção, filtro e junção de forma intuitiva. Para detalhes sobre Table API & SQL, visite o site oficial em https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/index.html.
Introdução à Stream SQL Join
SQL Join é usada para consultar dados com base na relação entre colunas em duas ou mais tabelas. Stream SQL Join do Flink permite que você junte duas tabelas de streaming e consulte os resultados delas. Consultas semelhantes às seguintes são suportadas:
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;
Atualmente, Stream SQL Join precisa ser executada dentro de uma janela especificada. A operação de junção para dados dentro da janela requer pelo menos um predicado de junção por igualdade e uma condição de junção que limite o tempo em ambos os lados. Tal condição pode ser definida por dois predicados de intervalo apropriados (<, <=, >=, >), um predicado BETWEEN, ou um único predicado de igualdade que compara o mesmo tipo de atributos de tempo (como tempo de processamento ou tempo de evento) de ambas as tabelas de entrada.
O exemplo a seguir unirá todos os pedidos com seus envios correspondentes se o pedido tiver sido enviado quatro horas após o recebimento do pedido.
SELECT * FROM Orders o, Shipments s WHERE o.id = s.orderId AND o.ordertime BETWEEN s.shiptime - INTERVAL '4' HOUR AND s.shiptime
- Stream SQL Join oferece suporte apenas à junção interna.
- A cláusula ON deve incluir uma condição de junção igual.
- Os atributos de tempo suportam apenas o tempo de processamento e o tempo do evento.
- A condição de janela suporta apenas o intervalo de tempo limitado, por exemplo, o.proctime BETWEEN s.proctime - INTERVAL '1' HOUR AND s.proctime + INTERVAL '1' HOUR. O intervalo ilimitado, como o. proctime > s.proctime não é suportado. O atributo proctime de dois fluxos deve ser incluído. o.proctime BETWEEN proctime () AND proctime () + 1 não é suportado.