Bulk APIとは
大量データのクエリや操作(Insert, Update, Upsert)を非同期で実行するためのAPI。
特徴は以下。
- 行数制限・データ容量制限・ガバナ制限など様々な制限の緩和
- 並列処理によるスループットの向上
- 非同期処理
- 自動リトライ機能(※バッチ単位で10回まで自動リトライ。BulkAPI2.0の場合、任意のバッチが10回全てで処理に失敗した場合、ジョブ全体を失敗し、残データの処理を中止する)
- 進捗の監視
- CSV形式への対応
Bulk APIとBulk API 2.0の相違
Bulk API | Bulk 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を超える場合、事前分割の必要あり)