トップ回答者
SQL Serverエージェントにおけるジョブ実行時に、動的に生成したパラメータをSSISパッケージに渡したい

質問
-
「毎月、先月の販売データを、DWHにロードする」という処理を行いたいです。
毎月の実行は、SQL Serverエージェントで、ジョブをスケジュール実行することを考えています。
スケジュールに従って実行される時に、「先月分」という条件を動的に生成することができないでしょうか?
起動するSSISパッケージには、パラメータ「期間開始日」「期間終了日」が作成済みです。
例えば、2014年9月の実行時に、SQL Serverエージェントで
先月の1日(=2014/08/01)と、今月の1日(2014/09/01)を生成し
SSISパッケージ内のパラメータに、以下のように渡した上で実行したいです。
期間開始日=2014/08/01、期間終了日=2014/09/01
その後、SSISパッケージ内のデータフロー中で、抽出の条件で
期間開始日<=販売日<期間終了日
のようにすることで、先月販売されたデータを毎月ロードすることを考えています。
このようなことは、可能でしょうか?
不可能な場合、期間生成&他パッケージ実行用の、パッケージを作ればできそうだとは思っていますが
まず、SQL Serverエージェント(またはほかのSQL Server機能)で簡単かつグラフィカルに可能かどうか
教えていただけないでしょうか。
データ抽出範囲のパターンとしては
N日前の1日分(※Nは設定可能)、先月分、2か月前の1月分、先月を含めた過去1年分
というパターンは用意したいです。
パターンごとに設定作業が必要になるのは問題ないですが、スケジュール実行される側のパッケージを
パターンごとに作成するのは避けたいです。
よろしくお願いいたします。
- 編集済み Naxima 2014年9月25日 10:46
回答
-
なるほど、意図は理解しました。
SSIS はどうもパッケージ単体で独立している構成が基本のようで、実行時に動的な引数を渡すのはあまり特異ではない印象です。
一応機能はあって、たとえばエージェントのジョブで dtexec によって SSIS パッケージを起動しているなら、引数での指定ができます。
以下のページの /SET PropertyPath;value という構文で設定できます。
http://technet.microsoft.com/ja-jp/library/ms162810(v=sql.105).aspx
エージェントのジョブにする場合は引数が固定文字列になるので、ここで渡す引数を何ヶ月前かという数値にしておいて通常は 1 としておき、SSIS 内でそこから開始日、終了日を生成するというのが 1 つの手かと思います。MCITP(Database Developer/Database Administrator)
すべての返信
-
単純に SSIS の中でデータ取得するクエリの WHERE 句に
WHERE CONVERT(DATE, DATEADD(d, 1 - DAY(GETDATE()), GETDATE())) <= 販売日
AND 販売日 < CONVERT(DATE, DATEADD(d, 1 - DAY(GETDATE()), DATEADD(m, 1, GETDATE())))
とするのが手っ取り早いと思いますが、そうではなく SSIS パッケージにパラメータとして外部から渡す必要があるということでしょうか?MCITP(Database Developer/Database Administrator)
-
なるほど、意図は理解しました。
SSIS はどうもパッケージ単体で独立している構成が基本のようで、実行時に動的な引数を渡すのはあまり特異ではない印象です。
一応機能はあって、たとえばエージェントのジョブで dtexec によって SSIS パッケージを起動しているなら、引数での指定ができます。
以下のページの /SET PropertyPath;value という構文で設定できます。
http://technet.microsoft.com/ja-jp/library/ms162810(v=sql.105).aspx
エージェントのジョブにする場合は引数が固定文字列になるので、ここで渡す引数を何ヶ月前かという数値にしておいて通常は 1 としておき、SSIS 内でそこから開始日、終了日を生成するというのが 1 つの手かと思います。MCITP(Database Developer/Database Administrator)