2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データローダでコンテンツアップロードするときはバッチサイズ設定をしよう

Last updated at Posted at 2020-07-11

初心者:hatching_chick:のころの下書きが残っていた…。

というわけで、データローダつまづき日記と思ってください。
(解説ではなく失敗談的な)

やろうとしたのは、万単位の画像ファイルをコンテンツとしてデータローダでUPすること。
というのもAというAppExchengeからBというAppExchangeへデータ移行をしたくて
Aのレコードに紐づいていた画像は添付ファイルだったのですが
Bのレコードで受け付けている形式はコンテンツでした…と。
よって、一度エクスポートしたデータの再Insertを試みました。

##バッチサイズは分割しよう

若気の至りといいますか、
まずは何も考えずにN千件の画像をデータローダで上げようとしまして。

データローダを使用したコンテンツのアップロード
https://help.salesforce.com/articleView?id=loader_content.htm&type=5

ちゃんとヘルプ記載通りにCSVも作ったし、
試しに1件アップして問題なさそうだなーというところで
いざ本番:arrow_forward:

・・・のっけから、JavaHeapエラーでつまづく
Failed Create Batchも出る。
「そりゃ重いよネー」ということでCSVファイル分割。
半分にして、
半分にして、
半分にして、
1000件まで分割するも、まだまだ同じエラー。

やってられん!

と、おもったら設定でそもそもバッチサイズが分割できると知しました。
アホですね…。よいこはマネしないように:no_good_tone1:

【SFDC】DataLoaderを使っているときに heap space エラーが出る場合の対処
http://rulumomo.ddo.jp/blognplus/archives/1859#1DataLoader

Settingで100まで落としてリベンジ

250件くらい中途半端に入ったとところで、行ロックでこける。
UNABLE_TO_LOCK_ROW:unable to obtain exclusive access to this record or 1 records

なぜロックする・・・

行をロックできない - 「レコードは現在利用できません」エラー
https://help.salesforce.com/articleView?id=000229525&language=ja&type=1

どうもパラレル処理のせいらしい。
とはいえ、Insertなんだけど・・・
コンテンツだから親レコードとかない・・・よね?:thinking:

おそらく原因はこれ ↓

c. Bulk API
Bulk API を介したレコードの Insert/Update は同じ親レコード上に一度に複数の Update が生じる可能性があります。なぜなら、バッチは並列に処理されるためです。例えば、同じタイミングで 2 つのバッチが処理されており、それらが同じ親レコードを指し示すレコードを含んでいる場合、バッチのひとつは 10 秒以内にロックすることができなかった場合に、他のバッチが「unable to lock row」エラーを惹き起こす可能性のある親レコードをロックしようと試みます。

##シリアルモードを使おう

これを防ぐために、次のいずれかを実施することができます:
バッチサイズを削減します。
パラレルモードの代わりにシリアルモードでレコードを処理します。バッチのこの方法は同時に処理されます。
パラレルモードの使用時に、異なるバッチで (同じ親の) 異なる子レコードが生じることを避けるため、親レコードに基づくメインレコードをソートします。

とりま、シリアルモードにし、バッチサイズも50にダウン。
これで時間こそかかれども、放っておくだけ・・・

と思いきや950件で止まる・・・:moyai::moyai::moyai:

エラー内容はこちら
Not processed due to batch error: InvalidBatch : You cannot have more than 1000 file entries in your zip

なんだとおおおおおおお
そんな制限あるなんてー!と思ってたが、
よくよく見たら、実行をクリックする前にダイアログ出てた。
(見てないだけでした)
1000行以上だとちゃんと分割考慮してどこで止まるか出してくれてますのでご安心を:sweat_smile:

999件を目指すなら3の倍数で入れるのがいいのかな笑

###おまけ
コマンドラインからアップすればBatファイルで一括アップのような動きにできます。

データローダのコマンドラインの概要
https://help.salesforce.com/articleView?id=command_line_intro.htm&type=5

データローダをバッチモードで使用する際の設定手順
https://help.salesforce.com/articleView?id=000182363&language=ja&type=1

ワンクリックであとはお任せ~♪

2
6
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
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?