Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
✅ Fluxo de eventos do Azure Stream Analytics ✅ Fabric
Assim como o T-SQL padrão, 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 é temporal por natureza, o que significa que cada JOIN deve fornecer alguns limites sobre até que ponto as linhas correspondentes podem ser separadas no tempo. Por exemplo, dizer "ingressar eventos TollBoothEntry com eventos TollBoothExit quando eles ocorrem no mesmo LicensePlate e TollId e dentro de 5 minutos um do outro" é legítimo; mas "ingressar eventos TollBoothEntry com eventos TollBoothExit quando eles ocorrem no LicensePlate e TollId" não corresponde a cada TollBoothEntry com uma coleção não associada e potencialmente infinita de todos os TollBoothExit com o mesmo 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 de 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 o terceiro parâmetro 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 você deseja ingressar no input_source. Para obter mais informações, consulte a seção Associação de Dados de Referência.
<join_type>
Especifica o tipo de operação de junção.
JUNTAR
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.
Aviso
Se as fontes JOIN forem particionadas, o predicado JOIN deverá incluir uma condição que corresponda às chaves de partição de ambas as fontes.
[ LEFT OUTER JOIN ]
Especifica que todas as linhas da tabela esquerda que não atendem à condição de junção sejam incluídas no conjunto de resultados, e as colunas de saída da outra tabela sejam definidas como NULL além de todas as linhas retornadas pela junção interna.
ON <join_condition>
Especifica o critério no qual a junção se baseia. A condição de junção deve ter um limite de tempo ou um espaço de agitação temporal definido para a relação e é especificado dentro da cláusula ON do JOIN, usando a sintaxe especial da função SPECIAL DATEDIFF paraa função JOIN.
Exemplos
No Azure Stream Analytics, todos os eventos têm um carimbo de data/hora bem definido. Portanto, 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 do que 15 minutos depois.
Observação
DATEDIFF usado na instrução SELECT usa a sintaxe geral em que uma coluna ou expressão datetime é passada como o segundo e o 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 origem é escolhido.
As condições de limite de 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 --- limites de tempo devem garantir que todos os eventos correspondentes ocorram dentro de um período finito de tempo um do outro. Por exemplo, para localizar todos os erros que ocorreram entre o evento de início e de término 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 que corresponda à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 à junção interna (o padrão) e à junção externa LEFT. Para uma junção interna, um resultado só é retornado quando uma correspondência é encontrada. Mas para uma junção LEFT OUTER, se um evento do lado esquerdo da junção for incompatí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 do Estande dentro de 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 DATEDIFF especial para JOIN
Sintaxe
DATEDIFF ( datepart , input_source1, input_source2 )
Argumentos
dateparts
Exemplo. 'second', 'milissegundo', 'minute', etc.)
input_source1
A primeira fonte de entrada no Join. Internamente, o carimbo de data/hora associado aos eventos desse input_source é passado para a função.
input_source2
A segunda fonte de entrada no Join. 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 com sinal) dos limites de datepart especificados cruzados do carimbo de data/hora de input_source1 para o carimbo de data/hora de input_source2. O valor retornado poderá ser negativo se o carimbo de data/hora de input_source1 for maior que o carimbo de data/hora de input_source2.