Data Loaderで項目値を空にして更新する手順とポイント
空欄のCSVをそのまま流しても、既存の値は消えません。Insert Null Values設定を有効にしないと、空欄は「変更なし」として無視されるからです。設定の効きかたと、APIによる違いを書きます。
空欄のCSVを流しても値が消えない理由
Data Loaderは、既定ではCSVの空欄セルを「変更しない」という指示として扱います。取引先のカスタム項目に値が入っているレコードへ、空欄のCSVで更新をかけても、既存の値はそのまま残ります。
値を実際に空へ更新するには、Insert Null Values(設定ファイルではinsertNulls)を有効にする必要があります。有効にすると、空欄セルはnullとして扱われ、既存の値を上書きして消します。
バッチで使うファイル
Data Loaderをバッチ(process.bat)から動かす構成では、次のファイルを用意します。
| ファイル | 役割 |
|---|---|
| dataLoader.key | パスワードを暗号化した鍵ファイル |
| encrypt.bat | パスワードを暗号化するツール(Data Loader同梱) |
| process.bat | バッチ実行の本体(Data Loader同梱) |
| file1.bat | 上記2つを呼び出す起動用スクリプト |
| file1.sdl | CSVの列とSalesforce項目のマッピング定義 |
| file1.csv | 更新対象データ |
| process-conf.xml | バッチの設定(対象オブジェクト・操作・接続先など) |
| log/success.csv | 成功したレコードのログ |
| log/error.csv | 失敗したレコードのログ |
Insert Null Valuesを有効にする
GUIで操作する場合は、Data Loaderの「設定」画面で「Insert Null Values」にチェックを入れます。process-conf.xmlで設定を書く場合は、sfdc.insertNullsをtrueにします。
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="Process1" class="com.salesforce.dataloader.process.ProcessRunner" scope="prototype"> <property name="name" value="Process1"/> <property name="configOverrideMap"> <map> <entry key="sfdc.endpoint" value="https://xxxx.my.salesforce.com"/> <entry key="sfdc.username" value="xxxxxxxx"/> <entry key="sfdc.password" value="xxxxxxxx"/> <entry key="sfdc.insertNulls" value="true"/> <entry key="sfdc.timeoutSecs" value="600"/> <entry key="sfdc.loadBatchSize" value="200"/> <entry key="sfdc.entity" value="Account"/> <entry key="process.operation" value="update"/> <entry key="process.mappingFile" value="file1.sdl"/> <entry key="dataAccess.name" value="file1.csv"/> <entry key="process.outputSuccess" value="log/success.csv"/> <entry key="process.outputError" value="log/error.csv"/> <entry key="dataAccess.type" value="csvRead"/> </map> </property> </bean> </beans>
process-conf.xmlの設定です。sfdc.insertNullsをtrueにして、空欄セルをnullとして扱います。接続先とパスワードは伏せています。
#Mapping values test=test__c 取引先名=Name
項目のマッピング定義です。CSVの列名「test」をカスタム項目test__cへ対応づけています。
空欄を含むCSVを用意する
同じ列構成で、値がある行と空欄の行を混ぜます。
取引先名,test 取引先テスト0329-3,test0329-3
test列に値が入っている行です。更新後もtest__cに値が残ります。
取引先名,test 取引先テスト0329-4,
test列が空欄の行です。insertNullsがtrueなら、更新後test__cはnullになります。
実行して確認する
insertNullsを有効にしたままバッチを実行する
file1.batからprocess.batを呼び出し、process-conf.xmlの設定でCSVを読み込みます。
ログを見る
log/success.csvに処理した件数が記録されていることを確認します。log/error.csvが空であれば、エラーは起きていません。
Salesforce側で項目値を見る
取引先「取引先テスト0329-3」と「取引先テスト0329-4」を開き、カスタム項目test__cの値を確認します。
処理結果は次のようになります。
| レコード | CSVのtest列 | 更新後のtest__c |
|---|---|---|
| 取引先テスト0329-3 | test0329-3 | test0329-3のまま |
| 取引先テスト0329-4 | 空欄 | 空(nullに更新される) |
Bulk APIを使うときの注意
#N/Aと入力します。SOAP API(Bulk APIを使わない既定の設定)では、insertNullsがtrueの空欄セルがそのままnullになります。このバッチはprocess-conf.xmlにsfdc.useBulkApiを設定していないため、SOAP APIで動きます。Bulk APIへ切り替える場合は、CSVの空欄を#N/Aに直す必要があります。
ここで間違えやすい
| 間違い | 何が起きるか |
|---|---|
| insertNullsをtrueにせずに空欄で更新する | 空欄は「変更なし」として無視され、既存の値が残ります |
| Bulk API有効時に空欄で更新するつもりでいる | insertNullsがtrueでも空欄は無視されます。#N/Aを使います |
| 必須項目をnullにしようとする | 更新は失敗します。必須項目はnullにできません |
| フローやトリガーが動く項目を大量にnull更新する | 処理が失敗しやすくなります。loadBatchSizeを小さくして様子を見ます |
確認した環境
- 2026年9月/Salesforce Summer '26(APIバージョン67.0)時点の公式ヘルプ記事とData Loaderガイドで、insertNullsの挙動とBulk APIとの違いを確認しています
- 認証情報とオブジェクト構成は、ご自身の組織のものに置き換えてください
まとめ
- Data Loaderは既定で空欄セルを「変更なし」として無視します。値を空にするにはinsertNullsをtrueにします
- insertNullsはprocess-conf.xmlの
sfdc.insertNulls、GUIでは「Insert Null Values」の設定です - Bulk APIを使うと、insertNullsがtrueでも空欄セルは無視されます。null更新には
#N/Aを使います - 必須項目や、フロー・トリガーが動く項目のnull更新は失敗しやすいので、少ない件数で試してから本番の件数を流します
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。