Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Como o T-SQL padrão, JOIN na linguagem de consulta do Azure Stream Analytics é usado para combinar registros de duas ou mais fontes de entrada. JOIN no Azure Stream Analytics é de natureza temporal, o que significa que cada JOIN deve fornecer alguns limites sobre até onde as linhas correspondentes podem ser separadas no tempo. Por exemplo, dizer "participe de eventos TollBoothEntry com eventos TollBoothExit quando eles ocorrerem na mesma LicensePlate e TollId e dentro de 5 minutos um do outro" é legítimo; mas "participar de eventos TollBoothEntry com eventos TollBoothExit quando eles ocorrem na LicensePlate e TollId" não é – isso corresponderia a cada TollBoothEntry com uma coleção ilimitada e potencialmente infinita de todos os TollBoothExit para a mesma LicensePlate e TollId.
Os limites de tempo para a relação são especificados dentro da cláusula ON do JOIN, usando a função DATEDIFF. O tamanho máximo do DATEDIFF é de sete dias. Para obter mais informações sobre seu uso geral, consulte DATEDIFF. Quando DATEDIFF é usado dentro da condição JOIN, o segundo e terceiro parâmetros ganham tratamento especial.
Além disso, SELECT * não pode ser usado em instruções JOIN.
Sintaxe
[ FROM { <input_source> } [ ,...n ] ]
<input_source> ::=
{
input_name [ [ AS ] input_alias ]
| <joined_table>
}
<joined_table> ::=
{
<input_source> <join_type> <input_source> ON <join_condition>
| [ <input_source> <join_type> <reference_data> ON <join_condition> ]
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ { INNER | LEFT [ OUTER ] } ] JOIN
Argumentos
<input_source>
Especifica a fonte de dados de entrada.
<reference_data>
Os dados de referência aos quais pretende aderir à sua input_source. Para obter mais informações, consulte a seção Junção de dados de referência.
<join_type>
Especifica o tipo de operação de junção.
ADERIR
Indica que a operação de junção especificada deve ocorrer entre as fontes de entrada especificadas e/ou dados de referência. Todas as linhas da esquerda e da direita que atendem à condição de junção são incluídas no conjunto de resultados.
Advertência
Se as fontes JOIN forem particionadas, o predicado JOIN deverá incluir uma condição correspondente às chaves de partição de ambas as fontes.
[ JUNÇÃO EXTERIOR ESQUERDA ]
Especifica que todas as linhas da tabela esquerda que não atendem à condição de junção são incluídas no conjunto de resultados e as colunas de saída da outra tabela são definidas como NULL, além de todas as linhas retornadas pela junção interna.
EM <join_condition>
Especifica a condição na qual a junção se baseia. A condição de junção deve ter um limite de tempo ou uma sala de oscilação temporal definida para a relação e é especificada dentro da cláusula ON da função JOIN, usando a sintaxe especial de Special DATEDIFF Function for JOINfunction.
Exemplos
No Azure Stream Analytics, todos os eventos têm um carimbo de data/hora bem definido. Assim, o usuário deve usar aliases de linha diretamente na função DATEDIFF, da seguinte maneira:
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
A condição de junção acima resultará em uma correspondência se e somente se o ExitTime ocorrer após o EntryTime, mas não mais de 15 minutos depois.
Observação
DATEDIFF usado na instrução SELECT usa a sintaxe geral onde uma coluna ou expressão datetime é passada como o segundo e terceiro parâmetro. No entanto, quando a função DATEDIFF é usada dentro da condição JOIN, o nome input_source ou seu alias é usado. Internamente, o carimbo de data/hora associado a cada evento nessa fonte é selecionado.
As condições limitadas no tempo podem ser combinadas entre si e com outras condições dentro da cláusula ON, por exemplo:
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
Ao unir três ou mais tabelas, as mesmas regras se aplicam --- os limites de tempo devem garantir que todos os eventos correspondentes ocorram dentro de um período de tempo finito uns dos outros. Por exemplo, para encontrar todos os erros que ocorreram entre o início e o evento final da transação, pode-se dizer:
SELECT TS.Id, TS.Name, TS.Amount, E.ErrorCode, E.Description
FROM TStart TS TIMESTAMP BY TStartTime
JOIN TEnd TE TIMESTAMP BY TEndTime
ON DATEDIFF(second, TS, TE) BETWEEEN 0 AND 5
AND TS.Id = TE.Id
JOIN Error E TIMESTAMP BY ErrorTime
ON DATEDIFF(second, TS, E) BETWEEN 0 AND 5
AND DATEDIFF(second, TE, E) < 0
AND E.TId = TS.Id
Ao unir fontes particionadas, o predicado JOIN deve incluir uma condição correspondente às chaves de partição de ambas as fontes.
SELECT I1.TollId, I1.EntryTime,I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationInMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime PARTITION BY PartitionId
JOIN Input2 I2 TIMESTAMP BY ExitTime PARTITION BY PartitionId
ON I1.PartitionId = I2.PartitionId AND DATEDIFF(minute,I1,I2) BETWEEN 0 AND 15
Por fim, o Azure Stream Analytics dá suporte à associação interna (padrão) e à associação externa ESQUERDA. Para uma junção interna, um resultado só é retornado quando uma correspondência é encontrada. Mas para uma junção OUTER ESQUERDA, se um evento do lado esquerdo da junção for incomparável, uma linha com NULL para todas as colunas da linha direita será retornada. Por exemplo, aqui está um exemplo para encontrar a ausência de eventos. A consulta a seguir retornará as linhas em que um veículo entrou em uma cabine de pedágio, mas não saiu da cabine em 15 minutos.
SELECT I1.TollId, I1.EntryTime, I2.ExitTime, I1.LicensePlate, DATEDIFF(minute,I1.EntryTime,I2.ExitTime) AS DurationinMinutes
FROM Input1 I1 TIMESTAMP BY EntryTime
LEFT OUTER JOIN Input2 I2 TIMESTAMP BY ExitTime
ON I1.TollId=I2.TollId
AND I1.LicensePlate=I2.LicensePlate
AND DATEDIFF( minute , I1 , I2 ) BETWEEN 0 AND 15
WHERE I2.TollId IS NULL
Função especial DATEDIFF para JOIN
Sintaxe
DATEDIFF ( datepart , input_source1, input_source2 )
Argumentos
dateparts
Exemplo. «segundo», «milissegundo», «minuto», etc.)
input_source1
A primeira fonte de entrada na Associação. Internamente, o carimbo de data/hora associado aos eventos desse input_source é passado para a função.
input_source2
A segunda fonte de entrada na Associação. Internamente, o carimbo de data/hora associado aos eventos desse input_source é passado para a função.
Valor de retorno
Retorna a contagem (como um inteiro assinado) dos limites de parte de data especificados cruzados do carimbo de data/hora de input_source1 para o carimbo de data/hora de input_source2. O valor retornado pode ser negativo se o carimbo de data/hora de input_source1 for maior que o carimbo de data/hora de input_source2.