Birleştirme
Merge öneki, yüklenen tablonun başka bir tabloyla birleştirilmesi gerektiğini belirtmek için koddaki bir LOAD veya SELECT deyimine eklenebilir. Bu ayrıca, bu deyimin bir kısmi yeniden yüklemede çalıştırılması gerektiğini belirtir.
Tipik kullanım durumu, bir değişiklik günlüğü yüklediğiniz ve bunu kullanarak inserts, updates ve deletes öğesini var olan bir tabloya uygulamak istediğiniz zamanlardır.
Yeniden Yükle düğmesini kullanarak kısmi yeniden yükleme gerçekleştirin. Daha fazla bilgi için bkz. Düğme. Qlik Engine JSON API öğesini de kullanabilirsiniz.
Söz Dizimi:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Bağımsız Değişkenler:
Bağımsız Değişken | Açıklama |
---|---|
only | Deyimin sadece kısmi yeniden yüklemeler sırasında yürütülmesi gerektiğini belirten isteğe bağlı bir niteleyici. Deyim, normal (kısmi olmayan) yeniden yüklemelerde göz ardı edilir. |
SequenceNoField | Bir zaman damgası içeren alanın adı veya işlemlerin sırasını tanımlayan bir sıra numarası. |
SequenceNoVar |
Birleştirilmekte olan tablonun SequenceNoField öğesi için maksimum değerin atandığı değişkenin adı. |
ListOfKeys | Birincil anahtarı belirten, virgülle ayrılmış alan adları listesi. |
Operation | Yükleme deyiminin ilk alanı işlemi bir metin dizesi olarak içermelidir: "Insert", "Update" veya "Delete". "i", "u" ve "d" de ayrıca kabul edilir. |
Genel işlevsellik
Normal (kısmi olmayan) bir yeniden yükleme sırasında, Merge LOAD yapısı normal bir Load deyimi olarak; ancak eski kayıtları ve silinmek üzere işaretlenmiş kayıtları kaldırma ek işlevselliği ile çalışır. Load deyiminin ilk alanı işlemle ilgili bilgileri içermelidir: Insert, Update veya Delete.
Yüklenen her kayıt için kayıt tanımlayıcısı önceden yüklenen kayıtlarla karşılaştırılır ve yalnızca en son kayıt (sıra numarasına göre) saklanır. En son kayıt Delete ile işaretlenmişse hiçbiri saklanmaz.
Hedef tablo
Hangi tablonun değiştirileceği alan kümesi tarafından belirlenir. Aynı alan kümesine sahip (işlem olan ilk alan dışında) bir tablo zaten mevcutsa, değiştirilecek olan bu tablodur. Alternatif olarak tabloyu belirtmek için bir Concatenate ön eki belirtilebilir. Hedef tablo belirlenmezse, Merge LOAD yapısının sonucu yeni bir tabloda saklanır.
Concatenate ön eki kullanılırsa, ortaya çıkan tabloda mevcut tablo ile Merge işleminin girdisinin bileşimine karşılık gelen bir alan kümesi olur. Bu nedenle hedef tabloda Merge işleminin girdisi olarak kullanılan değişiklik günlüğünden daha fazla alan olabilir.
Kısmi bir yeniden yükleme tam bir yeniden yükleme ile aynı şeyi yapar. Tek fark kısmi bir yeniden yüklemenin seyrek olarak yeni bir tablo oluşturmasıdır. Only yan tümcesi kullanılmadığı sürece önceki komut dosyası yürütmedeki alan kümesine sahip olan bir hedef tablo her zaman mevcuttur.
Sıra numarası
Yüklenen değişiklik günlüğü birikmiş bir günlükse; yani zaten yüklenmiş olan değişiklikleri içeriyorsa, SequenceNoVar parametresi, giriş verilerinin miktarını sınırlamak için bir Where cümlesinde kullanılabilir. Merge LOAD daha sonra yalnızca SequenceNoField alanının şundan büyük olduğu kayıtları yüklemek için yapılabilir: SequenceNoVar. İşlem tamamlandığında Merge LOAD, SequenceNoVar değişkenine maksimum değeri SequenceNoField alanında görülen yeni bir değer atar.
İşlemler
Merge LOAD işleminde hedef tablodan daha az sayıda alan olabilir. Eksik alanlar farklı işlemlerde farklı şekilde işlenir:
Insert: Merge LOAD içinde eksik buna karşın hedef tabloda mevcut olan alanlar hedef tabloda NULL değerini alır.
Delete: Eksik alanlar sonucu etkilemez. İlgili kayıtlar yine de silinir.
Update: Merge LOAD içinde listelenen alanlar hedef tabloda güncellenir. Eksik alanlar değiştirilmez. Bu, aşağıdaki iki deyimin aynı olmadığı anlamına gelir:
- Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
- Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;
Birinci deyim listelenen kayıtları günceller ve F2 değerini NULL ile değiştirir. İkincisi F2 değerini değiştirmez; bunun yerine değerleri hedef tabloda bırakır.