はじめに
データ量が増えるにつれ、ロード時間は徐々に長くなります。たとえば売上明細テーブルが 100万件 → 500万件 → 1000万件と増えると、毎回のフルロードを行うのは業務に大きな負担となります。今回その解決策として、QVD(QlikView Data) を利用した増分ロードの方法について紹介します。
QVD(QlikView Data) とは
QVDファイルはQlik Sense または QlikView からエクスポートされたデータのテーブルを含むファイルであり、QVD ファイルからのデータの読み取りは、他のデータ ソースから読み取る場合よりも10~100 倍速くなります。
増分ロードとは
増分ロードとは、外部データソースから すべてのデータを毎回フルロードするのではなく、前回ロード以降に追加・更新されたデータだけを取り込む方式のことです。
すでに取得済みの過去データはQVDに蓄積しておき、次回以降のロードでは、新しいデータだけを追加することで処理時間を大幅に削減でき、データ量が増えてもロード時間がほとんど伸びず外部DBへの負荷を低減できます。
データロードエディタ
今回は、Sales.qvdに対してSales.qvd内の最新のオーダー日以降のExcelデータを増分ロードを行い、最新データを増分ロードしたSales.qvdに上書きする処理を記載しています。

増分ロード処理
※任意のデータを保持したSales.qvdを事前に作成されていることが前提条件となります。
//Excelから最新のオーダー日を基準に売上データを増分ロードしQVDに保存する処理
//既存QVDを読み込み
Sales_QVD:
LOAD
[オーダー ID],
Date([オーダー日],'YYYY/MM/DD') as オーダー日,
[都道府県],
[地域],
[製品 ID],
[カテゴリ],
[製品名],
[売上],
[数量]
FROM [lib://DataFiles/Sales.qvd] (qvd);
//QVD内の最新オーダー日を取得
Temp_MaxDate:
LOAD
Date(Max([オーダー日]),'YYYY/MM/DD') as 最新オーダー日
Resident Sales_QVD;
LET vLastOrderDate = Peek('最新オーダー日', 0, 'Temp_MaxDate');
DROP TABLE Temp_MaxDate;
//Excelから vLastOrderDate より新しいデータだけ取得
NoConcatenate
Sales_New:
LOAD
[オーダー ID],
Date([オーダー日],'YYYY/MM/DD') as オーダー日,
[都道府県],
[地域],
[製品 ID],
[カテゴリ],
[製品名],
[売上],
[数量]
FROM [lib://DataFiles/サンプル.xlsx]
(ooxml, embedded labels, table is 注文)
WHERE Date([オーダー日],'YYYY/MM/DD') > '$(vLastOrderDate)';
//元のQVDに今回の増分データを統合
Concatenate (Sales_QVD)
LOAD * RESIDENT Sales_New;
//増分データを統合したテーブルを新しいQVDとして保存
STORE Sales_QVD INTO 'lib://DataFiles/Sales.qvd' (qvd);
//不要なテーブルの削除
DROP TABLE Sales_New;
おわりに
今回QVD(QlikView Data) を利用した増分ロードの方法について紹介しました。大量のデータを扱う場合には、QVDの利用が最適です。ぜひ試してみてください。













