3

ソースとしてフラット ファイルを作成する多くのソースを使用してデータ ウェアハウス プロジェクトに取り組んでおり、SSIS を使用してこれらをステージング テーブルにロードしています。現在、フラット ファイル ソース コンポーネントを使用しています。

ただし、しばらくすると、ファイルの 1 つに追加の列が必要になり、日付からファイル仕様が変更され、その追加の列が追加されます。この演習は非常に頻繁に行われ、時間の経過とともにかなり多くのバージョンが蓄積されます。

こことインターネットの残りの部分で見つけることができる回答によると、このシナリオを処理するための合意された方法は、このバージョンの新しい別のデータフローで新しいフラットファイルソースを設定し、ETL プロセスの再実行可能性を維持することです。古いファイル用。メソッドの概要は次のとおりです。たとえば、列が少ないフラットファイル接続を使用した SSIS pkg は失敗します。

私たちの特定のセットアップでは、追加の列は常に追加の列であり (古い列を削除しないでください)、論理的な理由から、古いファイルの再実行可能性を個別のデータ フローで維持する場合、新しい列を必須にすることはできません。

同じ列のセットを何度も処理する重複したデータ フローを作成する方法は、私たちのようなデータ ウェアハウス プロジェクトにとって良い答えではないと思います。最後のファイル バージョンを取得し、列を「必須ではない」とマークし、欠落している場合は null を配信する機能。

古いファイル バージョンをより柔軟に処理できる SSIS フラット ファイル コンポーネントを知っている人や、この問題に対するより良い解決策がある人はいますか? このようなコンポーネントは、既存の左から右へのアプローチではなく、名前付き列ベースでファイルにアプローチする必要があると思いますか?

どんな考えや提案も大歓迎です!

4

1 に答える 1

1

以下は、(個別のデータ フローを使用するより) 処理時に効率が低下しますが、1 つのデータ フロー内で複数のファイル タイプを処理する柔軟性が得られます。

行区切り文字を指定するだけで、個々の列ではなく行を返すようにフラット ファイル接続を調整できます。これを、行ごとに 1 列を出力するフラット ファイル ソース コンポーネントに接続します。これで、認識している多くのファイル タイプの 1 つを表す 1 つの行ができました。次のステップは、使用しているファイル タイプを特定することです。

スクリプト コンポーネントを使用して、フラット ファイル タイプからの出力を使用します。単一の列を渡し、可能なすべての列のスーパーセットを渡します。通常はファイル ソースから検出されたメタ データが失われているため、スクリプト コンポーネントの出力タイプ内で列名 / タイプ / サイズを作成する必要があります。

スクリプト コンポーネント内で、行を渡し、コンポーネント列に分割します。新しい列がいつ開始されるかを識別するために、パターン マッチを実行する必要があります (おそらく、RegularExpression.Regex.Match を使用します)。うまくいけば、ファイルが適切な形式で作成されているため、テキスト列内の引用符やコンマに注意してください。

存在する列の数を決定し、欠落している列をデフォルトにすることで、ファイルの種類にアクセスできるようになりました。行の出力列を設定して、構成部分を渡します。出力とともにファイルの種類を記録するために、新しい列を追加することもできます。

残りのプロセスでは、スクリプト内のすべてのファイル タイプに対応しているため、1 つのデータ フローでテーブルをロードできるはずです。

上記を軽く実行することはお勧めしません。すべての列/型などをコーディングする必要がある場合、SSIS の利点は多少低下しますが、各ファイル バージョンを処理する単一のデータ フローが提供され、新しい列が渡されると拡張できます。

于 2012-11-15T16:59:10.493 に答える