Aracılığıyla paylaş


BİRLEŞTİRMEK

✅ Azure Stream Analytics ✅ Fabric Olay Akışı

Standart T-SQL gibi Azure Stream Analytics sorgu dilindeki JOIN de iki veya daha fazla giriş kaynağındaki kayıtları birleştirmek için kullanılır. Azure Stream Analytics'te JOIN doğası gereği geçicidir, yani her JOIN eşleşen satırların zaman içinde ne kadar ayrılabileceğine ilişkin bazı sınırlar sağlamalıdır. Örneğin, "TollBoothEntry olaylarını aynı LicensePlate ve TollId üzerinde ve 5 dakika içinde gerçekleşen TollBoothExit olaylarıyla birleştirme" demek meşrudur; ancak "TollBoothEntry olaylarını LicensePlate ve TollId üzerinde gerçekleştiğinde TollBoothExit olaylarıyla birleştirin" değildir; her Bir TollBoothEntry ile tüm TollBoothExit'in sınırsız ve potansiyel olarak sonsuz koleksiyonuyla aynı LicensePlate ve TollId ile eşleşir.

İlişkinin zaman sınırları, TARİh FARKI işlevi kullanılarak JOIN'in ON yan tümcesinde belirtilir. DateDIFF boyutu üst sınırı yedi gündür. Genel kullanımı hakkında daha fazla bilgi için bkz. DATEDIFF. DATEDIFF JOIN koşulu içinde kullanıldığında, ikinci ve üçüncü parametre özel işlem kazanır.

Ayrıca, SELECT * JOIN deyimlerinde kullanılamaz.

Sözdizimi

[ 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  
  

Tartışmalar

<input_source>

Giriş veri kaynağını belirtir.

<reference_data>

input_source katılmak istediğiniz başvuru verileri. Daha fazla bilgi için Bkz. Başvuru Verileri Birleştirme bölümü.

<join_type>

Birleştirme işleminin türünü belirtir.

BİRLEŞTİRMEK

Belirtilen birleştirme işleminin belirtilen giriş kaynakları ile /veya başvuru verileri arasında gerçekleşmesi gerektiğini gösterir. Birleştirme koşuluna uygun olarak sol ve sağdan gelen tüm satırlar sonuç kümesine eklenir.

Uyarı

JOIN kaynakları bölümlenmişse, JOIN koşulu her iki kaynağın bölüm anahtarlarıyla eşleşen bir koşul içermelidir.

[ SOL DıŞ BIRLEŞIM ]

Sol tablodaki birleştirme koşuluyla eşleşmeyen tüm satırların sonuç kümesine dahil olduğunu ve diğer tablodaki çıkış sütunlarının iç birleşim tarafından döndürülen tüm satırlara ek olarak NULL olarak ayarlandığını belirtir.

ON <join_condition>

Birleştirmenin temel aldığı koşulu belirtir. Birleştirme koşulu, ilişki için tanımlanmış bir zamana bağlı veya zamana bağlı bir boşluk içermelidir ve JOIN işlevi için Özel DATEDIFF İşlevininözel söz dizimi kullanılarak JOIN'in ON yan tümcesi içinde belirtilir.

Örnekler

Azure Stream Analytics'te tüm olayların iyi tanımlanmış bir zaman damgası vardır. Bu nedenle, kullanıcının aşağıdaki gibi doğrudan DATEDIFF işlevinde satır diğer adlarını kullanması gerekir:

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  
  

Yukarıdaki birleştirme koşulu, ExitTime yalnızca EntryTime'dan sonra gerçekleşirse ancak 15 dakikadan fazla değilse eşleşmeye neden olur.

Uyarı

SELECT deyiminde kullanılan DATEDIFF, ikinci ve üçüncü parametre olarak bir tarih saat sütununun veya ifadesinin geçirildiği genel söz dizimini kullanır. Ancak, DATEDIFF işlevi JOIN koşulu içinde kullanıldığında, input_source adı veya diğer adı kullanılır. Dahili olarak, bu kaynaktaki her olay için ilişkili zaman damgası seçilir.

Zamana bağlı koşullar birbiriyle ve ON yan tümcesinin içindeki diğer koşullarla birleştirilebilir, örneğin:

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  
  

Üç veya daha fazla tabloyu birleştirirken aynı kurallar uygulanır --- zaman sınırları, eşleşen tüm olayların birbirinden sınırlı bir süre içinde gerçekleşmesini sağlamalıdır. Örneğin, işlem başlatma ve işlem bitiş olayı arasında oluşan tüm hataları bulmak için şunu söyleyebilirsiniz:

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  
  

Bölümlenmiş kaynakları birleştirirken, JOIN koşulu her iki kaynağın bölüm anahtarlarıyla eşleşen bir koşul içermelidir.

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  

Son olarak, Azure Stream Analytics hem iç birleştirmeyi (varsayılan) hem de LEFT dış birleşimini destekler. İç birleşim için sonuç yalnızca bir eşleşme bulunduğunda döndürülür. Ancak LEFT OUTER birleşimi için, birleştirmenin sol tarafından gelen bir olay eşleşmezse, sağ satırın tüm sütunları için NULL içeren bir satır döndürülür. Örneğin, burada olayların yokluğunu bulmaya yönelik bir örnek verilmiştir. Aşağıdaki sorgu, Bir Aracın Ücretli Gişeye girdiği ancak 15 dakika içinde Standdan çıkmadığı satırları döndürür.

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  
  

JOIN için Özel DATEDIFF İşlevi

Sözdizimi

DATEDIFF ( datepart , input_source1, input_source2 )  

Tartışmalar

dateparts

Örnek. 'second', 'milisaniye', 'minute' vb.)

input_source1

Join içindeki ilk giriş kaynağı. Dahili olarak bu input_source olaylarla ilişkili zaman damgası işleve geçirilir.

input_source2

Join içindeki ikinci giriş kaynağı. Dahili olarak bu input_source olaylarla ilişkili zaman damgası işleve geçirilir.

Dönüş Değeri

input_source1 zaman damgasından input_source2 zaman damgasına geçen belirtilen tarih bölümü sınırlarının sayısını (işaretli tamsayı olarak) döndürür. input_source1 zaman damgası input_source2 zaman damgasından büyükse, döndürülen değer negatif olabilir.