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

  • 質問

  • 「毎月、先月の販売データを、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
    2014年9月25日 10:45

回答

  • なるほど、意図は理解しました。

    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)

    • 回答の候補に設定 星 睦美 2014年10月6日 8:14
    • 回答としてマーク 星 睦美 2014年10月14日 2:37
    2014年9月30日 15:49

すべての返信

  • 単純に 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)

    2014年9月25日 17:35
  • 回答ありがとうございます

    ご提示の方法ですと、「先月分」のみしか処理できないと思います。

    エラーがあった場合など、2か月前のデータを処理したいと思った時に

    パッケージを修正するのではなく、外から与えるパラメータで

    期間を指定できればと思っております。

    2014年9月30日 14:06
  • なるほど、意図は理解しました。

    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)

    • 回答の候補に設定 星 睦美 2014年10月6日 8:14
    • 回答としてマーク 星 睦美 2014年10月14日 2:37
    2014年9月30日 15:49