2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bulk APIを使ったデータ連携(準備編)

Last updated at Posted at 2022-03-17

CURLコマンドをSalesforceで活用するに戻る

はじめに

Salesforceに初期値を移行する時、他のシステムとバッチでデータを連携する時にみなさんは、何を使っているでしょうか?
私は Linux上でシェルからBulk API(V1)を呼び出して行っています。

データのインポート作業は

  1. 何かしらの元データを用意する(Excel,csv,固定長テキスト、あるいは直接データベースからのデータ抽出)
  2. 目的のオブジェクトに合わせて加工する。
  3. 文字コードをUTF-8に変換する(特にWindowsで作ったcsvファイルは要注意です)
  4. Bulk APIを使ってインポートする。(実際はupsert)

という流れだと思いますが、シェルで行えば1~4のステップを同じ環境で行えるし自動化もできます。特に文字コードの変換はコマンドが用意されているLinux(Unix)が便利です。またxlsxファイルもPythonに便利なライブラリopenpyxlがあるので簡単にCSVデータに加工できます。

基幹システム等のデータソースに直接アクセスできる権限があれば、PHPなどでデータベースに直接アクセスしてCSVに加工できるので、大変便利です。PHPであればかなり多くのデータベースに簡単に接続できます。ただし、SQL Serverはうまく行かなかったように思います。DB2は苦労しましたがPHPからでも接続可能でした。

Linux環境の準備

すべてのLinuxディストリビューションで試したわけでないのですが、おそらく以下を満たせたら問題はないと思います。

一番大事なのはTLS1.2で通信できることです。既にSalesforce による TLS 1.1 の無効化 が実施されているので、これは必須です。LinuxではOpen SSHが使えると大丈夫と言えます。

私の現在の環境はDebian 9です。以前はRed Hat Linux 8でした。Red Hat Linux 8にはOpen SSHをソースコードから展開したのでとても苦労しましたが、Debian 9はaptコマンドで簡単にインストールできました。(私の趣味でソースから作成するのが好きだったせいです。Red Hat Linux 8の問題ではないですよ)

シェルを使って処理をするのですが、bashシェルがいいかと思います。他のシェルでも問題はないかと思いますがこれからの例題はすべてbashシェルになります。必要な方は読み替えて下さい。

また、Salesforceと接続するためにはインターネット接続は必須ですね。

  1. Open SSH
  2. bashシェル
  3. インターネット接続(Salesforceに接続できれば大丈夫)

Salesforce側の設定

  1. ネットワークアクセスにIPアドレスを登録しておくこと
  2. 上記をしない場合はログイン時にセキュリティトークンが必要です。

セキュリティトークンは Salesforce から自動生成されるキーです。たとえば、パスワードが mypassword で、セキュリティトークンが XXXXXXXXXX の場合は、ログイン時に「mypasswordXXXXXXXXXX」と入力する必要があり>ます。

トラブルシューティング

【未解決】
Upload files to salesforce via sfdx force:data:bulk:upsert ?

資料

考察

複合 API を使用して、複数の API 呼び出しを 1 つの呼び出しに統合します。Bulk API を使用する場合は、再試行の制限やタイムアウトを避けるためにバッチ サイズを最適化します。バッチ サイズは、バッチ ジョブが失敗する主な理由です。バッチ サイズが大きすぎる場合、システムはバッチが一時停止されるまでの割り当てられた 10 分以内にバッチを処理できません。

Salesforce は、10 分を超えて実行されるバッチをタイムアウトします。組織で Bulk API 2.0 を使用している場合、バッチサイズの問題は自動的に解決されます。ただし、組織が V1 を使用している場合、通常、顧客はより高いバッチ サイズ (10,000) から開始し、タイムアウトが発生した場合はバッチ サイズを減らそうとします。

Bulk V1 が実行中の場合は、バッチ サイズがタイムアウトに達しないように、バッチ サイズを 7,000 に下げ、次に 5,000 に下げるというように変更するのが適切です。バッチ サイズによりスループットが低下すると同時に、ロックが排除され、再試行の回数が最小限に抑えられます。タイムアウトが継続的に問題になる場合は、Bulk API 2.0 に移行してください>

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?