1. はじめに
今回ご紹介する「Direct Query」は、データをメモリにインポートまたはロードせずに、直接データベースを読み取ることができる機能です。
Direct Queryの概要については、以下をご参照ください。
Direct Query を使用してクラウド データベースに直接アクセス | Qlik Cloud ヘルプ
いくつか利点はありますが、以下の2点が大きいのではないでしょうか。
- 膨大なデータを高速に処理することができる
- リアルタイムデータを瞬時に表示することができる
SnowflakeやBigQueryといったクラウドDWHは、膨大なデータを高速に処理することが可能です。Qlik公式のリファレンスによると、2,000万行がDirect Queryを検討するラインだそうです。経験的にも、2,000万行というラインは外れていないと感じます。また、データをインポートまたはロードするといったプロセスを踏まず、直接DWHを参照することで、常に最新のデータを閲覧することができるのも大きなメリットの1つでしょう。
当然のことながら、デメリットもいくつか存在します。特に以下の2点が大きいと私は考えます。
- SQLに変換する必要があるため、使用できる関数やチャート、機能に制限がある
- 都度クエリが発行されてしまうため、DWH側のコストがかさむ
Qlikは画面側の作りこみ次第で複雑な集計や表現を可能にしますが、SQLへの変換といった処理が必要となることで、使用できる関数や機能に制限が加わります。また、都度DWH側にクエリが発行されるため、DWH側のコストが増加してしまいます。
本記事では、Qlik Cloudで「Direct Query」の機能を使用してSnowflakeのデータを直接参照する方法について解説します。
2. 実装
2-1. データ接続の作成
まず初めに、Snowflakeに接続するためにデータ接続を作成します。
Qlik Cloudにログイン後、右上の「新規追加」から「データ接続」を選択します。その後、Snowflakeを選択し、接続情報を入力します。「接続をテスト」をクリックし、”Connection succeeded” と表示されることが確認できたら「追加」をクリックしてデータ接続の作成は完了となります。
2-2. データモデルの作成
データ接続の作成が完了したので、Snowflakeに接続するアプリを作成していきます。
右上の「新規追加」から「新しい分析アプリ」を選択し、任意の名前・説明・タグなどを入力したら「作成」をクリックします。
「ファイルおよびその他のソース」を選択します。
「既存の接続」から、作成したSnowflakeへのデータ接続を選択し、右上のメニューボタンから「Direct Queryに移動」を選択します。
次に、Direct Queryで参照するテーブルを選択して「次へ」をクリックします。Role・Database・Schemaはデータ接続を作成した際に入力した情報がデフォルトで設定されていますが、この画面で変更することも可能です。
次に、追加したテーブル間の関係(リレーションシップ)を定義します。
「+関係」をクリックし、関連付けるテーブルとキーとなる項目、および結合方法を選択して追加していきます。全て定義出来たら「変更を更新」をクリックしましょう。
Inner join か Full outer join しか選べないのは少し残念ですね。SQLを自動発行するということを考えるとしょうがないか、とも思いますが。
先ほどの画面でテーブルの右にあるメニューボタンをクリックし、「編集」を選択すると、データモデルに追加する項目を選択できます。カスタム列を追加したり、項目の値を編集したりといったデータの編集はできません。あらかじめDB側で持たせておく必要があります。
※カスタムSQLを使用することでテーブルや項目を生成することができますが、本記事では触れません
作成したデータモデルは通常と同様に「データモデルビューア」で確認することができます。関連付け用のカラムが追加され、同名の項目はプレフィックスにテーブル名を付与することでユニーク化されています。
2-3. 画面の作成
データモデルが完成したので、画面を作成します。
今回は、テストも兼ねて深く考えずにチャートを追加していきました。フィルターや、SET分析に加え、Variable Inputを使用した変数の切り替えと集計式への変数の利用など、基本的な機能は使用できることを確認しました。
ただし、当然のことながら制限事項も多かったです。
例えば「折れ線グラフで2つ軸を設定する」「軸に数式を入れる 例:Year([SALE_DATE])」「対応していない集計関数を使用する」など、制限事項に反することを行うと、キャプチャ右下のようにエラーメッセージが表示されてしまいます。制限事項を把握・理解した上で利用する必要があります。
以下に制限事項に関するリンクを載せておきますので、ご確認ください。
ちなみにですが、先ほどの画面でフィルターを1つかけただけで、これだけのクエリが発行されていました。コストには要注意です…
3. まとめ
本記事では、Qlik Cloudで「Direct Query」の機能を使用してSnowflakeのデータを直接参照する方法について解説しました。
Qlikは公式リファレンスに以下のように記載し、基本的には通常のデータをロードして使用するアプリを推奨しています。
一般に、可能な限りデータを Qlik Cloud にインポートすることをお勧めします。インメモリ Qlik Cloud アプリを使用すると、エクスペリエンスをより適切にカスタマイズし、データを最大限に活用できます。
私も同じ考え方で、基本的にはロードして使用することが望ましいと考えます。キャプチャを載せて少し触れましたが、ユーザーが操作するたびにクエリが発行されてしまい、DWH側に大きくコストがかかってしまう危険性があります。また、Qlik Cloudが持つ機能を最大限に活用することができない点や、Vizlibといった強力な拡張製品が使用できない点も大きなデメリットです。
とはいえ、制限事項を理解し、適切に使用すれば「Direct Query」は価値をもたらす機能であることは間違いありません。こういった手段もあるんだな、ということは頭に入れておいて損はないと思います。