データローダ バッチ処理 & Windowsタスクスケジューラ
データローダ バッチ処理 & Windowsタスクスケジューラ
Ref.
- https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/data_loader.htm
- https://help.salesforce.com/s/articleView?id=000331524&type=1
- バッチモードでの実行
- SFDC:データローダバッチ開発時に意識すること
- SFDC:データローダバッチ開発の流れ
- https://keneloper.com/summary-of-how-to-use-the-data-loader/
- 「System.LimitException: Too many SOQL queries: 101」エラー
- ガバナ制限
インストール要件
Windows のシステム要件
データローダは Windows で署名されています。Windows 用のデータローダを使用するためのシステム要件は、次のとおりです。
Microsoft® Windows® 10 (64 ビット、Intel x86 版)
120 MB のハードディスクの空き容量
256 MB の空きメモリ
Windows 用の Java Runtime Environment (JRE) バージョン 11 以降 (Zulu OpenJDK バージョン 11 以降など)
ref. https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/installing_the_data_loader.htm
前提
- データローダ
v52.0.0の情報です - ドキュメントの `` は適宜読み替えてください
必要なもの
- Zulu OpenJDK 11
- データローダー(Salesforce管理画面からダウンロード可能)
- セキュリティトークン
- Salesforce管理画面から発行(登録メールアドレスに送信)

Zulu OpenJDK 11
- ダウンロード
- インストール
- 環境変数に
JAVA_HOMEを設定
ダウンロード
Download Azul Zulu Builds of OpenJDKからZulu OpenJDK 11をダウンロードします。

※ データローダはOracleのJDKではなくZulu OpenJDK 11を使用します(2021-10-07時点)。
インストール
C:\Program Files\Zulu\zulu-11\にインストールした前提で勧めます。
環境変数にJAVA_HOMEを設定
システムのプロパティを表示するにはWindows + rに以下を入力する。
sysdm.cpl

新規より変数名JAVA_HOMEを追加します。
- 変数名:
JAVA_HOME - 変数値:Zulu OpenJDK 11インストールフォルダ(本ドキュメントの例では
C:\Program Files\Zulu\zulu-11\)

データローダ
Salesforce管理画面からインストールしてください。
本ドキュメントではC:\Users\my-user\dataloader\v52.0.0にインストールした前提で進めます。
バッチ処理
データローダをダウンロードしたディレクトリにsampleがあるので、それをコピーして作成。
C:\Users\my-user.dataloaderに以下を作成。
.dataloader
|
|-- conf
|
|-- accountMap.sdl
|
|-- process-conf.xml
|
|-- data
|
|-- log
|
|-- status
|
|-- dataLoader.key <-- 「データローダ用暗号化パスワード生成」で作成される
基本的にはマップファイルxxxMap.sdlとprocess-conf.xmlを作成する。
手順
- データローダ用暗号化パスワード生成
process-conf.xmlなどにバッチ処理の設定内容を記載- 実際にはその他にもいくつか設定ファイルが必要です
- バッチ実行
- ↑をタスクスケジューラで実行
データローダ用暗号化パスワード生成
データローダ用暗号化パスワードには以下情報が必要です。
- Web管理画面ログインパスワード
- セキュリティトークン
データローダ用暗号化パスワード生成は2つのステップが必要です。
Step1 dataloder.keyを作成
$ cd C:\Users\my-user\dataloader\v52.0.0\bin
$ encrypt -k
# デフォルトでは以下フォルダにdataloader.keyが作成されます。
C:\Users\my-user\.dataloader\dataLoader.key
Step2 データローダ用暗号化パスワードを生成
Step1でC:\Users\my-user\.dataloader\dataLoader.keyを作成済みとします。
$ cd C:\Users\my-user\dataloader\v52.0.0\bin
$ encrypt -e C:\Users\my-user\.dataloader\dataLoader.key
# 暗号化パスワード表示
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
↑で生成された暗号化パスワードは process-conf.xml の中で使用します。
process-conf.xmlにバッチ処理の内容を記載
https://help.salesforce.com/s/articleView?id=sf.command_line_create_config_file.htm&type=5
バッチ実行
- バッチ処理コマンド:
C:\Users\my-user\dataloader\v52.0.0\bin\process.bat process-conf.xmlにバッチ処理の内容を記載
以下の形式でバッチ処理を実行する。
$ process.bat ""
``はprocess-conf.xmlに記載したプロセスです。
ref. https://help.salesforce.com/articleView?id=command_line_intro.htm&type=5
具体例)
$ cd C:\Users\my-user\dataloader\v52.0.0\bin
$ process.bat "C:\Users\.dataloader\conf" accountInsert
※ process-conf.xmlをC:\Users\.dataloader\confに作成している前提です。
タスクスケジューラで実行
Windowsタスクスケジューラを使用する。
タスクスケジューラを表示するにはWindows + rに以下を入力する。
taskschd.msc

- プログラム/スクリプト:C:\Users\my-user\dataloader\v52.0.0\bin\process.bat
- 引数の追加(オプション)(A):C:\Users\my-user.dataloader\conf accountInsert
- 開始(オプション)(T):C:\Users\my-user.dataloader
備考
設定ファイル
process-conf.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="accountInsert"
class="com.salesforce.dataloader.process.ProcessRunner"
scope="prototype">
<description>accountInsert job gets the account record from the CSV file
and inserts it into Salesforce.</description>
<property name="name" value="accountInsert"/>
<property name="configOverrideMap">
<map>
<entry key="sfdc.debugMessages" value="true"/>
<entry key="sfdc.debugMessagesFile"
value="C:\DLTest\Log\account InsertSoapTrace.log"/>
<entry key="sfdc.endpoint" value="https://login.salesforce.com"/>
<entry key="sfdc.username" value="dataloader@example.com"/>
<!--Password below has been encrypted using key file,
therefore, it will not work without the key setting:
process.encryptionKeyFile.
The password is not a valid encrypted value,
please generate the real value using the encrypt.bat utility -->
<entry key="sfdc.password" value="暗号化パスワード"/>
<entry key="process.encryptionKeyFile"
value="C:\Users\my-user\.dataloader\dataLoader.key"/>
<entry key="sfdc.timeoutSecs" value="600"/>
<entry key="sfdc.loadBatchSize" value="50"/>
<entry key="sfdc.entity" value="Account"/>
<entry key="process.operation" value="insert"/>
<entry key="process.mappingFile"
value="C:\Users\my-user\.dataloader\conf\accountInsertMap.sdl"/>
<entry key="dataAccess.name"
value="C:\Users\my-user\.dataloader\data\insertAccounts.csv"/>
<entry key="process.outputSuccess"
value="C:\Users\my-user\.dataloader\log\accountInsert_success.csv"/>
<entry key="process.outputError"
value="C:\Users\my-user\.dataloader\log\accountInsert_error.csv"/>
<entry key="dataAccess.type" value="csvRead"/>
<entry key="process.initialLastRunDate"
value="2005-12-01T00:00:00.000-0800"/>
</map>
</property>
</bean>
</beans>
accountInsertMap.sdl
#Mapping values
#Thu May 26 16:19:33 GMT 2011
Name=Name
NumberOfEmployees=NumberOfEmployees
Industry=Industry
データローダ設定
GUI設定
バッチサイズ (Batch size) 一度の挿入、更新、更新/挿入、削除操作で Salesforce に対して入出力されるレコードは、このオプションで指定したサイズで増分されます。最大 200 レコードです。50 から 100 までの値をお勧めします。 [Bulk API を使用] オプションがオンの場合、最大値は 10,000 です。
https://help.salesforce.com/s/articleView?id=sf.configuring_the_data_loader.htm&type=5
Bulk API を使用 このオプションを選択すると、Bulk API を使用して、レコードの挿入、更新、更新/挿入、削除、および物理削除が行われます。Bulk API は、多数のレコードを非同期で読み込みまたは削除するように最適化されます。並列処理を行い、ネットワーク往復数を少なくすることで、デフォルトの SOAP ベースの API よりも高速に動作します。 警告 データローダで [Use Bulk API (Bulk API を使用)] をオンにすると、レコードを物理削除できます。物理削除されたレコードはただちに削除され、ごみ箱から復元することはできません。
一括 API に対して順次モードを有効にする Bulk API に並列処理ではなく順次処理を使用する場合、このオプションを選択します。並列処理を行うと、データベースの競合が生じる可能性があります。競合が激しいと、読み込みに失敗する可能性があります。順次モードでは、バッチが 1 つずつ処理されますが、読み込みの処理時間が長くなる可能性があります。 [Bulk API を使用] オプションがオンの場合、このオプションだけを使用できます。
https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/configuring_the_data_loader.htm
Bulk APIを有効にしても順次モードを適用することができる
[一括 API に対して順次モードを有効にする] オプションをオンにすることもできます。並列処理を行うと、データベースの競合が生じる可能性があります。競合が激しいと、読み込みに失敗する可能性があります。順次モードでは、バッチが 1 つずつ処理されますが、読み込みの処理時間が長くなる可能性があります。 注意: データローダで [Use Bulk API (Bulk API を使用)] をオンにすると、レコードを物理削除できます。物理削除されたレコードはただちに削除され、ごみ箱から復元することはできません。
https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/loader_configuring_bulk_api.htm
process-conf.xml
https://help.salesforce.com/s/articleView?id=sf.loader_params.htm&type=5
バッチファイルサンプル
rem バッチファイルのコメントはremコマンドを使います
@echo off
rem %0はバッチファイル名が渡されます
rem sample.bat a b c
rem %0 => sample.bat
rem %1 => a
rem %2 => b
rem %3 => c
rem リダイレクト >> によってファイルに追記
echo %0 >> log.txt
echo %1 >> log.txt
echo %2 >> log.txt
echo %3 >> log.txt
実行
> cd /path/to/project
> ./sample.bat a b c
ref.
- https://www.javadrive.jp/command/redirect/index2.html#section1
v44.0.0
データローダインストール
v45からはJavaがZulu 11が必須となった。しかしZulu 11は64ビットしか対応していない。 そのために32ビット機で動かすためにGitHubからダウンロード。
- forcedotcom/dataloaderからv44.0.0をダウンロード
- Java 8をインストール
Java8をインストールしたら自動で環境変数JAVA_HOMEが追加されてPATHにJDKのパスが追記された。
- JAVA_HOME:
C:\Program Files\Java\jre1.8.0_271 - PATH:
C:\Program Files\Java\jre1.8.0_271\binを先頭に追加C:\Program Files\Common Files\Oracle\Java\javapath;を末尾に移動
JavaのPATHへの追加は下記を参照。
http://ooltcloud.sakura.ne.jp/blog/201802/article_09182611.html
https://teratail.com/questions/35801
https://web.plus-idea.net/2017/04/java_home-swich-jdk/
encrypt・proccessインストールディレクトリ
$ C:\Users\\AppData\Local\salesforce.com\Data Loader\bin