Bulk APIとBulk API 2.0の違い・使い分け

By | September 26, 2023

Bulk APIとは

大量データのクエリや操作(Insert, Update, Upsert)を非同期で実行するためのAPI。

特徴は以下。

  • 行数制限・データ容量制限・ガバナ制限など様々な制限の緩和
  • 並列処理によるスループットの向上
  • 非同期処理
  • 自動リトライ機能(※バッチ単位で10回まで自動リトライ。BulkAPI2.0の場合、任意のバッチが10回全てで処理に失敗した場合、ジョブ全体を失敗し、残データの処理を中止する)
  • 進捗の監視
  • CSV形式への対応

Bulk APIとBulk API 2.0の相違

Bulk APIBulk API 2.0
認証なし(SOAP APIのlogin()コールで取得されるX-SFDC-Session ヘッダーが必要)OAuth2.0認証フロー
データ形式CSV, XML, JSON, バイナリ(=ファイル)CSV
ジョブのバッチへの分割クライアント側で分割する必要あり(バッチサイズは指定可能SF側で自動分割(バッチサイズは指定不可)
クエリジョブの最適化PK Chunkingは手動設定PK Chunkingを自動実行
制限15,000バッチ/日
10MB/バッチ
1.5億レコード/日
150MB/ジョブ

※データローダはBulk API 1.0のみサポート

(参考:こちらの開発者ガイド

使い分け

レコードの処理
→BulkAPI 2.0 in parallel mode

ファイルのアップロード(※Bulk API 2.0はファイルに対応していない)
→〜20MB:Bulk API 1.0(zip化されている場合、〜10MB)
 20MB〜37.5MB:REST API
 37.5MB〜:REST APIのmultipart request

ファイルの取得
→REST API(BulkAPIは非対応)

注意事項

  • BulkAPI 1.0・2.0共通
    • 基本的にデフォルトのまま、並列モードで実行する(親子ロック競合の発生リスクが生まれるが、10回の自動リトライ機能がエラー発生対策となっている)
    • ロック競合の回避(「同一の親に紐づく子レコードをまとめる」か、「参照関係・主従関係の項目は一旦空白にして投入し、後からそれらを埋める」)
  • BulkAPI のみ
    • バッチサイズの最適化(「処理に10分以上かかりバッチがキューに戻されてしまう場合」や「親子のロック競合の大量発生が想定される場合」はバッチサイズをそれらの問題が発生しないような”適切な”サイズまで小さくする)
  • BulkAPI 2.0のみ
    • ファイルの分割(ジョブサイズ150MB制限があるため、ファイルの容量が150MBを超える場合、事前分割の必要あり)