Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2023-05-19 GMT+08:00

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
  1. Stream SQL Join oferece suporte apenas à junção interna.
  2. A cláusula ON deve incluir uma condição de junção igual.
  3. Os atributos de tempo suportam apenas o tempo de processamento e o tempo do evento.
  4. 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.