質問

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

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

質問: そこで、これを SSIS または Talend などのオープンソース ツールで実現できるかどうか疑問に思っています。実現できる場合、一般的なアプローチは何でしょうか?あるいは、どのような手動コーディングのアプローチを取るでしょうか?

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

カーソルを使用して Initial テーブルを読み取り、行ごとに主キーのみを持つ空のレコードを DataTyped テーブルに挿入し、列ごとに 1 つの更新ステートメントを使用します。これにより、更新が失敗した場合に非常に具体的なステートメントを挿入できます。エラー メッセージ テーブルのその列に固有のエラー メッセージ。

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

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

役に立ちましたか?

解決

私は、データフローに条件付きのスプリットを入れaproachを使用しています。条件(無効な日付など必要なフィールドにデータがないが、)失敗のレコードは、レコード識別子、不良データ、それが失敗した理由が含まれ、例外表に送られます。その後、後でファイルを提供するグループに戻って送信するには、この情報からエラーのスプレッドシートまたはテキストファイルを作成することができます。当然の良いレコードがptherパスに移動し、テーブルに挿入されます。

他のヒント

どのようにステージングテーブル(あなたが最初のテーブルを呼んでいるもの)にロードする前に、いくつかのクリーニング/変換について?ファイルをタブ区切りまたはコンマにExcelからデータをダンプして、あなたが指摘していることをデータクレンジングを行うには、お好みのいくつかのプログラミング言語を使用します。また、各データの負荷がどのように大きなですか?あなたは(一度に数百万行をロードするように)大きな負荷を処理するために、マルチスレッドやマルチプロセスアプリケーションを利用することができます。このプロセス中に発生するエラーは、識別子、エラーとコメント内容を例外テーブルにロードすることができます。この手法は、データクリーニングフェーズでよりよい制御を持つのに役立ちます。

負荷が高いと、データベース(SQL)での作業のほとんどをやってみたいということでない場合は、

、そしてあなたは、可能なプロファイリング多くのデータのようにしてください、あなたが期待できることの可能なデータのばらつきの良いunderstadingを持っている場合があります。それを使用すると、変換を行うか、データの流れを制御するために、適切なコンポーネント(才能やSSIS)を使用することができます。また、正規表現を使用することにより、あなたはセットのルールから外れた任意のエンティティをキャッチすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top