問題タブ [data-lake]
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.
architecture - Data Lake: Ingestion と ETL で破損したファイルを修正
目的
私はデータレイクを構築しています。一般的な流れは、Nifi -> Storage -> ETL -> Storage -> Data Warehouse のようになります。
データ レイクの一般的なルールは、取り込み段階で前処理を行わないように思えます。進行中のすべての処理は ETL で行われる必要があるため、生データと処理済みデータの来歴があります。
問題
ソース システムが破損した CSV ファイルを送信します。ヘッダーとデータに加えて、最初の行も常にフリー フォーマットのメタデータであり、使用することはありません。破損しているテーブルは 1 つだけです。破損した CSV は、現時点では 1 つの Spark ジョブで使用されています (それを と呼びましょうX
)。
質問
Nifi レイヤーでこれらの 2 行を削除するのは良い方法ですか? 「回避策」のオプション 3 を参照してください。
回避策
- Spark job 内の破損したレコードを処理します
X
。IMHO、これは悪いアプローチです。将来、そのファイルをさまざまなツール (データ ガバナンス スキーマ クローラー、おそらく ADLS/S3 を介した Athena/ADLA のようなエンジン) で使用する予定だからです。破損したレコードを処理するロジックを複数の場所で実装する必要があることを意味します。 - ETLレイヤーで破損したファイルを修正し、「固定」レイヤーに保存します。進行中のすべてのアクティビティ (ETL、データ ガバナンス、MPP エンジン) は、「生」レイヤーではなく、「固定」レイヤーでのみ機能します。これは、単一の CSV 用に新しいレイヤーを作成するためのオーバーヘッドのように思えます。
- Nifi レイヤーで修正 (CSV から最初の 2 つの文字列を削除)。「生の」ストレージレイヤーには常に読み取り可能なデータが含まれることを意味します。IMHO、これはシンプルで、処理ロジックが 1 か所に実装されているため、優れています。