JoinKeep を使用したテーブルの結合

結合とは 2 つのテーブルを 1 つにまとめる操作です。結合により生成されるテーブルのレコードは元のテーブルのレコードを組み合わせたもので、通常、生成されたテーブル内の特定の組み合わせに関係する 2 つのレコードが 1 つ以上の共通項目に共通の値を持っています。そのため、これを「自然結合」と呼びます。QlikViewでは、結合はスクリプトで実行され、論理テーブルが作成されます。

その場合、QlikViewロジックは、個々のテーブルではなく、結合の結果である単一の内部テーブルを処理するようになります。この処理が必要な場合もありますが、次のような欠点があります。

  • ロードされたテーブルのサイズが大きくなり、QlikViewの動作が遅くなることがあります。
  • 元のテーブル内のレコード数を取得できなくなり、情報の一部が失われる可能性があります。

Keep機能には、QlikView にテーブルが保存される前に、2 つのテーブルの 1 つまたは両方をテーブル データの共通部分に縮小させる効果があり、明示的な結合の使用回数を減らす目的で設計されています。

注: このマニュアルでは、結合という用語は、内部テーブルが作成される前に行われる結合という意味で使用されています。しかし、内部テーブルが作成された後で行われる関連付けも、基本的には結合です。

Join

結合を作成する最も簡単な方法は、スクリプトでJoinプレフィックスを使用することです。これは、内部テーブルを別の名前のテーブルまたは最後に作成されたテーブルに結合します。この結合は outer joinになり、2 つのテーブルからのすべての可能な値の組み合わせを作成します。

例:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

その結果の内部テーブルには、項目 abcd が含まれています。レコード数は、2 つのテーブルの項目値によって異なります。

注: 結合される項目の名前は、完全に同じである必要があります。結合される項目数は任意です。通常、テーブルには 1 つまたは複数の共通する項目があります。共通する項目が 1 つもない場合、テーブルのデカルト積は生成されません。すべての項目が共通することも考えられますが、通常これは意味がありません。Joinステートメントで、先にロードされたテーブルの名前が指定されていない限り、Join プレフィックスは最後に作成されたテーブルを使用します。そのため、2 つのステートメントの順序を任意に指定することはできません。

Keep

QlikViewの主な機能の 1 つは、テーブルを結合する代わりにテーブル間に関連付けを作成できることです。これにより、メモリの使用量が削減され、速度が向上し、柔軟性が大幅に高まります。keep の機能は、明示的な結合の使用回数を減らす目的で設計されています。

2 つの LOADまたは SELECT ステートメント間の Keep プレフィックスは、QlikView にテーブルが保存される前に、2 つのテーブルの片方または両方をテーブル データの共通部分に縮小させます。Keepプレフィックスの前には、InnerLeft、またはRight のいずれかのキーワードを置く必要があります。テーブルからのレコードの選択は、対応する結合と同じ方法で行われます。ただし、2 つのテーブルは結合されず、個別のテーブルとしてそれぞれ異なる名前で QlikViewに保存されます。

Inner

QlikViewスクリプト言語内の Join および Keep プレフィックスの前に、プレフィックス Inner を置くことができます。

Joinの前に使用すると、2 つのテーブル間の結合が内部結合であると指定されます。結果のテーブルには、両方のテーブルのすべてのデータ セットのうち、2 つのテーブル間で共通するものだけが含まれます。

Keepの前に使用すると、QlikView に保存される前に、2 つのテーブルは互いの共通部分に縮小されます。

例:  

これらの例では、Table1Table2 のソース テーブルを使用しています。

Inner例のソース テーブル

まず、これらのテーブルで Inner Joinを実行すると、VTable が作成されます。このテーブルには 2 つのテーブルのデータを結合した結果、1 行だけ、両方のテーブルに存在するレコードだけが表示されます。

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

Inner Joinの例

それに対して、Inner Keepを実行すると、2 つのテーブルが残ります。これらの 2 つのテーブルは、共通項目 Aを介して関連付けられます。

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

Inner Keepの例

Left

QlikViewスクリプト言語内の Join および Keep プレフィックスの前に、プレフィックス left を置くことができます。

Joinの前に使用すると、2 つのテーブル間の結合が左結合であると指定されます。結果のテーブルには、1 つ目のテーブルのすべてのデータ セットと 2 つのテーブルの共通するものだけが含まれます。

Keepの前に使用すると、QlikView に保存される前に、2 つ目のテーブルが 1 つ目のテーブルとの共通部分に縮小されます。

例:  

これらの例では、Table1Table2 のソース テーブルを使用しています。

Left例のソース テーブル

まず、これらのテーブルで Left Joinを実行すると、VTable が生成されます。このテーブルには、Table1 のすべての行に加え、Table2 の一致行の項目が含まれています。

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

Left Joinの例

それに対して、Left Keepを実行すると、2 つのテーブルが残ります。これらの 2 つのテーブルは、共通項目 Aを介して関連付けられます。

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

Left Keepの例

Right

QlikViewスクリプト言語内の Join および Keep プレフィックスの前に、プレフィックス right を置くことができます。

Joinの前に使用すると、2 つのテーブル間の結合が右結合であると指定されます。結果のテーブルには、2 つ目のテーブルのすべてのデータと 2 つのテーブルで共通するものだけが含まれます。

Keepの前に使用すると、QlikView に保存される前に、1 つ目のテーブルが 2 つ目のテーブルとの共通部分に縮小されます。

例:  

これらの例では、Table1Table2 のソース テーブルを使用しています。

Right例のソース テーブル

まず、これらのテーブルで Right Joinを実行すると、VTable が生成されます。このテーブルには、Table2 のすべての行に加え、Table1 の一致行の項目が含まれています。

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

Right Joinの例

それに対して、Right Keepを実行すると、2 つのテーブルが残ります。これらの 2 つのテーブルは、共通項目 Aを介して関連付けられます。

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

Right Keepの例