OLTPサーバーからデータウェアハウスサーバーにデータを移動し、SSISを使用してこれを実行します。
OLTP Data Sourceからクエリを記述する場合、それを利用した方が良いですか?
1)インライン埋め込みクエリ
2)機能
3)またはストアドプロシージャ
調査とテスト-埋め込みクエリは優れていますが、SSDTデータベースプロジェクトに配置されたコードをビルド/コンパイルする必要があります。したがって、列名が変更または削除された場合、Devopsの部分でわかります。 SSIS Datasource 'Test abcd etc'で書き込む場合、SSISは引き続きビルド/コンパイルします。 SQLデータベースプロジェクトで「dbo.exampletableからtestabcdを選択する」と書き込んだ場合、SSDT DBプロジェクトはビルド/コンパイルに失敗します。
メタデータが表示されるので、関数は素晴らしいと聞きました。ただし、複数ステートメントのテーブル値関数は低速であり、チームがいつか必要になります。
私が読んでいるストアドプロシージャは、メタデータの作成に問題があります。これは本当ですか ?回避策はありますか?ストアドプロシージャでメタデータを作成することが可能だと聞きました。
誰かが私に3つのオプション、または他のオプションのどちらかを教えてもらえますか?
4)*データを再処理するつもりである場合、チームはソースの作成/更新日でクエリをパラメーター化する必要があるため、ビューを組み込む必要はありませんでした。
ストアドプロシージャの使用をお勧めします。メタデータの問題に関する限り、これは一時テーブルが使用されているときに発生する可能性があります。 WITH RESULT SETS
オプションを使用してストアドプロシージャを実行すると、代わりに列のメタデータを定義でき、SSISはこの手順をバイパスできます。この例を次に示します。また、列定義が変更された場合、または新しい列が追加された場合、これも更新する必要があることに注意してください。
スクリーンショットのように、OLE DB sourceでパラメーターを使用することで問題が発生する場合もあります。ただし、これは、データアクセスフィールドに[変数からのSQLコマンド]オプションを使用することで解決できます。A文字列変数は、パッケージ(またはプロジェクト)に送信されたパラメーターを使用してストアドプロシージャを実行する式として作成できます。これの例を次に示します。この例では、DT_STR
関数を使用して数値パラメーターを文字列にキャストします連結するために必要です。これは、文字列パラメータまたはコースでは必要ありません。数値パラメータを使用する場合にのみ、これを含めました。WITH RESULT SETS
オプションは、同じメソッドに従うパラメータと連結する式でも使用できます。 。
結果セット付き
EXEC ('dbo.YourSP')
WITH RESULT SETS
(
(
ColumnA INT,
ColumnB VARCHAR(250),
ColumnC DATETIME
)
);
パラメータを使用した変数式
"EXEC dbo.YourSP " + (DT_STR, 10, 1252)@ @[$Package::YourParameter]
関数のフォローアップ応答:関数を使用したい場合、関数がニーズに適している場合は、そのルートを使用できます。ストアドプロシージャは柔軟性を備えているため(DML/DDLの実行、一時テーブルの使用など)、一般的にストアドプロシージャを好む傾向があります。関数を使用する場合は、複数ステートメントのテーブル値バージョンよりもインラインを使用することをお勧めします。インライン関数は基本的にビューのように扱われ、適切な統計を使用してより優れた実行プランを作成しますが、マルチステートメント関数はこれらの利点を得ません。