1

ワークフローを理解するのに助けが必要ですが、どうすればよいかわかりません... たとえば、テーブル A からテーブル B にデータを変換 (ETL?) しているとします。テーブル A には複合主キー A.a+ があります。 A.b+Ac ですが、テーブル B には自動的に入力された ID 列しかありません。A からの複合キーを、B への挿入時に作成された ID にマップするにはどうすればよいですか?

同じ操作を行う必要があるが同じ複合キー構造を持たないテーブルが他にもたくさんあるため、A の複合キーに関連するテーブル B に列を持たないことをお勧めします。

4

2 に答える 2

3

私が正しく理解していれば、変換中に A の複合キーと B の識別子の間のマッピングを何らかの方法で取得しない限り、変換後にテーブル B のレコードをテーブル A のレコードに関連付けることはできません。

A に列を追加し、B に挿入するときに使用される識別子を事前に計算できます。その後、マッピングが作成されます。A に列を追加したくない場合は、別のマッピング テーブルを使用してこれを行うこともできます。

識別子のデフォルトの割り当てをオーバーライドしたくない場合は、ロード中にそれらをキャプチャする必要があります。Oracle では、この目的のreturningために PL/SQL で for 句を提供しています。insertSQL Server についてはわかりません。B でトリガーを使用して、別のマッピング テーブルに挿入するか、A の列を更新することで、これを実現することもできます。ただし、負荷が大幅に遅くなる可能性があります。

他に何もなければ、ロード中に A のキーを保持するために B に追加の列を作成し、後でマッピングを別のテーブルにクエリしてから、余分な列を削除することができます。

それが役立つことを願っています。

于 2009-03-06T19:49:26.273 に答える
1

元のキーが何のために必要かを正確に自問してください。答えは、ソースシステムによって異なる場合があります。これにより、「ソースシステム」列と「元のソースキー」列を維持できる場合があります。後者は、元のキーのコンマ区切りのリストである必要がある場合があります。

または、実際にマップを戻す必要がない場合があるため、何も保持する必要はありません。

于 2009-03-06T22:31:06.760 に答える