web-dev-qa-db-ja.com

SSISデータソース:埋め込みクエリ、ストアドプロシージャ、または関数

OLTPサーバーからデータウェアハウスサーバーにデータを移動し、SSISを使用してこれを実行します。

OLTP Data Sourceからクエリを記述する場合、それを利用した方が良いですか?

1)インライン埋め込みクエリ

2)機能

3)またはストアドプロシージャ

調査とテスト-埋め込みクエリは優れていますが、SSDTデータベースプロジェクトに配置されたコードをビルド/コンパイルする必要があります。したがって、列名が変更または削除された場合、Devopsの部分でわかります。 SSIS Datasource 'Test abcd etc'で書き込む場合、SSISは引き続きビルド/コンパイルします。 SQLデータベースプロジェクトで「dbo.exampletableからtestabcdを選択する」と書き込んだ場合、SSDT DBプロジェクトはビルド/コンパイルに失敗します。

メタデータが表示されるので、関数は素晴らしいと聞きました。ただし、複数ステートメントのテーブル値関数は低速であり、チームがいつか必要になります。

私が読んでいるストアドプロシージャは、メタデータの作成に問題があります。これは本当ですか ?回避策はありますか?ストアドプロシージャでメタデータを作成することが可能だと聞きました。

誰かが私に3つのオプション、または他のオプションのどちらかを教えてもらえますか?


4)*データを再処理するつもりである場合、チームはソースの作成/更新日でクエリをパラメーター化する必要があるため、ビューを組み込む必要はありませんでした。

enter image description here

1
user162241

ストアドプロシージャの使用をお勧めします。メタデータの問題に関する限り、これは一時テーブルが使用されているときに発生する可能性があります。 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の実行、一時テーブルの使用など)、一般的にストアドプロシージャを好む傾向があります。関数を使用する場合は、複数ステートメントのテーブル値バージョンよりもインラインを使用することをお勧めします。インライン関数は基本的にビューのように扱われ、適切な統計を使用してより優れた実行プランを作成しますが、マルチステートメント関数はこれらの利点を得ません。

2
userfl89