JOIN (Azure Stream Analytics)

Standart T-SQL gibi Azure Stream Analytics sorgu dilinde 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. Bu, her JOIN'in eşleşen satırların zaman içinde ne kadar ayrılabileceğine ilişkin bazı sınırlar sağlaması gerektiği anlamına gelir. Örneğin, "TollBoothEntry olaylarını aynı LicensePlate ve TollId üzerinde ve 5 dakika içinde gerçekleşen TollBoothExit olaylarıyla birleştirin" demek meşrudur; ancak "TollBoothEntry olaylarını LicensePlate ve TollId üzerinde gerçekleştiğinde TollBoothExit olaylarıyla birleştir" değildir; her TollBoothEntry ile tüm TollBoothExit'in sınırsız ve sınırsız bir koleksiyonuyla aynı LicensePlate ve TollId ile eşleşir.

İlişkinin zaman sınırları, DATEDIFF işlevi kullanılarak JOIN'in ON yan tümcesinde belirtilir. En büyük DATEDIFF boyutu yedi gündür. Genel kullanımı hakkında daha fazla bilgi için bkz . DATEDIFF (Azure Stream Analytics). JOIN koşulu içinde DATEDIFF kullanıldığında, ikinci ve üçüncü parametre özel işlem kazanır.

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

Söz dizimi

[ 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  
  

Bağımsız değişkenler

<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.

KATILIN

Belirtilen birleştirme işleminin belirtilen giriş kaynakları ve /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şuluna 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şim koşulu, ilişki için tanımlanmış zamana bağlı veya zamana bağlı bir boş odaya sahip olmalıdır ve JOIN işlevi için Özel TARİh FARKI İşlevi'ninözel söz dizimi kullanılarak JOIN'in ON yan tümcesinde 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 yalnızca ExitTime değeri EntryTime'dan sonra gerçekleşirse ancak en fazla 15 dakika sonra gerçekleşirse eşleşmeye neden olur.

Not

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 tabloya katılırken, aynı kurallar --- zaman sınırları uygulanır ve eşleşen tüm olayların birbirlerinden 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öyleyebiliriz:

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şimi destekler. Bir iç birleşimde, yalnızca bir eşleşme bulunduğu zaman bir sonuç döndürülür. Ancak bir LEFT OUTER birleştirmede, birleştirmenin sol tarafındaki bir olay eşleşmemişse sağ satırdaki tüm sütunlar için NULL değerine sahip 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öz dizimi

DATEDIFF ( datepart , input_source1, input_source2 )  

Bağımsız değişkenler

Dateparts

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

input_source1

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

input_source2

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

Dönüş Türü

input_source1 zaman damgasından input_source2 zaman damgasına kadar geçen tarih parçalarındaki birim sayısını döndürür. İkinci input_source zaman damgası birinciden büyükse döndürülen değer negatif olabilir.