0

数十億のレコードが含まれる可能性のあるテーブルがあります。要件は、テーブル内のレコードのグループの特定のフィールドを、その値が変更されるまで前の値に設定してから、前の値を新しい値に置き換えることです。

元のソースから取得されるレコードの例として、次のことを考慮してください。

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1102 1 1 1
2 EventTwo 2862 1 1
1131 3 EventThree 1 1 1 1 1
6 Close
1102 1102 1 1 EventOne 1105 1 1 1
2 EventTwo 2873 1 1 1 131
3 EventThree 1 101 106 116
閉じる1111021

ファイナルテーブルに挿入した後の望ましい出力は次のようになります。

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1102 1 1 1
2 EventTwo 2862 102 1
1131 3 EventThree 2862 102 1 1131
6 Close 2862 102
1102131 1 EventOne 1105 1 1 1
2 EventTwo 2873 105 1 1 131
3 EventThree 2873 10110611316
閉じる 2873101106102131

ご覧のとおり、各フィールドは、値が1でない限り、前のフィールドのレコードの値を取得する必要があります。また、このルールを繰り返すレコードの範囲はグループ化され、イベント値として1〜6の範囲になります。

テーブルの作成後に複雑なSQL更新を実行するのではなく、最小限の複雑さで最初のレコード挿入中にこのタスクを適切に実行できるSSISコンポーネントはありますか?

キャッシュ変換タスクが解決策である可能性があることを私に提案しましたが、それを実装する方法を読んだ後、それは問題の適切な解決策ではないようです。

ソリューションとして対応できるSSISパッケージタスクがない場合、他に考えられる代替案は何ですか?私は合理的な提案を受け入れます。

ありがとう

4

1 に答える 1

1

挿入の順序を保証できると仮定すると、IDと親IDの列(開始するnull値)を持つステージングテーブルにデータを挿入します。次に、SSISでSQL実行タスクを使用してデータを変換します(最初に親ID値を設定します(したがって、関連する各タスクには、グループ内の最初のタスクを示す列があります)。これにより、変換が簡単になります)。ステージングテーブルのデータを変換した後、ステージングテーブルからファイナルテーブルへの単純なデータフローを実行します。ただし、csvを変更して列を追加し、レコードをグループ化する可能性がある場合は、遅かれ早かれ、これらの一部が正常に機能しなくなることを主張します。

于 2012-09-11T18:13:44.963 に答える