Join ve Keep ile tabloları birleştirme

Join, iki tabloyu kullanan ve bunları bir tabloda birleştiren bir işlemidir. Sonuçta ortaya çıkan tablonun kayıtları, orijinal tablolardaki kayıtların birleşimleridir; bu genellikle sonuçta ortaya çıkan tablodaki herhangi bir birleşimin bir veya birkaç ortak alan için ortak bir değere sahip olması şeklinde, yani bir natural join ile, gerçekleştirilir. Qlik Sense uygulamasında, join işlemleri kod içinde gerçekleştirilebilir ve mantıksal tablolar oluşturur.

Zaten kodda bulunan tabloları birleştirmek mümkündür. Bu durumda Qlik Sense mantığı ayrı tabloları görmek yerine, tek bir dahili tablo olan birleştirme sonucunu görür. Bazı durumlarda bu gereklidir; ancak bazı dezavantajları da mevcuttur:

  • Yüklü tablolar genellikle daha büyük hale gelir ve Qlik Sense daha yavaş çalışır.
  • Bazı bilgiler kaybedilebilir: ilk tablodaki sıklık (kayıtların sayısı) artık kullanılamayabilir.

Tablolar Qlik Sense uygulamasında depolanmadan önce iki tablodan birini veya her ikisini tablo verilerinin kesişimine azaltma etkisine sahip olan Keep fonksiyonu, açık birleştirmelerin kullanılması gereken durumların sayısını azaltmak üzere tasarlanmıştır.

Note: Bu belgede, birleştirme terimi genellikle dahili tablolar oluşturulmadan önce gerçekleştirilen birleştirmeler için kullanılmaktadır. Ancak, dahili tablolar oluşturulduktan sonra gerçekleştirilen ilişkilendirme temelde bir birleştirmedir.

Bir SQL SELECT deyimi içindeki birleştirmeler

Bazı ODBC sürücüleriyle, SELECT deyimi içinde bir birleştirme gerçekleştirmek mümkündür. Bu, Join önekini kullanarak bir birleştirme gerçekleştirmekle neredeyse eşdeğerdir.

Ancak, çoğu ODBC sürücüsü tam (çift yönlü) dış birleştirme gerçekleştiremez. Bunlar yalnızca sol veya sağ dış birleştirme gerçekleştirebilir. Sol (sağ) dış birleştirme yalnızca birleştirmenin sol (sağ) tabloda var olduğu bileşimleri içerir. Tam dış birleşme herhangi bir bileşimi içerir. Qlik Sense otomatik olarak tam dış birleştirme gerçekleştirir.

Ayrıca SELECT deyimlerinde birleştirme gerçekleştirmek, Qlik Sense içinde birleştirme gerçekleştirmekten çok daha karmaşıktır.

Example:  

SELECT DISTINCTROW

[Order Details].ProductID, [Order Details].

UnitPrice, Orders.OrderID, Orders.OrderDate, Orders.CustomerID

FROM Orders

RIGHT JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID;

Bu SELECT deyimi, hayali bir şirkete yönelik siparişleri içeren bir tabloyu, sipariş ayrıntılarını içeren bir tabloyla birleştirir. Bu bir sağ dış birleştirmedir; yani, tüm OrderDetails kayıtlarının ve ayrıca Orders tablosunda var olmayan OrderID öğelerine sahip kayıtların dahil edileceği anlamına gelir. Bununla birlikte, Orders içinde var olan, ancak OrderDetails içinde var olmayan siparişler dahil edilmez.

Join

Bir birleştirme gerçekleştirmenin en basit yolu, dahili tabloyu başka bir adlandırılmış tabloyla veya önceden oluşturulan son tabloyla birleştiren Join önekini kod içinde kullanmaktır. Birleştirme, iki tabloya ait değerlerin tüm olası bileşimlerini oluşturan bir dış birleştirme olur.

Example:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Sonuçta ortaya çıkan dahili tablo a, b, c ve d alanlarına sahiptir. Kayıtların sayısı, iki tablonun alan değerlerine bağlı olarak değişiklik gösterir.

Note: Üzerinde birleştirme gerçekleştirilecek alanların adları tam olarak aynı olmalıdır. Üzerinde birleştirme gerçekleştirilecek alanların sayısı rastgeledir. Genellikle tabloların bir veya daha az ortak alanı olmalıdır. Hiçbir ortak alan olmaması, tabloların kartezyen ürününü oluşturur. Tüm alanların ortak olması da mümkündür, ancak genellikle bir anlam ifade etmez. Join deyiminde önceden yüklenmiş bir tablonun tablo adı belirtilmedikçe, Join öneki önceden oluşturulan son tabloyu kullanır. Bu nedenle, iki deyimin sıralaması rastgele değildir.

Daha fazla bilgi için bkz. Join.

Keep

Veri kod dosyasındaki açık Join öneki, iki tablonun tam birleştirmesini gerçekleştirir. Sonuç bir tablodur. Birçok durumda, bu tür birleştirmeler çok büyük tablolarla sonuçlanır. Qlik Sense uygulamasının ana özelliklerinden biri, tabloları birleştirmek yerine tablolar arasında ilişkilendirmeler gerçekleştirmektir; bu da bellekteki alanı azaltır, hızı artırır ve büyük ölçüde esneklik sağlar. Keep fonksiyonu, açık birleştirmelerin kullanılması gereken durumların sayısını azaltmak üzere tasarlanmıştır.

İki LOAD veya SELECT deyimi arasındaki Keep öneki, tablolar Qlik Sense ortamında depolanmadan önce iki tablodan birini veya her ikisini tablo verilerinin kesişimine azaltma etkisine sahiptir. Keep önekinin öncesinde her zaman Inner, Left veyaRight anahtar sözcüklerinden biri gelmelidir. Tablolardan kayıt seçimi, karşılık gelen birleştirme ile aynı şekilde gerçekleştirilir. Ancak, iki tablo birleştirilmez ve Qlik Sense içinde iki ayrı ayrı adlandırılmış tablo olarak depolanır.

Daha fazla bilgi için bkz. Keep.

Inner

Veri kod dosyasındaki Join ve Keep öneklerinden önce Inner öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin iç birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca her iki tarafa ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, iki tablonun Qlik Sense içinde depolanmadan önce ortak kesişimlerine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Table 1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Inner Join

İlk olarak tablolar üzerinde Inner Join yapıyoruz ve her iki tablodan birleştirilen verilerle yalnızca bir satır (her iki tabloda da bulunan tek kayıt) içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Bunun yerine Inner Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Daha fazla bilgi için bkz. Inner.

Left

Veri kod dosyasındaki Join ve Keep öneklerinden önce left öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin sol birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca birinci tabloya ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, ikinci tablonun Qlik Sense içinde depolanmadan önce birinci tabloyla ortak kesişimine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

İlk olarak tablolar üzerinde bir Left Join yapıyoruz ve Table1'den gelen tüm satırları, Table2 içindeki eşleşen satırlardan gelen alanlarla birleştirilmiş olarak içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

Bunun yerine Left Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Daha fazla bilgi için bkz. Left.

Right

Veri kod dosyasındaki Join ve Keep öneklerinden önce right öneki gelebilir.

Join öğesinden önce kullanılması durumunda, iki tablo arasındaki birleştirmenin sağ birleştirme olması gerektiğini belirtir. Sonuç olarak elde edilen tablo yalnızca ikinci tabloya ait tam veri kümesiyle iki tablo arasındaki bileşimleri içerir.

Keep öğesinden önce kullanılması durumunda, birinci tablonun Qlik Sense içinde depolanmadan önce ikinci tabloyla ortak kesişimine azaltılması gerektiğini belirtir.

Example:  

Bu örneklerde Table1 ve Table2 kaynak tablolarını kullanıyoruz:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

İlk olarak tablolar üzerinde bir Right Join yapıyoruz ve Table2'den gelen tüm satırları, Table1 içindeki eşleşen satırlardan gelen alanlarla birleştirilmiş olarak içeren VTable ortaya çıkıyor.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Bunun yerine Left Keep uygularsak, halen iki tablonuz olur. İki tablo şüphesiz, ortak alan A aracılığıyla ilişkilidir.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Daha fazla bilgi için bkz. Right.