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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin