MS SQL Server で ETL プロセスを作成していますが、特定の行の特定の列に固有のエラーが発生したいと考えています。たとえば、データは最初に Excel ファイルからすべての列があるテーブル (初期テーブルと呼びます) にロードされ、varchar(2000)
次に、より具体的なデータ型 ( datetime
、int
など) を含む別のテーブル (DataTypedTable) にデータをステージングします。 .) またはより厳密に制約された varchar の長さ。「1 月 13 日」は提出日の有効な日付形式ではありません。MM/DD/YYYY の形式を使用してください
これらのエラー メッセージは、プロセスの後半で、各メッセージが特定の行とフィールドを参照するエラー メッセージを含むレポートを自動化されたプロセスで作成できるように、何らかの方法で保存する必要があります (誰かが戻って、ソース システムを修正し、Excel ファイルを再送信します)。したがって、理想的には、何らかの障害テーブルに挿入され、失敗した行の主キー、列名、およびエラー メッセージが含まれます。
質問: SSIS や Talend などのオープン ソース ツールを使用してこれを実現できるかどうか疑問に思っています。または、どのようなハンドコーディングのアプローチをとりますか?
SQL を使用することを考えたいくつかのアプローチ (SQL プロシージャで手動で ETL を実行したことがないまでは、他のアプローチを検討したいと思います。C# の可能性もあります):
カーソルを使用して初期テーブルを読み取り、行ごとに、主キーのみを含む空のレコードを DataTyped テーブルに挿入し、各列に単一の更新ステートメントを使用して、その更新が失敗した場合に非常に具体的なものを挿入できるようにします。エラー メッセージ テーブルのその列に固有のエラー メッセージ。
すべてのデータをそのまま DataTyped テーブルに挿入しますが、 と のようSubmissionDate
に列が重複していますSubmissionDateOld
。最初の挿入後、*Old 列にはデータがあり、残りは空白で、SubmissionDateOld に基づいて SubmissionDate を設定する列ごとに 1 つの更新があります。
アプローチを提案することに加えて、あなたがそのアプローチを使用しているかどうか、またはあなたが行っている仕事ですでに同様のものを使用しているかどうかを知りたい.