0

次のような ETL 要件があります。

テーブルから約 20000 レコードをフェッチし、各レコードを個別に処理する必要があります (各レコードの処理には、レコードごとにテーブルを作成してデータを挿入するなどのいくつかの手順が含まれます)。プロトタイプの場合、2 つのジョブ (対応する変換あり) で実装しました。テーブルではなく、単純な空のファイルを作成しました。しかし、この単純なケースもスムーズに機能しないようです。(レコードごとにテーブルを作成すると、ケトルは 5000 回のレコード後に終了します)

フロー

これを実行すると、Kettle は遅くなり、2000 ~ 3000 個のファイルの後でハングしますが、Kettle はしばらく停止しているように見えますが、処理は長い時間後に完了します。私の設計アプローチは正しいですか?. ファイルへの書き込みを、IDごとに(SQLスクリプトステップを介して)新しいテーブルを作成し、それにデータを挿入するなどの実際の要件に置き換えると、ケトルは5000レコード後に終了します。フローが機能するために何をする必要がありますか。Java メモリを増やします (Xmx は既に 2GB です)。他に変更できる構成はありますか? それとも他に方法はありますか?余分な時間は制約ではありませんが、流れはうまくいくはずです。

私の最初の推測では、データを保存していないため、少なくともプロトタイプはスムーズに動作するはずです。Kettle 3.2を使用しています。

4

1 に答える 1

0

これは既知の問題/制限であることを覚えているようです。

変換および/またはジョブ エグゼキュータの手順を使用して、ジョブを再構築できますか? これらのストップを介して任意の数の行を実行できます。

これらの手順には独自の問題があります。つまり、エラーを明示的に処理する必要がありますが、目的を達成できるかどうかを確認するだけでも試してみる価値があります。これは考え方が少し異なりますが、ジョブ アプローチよりもループを構築するための優れた方法です。

于 2016-09-16T15:10:42.100 に答える