今回は Qlik のデータフロー(DataFlow)を実際に触ってみたので、その概要と所感を紹介します。
データフローとは
データフローは、Qlik Cloud(SaaS 版)の QCA 上で利用できるデータ前処理機能です。
ロードスクリプトがコードベースで記述するのに対し、データフローは GUI(ローコード)で設定できる点が特徴です。
データフローの構成要素
データフローは「ソース」「プロセッサ」「ターゲット」の3つで構成されます。
ソースは「入力」、プロセッサは「処理」、ターゲットは「出力」を置き換えて頂ければよろしいかと思います。
ソース
ファイルやデータベースと接続し、データを取得します。
プロセッサ
取得したデータを加工・変換します。代表的な処理は以下のとおりです。
機能 | 内容 |
---|---|
フィルター | 項目ごとの条件指定 |
項目の選択・削除・名称変更 | 必要な項目のみを利用可能 |
結合/集合 | 内部結合・外部結合や UNION 処理 |
集計/ウィンドウ | 合計・平均・最大・最小など |
文字列・日付・数値処理 | 型ごとの変換や演算 |
ピボット解除 | 列→行の変換処理 |
フォーク | 1つの入力を複数に分岐(最大10出力) |
スクリプト | 一部コードによる処理も可能 |
ターゲット
出力先として、Qlik Cloud 内部のファイルや、Google Drive・Amazon S3 など外部ストレージを指定できます。
データフローの作成
以下の処理を作成してみました。
- トランザクションを入力、フィルタをかける
- マスタを結合
- 新規項目を作成し計算
- ファイル出力
データフローでは以下になります。
データーフローのスクリプトをプレビュー表示してみました。
[transaction_data]:
NOCONCATENATE
LOAD
[date],
[product_code],
[quantity],
[unit_price]
FROM [lib://DataFiles/transaction_data.csv] (txt, utf8, embedded labels, delimiter is ',', msq);
[商品マスタ結合]:
NOCONCATENATE
LOAD
[date],
[product_code],
[quantity],
[unit_price]
RESIDENT [transaction_data]
WHERE [product_code] = 'P003';
LEFT JOIN([商品マスタ結合])
// [product_master]:
LOAD
[product_code],
[product_name]
FROM [lib://DataFiles/product_master.csv] (txt, codepage is 28591, embedded labels, delimiter is ',', msq);
[計算]:
NOCONCATENATE
LOAD
[product_code],
[date],
[quantity],
[quantity] * [unit_price] AS [amount],
[unit_price],
[product_name]
RESIDENT [商品マスタ結合];
DROP TABLE [商品マスタ結合];
STORE [計算] INTO [lib://DataFiles/test.csv] (txt);
DROP TABLE [計算];
スクリプトを見る限り、処理毎にResidentロードされているようでした。件数が多くなると処理時間を注意する必要がありそうですね。
ちなみにロードスクリプトではResidentなしで記述できます。
[transaction_data]:
LOAD
[date],
[product_code],
[quantity],
[unit_price],
[quantity] * [unit_price] AS [amount]
FROM [lib://DataFiles/transaction_data.csv] (txt, utf8, embedded labels, delimiter is ',', msq)
WHERE [product_code] = 'P003';
LEFT JOIN([transaction_data])
// [product_master]:
LOAD
[product_code],
[product_name]
FROM [lib://DataFiles/product_master.csv] (txt, codepage is 28591, embedded labels, delimiter is ',', msq);
STORE [transaction_data] INTO [lib://DataFiles/test.csv] (txt);
DROP TABLE [transaction_data];
活用方法のイメージ
QCA ではアプリごとにデータのリロード処理が必要なので、その前段でデータフローを用いて前処理を行うことで、アプリ側のスクリプトを簡素化できます。
ただし、既存の複雑なロードスクリプトをそのまま置き換えるのは難しいケースも想定されます。
データフローの強み
ロードスクリプトは柔軟にロジックを記述できますが、学習コストが高い傾向があります。
一方でデータフローは GUI ベースのため、プログラミング知識がなくても利用しやすく、初学者にとって導入しやすい点がメリットです。
また、作成したデータフローは Application Automation、Qlik Predict の前処理や Qlik Talend での再利用も可能で、Qlik 製品間での親和性が高いことも特長です。
留意点
データフローの出力形式は CSV、Parquet、QVD に限定されているため、利用シーンに応じた設計が必要です。また、同じく Qlik が提供する Qlik Talend とは別製品として位置づけられている点にも注意が必要です。私は最初混乱しました。。。
まとめ
データフローは、コードベースのロードスクリプトに比べて習得しやすく、GUI 操作で直感的にデータ前処理を行えるのが特長です。
今後、Qlik Cloud を活用したデータ分析基盤の運用において、スクリプトとデータフローをどう使い分けるかが重要になってくると考えられます。
ではまた!