1

MS SQL Server で ETL プロセスを作成していますが、特定の行の特定の列に固有のエラーが発生したいと考えています。たとえば、データは最初に Excel ファイルからすべての列があるテーブル (初期テーブルと呼びます) にロードされ、varchar(2000)次に、より具体的なデータ型 ( datetimeintなど) を含む別のテーブル (DataTypedTable) にデータをステージングします。 .) またはより厳密に制約された varchar の長さ。「1 月 13 日」は提出日の有効な日付形式ではありません。MM/DD/YYYY の形式を使用してください

これらのエラー メッセージは、プロセスの後半で、各メッセージが特定の行とフィールドを参照するエラー メッセージを含むレポートを自動化されたプロセスで作成できるように、何らかの方法で保存する必要があります (誰かが戻って、ソース システムを修正し、Excel ファイルを再送信します)。したがって、理想的には、何らかの障害テーブルに挿入され、失敗した行の主キー、列名、およびエラー メッセージが含まれます。

質問: SSIS や Talend などのオープン ソース ツールを使用してこれを実現できるかどうか疑問に思っています。または、どのようなハンドコーディングのアプローチをとりますか?

SQL を使用することを考えたいくつかのアプローチ (SQL プロシージャで手動で ETL を実行したことがないまでは、他のアプローチを検討したいと思います。C# の可能性もあります):

カーソルを使用して初期テーブルを読み取り、行ごとに、主キーのみを含む空のレコードを DataTyped テーブルに挿入し、各列に単一の更新ステートメントを使用して、その更新が失敗した場合に非常に具体的なものを挿入できるようにします。エラー メッセージ テーブルのその列に固有のエラー メッセージ。

すべてのデータをそのまま DataTyped テーブルに挿入しますが、 と のようSubmissionDateに列が重複していますSubmissionDateOld。最初の挿入後、*Old 列にはデータがあり、残りは空白で、SubmissionDateOld に基づいて SubmissionDate を設定する列ごとに 1 つの更新があります。

アプローチを提案することに加えて、あなたがそのアプローチを使用しているかどうか、またはあなたが行っている仕事ですでに同様のものを使用しているかどうかを知りたい.

4

2 に答える 2

2

データフローに条件付き分割を配置するアプローチを使用します。条件(無効な日付、必須フィールドにデータがないなど)に失敗したレコードは、レコードID、不良データ、失敗した理由を含む例外テーブルに送信されます。その後、この情報からエラーのスプレッドシートまたはテキストファイルを作成して、ファイルを提供しているグループに送り返すことができます。もちろん、良いレコードはptherパスに移動し、テーブルに挿入されます。

于 2010-02-18T21:46:27.667 に答える
0

ステージング(初期テーブルと呼ばれる)テーブルにロードする前のクリーニング/変換はどうですか?Excelからタブまたはカンマ区切りのファイルにデータをダンプしてから、選択したプログラミング言語を使用して、メモしたデータクレンジングを実行します。また、各データの負荷はどのくらいですか?マルチスレッドまたはマルチプロセスアプリケーションを利用して、主要なロード(一度に数百万行をロードするなど)を処理できます。このプロセス中に発生したエラーは、識別子、エラー、コメントの詳細とともに例外テーブルにロードできます。この手法は、データクリーニングフェーズでの制御を向上させるのに役立ちます。

負荷がそれほど高くなく、ほとんどの作業をデータベース(SQL)で実行したい場合は、できるだけ多くのデータプロファイリングを実行し、予想される可能性のあるデータのバリエーションを十分に理解する必要があります。これにより、適切なコンポーネント(TalendまたはSSIS)を使用して、変換を実行したり、データフローを制御したりできます。また、正規表現を使用することで、設定されたルールから逸脱するエンティティをキャッチできます。

于 2010-06-02T00:26:35.593 に答える