# 増分ロードにより新規および更新された記録をロード

継続的に更新される、データベースからの大量のデータがアプリに含まれる場合、データ セット全体をリロードするには時間がかかります。この場合、データ ベースから新しいレコードまたは変更されたレコードをロードします。その他のデータはアプリで利用できるはずです。増分ロードでは QVD ファイルを使用し、それを可能にします。

基本手順を以下に説明します。

1. データベースのソーステーブルから、新規または更新されたデータをロードします。

   このプロセスには時間がかかりますが、限定されたレコード数のみをロードします。

2. QVD ファイルから、アプリですでに利用可能なデータをロードします。

   多数のレコードがロードされますが、このプロセスに時間はかかりません。

3. 新しい QVD ファイルを作成します。

   これが、次回増分ロードで使用するファイルとなります。

4. ロードされるテーブルごとに手順を繰り返します。

以下の例には、増分ロードを使用する場合が示されていますが、ソース データベースの構造や操作モードによっては、より複雑なソリューションが必要な場合もあります。

* 追加のみ (通常はログ ファイルに使用)
* 挿入のみ (更新または削除なし)
* 挿入および更新 (削除なし)
* 挿入、更新、および削除

QVD ファイルは、最適化と標準のどちらかのモードで読み取ることができます(使用されるモードは、オペレーションの複雑さによって Qlik Sense エンジンが自動的に選択します)。最適化モードは、標準モードの約 10 倍、普通の方法でのデータベースのロードの約 100 倍の速度です。

詳細については、「[QVD ファイルでの作業](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-QVD-files.htm)」を参照してください。



## 追加のみ

最も単純なケースはログ ファイルです。このようなファイルではレコードが追加されるだけで、削除されることはありません。次の条件が適用されます。

* データベースは、テキスト ファイルに含まれているログ ファイル (またはレコードが挿入または削除ではなく追加される他のファイル) でなくてはなりません (ODBC、OLE DB、またはその他のデータベースはサポートされていません)。

* Qlik Sense は、以前に読み取られたレコード数を常に記録し、ファイルの末尾に追加されたレコードだけをロードします。

`Buffer (Incremental) Load 
 * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);`

## 挿入のみ (更新または削除なし)

単純なログ ファイル以外のデータベースにデータが存在する場合は、追加の方法は機能しません。ただし、少しの作業を追加するだけで問題を解決できます。次の条件が適用されます。

* データ ソースには、任意のデータベースを使用できます。

* Qlik Sense は、最後のスクリプト実行後にデータベースに挿入されたレコードをロードします。

* ModificationTime 項目 (または同様の項目) は、どのレコードが新しいかを Qlik Sense が認識するために必要です。

`QV_Table:` `SQL SELECT PrimaryKey, 
		X, Y FROM DB_TABLE` `WHERE ModificationTime 
		>= #$(LastExecTime)#` `AND ModificationTime < 
		#$(BeginningThisExecTime)#;` ` ` `Concatenate LOAD PrimaryKey, 
		X, Y FROM File.QVD;` `STORE QV_Table INTO File.QVD;` ` `

SQL WHERE 句のハッシュ記号は日付の開始と終了を定義します。ご使用中のデータベースの適正な日付構文については、データベース マニュアルを確認してください。

## 挿入および更新 (削除なし)

次のケースは、以前にロードされたレコード内のデータがスクリプト実行時に変更されている場合に適用可能です。次の条件が適用されます。

* データ ソースには、任意のデータベースを使用できます。

* Qlik Sense は、最後のスクリプト実行後にデータベースに挿入されたレコード、またはデータベースで更新されたレコードをロードします。

* ModificationTime 項目 (または同様の項目) は、どのレコードが新しいかを Qlik Sense が認識するために必要です。

* Qlik Sense が QVD ファイルから更新されたレコードをソートするためには、プライマリ キー項目が必要です。

* このソリューションでは、QVD ファイルの読み取りは (最適化モードではなく) 標準モードで行われます。標準モードはデータベース全体をロードするよりも、かなり高速です。

`QV_Table:``SQL SELECT PrimaryKey, 
		X, Y FROM DB_TABLE``WHERE ModificationTime 
		>= #$(LastExecTime)#;`` ``Concatenate LOAD PrimaryKey, 
		X, Y FROM File.QVD``WHERE NOT Exists(PrimaryKey);`` ``STORE QV_Table INTO File.QVD;`

## 挿入、更新、および削除

最も処理が難しいケースは、スクリプト実行時にソース データベースからレコードが実際に削除されている場合です。次の条件が適用されます。

* データ ソースには、任意のデータベースを使用できます。

* Qlik Sense は、最後のスクリプト実行後にデータベースに挿入されたレコード、またはデータベースで更新されたレコードをロードします。

* Qlik Sense は、最後のスクリプト実行後にデータベースから削除されたレコードを削除します。

* ModificationTime 項目 (または同様の項目) は、どのレコードが新しいかを Qlik Sense が認識するために必要です。

* Qlik Sense が QVD ファイルから更新されたレコードをソートするためには、プライマリ キー項目が必要です。

* このソリューションでは、QVD ファイルの読み取りは (最適化モードではなく) 標準モードで行われます。標準モードはデータベース全体をロードするよりも、かなり高速です。

` Let ThisExecTime = Now( 
		);  `` ``QV_Table:``SQL SELECT PrimaryKey, 
		X, Y FROM DB_TABLE``WHERE ModificationTime 
		>= #$(LastExecTime)#``AND ModificationTime < 
		#$(ThisExecTime)#;`` ``Concatenate LOAD PrimaryKey, 
		X, Y FROM File.QVD``WHERE NOT EXISTS(PrimaryKey);`` ``Inner Join SQL SELECT 
		PrimaryKey FROM DB_TABLE;`` `` If ScriptErrorCount = 
		0 then  ``STORE QV_Table INTO File.QVD;``Let LastExecTime = ThisExecTime; 
		``End If`

関連する学習:

* [増分ロードを使って現行レコードを処理するにはどうすればよいですか?](https://help.qlik.com/lnk/How_process_current_records_incremental_load)

## 詳細を見る

* [増分ロードを使って現行レコードを処理するにはどうすればよいですか?](https://help.qlik.com/lnk/How_process_current_records_incremental_load)