web-dev-qa-db-ja.com

ETLの実行時にソースシステムでスキーマの変更を処理する方法

ETLをEDWの一部として実行している場合、通常、ソースシステムでスキーマの変更をどのように処理しますか?たとえば、操作していた列が消えてETLが壊れた場合などです。

3
Michael

ETLをEDWの一部として実行する場合、通常、ソースシステムのスキーマの変更をどのように処理しますかたとえば、操作していた列が消えてETLが壊れた場合などです。

この質問は、質問されたのと同じ抽象化レベルで回答したいと思います。

Informaticaの概念オブジェクトモデルの使用

Sourceオブジェクトで表されるテーブルは、すべてを列挙するMappingで使用されます必須のソース列(Ports)。 Sessionによってマッピングが実行されるとき(Workflowの一部として) )、マッピングはソースポートの欠落に関するランタイムエラーをスローします。

キンボールのETLサブシステムモデルの使用

キンボールによる The 38 Subsysems of ETL を見てください。使用するETLツールが何であれ、「変動するソース」の問題に対処する役割を果たす、次のサブシステムがあります。

  • Extract Subsystemは、ランタイムエラーをキャッチする必要があります。 SELECT *は、ほとんど決して良い考えではありません。一部の列/テーブルが消えるようにデータソースが変更された場合、エラー/警告がトリガーされ、すべてのエラーをdo記録/追跡する必要があります。次をご覧ください。
  • エラーイベントトラッキング。-別名ロギングシステム。これは重要ですが、社内のETLソリューションでは無視されることがあります。 ETLのすべてのコンポーネントは、さまざまなレベルの重大度で、エラー/警告を一律に記録できる必要があります。また、メッセージはETLの責任者に伝達する必要があります。最小限の要件:フラットなsyslogのようなログファイルと、エラーを分類してメールで送信するためのスクリプト。
  • Job SchedulerまたはWorkflow Monitor。明らかに、自動または手動のETLジョブを実行し、エラーに関する通知を受け取ることができるはずです。また、ステータス、行数、最近のジョブの警告など、現在および過去のジョブ結果を確認できます。
  • 問題のエスカレーション。。問題をエスカレーションする効果的な方法が必要ですが、それは技術的な問題ではなく、組織的な問題です。技術的には、「EDWワークフロー001がFATALエラーで失敗しました(ログが添付されています)」というタイトルのメールを送信するだけで十分な場合がよくあります。キーは責任者とこれを押し上げるビジネスプロセスです。
2
filiprem
  1. DDL権限:GRANT Drop Table/columnまたはAlter TableまたはETLに影響を与える可能性のある変更を選択したユーザーのごく一部に限定します。そのため、変更はすべて適切なチャネルを通過し、ETL開発者は事前に認識しています。

  2. 適切なエラー処理:エラーのキャッチ、エラーのログ、および一部のエラーコードシュートメール

  3. Select * Into Staging Table:この構文は列名を必要としません。そのため、ロジックを構築できます。正確な要件がわからない場合は、ステージングテーブルを使用してください。ステージングテーブルを毎回削除して作成できます。

またはcolumn not exists error is CatchCatch Block次に、次のように書くことができます

Begin TRY
  --your usual ETL Logic
END TRY
BEGIN CATCH
if @@ErrorCode="XYZ"
Begin
 Select * into TestStaging
--- Whatever your logic
-- Log Error
-- Shoot email
END
END CATCH
1
KumarHarsh

場合によります。 EDWに餌をやり、世話をする方法はいくつもあるので、ソースシステムの変更を防ぐ方法はいくつもあると思います。

私たちのもののほとんどはタイプ1であり、フラットファイルが供給されます。これにより、ソースシステムの変更から表面的に保護されます。ただし、列を削除したり、列の順序を変更したり、他の多くのステートメントを変更したりする場合は除きます。

メインフレーム、.NETアプリケーション、および外部エンティティからフラットファイルを取得します。ファイルのファイル形式を変更するとETLが機能しなくなりますが、成功またはエラーを報告し、統計情報を読み込むようなフレームワークを開発したので、いつ失敗が発生したかがわかります。通常、問題のトラブルシューティングを迅速に行い、「問題を修正してください」という丁寧な言葉で担当チームに報告します。

列が非推奨になったが、現在は非推奨となっている列の既存の値を保持したい場合は、それを行うことができます。ロードパッケージ(SQL ServerとSSISを使用)は、Kill N FillからInsert/Updateに変更され、非推奨の列がNULLになることはありません。挿入時に列が空の場合、その行の非推奨の列はもちろんNULLになります。これは以前に行ったことがあります。

また、メッセージキューから読み取るKimball Designに関するものもあります。廃止された列の特定のインスタンスについては知りませんが、新しいレコードの廃止された列をNULLにするためにそのフレームワークを変更することは確かに可能です。のために。

0
Kennah