CloverETL ツールを使用して、100,000 行を超える大きな csv ファイルを読み取り、DB テーブルに挿入する前に DB からいくつかのルックアップ値を変換しています。
基本的に私は使用しました:
- ファイルを読み取るためのフラット ファイル リーダー
- DB からいくつかの値を変換するための「ルックアップ結合」の数が続きます
- 次に、すべてのデータをリンクする「ExtHashJoin」 (ソースがソートされていないため)
- 次に、レコードを DB に挿入します。
非常に単純なプロセスであり、少数のレコードに対しては正常に機能します。しかし、ファイル全体をインポートしようとすると、単にメモリが不足しました (メモリ割り当てを増やしても効果はありません)。
ExtHashJoin は、すべてのレコードを結合してから挿入を開始するまで待機しようとしていることがわかりました。すべてのレコードをメモリに保存する必要があるため、それが問題のようです。私は本当にその振る舞いを必要としません。これらのレコードはすべて独立しており、たとえば一度に 1000 行ごとにバッチで処理できますが、このようにする方法がわかりません。
また、さまざまなフェーズ値を設定しようとしましたが、最初のレコードの挿入を開始する前にすべての値を結合しようとします。
レコードを分割してバッチで処理するようにフラット ファイル リーダーに指示するにはどうすればよいですか?
ありがとう。
エリック