Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Comme T-SQL standard, JOIN dans le langage de requête Azure Stream Analytics est utilisé pour combiner des enregistrements à partir de deux sources d’entrée ou plus. LA JOINTURE dans Azure Stream Analytics est temporelle, ce qui signifie que chaque JOIN doit fournir des limites sur la distance à laquelle les lignes correspondantes peuvent être séparées dans le temps. Par exemple, dire « joindre des événements TollBoothEntry avec des événements TollBoothExit lorsqu’ils se produisent sur le même LicensePlate et TollId et dans les 5 minutes entre eux » est légitime ; mais « joindre des événements TollBoothEntry avec des événements TollBoothExit lorsqu’ils se produisent sur LicensePlate et TollId » n’est pas : il correspondrait à chaque TollBoothEntry avec une collection illimitée et potentiellement infinie de tous les TollBoothExit au même LicensePlate et TollId.
Les limites horaires de la relation sont spécifiées à l’intérieur de la clause ON de la jointure, à l’aide de la fonction DATEDIFF. La taille DE DATEDIFF maximale est de sept jours. Pour plus d’informations sur son utilisation générale, consultez DATEDIFF. Lorsque DATEDIFF est utilisé à l’intérieur de la condition JOIN, le deuxième et le troisième paramètre obtiennent un traitement spécial.
En outre, SELECT * ne peut pas être utilisé dans les instructions JOIN.
Syntaxe
[ 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
Les arguments
<input_source>
Spécifie la source de données d’entrée.
<reference_data>
Données de référence auxquelles vous souhaitez joindre votre input_source. Pour plus d’informations, consultez la section Jonction de données de référence.
<join_type>
Spécifie le type d'opération de jointure.
UNIR
Indique que l’opération de jointure spécifiée doit se produire entre les sources d’entrée spécifiées et /ou les données de référence. Toutes les lignes de la gauche et de droite qui répondent à la condition de jointure sont incluses dans le jeu de résultats.
Avertissement
Si les sources JOIN sont partitionnées, le prédicat JOIN doit inclure une condition correspondant aux clés de partition des deux sources.
[ JOINTURE EXTERNE GAUCHE ]
Spécifie que toutes les lignes de la table de gauche qui ne respectent pas la condition de jointure sont incluses dans le jeu de résultats et que les colonnes de sortie de l'autre table ont des valeurs NULL en plus de toutes les lignes retournées par la jointure interne.
ON <join_condition>
Spécifie la condition sur laquelle se base la jointure. La condition de jointure doit avoir une limite temporelle ou une salle de perruque temporelle définie pour la relation et est spécifiée à l’intérieur de la clause ON de la jointure, à l’aide de la syntaxe spéciale de la fonction DATEDIFF spéciale pour la fonction JOIN.
Exemples
Dans Azure Stream Analytics, tous les événements ont un horodatage bien défini. Ainsi, l’utilisateur doit utiliser des alias de ligne directement dans la fonction DATEDIFF, comme suit :
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
La condition de jointure ci-dessus entraîne une correspondance si et uniquement si ExitTime se produit après EntryTime, mais pas plus de 15 minutes plus tard.
Remarque
DATEDIFF utilisé dans l’instruction SELECT utilise la syntaxe générale où une colonne ou une expression datetime est passée en tant que deuxième et troisième paramètre. Toutefois, lorsque la fonction DATEDIFF est utilisée à l’intérieur de la condition JOIN, le nom input_source ou son alias est utilisé. En interne, l’horodatage associé à chaque événement de cette source est sélectionné.
Les conditions temporelles peuvent être combinées entre elles et avec d’autres conditions à l’intérieur de la clause ON, par exemple :
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
Lors de la jointure de trois tables ou plus, les mêmes règles s’appliquent --- limites de temps doivent s’assurer que tous les événements correspondants se produisent dans une durée limitée entre elles. Par exemple, pour rechercher toutes les erreurs qui se sont produites entre l’événement de début de la transaction et l’événement de fin de transaction, on peut dire :
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
Lors de la jointure de sources partitionnée, le prédicat JOIN doit inclure une condition correspondant aux clés de partition des deux sources.
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
Enfin, Azure Stream Analytics prend en charge la jointure interne (la jointure par défaut) et la jointure externe LEFT. Pour une jointure interne, un résultat est retourné uniquement lorsqu’une correspondance est trouvée. Toutefois, pour une jointure LEFT OUTER, si un événement du côté gauche de la jointure n’est pas incompatible, une ligne avec NULL pour toutes les colonnes de la ligne droite est retournée. Par exemple, voici un exemple pour trouver l’absence d’événements. La requête suivante retourne les lignes où un véhicule est entré dans une cabine de péage, mais n’a pas quitté le stand dans les 15 minutes.
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
Fonction DATEDIFF spéciale pour JOIN
Syntaxe
DATEDIFF ( datepart , input_source1, input_source2 )
Les arguments
dateparts
Exemple. 'second', 'milliseconde', 'minute', etc.)
input_source1
Première source d’entrée dans la jointure. En interne, l’horodatage associé aux événements de cette input_source est passé dans la fonction.
input_source2
Deuxième source d’entrée dans la jointure. En interne, l’horodatage associé aux événements de cette input_source est passé dans la fonction.
Valeur de retour
Retourne le nombre (sous forme d’entier signé) des limites de parties de date spécifiées franchies de l’horodatage de input_source1 à l’horodatage de input_source2. La valeur retournée peut être négative si l’horodatage de input_source1 est supérieur à l’horodatage de input_source2.