Data Factory のスケジュール設定と実行Data Factory scheduling and execution

注意

この記事は、Data Factory のバージョン 1 に適用されます。This article applies to version 1 of Data Factory. 現在のバージョンの Data Factory サービスを使用している場合は、パイプラインの実行とトリガーに関する記事を参照してください。If you are using the current version of the Data Factory service, see pipeline execution and triggers article.

この記事では、Azure Data Factory アプリケーション モデルのスケジュール設定と実行の側面について説明します。This article explains the scheduling and execution aspects of the Azure Data Factory application model. この記事は、Data Factory アプリケーション モデルの概念の基本事項 (アクティビティ、パイプライン、リンクされたサービス、データセットなど) を理解していることを前提としています。This article assumes that you understand basics of Data Factory application model concepts, including activity, pipelines, linked services, and datasets. Azure Data Factory の基本的な概念については、次の記事を参照してください。For basic concepts of Azure Data Factory, see the following articles:

パイプラインの開始時刻と終了時刻Start and end times of pipeline

パイプラインは、開始時刻と終了時刻の間のみアクティブです。A pipeline is active only between its start time and end time. 開始時刻より前または終了時刻より後には実行されません。It is not executed before the start time or after the end time. パイプラインは、一時停止している場合、その開始時刻と終了時刻に関係なく実行されません。If the pipeline is paused, it is not executed irrespective of its start and end time. パイプラインを実行するには、一時停止しないでください。For a pipeline to run, it should not be paused. これらの設定 (開始、終了、一時停止) は、パイプライン定義にあります。You find these settings (start, end, paused) in the pipeline definition:

"start": "2017-04-01T08:00:00Z",
"end": "2017-04-01T11:00:00Z"
"isPaused": false

これらのプロパティの詳細については、パイプラインの作成に関する記事を参照してください。For more information these properties, see create pipelines article.

アクティビティのスケジュールの指定Specify schedule for an activity

実行されるのはパイプラインではありません。It is not the pipeline that is executed. パイプラインのコンテキスト全体で実行されるのはパイプライン内のアクティビティです。It is the activities in the pipeline that are executed in the overall context of the pipeline. アクティビティ JSON の scheduler セクションを使用して、アクティビティの定期的なスケジュールを指定できます。You can specify a recurring schedule for an activity by using the scheduler section of activity JSON. たとえば、次のように毎時間実行されるアクティビティをスケジュールできます。For example, you can schedule an activity to run hourly as follows:

"scheduler": {
    "frequency": "Hour",
    "interval": 1
},

次の図に示すように、アクティビティのスケジュールを指定すると、パイプラインの開始時刻と終了時刻を含む一連のタンブリング ウィンドウが作成されます。As shown in the following diagram, specifying a schedule for an activity creates a series of tumbling windows with in the pipeline start and end times. タンブリング ウィンドウとは、固定サイズで重複しない一連の連続する時間間隔です。Tumbling windows are a series of fixed-size non-overlapping, contiguous time intervals. アクティビティに対するこれらの論理的なタンブリング ウィンドウは、アクティビティ ウィンドウと呼ばれます。These logical tumbling windows for an activity are called activity windows.

アクティビティ スケジューラの例

アクティビティの scheduler プロパティはオプションです。The scheduler property for an activity is optional. このプロパティを指定する場合は、アクティビティの出力データセットの定義で指定するパターンと一致させる必要があります。If you do specify this property, it must match the cadence you specify in the definition of output dataset for the activity. 現在、スケジュールは出力データセットによって開始されます。Currently, output dataset is what drives the schedule. そのため、アクティビティが出力を生成しない場合でも、出力データセットを作成する必要があります。Therefore, you must create an output dataset even if the activity does not produce any output.

データセットのスケジュールの指定Specify schedule for a dataset

Data Factory パイプラインのアクティビティは 0 個以上の入力データセットを受け取り、1 個以上の出力データセットを生成できます。An activity in a Data Factory pipeline can take zero or more input datasets and produce one or more output datasets. アクティビティでは、データセット定義の availability セクションを使用して、入力データを利用できる、または出力データが生成されるパターンを指定できます。For an activity, you can specify the cadence at which the input data is available or the output data is produced by using the availability section in the dataset definitions.

availability セクションの frequency には、時間単位を指定します。Frequency in the availability section specifies the time unit. frequency に指定できる値は、Minute、Hour、Day、Week、Month です。The allowed values for frequency are: Minute, Hour, Day, Week, and Month. availability セクションの interval プロパティには、frequency の乗数を指定します。The interval property in the availability section specifies a multiplier for frequency. たとえば、出力データセットの frequency が Day に、interval が 1 に設定されている場合、出力データが毎日生成されます。For example: if the frequency is set to Day and interval is set to 1 for an output dataset, the output data is produced daily. frequency に Minute を指定する場合は、interval を 15 以上に設定することをお勧めします。If you specify the frequency as minute, we recommend that you set the interval to no less than 15.

次の例では、入力データを 1 時間ごとに利用でき、出力データが 1 時間ごとに生成されます ("frequency": "Hour", "interval": 1)。In the following example, the input data is available hourly and the output data is produced hourly ("frequency": "Hour", "interval": 1).

入力データセット:Input dataset:

{
    "name": "AzureSqlInput",
    "properties": {
        "published": false,
        "type": "AzureSqlTable",
        "linkedServiceName": "AzureSqlLinkedService",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {}
    }
}

出力データセットOutput dataset

{
    "name": "AzureBlobOutput",
    "properties": {
        "published": false,
        "type": "AzureBlob",
        "linkedServiceName": "StorageLinkedService",
        "typeProperties": {
            "folderPath": "mypath/{Year}/{Month}/{Day}/{Hour}",
            "format": {
                "type": "TextFormat"
            },
            "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" }}
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

現在、スケジュールは出力データセットによって開始されますCurrently, output dataset drives the schedule. つまり、実行時にアクティビティを実行するために、出力データセットに指定されたスケジュールが使用されます。In other words, the schedule specified for the output dataset is used to run an activity at runtime. そのため、アクティビティが出力を生成しない場合でも、出力データセットを作成する必要があります。Therefore, you must create an output dataset even if the activity does not produce any output. アクティビティが入力を受け取らない場合は、入力データセットの作成を省略できます。If the activity doesn't take any input, you can skip creating the input dataset.

次のパイプライン定義では、scheduler プロパティを使用して、アクティビティのスケジュールを指定しています。In the following pipeline definition, the scheduler property is used to specify schedule for the activity. このプロパティは省略可能です。This property is optional. 現在、アクティビティのスケジュールは、出力データセットに指定されているスケジュールと一致する必要があります。Currently, the schedule for the activity must match the schedule specified for the output dataset.

{
    "name": "SamplePipeline",
    "properties": {
        "description": "copy activity",
        "activities": [
            {
                "type": "Copy",
                "name": "AzureSQLtoBlob",
                "description": "copy activity",
                "typeProperties": {
                    "source": {
                        "type": "SqlSource",
                        "sqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
                    },
                    "sink": {
                        "type": "BlobSink",
                        "writeBatchSize": 100000,
                        "writeBatchTimeout": "00:05:00"
                    }
                },
                "inputs": [
                    {
                        "name": "AzureSQLInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobOutput"
                    }
                ],
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                }
            }
        ],
        "start": "2017-04-01T08:00:00Z",
        "end": "2017-04-01T11:00:00Z"
    }
}

この例では、アクティビティはパイプラインの開始時刻から終了時刻まで 1 時間ごとに実行されます。In this example, the activity runs hourly between the start and end times of the pipeline. 出力データは、3 つの時間枠 (午前 8 時~午前 9 時、午前 9 時~午前 10 時、午前 10 時~午後 11 時) に 1 回ずつ生成されます。The output data is produced hourly for three-hour windows (8 AM - 9 AM, 9 AM - 10 AM, and 10 AM - 11 AM).

アクティビティ実行で使用および生成されるデータの各ユニットは、データ スライスと呼ばれます。Each unit of data consumed or produced by an activity run is called a data slice. 次の図は、入力データセットと出力データセットが 1 つずつ含まれているアクティビティの例です。The following diagram shows an example of an activity with one input dataset and one output dataset:

可用性スケジューラ

図には、入力データセットと出力データセットの 1 時間ごとのデータ スライスが示されています。The diagram shows the hourly data slices for the input and output dataset. この図には、処理可能な入力スライスが 3 つあります。The diagram shows three input slices that are ready for processing. 10-11 AM のアクティビティが実行中であり、10-11 AM 出力スライスが生成されます。The 10-11 AM activity is in progress, producing the 10-11 AM output slice.

現在のスライスに関連付けられた時間間隔にアクセスするには、データセット JSON で変数 SliceStartSliceEnd を使用します。You can access the time interval associated with the current slice in the dataset JSON by using variables: SliceStart and SliceEnd. 同様に、アクティビティ ウィンドウに関連付けられている時間間隔には、WindowStart と WindowEnd を使用してアクセスできます。Similarly, you can access the time interval associated with an activity window by using the WindowStart and WindowEnd. アクティビティのスケジュールは、アクティビティの出力データセットのスケジュールと一致する必要があります。The schedule of an activity must match the schedule of the output dataset for the activity. そのため、SliceStart と SliceEnd の値はそれぞれ WindowStart と WindowEnd の値と同じです。Therefore, the SliceStart and SliceEnd values are the same as WindowStart and WindowEnd values respectively. これらの変数の詳細については、Data Factory の関数およびシステム変数に関する記事を参照してください。For more information on these variables, see Data Factory functions and system variables articles.

アクティビティ JSON では、これらの変数をさまざまな目的で使用します。You can use these variables for different purposes in your activity JSON. たとえば、これらの変数を使用して、入出力データセットから時系列データを表すデータ (例: 午前 8 時~午前 9 時) を選択することができます。For example, you can use them to select data from input and output datasets representing time series data (for example: 8 AM to 9 AM). この例でも WindowStartWindowEnd を使用して、アクティビティ実行の関連データを選択し、適切な folderPath を持つ BLOB にコピーします。This example also uses WindowStart and WindowEnd to select relevant data for an activity run and copy it to a blob with the appropriate folderPath. folderPath は、1 時間ごとに個別のフォルダーを使用するようにパラメーター化されています。The folderPath is parameterized to have a separate folder for every hour.

前の例では、入力データセットと出力データセットに指定されているスケジュールは同じです (1 時間ごと)。In the preceding example, the schedule specified for input and output datasets is the same (hourly). アクティビティの入力データセットを異なる頻度で利用できる場合 (15 分ごとなど) でも、アクティビティのスケジュールは出力データセットによって開始されるため、この出力データセットを生成するアクティビティは 1 時間に 1 回実行されます。If the input dataset for the activity is available at a different frequency, say every 15 minutes, the activity that produces this output dataset still runs once an hour as the output dataset is what drives the activity schedule. 詳細については、「頻度が異なるデータセットのモデル化」を参照してください。For more information, see Model datasets with different frequencies.

データセットの可用性とポリシーDataset availability and policies

データセット定義の availability セクションの frequency プロパティと interval プロパティを使用する方法を見てきました。You have seen the usage of frequency and interval properties in the availability section of dataset definition. アクティビティのスケジュールと実行に影響を与えるプロパティは他にもいくつかあります。There are a few other properties that affect the scheduling and execution of an activity.

データセットの可用性Dataset availability

次の表では、availability セクションで使用できるプロパティについて説明します。The following table describes properties you can use in the availability section:

プロパティProperty 説明Description 必須Required 既定値Default
frequencyfrequency データセット スライス生成の時間単位を指定します。Specifies the time unit for dataset slice production.

サポートされている頻度は、Minute、Hour、Day、Week、Month です。Supported frequency: Minute, Hour, Day, Week, Month
[はい]Yes 該当なしNA
intervalinterval 頻度の乗数を指定しますSpecifies a multiplier for frequency

"frequency x interval" により、スライスが生成される頻度が決まります。”Frequency x interval” determines how often the slice is produced.

データセットを時間単位でスライスする必要がある場合は、frequencyHour に設定し、interval1 に設定します。If you need the dataset to be sliced on an hourly basis, you set Frequency to Hour, and interval to 1.

: Frequency に Minute を指定する場合は、interval を 15 以上に設定することをお勧めしますNote: If you specify Frequency as Minute, we recommend that you set the interval to no less than 15
[はい]Yes 該当なしNA
stylestyle スライスを間隔の始めまたは終わりに生成するかどうかを指定します。Specifies whether the slice should be produced at the start/end of the interval.
  • StartOfIntervalStartOfInterval
  • EndOfIntervalEndOfInterval


frequency を Month に設定し、style を EndOfInterval に設定すると、スライスは月の最終日に生成されます。If Frequency is set to Month and style is set to EndOfInterval, the slice is produced on the last day of month. style が StartOfInterval に設定されていると、スライスは月の最初の日に生成されます。If the style is set to StartOfInterval, the slice is produced on the first day of month.

frequency を Day に設定し、style を EndOfInterval に設定すると、スライスは 1 日の最後の 1 時間に生成されます。If Frequency is set to Day and style is set to EndOfInterval, the slice is produced in the last hour of the day.

frequency を Hour に設定し、style を EndOfInterval に設定すると、スライスは時間の終わりに生成されます。If Frequency is set to Hour and style is set to EndOfInterval, the slice is produced at the end of the hour. たとえば、午後 1 時 ~ 午後 2 時のスライスの場合、午後 2 時にスライスが生成されます。For example, for a slice for 1 PM – 2 PM period, the slice is produced at 2 PM.
いいえ No EndOfIntervalEndOfInterval
anchorDateTimeanchorDateTime データセット スライスの境界を計算するためにスケジューラによって使用される時間の絶対位置を定義します。Defines the absolute position in time used by scheduler to compute dataset slice boundaries.

: AnchorDateTime に頻度より細かい日付部分が含まれている場合、その部分は無視されます。Note: If the AnchorDateTime has date parts that are more granular than the frequency then the more granular parts are ignored.

たとえば、間隔時間単位 (frequency が Hour で interval が 1) で、AnchorDateTime分と秒が含まれる場合、AnchorDateTime の分と秒部分は無視されます。For example, if the interval is hourly (frequency: hour and interval: 1) and the AnchorDateTime contains minutes and seconds, then the minutes and seconds parts of the AnchorDateTime are ignored.
いいえ No 01/01/000101/01/0001
offsetoffset すべてのデータセット スライスの開始と終了がシフトされる時間帯です。Timespan by which the start and end of all dataset slices are shifted.

: anchorDateTime と offset の両方が指定されている場合、結果的にシフトが結合されます。Note: If both anchorDateTime and offset are specified, the result is the combined shift.
いいえ No 該当なしNA

offset 例offset example

既定では、毎日 ("frequency": "Day", "interval": 1) のスライスは UTC 時 12 AM (午前 0 時) に開始します。By default, daily ("frequency": "Day", "interval": 1) slices start at 12 AM UTC time (midnight). 開始時刻を 6 AM UTC にするには、次のスニペットに示すようにオフセットを設定します。If you want the start time to be 6 AM UTC time instead, set the offset as shown in the following snippet:

"availability":
{
    "frequency": "Day",
    "interval": 1,
    "offset": "06:00:00"
}

anchorDateTime の例anchorDateTime example

次の例では、データセットは 23 時間ごとに 1 回生成されます。In the following example, the dataset is produced once every 23 hours. 最初のスライスは anchorDateTime に指定された時刻に開始します (2017-04-19T08:00:00 (UTC 時間) に設定されています)。The first slice starts at the time specified by the anchorDateTime, which is set to 2017-04-19T08:00:00 (UTC time).

"availability":    
{    
    "frequency": "Hour",        
    "interval": 23,    
    "anchorDateTime":"2017-04-19T08:00:00"    
}

offset/style の例offset/style Example

次のデータセットは月単位のデータセットです。毎月 3 日の 8:00 AM (3.08:00:00) に生成されます。The following dataset is a monthly dataset and is produced on 3rd of every month at 8:00 AM (3.08:00:00):

"availability": {
    "frequency": "Month",
    "interval": 1,
    "offset": "3.08:00:00", 
    "style": "StartOfInterval"
}

データセット ポリシーDataset policy

スライス実行を使用する前に、スライス実行で生成されるデータを検証する方法を指定した検証ポリシーをデータセットに定義することができます。A dataset can have a validation policy defined that specifies how the data generated by a slice execution can be validated before it is ready for consumption. この例では、スライスの実行が完了すると、出力スライスの状態は、サブジェクト状態が ValidationWaiting に変わります。In such cases, after the slice has finished execution, the output slice status is changed to Waiting with a substatus of Validation. スライスの検証が完了すると、スライスの状態は Readyに変わります。After the slices are validated, the slice status changes to Ready. データ スライスが生成されても、検証に合格しなかった場合、そのスライスに依存するダウンストリーム スライスのアクティビティ実行は処理されません。If a data slice has been produced but did not pass the validation, activity runs for downstream slices that depend on this slice are not processed. パイプラインの監視と管理 に関する記事で説明されています。Monitor and manage pipelines covers the various states of data slices in Data Factory.

データセット定義の policy セクションでは、データセット スライスで満たさなければならない基準または条件を定義します。The policy section in dataset definition defines the criteria or the condition that the dataset slices must fulfill. 次の表では、policy セクションで使用できるプロパティについて説明します。The following table describes properties you can use in the policy section:

ポリシー名Policy Name 説明Description 適用先Applied To 必須Required 既定値Default
minimumSizeMBminimumSizeMB Azure BLOB のデータが最小サイズ要件 (MB 単位) を満たすことを検証します。Validates that the data in an Azure blob meets the minimum size requirements (in megabytes). Azure BLOBAzure Blob いいえ No 該当なしNA
minimumRowsminimumRows Azure SQL Database または Azure テーブルのデータに最小行数が含まれていることを検証します。Validates that the data in an Azure SQL database or an Azure table contains the minimum number of rows.
  • Azure SQL DatabaseAzure SQL Database
  • Azure テーブルAzure Table
いいえ No 該当なしNA

Examples

minimumSizeMB:minimumSizeMB:

"policy":

{
    "validation":
    {
        "minimumSizeMB": 10.0
    }
}

minimumRowsminimumRows

"policy":
{
    "validation":
    {
        "minimumRows": 100
    }
}

これらのプロパティの詳細と例については、データセットの作成に関する記事を参照してください。For more information about these properties and examples, see Create datasets article.

アクティビティ ポリシーActivity policies

ポリシーはアクティビティの実行時の動作に影響します。具体的には、テーブルのスライスがいつ処理されるかです。Policies affect the run-time behavior of an activity, specifically when the slice of a table is processed. 次の表で詳細に説明します。The following table provides the details.

プロパティProperty 使用できる値Permitted values 既定値Default Value 説明Description
同時実行concurrency 整数Integer

最大値: 10Max value: 10
11 アクティビティの同時実行の数。Number of concurrent executions of the activity.

異なるスライスで実行できる並列アクティビティ実行の数を決定します。It determines the number of parallel activity executions that can happen on different slices. たとえば、アクティビティが大量のデータを処理する必要がある場合、同時実行の値を大きくするとデータ処理が速くなります。For example, if an activity needs to go through a large set of available data, having a larger concurrency value speeds up the data processing.
executionPriorityOrderexecutionPriorityOrder NewestFirstNewestFirst

OldestFirstOldestFirst
OldestFirstOldestFirst 処理されるデータ スライスの順序を決定します。Determines the ordering of data slices that are being processed.

たとえば、2 個のスライス (午後 4 時と午後 5 時の実行) があり、どちらも実行が保留されているとします。For example, if you have 2 slices (one happening at 4pm, and another one at 5pm), and both are pending execution. executionPriorityOrder を NewestFirst に設定すると、午後 5 時のスライスが最初に処理されます。If you set the executionPriorityOrder to be NewestFirst, the slice at 5 PM is processed first. 同様に、executionPriorityORder を OldestFIrst に設定すると、午後 4 時のスライスが処理されます。Similarly if you set the executionPriorityORder to be OldestFIrst, then the slice at 4 PM is processed.
retryretry 整数Integer

最大値は 10Max value can be 10
00 スライスのデータ処理が失敗としてマークされるまでの再試行回数。Number of retries before the data processing for the slice is marked as Failure. データ スライスのアクティビティの実行は、指定された再試行回数まで再試行されます。Activity execution for a data slice is retried up to the specified retry count. 再試行は、障害発生後にできるだけ早く行われます。The retry is done as soon as possible after the failure.
timeouttimeout timespanTimeSpan 00:00:0000:00:00 アクティビティのタイムアウト。Timeout for the activity. 例: 00:10:00 (タイムアウトが 10 分であることを意味します)Example: 00:10:00 (implies timeout 10 mins)

値が指定されていない場合、または値が 0 の場合は、タイムアウトは無期限です。If a value is not specified or is 0, the timeout is infinite.

スライスのデータ処理時間がタイムアウト値を超えた場合、処理は取り消され、システムは処理の再試行を試みます。If the data processing time on a slice exceeds the timeout value, it is canceled, and the system attempts to retry the processing. 再試行の回数は、retry プロパティで指定します。The number of retries depends on the retry property. タイムアウトが発生すると、ステータスは TimedOut に設定されます。When timeout occurs, the status is set to TimedOut.
delaydelay timespanTimeSpan 00:00:0000:00:00 スライスのデータ処理を開始する前の遅延時間を指定します。Specify the delay before data processing of the slice starts.

データ スライスのアクティビティの実行は、予想実行時刻を Delay だけ過ぎてから開始します。The execution of activity for a data slice is started after the Delay is past the expected execution time.

例: 00:10:00 (10 分の遅延を意味します)Example: 00:10:00 (implies delay of 10 mins)
longRetrylongRetry 整数Integer

最大値: 10Max value: 10
11 スライスの実行が失敗になるまでの、長い再試行の回数。The number of long retry attempts before the slice execution is failed.

longRetry の試行は longRetryInterval の間隔で行われます。longRetry attempts are spaced by longRetryInterval. 再試行間隔の時間を指定する必要がある場合は、longRetry を使用します。So if you need to specify a time between retry attempts, use longRetry. Retry と longRetry の両方を指定すると、各 longRetry に Retry が含まれ、最大再試行回数は Retry * longRetry になります。If both Retry and longRetry are specified, each longRetry attempt includes Retry attempts and the max number of attempts is Retry * longRetry.

たとえば、アクティビティ ポリシーに次のような設定があるとします。For example, if we have the following settings in the activity policy:
Retry: 3Retry: 3
longRetry: 2longRetry: 2
longRetryInterval: 01:00:00longRetryInterval: 01:00:00

実行するスライスは 1 つだけ (ステータスは Waiting)、アクティビティ実行は毎回失敗するとします。Assume there is only one slice to execute (status is Waiting) and the activity execution fails every time. 最初に 3 つの連続する試行があります。Initially there would be 3 consecutive execution attempts. 試行するたびに、スライスの状態は Retry になります。After each attempt, the slice status would be Retry. 最初の 3 つの試行が終わると、スライスの状態は LongRetry になります。After first 3 attempts are over, the slice status would be LongRetry.

1 時間 (longRetryInteval の値) が経過した後、再度 3 回連続して試行されます。After an hour (that is, longRetryInteval’s value), there would be another set of 3 consecutive execution attempts. その後、スライスの状態は Failed になり、それ以上再試行は行われません。After that, the slice status would be Failed and no more retries would be attempted. したがって、全部で 6 回試行されます。Hence overall 6 attempts were made.

いずれかの実行が成功すると、スライスの状態は Ready になり、それ以上再試行は行われません。If any execution succeeds, the slice status would be Ready and no more retries are attempted.

longRetry は、依存するデータがいつ到着するかわからない場合、またはデータ処理が行われる環境全体が当てにならない場合などに使用します。longRetry may be used in situations where dependent data arrives at non-deterministic times or the overall environment is flaky under which data processing occurs. このような場合、連続して再試行しても意味がなく、時間をおくと成功することがあります。In such cases, doing retries one after another may not help and doing so after an interval of time results in the desired output.

注意: longRetry または longRetryInterval に大きい値を設定しないでください。Word of caution: do not set high values for longRetry or longRetryInterval. 通常、大きな値は、その他のシステムの問題があることを意味します。Typically, higher values imply other systemic issues.
longRetryIntervallongRetryInterval timespanTimeSpan 00:00:0000:00:00 長い再試行の間の遅延The delay between long retry attempts

詳細については、パイプラインに関する記事を参照してください。For more information, see Pipelines article.

データ スライスの並列処理Parallel processing of data slices

パイプラインには過去の開始日を設定できます。You can set the start date for the pipeline in the past. 設定した場合、Data Factory によって過去のすべてのデータ スライスが自動的に計算 (バックフィル) され、処理が開始されます。When you do so, Data Factory automatically calculates (back fills) all data slices in the past and begins processing them. たとえば、開始日が 2017-04-01 のパイプラインを作成し、現在の日付が 2017-04-10 だとします。For example: if you create a pipeline with start date 2017-04-01 and the current date is 2017-04-10. 出力データセットのパターンが 1 日ごとの場合、開始日が過去であるため、Data Factory は 2017-04-01 から 2017-04-09 までのすべてのスライスの処理をすぐに開始します。If the cadence of the output dataset is daily, then Data Factory starts processing all the slices from 2017-04-01 to 2017-04-09 immediately because the start date is in the past. availability セクションの style プロパティの値が既定では EndOfInterval であるため、2017-04-10 のスライスはまだ処理されません。The slice from 2017-04-10 is not processed yet because the value of style property in the availability section is EndOfInterval by default. executionPriorityOrder の既定値が OldestFirst であるため、最も古いスライスが最初に処理されます。The oldest slice is processed first as the default value of executionPriorityOrder is OldestFirst. style プロパティの説明については、「データセットの可用性」セクションを参照してください。For a description of the style property, see dataset availability section. executionPriorityOrder セクションの説明については、「アクティビティ ポリシー」セクションを参照してください。For a description of the executionPriorityOrder section, see the activity policies section.

アクティビティ JSON の policy セクションに concurrency プロパティを設定することで、バックフィルされたデータ スライスが並列で処理されるように構成できます。You can configure back-filled data slices to be processed in parallel by setting the concurrency property in the policy section of the activity JSON. このプロパティにより、異なるスライスで実行できる並列アクティビティ実行の数が決定します。This property determines the number of parallel activity executions that can happen on different slices. concurrency プロパティの既定値は 1 です。The default value for the concurrency property is 1. そのため、既定では、一度に 1 つのスライスが処理されます。Therefore, one slice is processed at a time by default. 最大値は 10 です。The maximum value is 10. パイプラインで大量のデータを処理する必要がある場合、同時実行の値を大きくするとデータ処理が速くなります。When a pipeline needs to go through a large set of available data, having a larger concurrency value speeds up the data processing.

失敗したデータ スライスを再実行するRerun a failed data slice

データ スライスの処理中にエラーが発生した場合、Azure Portal のブレードまたは監視と管理アプリを使用してスライスの処理が失敗した理由を調べることができます。When an error occurs while processing a data slice, you can find out why the processing of a slice failed by using Azure portal blades or Monitor and Manage App. 詳細については、Azure Portal の各ブレードを使用したパイプラインの監視と管理に関する記事、または監視と管理用のアプリに関する記事を参照してください。See Monitoring and managing pipelines using Azure portal blades or Monitoring and Management app for details.

2 つのアクティビティがある次の例について考えてみます。Consider the following example, which shows two activities. Activity1 と Activity2 です。Activity1 and Activity 2. Activity1 は Dataset1 のスライスを使用し、Dataset2 のスライスを生成します。そのスライスを Activity2 が入力として使用して、最終的なデータセットのスライスを生成します。Activity1 consumes a slice of Dataset1 and produces a slice of Dataset2, which is consumed as an input by Activity2 to produce a slice of the Final Dataset.

失敗したスライス

この図は、最近の 3 つのスライスのうち、Dataset2 の 9-10 AM スライスの生成時にエラーが発生したことを示しています。The diagram shows that out of three recent slices, there was a failure producing the 9-10 AM slice for Dataset2. Data Factory では、時系列データセットの依存関係が自動的に追跡されます。Data Factory automatically tracks dependency for the time series dataset. このため、9-10 AM のダウンストリーム スライスのアクティビティ実行は開始されません。As a result, it does not start the activity run for the 9-10 AM downstream slice.

Data Factory の監視および管理ツールを使用すると、失敗したスライスの診断ログを詳細に調べ、問題の根本原因を簡単に見つけて修正できます。Data Factory monitoring and management tools allow you to drill into the diagnostic logs for the failed slice to easily find the root cause for the issue and fix it. 問題を解決したら、すぐにアクティビティ実行を開始して失敗したスライスを生成できます。After you have fixed the issue, you can easily start the activity run to produce the failed slice. 再実行の方法とデータ スライスの状態遷移の詳細については、Azure Portal の各ブレードを使用したパイプラインの監視と管理に関する記事、または監視と管理用のアプリに関する記事を参照してください。For more information on how to rerun and understand state transitions for data slices, see Monitoring and managing pipelines using Azure portal blades or Monitoring and Management app.

Dataset2の 9-10 AM スライスを再実行すると、Data Factory では最終データセットに対して 9-10 AM 依存スライスの実行が開始されます。After you rerun the 9-10 AM slice for Dataset2, Data Factory starts the run for the 9-10 AM dependent slice on the final dataset.

失敗したスライスの再実行

パイプライン内の複数アクティビティMultiple activities in a pipeline

パイプラインに複数のアクティビティを含めることができます。You can have more than one activity in a pipeline. パイプラインに複数のアクティビティがあり、アクティビティの出力が別のアクティビティの入力ではない場合は、アクティビティの入力データ スライスの準備ができれば、アクティビティが並列実行される可能性があります。If you have multiple activities in a pipeline and the output of an activity is not an input of another activity, the activities may run in parallel if input data slices for the activities are ready.

2 つのアクティビティを連鎖させる (アクティビティを連続的に実行する) には、一方のアクティビティの出力データセットを、もう一方のアクティビティの入力データセットとして指定します。You can chain two activities (run one activity after another) by setting the output dataset of one activity as the input dataset of the other activity. このとき、同じパイプラインのアクティビティと、別のパイプラインのアクティビティを指定できます。The activities can be in the same pipeline or in different pipelines. 2 つ目のアクティビティは、1 つ目のアクティビティが正常に完了した後にのみ実行されます。The second activity executes only when the first one finishes successfully.

たとえば、パイプラインに 2 つのアクティビティがある場合を考えてみましょう。For example, consider the following case where a pipeline has two activities:

  1. アクティビティ A1 は、外部入力データセット D1 を必要とし、出力データセット D2 を生成します。Activity A1 that requires external input dataset D1, and produces output dataset D2.
  2. アクティビティ A2 は、データセット D2 からの入力を必要とし、出力データセット D3 を生成します。Activity A2 that requires input from dataset D2, and produces output dataset D3.

このシナリオでは、アクティビティ A1 と A2 は同じパイプラインにあります。In this scenario, activities A1 and A2 are in the same pipeline. 外部データが使用可能なときにアクティビティ A1 が実行され、スケジュールされた可用性の頻度に達します。The activity A1 runs when the external data is available and the scheduled availability frequency is reached. D2 のスケジュールされたスライスが使用可能になると、アクティビティ A2 が実行され、スケジュールされた可用性の頻度に達します。The activity A2 runs when the scheduled slices from D2 become available and the scheduled availability frequency is reached. データセット D2 のスライスのいずれかでエラーが発生した場合、スライスが使用可能になるまで、そのスライスに対して A2 は実行されません。If there is an error in one of the slices in dataset D2, A2 does not run for that slice until it becomes available.

同じパイプラインに両方のアクティビティがあるダイアグラム ビューは、次の図のようになります。The Diagram view with both activities in the same pipeline would look like the following diagram:

同じパイプラインでのアクティビティの連鎖

既に説明したように、アクティビティは異なるパイプラインに指定できます。As mentioned earlier, the activities could be in different pipelines. そうしたシナリオでは、ダイアグラム ビューは次の図のようになります。In such a scenario, the diagram view would look like the following diagram:

2 つのパイプラインでのアクティビティの連鎖

例については、付録の順次コピーに関するセクションを参照してください。See the copy sequentially section in the appendix for an example.

頻度が異なるデータセットのモデル化Model datasets with different frequencies

各サンプルでは、入力および出力データセットとアクティビティ スケジュール ウィンドウの頻度は同じでした。In the samples, the frequencies for input and output datasets and the activity schedule window were the same. シナリオによっては、1 つまたは複数の入力の頻度とは異なる頻度で出力を生成できる必要があります。Some scenarios require the ability to produce output at a frequency different than the frequencies of one or more inputs. Data Factory は、このようなシナリオのモデル化をサポートしています。Data Factory supports modeling these scenarios.

サンプル 1: 毎時取得できる入力データの出力レポートを 1 日に 1 回生成するSample 1: Produce a daily output report for input data that is available every hour

センサーからの入力測定データを Azure BLOB Strage で 1 時間ごとに使用できるシナリオについて考えてみます。Consider a scenario in which you have input measurement data from sensors available every hour in Azure Blob storage. Data Factory の Hive アクティビティを使用して、1 日の平均値、最大値、最小値など、統計情報を含む日次集計レポートを生成します。You want to produce a daily aggregate report with statistics such as mean, maximum, and minimum for the day with Data Factory hive activity.

Data Factory を使用して、このシナリオをモデル化する方法を次に示します。Here is how you can model this scenario with Data Factory:

入力データセットInput dataset

特定の日のフォルダーに毎時の入力ファイルが生成されます。The hourly input files are dropped in the folder for the given day. 入力の availability は Hour に設定されています (frequency: Hour、interval: 1)。Availability for input is set at Hour (frequency: Hour, interval: 1).

{
  "name": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/{Year}/{Month}/{Day}/",
      "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"}}
      ],
      "format": {
        "type": "TextFormat"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

出力データセットOutput dataset

毎日、その日のフォルダーに出力ファイルが 1 つ作成されます。One output file is created every day in the day's folder. 出力の availability は Day に設定されています (frequency: Day、interval: 1)。Availability of output is set at Day (frequency: Day and interval: 1).

{
  "name": "AzureBlobOutput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/{Year}/{Month}/{Day}/",
      "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"}}
      ],
      "format": {
        "type": "TextFormat"
      }
    },
    "availability": {
      "frequency": "Day",
      "interval": 1
    }
  }
}

アクティビティ: パイプラインの Hive アクティビティActivity: hive activity in a pipeline

次のスニペットに示すように、Hive スクリプトは WindowStart 変数を使用したパラメーターとして適切な DateTime 情報を受け取ります。The hive script receives the appropriate DateTime information as parameters that use the WindowStart variable as shown in the following snippet. Hive スクリプトは、この変数を使用して、その日の適切なフォルダーからデータを読み込み、集計を実行して出力を生成します。The hive script uses this variable to load the data from the correct folder for the day and run the aggregation to generate the output.

{  
    "name":"SamplePipeline",
    "properties":{  
    "start":"2015-01-01T08:00:00",
    "end":"2015-01-01T11:00:00",
    "description":"hive activity",
    "activities": [
        {
            "name": "SampleHiveActivity",
            "inputs": [
                {
                    "name": "AzureBlobInput"
                }
            ],
            "outputs": [
                {
                    "name": "AzureBlobOutput"
                }
            ],
            "linkedServiceName": "HDInsightLinkedService",
            "type": "HDInsightHive",
            "typeProperties": {
                "scriptPath": "adftutorial\\hivequery.hql",
                "scriptLinkedService": "StorageLinkedService",
                "defines": {
                    "Year": "$$Text.Format('{0:yyyy}',WindowStart)",
                    "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"
            }
         }
     ]
   }
}

次の図は、データ依存関係の観点からこのシナリオを示しています。The following diagram shows the scenario from a data-dependency point of view.

データ依存関係

毎日の出力スライスは、入力データセットの 24 時間のスライスに依存しています。The output slice for every day depends on 24 hourly slices from an input dataset. Data Factory では、生成する出力スライスと同じ期間に属する入力データ スライスを特定して、これらの依存関係を自動的に計算します。Data Factory computes these dependencies automatically by figuring out the input data slices that fall in the same time period as the output slice to be produced. 24 個の入力スライスのいずれかを使用できない場合、Data Factory では入力スライスの準備が完了するまで待機してから、毎日のアクティビティ実行を開始します。If any of the 24 input slices is not available, Data Factory waits for the input slice to be ready before starting the daily activity run.

サンプル 2: 式と Data Factory の関数を使用して依存関係を指定するSample 2: Specify dependency with expressions and Data Factory functions

別のシナリオについて考えてみましょう。Let’s consider another scenario. 2 つの入力データセットを処理する Hive アクティビティがあるとします。Suppose you have a hive activity that processes two input datasets. 一方のデータセットには毎日新しいデータが入力されますが、もう片方のデータセットでは 1 週間ごとに新しいデータを取得します。One of them has new data daily, but one of them gets new data every week. これら 2 つの入力を結合して、毎日 1 つの出力を生成してみましょう。Suppose you wanted to do a join across the two inputs and produce an output every day.

出力データ スライスの期間に合わせることで処理対象の入力スライスを Data Factory で自動的に特定するという単純な方法では、こうした操作を行うことはできません。The simple approach in which Data Factory automatically figures out the right input slices to process by aligning to the output data slice’s time period does not work.

個々のアクティビティ実行で、毎週の入力データセットに対して最新の週のデータ セットが Data Factory に使用されるように指定する必要があります。You must specify that for every activity run, the Data Factory should use last week’s data slice for the weekly input dataset. この動作を実装するには、次のスニペットに示すように Azure Data Factory の関数を使用します。You use Azure Data Factory functions as shown in the following snippet to implement this behavior.

Input1: Azure BLOBInput1: Azure blob

最初の入力は、毎日更新される Azure BLOB にします。The first input is the Azure blob being updated daily.

{
  "name": "AzureBlobInputDaily",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/{Year}/{Month}/{Day}/",
      "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"}}
      ],
      "format": {
        "type": "TextFormat"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Day",
      "interval": 1
    }
  }
}

Input2: Azure BLOBInput2: Azure blob

Input2 は、毎週更新される Azure BLOB にします。Input2 is the Azure blob being updated weekly.

{
  "name": "AzureBlobInputWeekly",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/{Year}/{Month}/{Day}/",
      "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"}}
      ],
      "format": {
        "type": "TextFormat"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Day",
      "interval": 7
    }
  }
}

Output: Azure BLOBOutput: Azure blob

毎日、その日のフォルダーに出力ファイルが 1 つ作成されます。One output file is created every day in the folder for the day. 出力の availability は day に設定されています (frequency: day、interval: 1)。Availability of output is set to day (frequency: Day, interval: 1).

{
  "name": "AzureBlobOutputDaily",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/{Year}/{Month}/{Day}/",
      "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"}}
      ],
      "format": {
        "type": "TextFormat"
      }
    },
    "availability": {
      "frequency": "Day",
      "interval": 1
    }
  }
}

アクティビティ: パイプラインの Hive アクティビティActivity: hive activity in a pipeline

Hive アクティビティは 2 つの入力を受け取り、出力スライスを毎日生成します。The hive activity takes the two inputs and produces an output slice every day. 次のように、毎週の入力に対する前の週の入力スライスに応じて、毎日の出力スライスを指定できます。You can specify every day’s output slice to depend on the previous week’s input slice for weekly input as follows.

{  
    "name":"SamplePipeline",
    "properties":{  
    "start":"2015-01-01T08:00:00",
    "end":"2015-01-01T11:00:00",
    "description":"hive activity",
    "activities": [
      {
        "name": "SampleHiveActivity",
        "inputs": [
          {
            "name": "AzureBlobInputDaily"
          },
          {
            "name": "AzureBlobInputWeekly",
            "startTime": "Date.AddDays(SliceStart, - Date.DayOfWeek(SliceStart))",
            "endTime": "Date.AddDays(SliceEnd,  -Date.DayOfWeek(SliceEnd))"  
          }
        ],
        "outputs": [
          {
            "name": "AzureBlobOutputDaily"
          }
        ],
        "linkedServiceName": "HDInsightLinkedService",
        "type": "HDInsightHive",
        "typeProperties": {
          "scriptPath": "adftutorial\\hivequery.hql",
          "scriptLinkedService": "StorageLinkedService",
          "defines": {
            "Year": "$$Text.Format('{0:yyyy}',WindowStart)",
            "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"
        }
       }
     ]
   }
}

Data Factory でサポートされている関数とシステム変数の一覧については、 Data Factory の関数とシステム変数 に関する記事をご覧ください。See Data Factory functions and system variables for a list of functions and system variables that Data Factory supports.

付録Appendix

例: 順次コピーExample: copy sequentially

複数のコピー操作を、順番にまたは順序を指定して 1 つずつ実行できます。It is possible to run multiple copy operations one after another in a sequential/ordered manner. たとえば、パイプラインに 2 つのコピー アクティビティ (CopyActivity1 と CopyActivity2) があり、入力データと出力データセットは次のとおりであるとします。For example, you might have two copy activities in a pipeline (CopyActivity1 and CopyActivity2) with the following input data output datasets:

CopyActivity1CopyActivity1

Input: Dataset。Input: Dataset. 出力: Dataset2。Output: Dataset2.

CopyActivity2CopyActivity2

Input: Dataset2。Input: Dataset2. 出力: Dataset3。Output: Dataset3.

CopyActivity2 は、CopyActivity1 が正常に実行していて、Dataset2 を使用できた場合にのみ実行します。CopyActivity2 would run only if the CopyActivity1 has run successfully and Dataset2 is available.

パイプライン JSON の例を次に示します。Here is the sample pipeline JSON:

{
    "name": "ChainActivities",
    "properties": {
        "description": "Run activities in sequence",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink",
                        "copyBehavior": "PreserveHierarchy",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "Dataset1"
                    }
                ],
                "outputs": [
                    {
                        "name": "Dataset2"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00"
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "CopyFromBlob1ToBlob2",
                "description": "Copy data from a blob to another"
            },
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "Dataset2"
                    }
                ],
                "outputs": [
                    {
                        "name": "Dataset3"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00"
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "CopyFromBlob2ToBlob3",
                "description": "Copy data from a blob to another"
            }
        ],
        "start": "2016-08-25T01:00:00Z",
        "end": "2016-08-25T01:00:00Z",
        "isPaused": false
    }
}

この例では、最初のコピー アクティビティの出力データセット (Dataset2) が 2 番目のアクティビティの入力として指定されています。Notice that in the example, the output dataset of the first copy activity (Dataset2) is specified as input for the second activity. したがって、2 番目のアクティビティは、最初のアクティビティからの出力データセットが準備ができたときにのみ実行されます。Therefore, the second activity runs only when the output dataset from the first activity is ready.

この例では、CopyActivity2 で別の入力 (Dataset3 など) を使用できますが、CopyActivity2 への入力として Dataset2 も指定しているため、CopyActivity1 が完了するまでこのアクティビティは実行されません。In the example, CopyActivity2 can have a different input, such as Dataset3, but you specify Dataset2 as an input to CopyActivity2, so the activity does not run until CopyActivity1 finishes. 例: For example:

CopyActivity1CopyActivity1

Input: Dataset1。Input: Dataset1. 出力: Dataset2。Output: Dataset2.

CopyActivity2CopyActivity2

Inputs: Dataset3、Dataset2。Inputs: Dataset3, Dataset2. 出力: Dataset4。Output: Dataset4.

{
    "name": "ChainActivities",
    "properties": {
        "description": "Run activities in sequence",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink",
                        "copyBehavior": "PreserveHierarchy",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "Dataset1"
                    }
                ],
                "outputs": [
                    {
                        "name": "Dataset2"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00"
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "CopyFromBlobToBlob",
                "description": "Copy data from a blob to another"
            },
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink",
                        "writeBatchSize": 0,
                        "writeBatchTimeout": "00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "Dataset3"
                    },
                    {
                        "name": "Dataset2"
                    }
                ],
                "outputs": [
                    {
                        "name": "Dataset4"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00"
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "name": "CopyFromBlob3ToBlob4",
                "description": "Copy data from a blob to another"
            }
        ],
        "start": "2017-04-25T01:00:00Z",
        "end": "2017-04-25T01:00:00Z",
        "isPaused": false
    }
}

この例では、2 つの入力データセットが、2 番目のコピー アクティビティに対して指定されています。Notice that in the example, two input datasets are specified for the second copy activity. 複数の入力を指定すると、データのコピーに使用されるのは最初の入力データセットのみで、他のデータセットは依存関係として使用されます。When multiple inputs are specified, only the first input dataset is used for copying data, but other datasets are used as dependencies. CopyActivity2 は、次の条件が満たされた場合にのみ開始されます。CopyActivity2 would start only after the following conditions are met:

  • CopyActivity1 が正常に完了していて、Dataset2 を使用できる。CopyActivity1 has successfully completed and Dataset2 is available. データを Dataset4 にコピーするときに、このデータセットは使用されません。This dataset is not used when copying data to Dataset4. これは、CopyActivity2 のスケジュールの依存関係としてのみ機能します。It only acts as a scheduling dependency for CopyActivity2.
  • Dataset3 を使用できる。Dataset3 is available. このデータセットは、コピー先にコピーされるデータを表します。This dataset represents the data that is copied to the destination.