はじめに
Qlik Senseにおける「通常リロード(Full Reload)」とは異なるリロード方法をご存知でしょうか。今回は新たなアプローチ方法「部分的なリロード(Partial Reload)」についてご紹介いたします。
Partial Reload - 概要編 -
部分的なリロード(Partial Reload)は、通常リロード(Full Reload)のように既存のデータモデルをすべて新規に作成するのではありません。
データモデル内の全テーブルを保持し、Replace、Add、またはMerge接頭辞が付いたLoad文を利用して、指定された部分的なリロードのみを実行します。
これにより、データの変更分のみを追加、更新、または削除することが可能となります。
Partial Reload - 利点 -
- 高速処理:変更されたデータのみをロードするため、処理速度が向上します。
- メモリ効率:ロードされるデータ量が少なくなるため、メモリ消費が抑えられます。
- ネットワーク負荷軽減:ソースデータへのクエリがより高速に実行されます。
Partial Reloadで利用できるスクリプト
Partial Reloadで利用できるスクリプトには以下のものがあります。
スクリプト | 内容 | 基本構文 |
Add |
指定したテーブルにレコードを追加可能。 フルリロードの場合、通常のLoad文として機能する。 Concatenateが使用された場合や同じ項目情報を持つテーブルが存在する場合、既存テーブルに追加される。 ※重複チェックは実施されない。 |
Add [only] [Concatenate (tablename)] ... |
Replace |
ロードされたテーブルを別のテーブルに置き換えることが可能。 フルリロードの場合、通常のLoadステートメントとして機能するが、Drop Tableが実行される。 |
Replace [only] [Concatenate [(tablename)]] … |
Merge | ロードされたテーブルに、insert、update、deleteといった3つのオプションを適用することが可能。 | Merge [only] [(SequenceNoField)] on ListOfKeys [Concatenate [(tablename)]] … Operation, —-, —-, SequenceNoField:操作の順序を定義するシーケンス番号 ListOfKeys:キーを指定する項目名 Operation:insert, update, deleteを指定 |
Only | ステートメントが部分的なリロード中にのみ実行される必要がある場合に記載する。 フルリロード中は無視される。 |
Add Only … Replace Only … Merge Only … |
Full Reload vs Partial Reload
以下はFull Reload(通常リロード)とPartial Reload(部分的なリロード)の比較です。
Statement | Full Reload | Partial Reload |
Load ... | 〇 | ✖ |
Add / Replace / Merge Load ... | 〇 | 〇 |
Add / Replace / Merge Only Load ... | ✖ | 〇 |
〇:実行される
✖:実行されない
【注意点】Partial Reloadを明示的に記載するためには、Only関数を使用します。
Partial Reload - IsPartialReload()関数 -
● IsPartialReload()
現在のリロードが、
Partial Reload(部分的なリロード)の場合、True(-1)
Partial Reload以外の場合、False(0)
を返してくれます。
以下のように、スクリプトがPartial Relaodかどうかを判定することができます。
//Partial Reloadの処理であることを以下に明示的に記載
If(IsPartialReload() = True()) then
//Partial Reloadの処理を以下に記載
…
End if;
【注意点】Partial Reloadのみ有効なスクリプト(Only)をFull Reloadの処理に対して記載しても無視されてしまいます。
Partial Reload - 活用編 -
続いて、Partial Reloadの具体的な活用方法をご紹介します。Replace、Add、またはMerge接頭辞が付いたLoad文を使用します。
1. Replace - テーブルを置換する -
Replaceを使用して、テーブル名は一緒ですが、データを入れ替えることが可能です。
例 1-1)Full Reloadの場合
例 1-2)Partial Reloadの場合 (Replace Only)
2. Add - 既存テーブルへ行を追加する -
Addを使用して、既存テーブルへ行を追加することが可能です。
【注意点】重複チェックが実施されないため、データ重複の可能性があることに注意が必要です。
例 2-1)Full Reloadの場合
例 2-2)Partial Reloadの場合 (Add Only)
3. Merge - 既存テーブルに対する複雑な処理 -
Mergeを使用して、別のテーブルを既存テーブルに対して挿入、更新、削除を行うことが可能です。
● MergeスクリプトのOperation
MergeはLoad文の最初の項目に、Operationという項目名が必要です。
Operationには以下3つの操作を指定できます。今回は特に"Update"についてご紹介します。
Insert:挿入
Update:更新
Delete:削除
● Update - 既存テーブルの行を更新する -
Merge、かつUpdateというOperationを使用することで、既存テーブルの行を更新することが可能です。
例 3-1)Full Reloadの場合
例 3-2)Partial Reloadの場合(Merge Only)
Partial Reload - 実践編 -
Qlik Senseにて "Replace" を使用し、Full Reload および Partial Reloadそれぞれの挙動を確認してみます!
● Qlik Sense - ロードスクリプト -
ロードスクリプトは下図になります。下図のように、Table1について IsPartialReload()関数 を使用してFull ReloadとPartial Reloadの処理を区別しています。
目的としては、Partial Reloadにより、Table1が ID = {106, 107, 108} のデータに置き換わるかどうかを確認します。
● Qlik Sense - シート (Full Reload バージョン) -
以下は、Full Reload(通常リロード)を行った際のQlik Senseシート画面になります。
テーブルでデータを確認すると、ID = {101, 102, 103, 104, 105}のレコードが追加されていることがわかります。
● Qlik Sense - シート (Partial Reload バージョン) -
さて、Partial Reloadは一体どこで、どのように実行するのでしょうか。
それは... チャートの『ボタン』になります!
〇 設定方法
-
-
- ボタンのアクション ”データのリロード" を選択する
- ”部分的なリロード”に✅を入れる
-
(※最終イメージとしては下図のようになります。)
上記実装したボタンを押下することで、Partial Reloadが実行されます。
実際に実行してみます! 下図はPartial Reload実行後の結果です。
Table1が ID = {106, 107, 108} のレコードに置き換わったことが確認できます。
おわりに
通常リロードでは、多くのメモリが消費され、かつロードに時間がかかってしまいます。そんなときに『部分的なリロード(Partial Reload)』を有効に活用していきましょう!
この情報が少しでもお役に立てれば幸いです。
参考文献
- 部分的なリロード | Windows 用 Qlik Sense ヘルプ(https://help.qlik.com/ja-JP/sense/February2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/PartialReload.htm)
- Qlik Tips: 部分的なリロード (Partial Reload)の実践 |Qlik Japan - YouTube(https://www.youtube.com/watch?v=F1SMm9TWJJg)