Łączenie tabel operatorami Join i Keep

Sprzężenie to operacja polegająca na połączeniu dwóch tabel w jedną. Rekordami tabeli wynikowej są kombinacje rekordów oryginalnych tabel, zazwyczaj połączone w taki sposób, że rekordy składające się na poszczególne kombinacje w tabeli wynikowej mają wspólną wartość w jednym lub wielu polach wspólnych — jest to tzw. sprzężenie naturalne. W Qlik Sense połączenia mogą być wykonywane w skrypcie, co powoduje tworzenie tabel logicznych.

Tabele można sprzęgać bezpośrednio w skrypcie. Logika aplikacji Qlik Sense nie będzie wtedy widzieć poszczególnych tabel, tylko wynik sprzężenia w postaci pojedynczej tabeli wewnętrznej. W niektórych sytuacjach takie zachowanie jest pożądane, ale ma ono swoje wady:

  • załadowane tabele często stają się większe, a aplikacja Qlik Sense działa wolniej;
  • niektóre informacje mogą zostać utracone, na przykład częstotliwość (liczba rekordów) z pierwotnej tabeli.

Aby ograniczyć liczbę sytuacji wymagających jawnego sprzęgania tabel, stworzono funkcję Keep, której działanie polega na zredukowaniu jednej lub obu tabel do części wspólnej danych przed zapisaniem tych tabel w aplikacji Qlik Sense.

Uwaga: W tej dokumentacji termin „sprzężenie” jest zazwyczaj używany w odniesieniu do sprzężeń wykonywanych przed utworzeniem tabel wewnętrznych. Skojarzenie dokonywane po utworzeniu tabel wewnętrznych w gruncie rzeczy też jest jednak sprzężeniem.

Sprzężenia w instrukcji SQL SELECT

Niektóre sterowniki ODBC umożliwiają dokonywanie sprzężeń w ramach instrukcji SELECT. Efekt jest prawie taki sam, jak dokonanie sprzężenia z użyciem prefiksu Join.

Większość sterowników ODBC nie obsługuje jednak pełnych (dwustronnych) sprzężeń zewnętrznych. Mogą one wykonywać jedynie lewe lub prawe sprzężenie zewnętrzne. Lewe (lub prawe) sprzężenie zewnętrzne obejmuje tylko te kombinacje, dla których klucz sprzężenia istnieje w lewej (lub prawej) tabeli. Pełne sprzężenie zewnętrzne obejmuje wszystkie kombinacje. Aplikacja Qlik Sense automatycznie wykonuje pełne sprzężenie zewnętrzne.

Poza tym wykonywanie sprzężeń w instrukcjach SELECT jest znacznie bardziej skomplikowane niż w aplikacji Qlik Sense.

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;

Ta instrukcja SELECT sprzęga tabelę zawierającą zamówienia złożone w fikcyjnej firmie z tabelą zawierającą szczegóły zamówień. Użyte jest prawe sprzężenie zewnętrzne, co oznacza, że uwzględniane są wszystkie rekordy z tabeli OrderDetails, w tym również rekordy zawierające w polu OrderID wartość nieistniejącą w tabeli Orders. Nie są natomiast uwzględniane zamówienia istniejące w tabeli Orders, ale nie w tabeli OrderDetails.

Join

Najprostszym sposobem na uzyskanie sprzężenia jest zastosowanie w skrypcie prefiksu Join, który powoduje wykonanie sprzężenia tabeli wewnętrznej z inną wskazaną tabelą lub z ostatnio utworzoną tabelą. Wykonywane jest sprzężenie zewnętrzne, które daje wszystkie możliwe kombinacje wartości z obu tabel.

Example:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Wynikowa tabela wewnętrzna zawiera pola a, b, c oraz d. Liczba rekordów zależy od wartości pól w obu tabelach.

Uwaga: Nazwy pól, według których wykonywane jest sprzężenie, muszą być identyczne. Liczba pól, według których wykonywane jest sprzężenie, jest dowolna. Zazwyczaj tabele mają wspólne jedno pole lub kilka pól. Brak pola wspólnego spowoduje zwrócenie iloczynu kartezjańskiego tabel. Teoretycznie mogą też być wspólne wszystkie pola, ale zazwyczaj nie ma to sensu. Jeśli w instrukcji Join nie zostanie podana nazwa wcześniej załadowanej tabeli, prefiks Join użyje ostatnio utworzonej tabeli. Kolejność tych dwóch instrukcji nie jest zatem dowolna.

Więcej informacji zawiera temat Join.

Keep

Jawne użycie prefiksu Join w skrypcie ładowania danych powoduje wykonanie pełnego sprzężenia dwóch tabel. Wynikiem jest pojedyncza tabela. W wielu przypadkach wykonanie sprzężenia powoduje utworzenie bardzo dużej tabeli. Jedną z kluczowych zalet aplikacji Qlik Sense jest możliwość tworzenia skojarzeń między tabelami zamiast wykonywania sprzężeń. Pozwala to ograniczyć wymagania pamięciowe, przyspiesza działanie programu i daje ogromną elastyczność działania. Funkcję Keep zaprojektowano z myślą o ograniczeniu liczby sytuacji wymagających używania jawnych sprzężeń.

Zastosowanie prefiksu Keep między dwiema instrukcjami LOAD lub SELECT powoduje zredukowanie jednej lub obu tabel do części wspólnej danych przez zapisaniem wyniku w aplikacji Qlik Sense. Prefiks Keep musi być zawsze poprzedzony jednym z następujących słów kluczowych: Inner, Left lub Right. Rekordy są wybierane z tabel w taki sam sposób, jak przy analogicznym sprzężeniu. Tabele nie są jednak sprzęgane i pozostaną zapisane w aplikacji Qlik Sense jako dwie odrębne tabele nazwane.

Więcej informacji zawiera temat Keep.

Inner

Prefiksy Join i Keep skryptu ładowania danych mogą być poprzedzone prefiksem Inner.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie wewnętrzne. Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają po obu stronach pełen zestaw danych.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense tabele mają zostać zredukowane do części wspólnej danych.

Example:  

W tych przykładach użyjemy tabel Table1 i Table2:

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

Inner Join

Najpierw wykonamy na tabelach operację Inner Join, której wynikiem będzie tabela VTable zawierająca tylko jeden wiersz (jedyny rekord występujący w obu tabelach) z połączonymi danymi z obu tabel.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Jeśli zamiast tego wykonamy operację Inner Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Więcej informacji zawiera temat Inner.

Left

Prefiksy Join i Keep skryptu ładowania danych mogą być poprzedzone prefiksem left.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie lewe (Left Join). Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają pełen zestaw danych z pierwszej tabeli.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense druga tabela ma zostać zredukowana do części wspólnej z pierwszą tabelą.

Example:  

W tych przykładach użyjemy tabel Table1 i Table2:

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

Najpierw wykonamy na tabelach operację Left Join, której wynikiem będzie tabela VTable zawierająca wszystkie wiersze z tabeli Table1 połączone z polami z pasujących wierszy w tabeli Table2.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

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

Jeśli zamiast tego wykonamy operację Left Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

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

Więcej informacji zawiera temat Left.

Right

Prefiksy Join i Keep skryptu ładowania danych mogą być poprzedzone prefiksem right.

Podanie go przed prefiksem Join oznacza, że do tabel ma być zastosowane sprzężenie prawe (Right Join). Wynikowa tabela zawiera tylko te kombinacje wierszy z obu tabel, które mają pełen zestaw danych z drugiej tabeli.

Podanie go przed prefiksem Keep oznacza, że przed zapisaniem wyniku w aplikacji Qlik Sense pierwsza tabela ma zostać zredukowana do części wspólnej z drugą tabelą.

Example:  

W tych przykładach użyjemy tabel Table1 i Table2:

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

Najpierw wykonamy na tabelach operację Right Join, której wynikiem będzie tabela VTable zawierająca wszystkie wiersze z tabeli Table2 połączone z polami z pasujących wierszy w tabeli Table1.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Jeśli zamiast tego wykonamy operację Right Keep, będziemy nadal mieć dwie tabele. Dwie tabele są skojarzone poprzez wspólne pole A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

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

Więcej informacji zawiera temat Right.