開発環境・ツール

Data Loaderで項目値を空にして更新する手順とポイント

空欄のCSVをそのまま流しても、既存の値は消えません。Insert Null Values設定を有効にしないと、空欄は「変更なし」として無視されるからです。設定の効きかたと、APIによる違いを書きます。

2025.07.17

空欄の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.sdlCSVの列とSalesforce項目のマッピング定義
file1.csv更新対象データ
process-conf.xmlバッチの設定(対象オブジェクト・操作・接続先など)
log/success.csv成功したレコードのログ
log/error.csv失敗したレコードのログ
Data Loaderのフォルダ構成図。bin配下のfolder1にfile1.batやfile1.csv、logフォルダが並ぶ
バッチで使うファイルの置き場所です。bin配下にfolder1を作り、その中にfile1.batとfile1.csv、logフォルダを置きます。

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になります。

実行して確認する

  1. insertNullsを有効にしたままバッチを実行する

    file1.batからprocess.batを呼び出し、process-conf.xmlの設定でCSVを読み込みます。

  2. ログを見る

    log/success.csvに処理した件数が記録されていることを確認します。log/error.csvが空であれば、エラーは起きていません。

  3. Salesforce側で項目値を見る

    取引先「取引先テスト0329-3」と「取引先テスト0329-4」を開き、カスタム項目test__cの値を確認します。

処理結果は次のようになります。

レコードCSVのtest列更新後のtest__c
取引先テスト0329-3test0329-3test0329-3のまま
取引先テスト0329-4空欄空(nullに更新される)
取引先テスト0329-3の詳細画面。赤枠のtest項目にtest0329-3という値が入っている
値が入ったCSVで更新した結果です。赤枠のtest項目に、もとの値がそのまま残っていることを見てください。
取引先テスト0329-4の詳細画面。赤枠のtest項目が空になっている
空欄のCSVで更新した結果です。赤枠のtest項目が空になり、値が消えていることを見てください。

Bulk APIを使うときの注意

Bulk APIを有効にしている場合、insertNullsをtrueにしても空欄セルは無視され、既存の値が残ります。Bulk APIで明示的にnull更新をしたいときは、対象セルへ#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との連携まで承ります。状況を伺ったうえで、進め方をご提案します。