ETLをEDWの一部として実行している場合、通常、ソースシステムでスキーマの変更をどのように処理しますか?たとえば、操作していた列が消えてETLが壊れた場合などです。
ETLをEDWの一部として実行する場合、通常、ソースシステムのスキーマの変更をどのように処理しますかたとえば、操作していた列が消えてETLが壊れた場合などです。
この質問は、質問されたのと同じ抽象化レベルで回答したいと思います。
Sourceオブジェクトで表されるテーブルは、すべてを列挙するMappingで使用されます必須のソース列(Ports)。 Sessionによってマッピングが実行されるとき(Workflowの一部として) )、マッピングはソースポートの欠落に関するランタイムエラーをスローします。
キンボールによる The 38 Subsysems of ETL を見てください。使用するETLツールが何であれ、「変動するソース」の問題に対処する役割を果たす、次のサブシステムがあります。
SELECT *
は、ほとんど決して良い考えではありません。一部の列/テーブルが消えるようにデータソースが変更された場合、エラー/警告がトリガーされ、すべてのエラーをdo記録/追跡する必要があります。次をご覧ください。DDL権限:GRANT Drop Table/column
またはAlter Table
またはETLに影響を与える可能性のある変更を選択したユーザーのごく一部に限定します。そのため、変更はすべて適切なチャネルを通過し、ETL開発者は事前に認識しています。
適切なエラー処理:エラーのキャッチ、エラーのログ、および一部のエラーコードシュートメール
Select * Into Staging Table
:この構文は列名を必要としません。そのため、ロジックを構築できます。正確な要件がわからない場合は、ステージングテーブルを使用してください。ステージングテーブルを毎回削除して作成できます。またはcolumn not exists error is Catch
Catch 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
場合によります。 EDWに餌をやり、世話をする方法はいくつもあるので、ソースシステムの変更を防ぐ方法はいくつもあると思います。
私たちのもののほとんどはタイプ1であり、フラットファイルが供給されます。これにより、ソースシステムの変更から表面的に保護されます。ただし、列を削除したり、列の順序を変更したり、他の多くのステートメントを変更したりする場合は除きます。
メインフレーム、.NETアプリケーション、および外部エンティティからフラットファイルを取得します。ファイルのファイル形式を変更するとETLが機能しなくなりますが、成功またはエラーを報告し、統計情報を読み込むようなフレームワークを開発したので、いつ失敗が発生したかがわかります。通常、問題のトラブルシューティングを迅速に行い、「問題を修正してください」という丁寧な言葉で担当チームに報告します。
列が非推奨になったが、現在は非推奨となっている列の既存の値を保持したい場合は、それを行うことができます。ロードパッケージ(SQL ServerとSSISを使用)は、Kill N FillからInsert/Updateに変更され、非推奨の列がNULLになることはありません。挿入時に列が空の場合、その行の非推奨の列はもちろんNULLになります。これは以前に行ったことがあります。
また、メッセージキューから読み取るKimball Designに関するものもあります。廃止された列の特定のインスタンスについては知りませんが、新しいレコードの廃止された列をNULLにするためにそのフレームワークを変更することは確かに可能です。のために。