問題タブ [data-ingestion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Batch を使用して複数の異なるファイルを異なる方法で処理する方法
背景/コンテキスト
Spring Batch を使用して複数のファイルを処理する方法の例はほぼ無数にありますが、それらのすべてに、すべてのファイルが処理される単一のオブジェクトがあります。そのため、互換性のあるデータを含む多くのファイルはすべて、データベース テーブルなどの単一の宛先ターゲットに処理されます。
10 個の異なるファイルを取り込み、それらを同じデータベース/スキーマ内の 10 個の異なる宛先テーブルにマップするインポート プロセスを構築したいと考えています。ファイル名も、予測可能/コード化可能な方法で毎日わずかに変更されますが、それを処理できると思います. Spring はこれ (多対多のデータ マッピング) を実行できると思っていましたが、方法が見つからないのはこれが最後です。Spring の宣言型構造はいくつかの点で優れていますが、正直なところ、複数のマッピングを設定する方法がわかりません。また、アプリケーションには手続き的な部分がまったくないため、どの形式の反復も実際には使用できません。 . ファイルごとに個別の jar を作成し、コンソールで繰り返しスクリプトを作成することもできますが、これはログとレポートを複雑にします...そして率直に言って、ハックに聞こえます
質問
Spring Batch に、10 個の異なるファイルをそれぞれ 10 個の異なる方法で処理し、それらのデータを同じデータベース内の 10 個の異なるテーブルにマップするように指示するにはどうすればよいですか?
例:
- ファイルにはチルダで区切られた 4 列のデータが含まれており、6 列 (2 つはメタデータ) の
Data_20190501_ABC_000.txt
テーブルにマップする必要があります。ABC_data
- ファイル
Data_20190501_DEF_000.txt
にはチルダで区切られた 12 列のデータが含まれており、14 列のテーブルにマップする必要がありDEF_data
ます (2 つはメタデータです)。 - ファイル
Data_20190501_GHI_000.txt
にはチルダで区切られた 10 列のデータが含まれており、12 列のテーブルにマップする必要がありGHI_data
ます (2 つはメタデータです)。 - など... 10個の異なるファイルとテーブル
チルダ区切りを処理できます。ファイル名の日付をプログラムで処理できると思います。フィールドの1つはdbトリガーで処理できます。他のメタデータ フィールドはファイル名である必要がありますが、それは確かに別の問題になる可能性があります。
アップデート
Mahmoud Ben Hassine が提案したと思うことによると、ファイル/テーブルのペアごとに個別のリーダー、マッパー、およびライターを作成し、それらを start(step1)、next(step2)、build() パラダイムを使用して追加しようとしました。以下は、Spring のドキュメントからのジョブの構成と実行の例に基づいています。
どちらのステップも独立して実行されますが、「次の」ステップとして追加すると、最初のステップのみが実行され、ログ出力に「ステップはすでに完了しているか、再開できないため、実行するアクションはありません」という INFO メッセージが生成されます。私はここから行きますか?
updates - MarkLogic クラスター - 1 番目のホストでデータを追加し、2 番目のホストで更新するとエラーがスローされる
MarkLogicのセットアップは次のとおりです
- 3 ホスト
データ構成 - 各ホストに 1 つのマスター フォレスト - 異なるホスト上の各ホストに 1 つのレプリカ
Azure VM にデプロイされた MarkLogic クラスター (フェイルオーバー付きの 3 つのホスト) があります。
MarkLogic ContentPump (MLCP) を使用してデータを MarkLogic に取り込みます
これが私たちが実装したものです
- 最初のホストに Java をインストール
- コピーされた MLCP ツール
- ホスト パラメータとして最初のサーバーを提供することによって取り込まれたデータ
これで、XML のバッチを取得して MarkLogic に戻すことができました
フェイルオーバーの実装で、何らかの理由で1番目のホストが使用できないため、2番目のホストを介してデータを取り込もうとしたときに、レコードが別のホストで取り込まれたというエラーが発生し始めたため、ここから更新できません。
摂取プロセスで従うべきベスト プラクティスを知りたい