Azure Data Factory - 関数およびシステム変数

この記事では、Azure Data Factory でサポートされている関数および変数に関する情報を提供します。

Data Factory のシステム変数

変数名 説明 オブジェクトのスコープ JSON のスコープと使用事例
WindowStart 現在のアクティビティ実行ウィンドウの時間間隔の開始 アクティビティ
  1. データ選択クエリを指定します。 データ移動アクティビティ の記事で参照されているコネクタの記事を参照してください。
WindowEnd 現在のアクティビティ実行ウィンドウの時間間隔の終了 アクティビティ 上記と同じ
SliceStart 生成されているデータ スライスの時間間隔の開始 アクティビティ
データセット
  1. Azure Blobファイル システム データセット の処理で、動的フォルダー パスおよびファイル名を指定します。
  2. アクティビティ入力コレクションで、Data Factory 関数を使用して入力の依存関係を指定する。
SliceEnd 生成されている現在のデータ スライスの時間間隔の終了 アクティビティ
dataset
SliceStart と同じです。
注意

現在、Data Factory では、アクティビティに指定されたスケジュールが、出力データセットの availability に指定されたスケジュールと正確に一致する必要があります。 したがって、WindowStart、WindowEnd、SliceStart、SliceEnd は、常に同じ期間と 1 つの出力スライスにマップされます。

システム変数を使用した例

次の例では、SliceStart の年、月、日、時刻が、folderPath プロパティと fileName プロパティによって使用される個別の変数に抽出されます。

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
 [
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

Data Factory の関数

Data Factory の関数は、システム変数と共に次の用途で使用できます。

  1. データ選択クエリを指定する ( データ移動アクティビティ の記事で参照されているコネクタの記事を参照してください。

    データ選択クエリと、アクティビティおよびデータセットの他のプロパティの場合、Data Factory 関数を呼び出す構文は $$ です。

  2. アクティビティ入力コレクションで、Data Factory 関数を使用して入力の依存関係を指定する。

    入力の依存関係式を指定する場合、$$ は不要です。

次のサンプルでは、JSON ファイルの sqlReaderQuery プロパティが、Text.Format 関数から返される値に割り当てられます。 また、WindowStart というシステム変数も使用されます。この変数は、アクティビティ実行ウィンドウの開始時刻を表します。

{
    "Type": "SqlSource",
    "sqlReaderQuery": "$$Text.Format('SELECT * FROM MyTable WHERE StartTime = \\'{0:yyyyMMdd-HH}\\'', WindowStart)"
}

使用できるさまざまな書式設定オプション (例: yy と yyyy) については、「カスタム日時書式指定文字列」を参照してください。

Functions

次の表は、Azure Data Factory の全関数の一覧です。

カテゴリ 関数 パラメーター 説明
Time AddHours(X,Y) X: DateTime

Y: int
指定した時刻 X に Y 時間を追加します。

例: 9/5/2013 12:00:00 PM + 2 hours = 9/5/2013 2:00:00 PM
Time AddMinutes(X,Y) X: DateTime

Y: int
X に Y 分を追加します。

例: 9/15/2013 12: 00:00 PM + 15 minutes = 9/15/2013 12: 15:00 PM
Time StartOfHour(X) X: DateTime X の時間コンポーネントで表される時間の開始時刻を取得します。

例: StartOfHour of 9/15/2013 05: 10:23 PM is 9/15/2013 05: 00:00 PM
日付 AddDays(X,Y) X: DateTime

Y: int
X に Y 日を追加します。

例: 9/15/2013 12:00:00 PM + 2 days = 9/17/2013 12:00:00 PM

Y を負数に指定して、日数を減算することもできます。

例: 9/15/2013 12:00:00 PM - 2 days = 9/13/2013 12:00:00 PM
日付 AddMonths(X,Y) X: DateTime

Y: int
X に Y か月を追加します。

例: 9/15/2013 12:00:00 PM + 1 month = 10/15/2013 12:00:00 PM

Y を負数に指定して、月数を減算することもできます。

例: 9/15/2013 12:00:00 PM - 1 month = 8/15/2013 12:00:00 PM
日付 AddQuarters(X,Y) X: DateTime

Y: int
X に Y * 3 か月を追加します。

例: 9/15/2013 12:00:00 PM + 1 quarter = 12/15/2013 12:00:00 PM
日付 AddWeeks(X,Y) X: DateTime

Y: int
X に Y * 7 日を追加します。

例: 9/15/2013 12:00:00 PM + 1 week = 9/22/2013 12:00:00 PM

Y を負数に指定して、週数を減算することもできます。

例: 9/15/2013 12:00:00 PM - 1 week = 9/7/2013 12:00:00 PM
日付 AddYears(X,Y) X: DateTime

Y: int
X に Y 年を追加します。

例: 9/15/2013 12:00:00 PM + 1 year = 9/15/2014 12:00:00 PM

Y を負数に指定して、年数を減算することもできます。

例: 9/15/2013 12:00:00 PM - 1 year = 9/15/2012 12:00:00 PM
日付 Day(X) X: DateTime X の日付コンポーネントを取得します。

例: 9/15/2013 12:00:00 PM の日付は 9 です。
日付 DayOfWeek(X) X: DateTime X の曜日コンポーネントを取得します。

例: 9/15/2013 12:00:00 PM の DayOfWeek は Sunday です。
日付 DayOfYear(X) X: DateTime X の年コンポーネントで表される、その年の日付を取得します。

次に例を示します。
12/1/2015: 2015 年の 335 日目
12/31/2015: 2015 年の 365 日目
12/31/2016: 2016 年の 366 日目 (うるう年)
日付 DaysInMonth(X) X: DateTime パラメーター X の月コンポーネントで表される、その月の日数を取得します。

例: 9 月は 30 日間なので、9/15/2013 の DaysInMonth は 30 です。
日付 EndOfDay(X) X: DateTime X の日 (日コンポーネント) の終了を表す日時を取得します。

例: 9/15/2013 05:10:23 PM の EndOfDay は 9/15/2013 11:59:59 PM です。
日付 EndOfMonth(X) X: DateTime パラメーター X の月コンポーネントで表される月の終了を取得します。

例: 9/15/2013 05:10:23 PM の EndOfMonth は 9/30/2013 11:59:59 PM です (9 月の終了を表す日時)。
日付 StartOfDay(X) X: DateTime パラメーター X の日コンポーネントで表される日の開始を取得します。

例: 9/15/2013 05:10:23 PM の StartOfDay は 9/15/2013 12:00:00 AM です。
DateTime From(X) X: String 文字列 X を日時にパースします。
DateTime Ticks(X) X: DateTime パラメーター X の ticks プロパティを取得します。1 ティックは 100 ナノ秒です。 このプロパティの値は、0001 年 1 月 1 日深夜 12:00:00 以降の経過時間のティック数を表しています。
Text Format(X) X: String 変数 テキストを書式設定します (\\' の組み合わせを使用して ' 文字をエスケープします)。
重要

別の関数内で関数を使用する場合、内側の関数に $$ プレフィックスを付ける必要はありません。 例: $$Text.Format('PartitionKey eq \'my_pkey_filter_value\' and RowKey ge \'{0:yyyy-MM-dd HH:mm:ss}\'', Time.AddHours(SliceStart, -6)). この例でわかるように、Time.AddHours 関数に $$ プレフィックスは使用されていません。

次の例では、Hive アクティビティの入力パラメーターと出力パラメーターが、Text.Format 関数と SliceStart システム変数を使用して決定されます。

{
    "name": "HiveActivitySamplePipeline",
        "properties": {
    "activities": [
            {
            "name": "HiveActivitySample",
            "type": "HDInsightHive",
            "inputs": [
                    {
                    "name": "HiveSampleIn"
                    }
            ],
            "outputs": [
                    {
                    "name": "HiveSampleOut"
                }
            ],
            "linkedServiceName": "HDInsightLinkedService",
            "typeproperties": {
                    "scriptPath": "adfwalkthrough\\scripts\\samplehive.hql",
                    "scriptLinkedService": "StorageLinkedService",
                    "defines": {
                        "Input": "$$Text.Format('wasb://adfwalkthrough@<storageaccountname>.blob.core.windows.net/samplein/yearno={0:yyyy}/monthno={0:MM}/dayno={0:dd}/', SliceStart)",
                        "Output": "$$Text.Format('wasb://adfwalkthrough@<storageaccountname>.blob.core.windows.net/sampleout/yearno={0:yyyy}/monthno={0:MM}/dayno={0:dd}/', SliceStart)"
                    },
                    "scheduler": {
                        "frequency": "Hour",
                        "interval": 1
                }
            }
            }
    ]
    }
}

例 2

次の例では、ストアド プロシージャ アクティビティの DateTime パラメーターが、Text.Format 関数と SliceStart 変数を使用して決定されます。

{
    "name": "SprocActivitySamplePipeline",
    "properties": {
        "activities": [
            {
                "type": "SqlServerStoredProcedure",
                "typeProperties": {
                    "storedProcedureName": "sp_sample",
                    "storedProcedureParameters": {
                        "DateTime": "$$Text.Format('{0:yyyy-MM-dd HH:mm:ss}', SliceStart)"
                    }
                },
                "outputs": [
                    {
                        "name": "sprocsampleout"
                    }
                ],
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "SprocActivitySample"
            }
        ],
            "start": "2016-08-02T00:00:00Z",
            "end": "2016-08-02T05:00:00Z",
        "isPaused": false
    }
}

例 3

SliceStart によって表される日ではなく前の日のデータを読み取るには、次の例に示されているように、AddDays 関数を使用します。

{
    "name": "SamplePipeline",
    "properties": {
        "start": "2016-01-01T08:00:00",
        "end": "2017-01-01T11:00:00",
        "description": "hive activity",
        "activities": [
            {
                "name": "SampleHiveActivity",
                "inputs": [
                    {
                        "name": "MyAzureBlobInput",
                        "startTime": "Date.AddDays(SliceStart, -1)",
                        "endTime": "Date.AddDays(SliceEnd, -1)"
                    }
                ],
                "outputs": [
                    {
                        "name": "MyAzureBlobOutput"
                    }
                ],
                "linkedServiceName": "HDInsightLinkedService",
                "type": "HDInsightHive",
                "typeProperties": {
                    "scriptPath": "adftutorial\\hivequery.hql",
                    "scriptLinkedService": "StorageLinkedService",
                    "defines": {
                        "Year": "$$Text.Format('{0:yyyy}',WindowsStart)",
                        "Month": "$$Text.Format('{0:MM}',WindowStart)",
                        "Day": "$$Text.Format('{0:dd}',WindowStart)"
                    }
                },
                "scheduler": {
                    "frequency": "Day",
                    "interval": 1
                },
                "policy": {
                    "concurrency": 1,
                    "executionPriorityOrder": "OldestFirst",
                    "retry": 2,
                    "timeout": "01:00:00"
                }
            }
        ]
    }
}

使用できるさまざまな書式設定オプション (例: yy と yyyy) については、「 カスタム日時書式指定文字列 」をご覧ください。