Pianificazione ed esecuzione con Data FactoryData Factory scheduling and execution

Nota

Le informazioni di questo articolo sono valide per la versione 1 di Data Factory.This article applies to version 1 of Data Factory. Se si usa la versione corrente del servizio Data Factory, vedere l'articolo relativo all'esecuzione della pipeline e ai trigger.If you are using the current version of the Data Factory service, see pipeline execution and triggers article.

Questo articolo descrive gli aspetti di pianificazione ed esecuzione del modello applicativo Azure Data Factory.This article explains the scheduling and execution aspects of the Azure Data Factory application model. L'articolo presuppone la conoscenza dei concetti di base del modello applicativo di Data Factory: attività, pipeline, servizi collegati e set di dati.This article assumes that you understand basics of Data Factory application model concepts, including activity, pipelines, linked services, and datasets. Per i concetti di base di Data Factory di Azure, vedere gli articoli seguenti:For basic concepts of Azure Data Factory, see the following articles:

Ora di inizio e ora di fine della pipelineStart and end times of pipeline

Una pipeline è attiva solo tra l'ora di inizio e l'ora di fine.A pipeline is active only between its start time and end time. Non viene eseguita prima dell'ora di inizio o dopo l'ora di fine.It is not executed before the start time or after the end time. Se messa in pausa, la pipeline non viene eseguita, indipendentemente dall'ora di inizio e di fine.If the pipeline is paused, it is not executed irrespective of its start and end time. Per essere eseguita, una pipeline non deve essere in pausa.For a pipeline to run, it should not be paused. Queste impostazioni (inizio, fine, in pausa) sono disponibili nella definizione di pipeline: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

Per altre informazioni su queste proprietà, vedere l'articolo Creare pipeline.For more information these properties, see create pipelines article.

Pianificare l'esecuzione di un'attivitàSpecify schedule for an activity

Non è la pipeline a essere eseguita,It is not the pipeline that is executed. ma sono le attività della pipeline a essere eseguite nel contesto generale della pipeline.It is the activities in the pipeline that are executed in the overall context of the pipeline. La sezione Utilità di pianificazione del file JSON dell'attività consente di specificare una pianificazione ricorrente per l'attività.You can specify a recurring schedule for an activity by using the scheduler section of activity JSON. Ad esempio, è possibile pianificare l'attività perché venga eseguita a cadenza oraria, come riportato di seguito:For example, you can schedule an activity to run hourly as follows:

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

Come illustrato nel diagramma seguente, pianificando un'attività si crea una serie di finestre a cascata con l'ora di inizio e di fine della pipeline.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. Le finestre a cascata sono costituite da una serie di intervalli temporali di dimensioni fisse, contigui e non sovrapposti.Tumbling windows are a series of fixed-size non-overlapping, contiguous time intervals. Queste finestre logiche a cascata per un'attività vengono denominate finestre attività.These logical tumbling windows for an activity are called activity windows.

Esempio di utilità di pianificazione delle attività

La proprietà scheduler per un'attività è facoltativa.The scheduler property for an activity is optional. Se specificata, questa proprietà deve corrispondere alla cadenza indicata nella definizione del set di dati di output per l'attività.If you do specify this property, it must match the cadence you specify in the definition of output dataset for the activity. Attualmente, è il set di dati di output a determinare la pianificazione.Currently, output dataset is what drives the schedule. Pertanto, anche se l'attività non genera alcun output, è necessario specificare un set di dati di output.Therefore, you must create an output dataset even if the activity does not produce any output.

Specificare una pianificazione per un set di datiSpecify schedule for a dataset

Un'attività in una pipeline di Data Factory può non avere alcun set di dati di input o può averne più di uno e generare uno o più set di dati di output.An activity in a Data Factory pipeline can take zero or more input datasets and produce one or more output datasets. Per un'attività è possibile specificare la cadenza con cui sono resi disponibili i dati di input o sono generati i dati di output usando la sezione availability nelle definizioni dei set di dati.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.

La proprietà frequency nella sezione availability specifica l'unità di tempo.Frequency in the availability section specifies the time unit. I valori consentiti per la frequenza sono: Minute, Hour, Day, Week, e Month (minuto, ora, giorno, settimana e mese).The allowed values for frequency are: Minute, Hour, Day, Week, and Month. La proprietà interval nella sezione availability consente di specificare un moltiplicatore di frequenza.The interval property in the availability section specifies a multiplier for frequency. Ad esempio: se la frequenza è impostata su Day e interval è impostato su 1 per un set di dati di output, questi saranno prodotti con cadenza giornaliera.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. Se si specifica frequency come Minute, è consigliabile impostare interval su un valore non inferiore a 15.If you specify the frequency as minute, we recommend that you set the interval to no less than 15.

Nell'esempio seguente, i dati di input sono disponibili ogni ora e i dati di output sono generati con cadenza oraria ("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).

Set di dati di input:Input dataset:

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

Set di dati di outputOutput 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
        }
    }
}

Attualmente, è il set di dati di output a determinare la pianificazione.Currently, output dataset drives the schedule. In altre parole, la pianificazione specificata per il set di dati di output viene usata per eseguire un'attività in fase di runtime.In other words, the schedule specified for the output dataset is used to run an activity at runtime. Pertanto, anche se l'attività non genera alcun output, è necessario specificare un set di dati di output.Therefore, you must create an output dataset even if the activity does not produce any output. Se l'attività non richiede input, è possibile ignorare la creazione del set di dati di input.If the activity doesn't take any input, you can skip creating the input dataset.

Nella definizione di pipeline seguente, la proprietà scheduler viene usata per specificare una pianificazione per l'attività.In the following pipeline definition, the scheduler property is used to specify schedule for the activity. Questa proprietà è facoltativa.This property is optional. Attualmente, la pianificazione dell'attività deve corrispondere alla pianificazione specificata per il set di dati di output.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"
    }
}

In questo esempio, l'attività viene eseguita ogni ora tra l'ora di inizio e quella di fine della pipeline.In this example, the activity runs hourly between the start and end times of the pipeline. I dati di output sono prodotti con cadenza oraria per finestre di tre ore (08:00 - 09:00, 09:00 - 10:00 e 10:00 - 11:00).The output data is produced hourly for three-hour windows (8 AM - 9 AM, 9 AM - 10 AM, and 10 AM - 11 AM).

Ogni unità di dati usata o prodotta da un'esecuzione di attività prende il nome di sezione di dati.Each unit of data consumed or produced by an activity run is called a data slice. Nel diagramma seguente viene illustrato un esempio di attività con un set di dati di input e un set di dati di output:The following diagram shows an example of an activity with one input dataset and one output dataset:

Utilità di pianificazione della disponibilità

Il diagramma illustra le sezioni di dati orarie per i set di dati di input e di output.The diagram shows the hourly data slices for the input and output dataset. Il diagramma mostra tre sezioni di input che sono pronte per l'elaborazione.The diagram shows three input slices that are ready for processing. L'attività 10-11 AM è in corso e produce la sezione di output 10-11 AM.The 10-11 AM activity is in progress, producing the 10-11 AM output slice.

È possibile accedere all'intervallo di tempo associato alla sezione corrente nel set di dati JSON usando le variabili SliceStart e SliceEnd.You can access the time interval associated with the current slice in the dataset JSON by using variables: SliceStart and SliceEnd. Allo stesso modo, è possibile accedere all'intervallo di tempo associato a una finestra di attività usando WindowStart e WindowEnd.Similarly, you can access the time interval associated with an activity window by using the WindowStart and WindowEnd. La pianificazione di un'attività deve corrispondere alla pianificazione del set di dati di output per l'attività stessa.The schedule of an activity must match the schedule of the output dataset for the activity. Di conseguenza, i valori SliceStart e SliceEnd sono rispettivamente uguali ai valori WindowStart e WindowEnd.Therefore, the SliceStart and SliceEnd values are the same as WindowStart and WindowEnd values respectively. Per altre informazioni su queste variabili, vedere gli articoli Funzioni e variabili di sistema di Data Factory.For more information on these variables, see Data Factory functions and system variables articles.

È possibile usare queste variabili per scopi diversi nel file JSON dell'attività.You can use these variables for different purposes in your activity JSON. Ad esempio, è possibile usarle per selezionare i dati dai set di dati di input e output che rappresentano i dati della serie temporale (ad esempio, dalle 08:00 alle 09:00).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). L'esempio usa anche WindowStart e WindowEnd per selezionare i dati pertinenti per l'esecuzione di un'attività e copiarli in un BLOB con un elemento folderPath appropriato.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. All'oggetto folderPath sono applicati parametri per avere una cartella separata per ogni ora.The folderPath is parameterized to have a separate folder for every hour.

Nell'esempio precedente, la pianificazione specificata per i set di dati di input e di output è la stessa (cadenza oraria).In the preceding example, the schedule specified for input and output datasets is the same (hourly). Se il set di dati di input per l'attività è disponibile con una frequenza diversa, ad esempio ogni 15 minuti, l'attività che genera il set di dati di output viene eseguita ancora una volta con cadenza oraria, poiché è il set di dati di output a impostare la pianificazione dell'attività.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. Per altre informazioni, vedere Modellare i set di dati con frequenze diverse.For more information, see Model datasets with different frequencies.

Disponibilità e criteri dei set di datiDataset availability and policies

È stato illustrato l'uso delle proprietà frequency e interval nella sezione availability della definizione di set di dati.You have seen the usage of frequency and interval properties in the availability section of dataset definition. Esistono alcune altre proprietà che influiscono sulla pianificazione e l'esecuzione di un'attività.There are a few other properties that affect the scheduling and execution of an activity.

Disponibilità dei set di datiDataset availability

La tabella seguente descrive le proprietà che è possibile usare nella sezione availability:The following table describes properties you can use in the availability section:

ProprietàProperty DescrizioneDescription ObbligatorioRequired DefaultDefault
frequencyfrequency Specifica l'unità di tempo per la produzione di sezioni di set di dati.Specifies the time unit for dataset slice production.

Frequenza supportata: minuto, ora, giorno, settimana, meseSupported frequency: Minute, Hour, Day, Week, Month
Yes NDNA
intervalinterval Specifica un moltiplicatore per la frequenza.Specifies a multiplier for frequency

"Intervallo di frequenza x" determina la frequenza con cui viene generata la sezione.”Frequency x interval” determines how often the slice is produced.

Se è necessario suddividere il set di dati su base oraria, impostare l'opzione Frequenza su Ora e Intervallo su 1.If you need the dataset to be sliced on an hourly basis, you set Frequency to Hour, and interval to 1.

Nota : se si specifica frequency come Minute, è consigliabile impostare interval su un valore non inferiore a 15Note: If you specify Frequency as Minute, we recommend that you set the interval to no less than 15
Yes NDNA
stylestyle Specifica se la sezione deve essere generata all'inizio o alla fine dell'intervallo.Specifies whether the slice should be produced at the start/end of the interval.
  • StartOfIntervalStartOfInterval
  • EndOfIntervalEndOfInterval


Se frequency è impostato su Month e style è impostato su EndOfInterval, la sezione viene generata l'ultimo giorno del mese.If Frequency is set to Month and style is set to EndOfInterval, the slice is produced on the last day of month. Se style è impostato su StartOfInterval, la sezione viene generata il primo giorno del mese.If the style is set to StartOfInterval, the slice is produced on the first day of month.

Se l'opzione Frequnza è impostata su Mese e l'opzione Stile è impostata su EndOfInterval, la sezione viene generata l'ultima ora del giorno.If Frequency is set to Day and style is set to EndOfInterval, the slice is produced in the last hour of the day.

Se frequency è impostato su Hour e style è impostato su EndOfInterval, la sezione viene generata alla fine dell'ora.If Frequency is set to Hour and style is set to EndOfInterval, the slice is produced at the end of the hour. Ad esempio, una sezione per il periodo 13.00 - 14.00 viene generata alle 14.00.For example, for a slice for 1 PM – 2 PM period, the slice is produced at 2 PM.
NoNo EndOfIntervalEndOfInterval
anchorDateTimeanchorDateTime Definisce la posizione assoluta nel tempo usata dall'utilità di pianificazione per calcolare i limiti della sezione del set di dati.Defines the absolute position in time used by scheduler to compute dataset slice boundaries.

Nota: se AnchorDateTime include parti della data più granulari rispetto alla frequenza, le parti più granulari vengono ignorate.Note: If the AnchorDateTime has date parts that are more granular than the frequency then the more granular parts are ignored.

Ad esempio, se l'intervallo è orario (ovvero frequenza: ora e intervallo: 1) e AnchorDateTime contiene minuti e secondi, le parti minuti e secondi di AnchorDateTime vengono ignorate.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.
NoNo 01/01/000101/01/0001
offsetoffset Intervallo di tempo in base al quale l'inizio e la fine di tutte le sezioni dei set di dati vengono spostate.Timespan by which the start and end of all dataset slices are shifted.

Nota: se vengono specificati sia anchorDateTime che offset, il risultato sarà lo spostamento combinato.Note: If both anchorDateTime and offset are specified, the result is the combined shift.
NoNo NDNA

Esempio di offsetoffset example

Per impostazione predefinita, le sezioni giornaliere ("frequency": "Day", "interval": 1) iniziano alle 00:00, mezzanotte, ora UTC.By default, daily ("frequency": "Day", "interval": 1) slices start at 12 AM UTC time (midnight). Se, invece, si desidera impostare l'ora di inizio alle 06:00 UTC, impostare l'offset come illustrato nel frammento riportato di seguito: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"
}

Esempio di anchorDateTimeanchorDateTime example

Nell'esempio seguente, il set di dati viene prodotto ogni 23 ore.In the following example, the dataset is produced once every 23 hours. La prima sezione inizia all'ora specificata da anchorDateTime, che è impostato su 2017-04-19T08:00:00 (ora 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"    
}

Esempio di offset/styleoffset/style Example

Il seguente set di dati è un set di dati mensile e viene generato il 3 di ogni mese alle ore 08:00 (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"
}

Criteri di set di datiDataset policy

Per un set di dati è possibile definire anche un criterio di convalida che specifica in che modo i dati generati dall'esecuzione di una sezione possono essere convalidati prima che siano pronti per l'uso.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. In questi casi, al termine del processo di esecuzione, lo stato della sezione di output viene impostato su In attesa con lo stato secondario impostato su Convalida.In such cases, after the slice has finished execution, the output slice status is changed to Waiting with a substatus of Validation. Al termine della convalida, lo stato viene impostato invece su Pronto.After the slices are validated, the slice status changes to Ready. Se una sezione di dati è stata correttamente generata ma non ha superato il processo di convalida, le esecuzioni di attività per le sezioni a valle dipendenti da questa sezione non vengono elaborate.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. Monitorare e gestire le pipeline vengono descritti i vari stati disponibili per le sezioni di dati di Data Factory.Monitor and manage pipelines covers the various states of data slices in Data Factory.

La sezione policy nella definizione del set di dati stabilisce i criteri o la condizione che le sezioni del set di dati devono soddisfare.The policy section in dataset definition defines the criteria or the condition that the dataset slices must fulfill. La tabella seguente descrive le proprietà che è possibile usare nella sezione policy:The following table describes properties you can use in the policy section:

Nome criterioPolicy Name DescrizioneDescription Applicato aApplied To ObbligatorioRequired DefaultDefault
minimumSizeMBminimumSizeMB Verifica che i dati in un BLOB di Azure soddisfino i requisiti relativi alle dimensioni minime (in megabyte).Validates that the data in an Azure blob meets the minimum size requirements (in megabytes). BLOB AzureAzure Blob NoNo NDNA
minimumRowsminimumRows Verifica che i dati in un database SQL di Azure o in una tabella di Azure contengano il numero minimo di righe.Validates that the data in an Azure SQL database or an Azure table contains the minimum number of rows.
  • Database SQL di AzureAzure SQL Database
  • tabella di AzureAzure Table
NoNo NDNA

EsempiExamples

minimumSizeMB:minimumSizeMB:

"policy":

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

minimumRowsminimumRows

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

Per altre informazioni sulle proprietà e gli esempi precedenti, vedere l'articolo Creare i set di dati.For more information about these properties and examples, see Create datasets article.

Criteri di attivitàActivity policies

I criteri influiscono sul comportamento in fase di esecuzione di un'attività, in particolare quando viene elaborata la sezione di una tabella.Policies affect the run-time behavior of an activity, specifically when the slice of a table is processed. La tabella seguente fornisce informazioni dettagliate.The following table provides the details.

ProprietàProperty Valori consentitiPermitted values Default ValueDefault Value DescrizioneDescription
Concorrenzaconcurrency IntegerInteger

Valore massimo: 10Max value: 10
11 Numero di esecuzioni simultanee dell'attività.Number of concurrent executions of the activity.

Determina il numero di esecuzioni di attività parallele che possono verificarsi in sezioni diverse.It determines the number of parallel activity executions that can happen on different slices. Ad esempio, se un'attività deve passare attraverso grandi set di dati disponibili, con un valore di concorrenza maggiore che consente di velocizzare l'elaborazione dei dati.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 Determina l'ordine delle sezioni di dati che vengono elaborate.Determines the ordering of data slices that are being processed.

Ad esempio nel caso in cui si abbiano 2 sezioni, una alle 16.00 e l'altra alle 17.00, ed entrambe siano in attesa di esecuzione.For example, if you have 2 slices (one happening at 4pm, and another one at 5pm), and both are pending execution. Se si imposta executionPriorityOrder su NewestFirst, viene elaborata per prima la sezione delle 17:00.If you set the executionPriorityOrder to be NewestFirst, the slice at 5 PM is processed first. Allo stesso modo, se si imposta executionPriorityORder su OldestFIrst, verrà elaborata per prima la sezione delle 16:00.Similarly if you set the executionPriorityORder to be OldestFIrst, then the slice at 4 PM is processed.
retryretry IntegerInteger

Valore massimo: 10Max value can be 10
00 Numero di tentativi prima che l'elaborazione dei dati per la sezione sia contrassegnata come errore.Number of retries before the data processing for the slice is marked as Failure. L'esecuzione dell’attività per una sezione di dati viene ritentata fino al numero di tentativi specificato.Activity execution for a data slice is retried up to the specified retry count. Il tentativo viene eseguito appena possibile dopo l'errore.The retry is done as soon as possible after the failure.
timeouttimeout TimeSpanTimeSpan 00:00:0000:00:00 Timeout per l'attività.Timeout for the activity. Esempio: 00:10:00 (implica un timeout di 10 minuti)Example: 00:10:00 (implies timeout 10 mins)

Se un valore non è specificato o è 0, il timeout è infinito.If a value is not specified or is 0, the timeout is infinite.

Se il tempo di elaborazione dei dati in una sezione supera il valore di timeout, viene annullato e il sistema prova a ripetere l'elaborazione.If the data processing time on a slice exceeds the timeout value, it is canceled, and the system attempts to retry the processing. Il numero di tentativi dipende dalla proprietà retry.The number of retries depends on the retry property. Quando si verifica il timeout, lo stato viene impostato su TimedOut.When timeout occurs, the status is set to TimedOut.
delaydelay TimeSpanTimeSpan 00:00:0000:00:00 Specificare il ritardo prima che abbia inizio l'elaborazione dei dati della sezione.Specify the delay before data processing of the slice starts.

L'esecuzione dell'attività per una sezione di dati viene avviata non appena il ritardo supera il tempo di esecuzione previsto.The execution of activity for a data slice is started after the Delay is past the expected execution time.

Esempio: 00:10:00 (implica un ritardo di 10 minuti)Example: 00:10:00 (implies delay of 10 mins)
longRetrylongRetry IntegerInteger

Valore massimo: 10Max value: 10
11 Numero di tentativi estesi prima che l'esecuzione della sezione dia esito negativo.The number of long retry attempts before the slice execution is failed.

I tentativi longRetry sono distanziati da longRetryInterval.longRetry attempts are spaced by longRetryInterval. Pertanto, se è necessario specificare un tempo tra i tentativi, utilizzare longRetry.So if you need to specify a time between retry attempts, use longRetry. Se si specificano sia Retry che longRetry, ogni tentativo longRetry include tentativi Retry e il numero massimo di tentativi corrisponde a Retry * longRetry.If both Retry and longRetry are specified, each longRetry attempt includes Retry attempts and the max number of attempts is Retry * longRetry.

Ad esempio, se si hanno le seguenti impostazioni nel criterio attività: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

si presume che la sezione da eseguire sia solo una, con stato Waiting, e che l'esecuzione dell'attività abbia ogni volta esito negativo.Assume there is only one slice to execute (status is Waiting) and the activity execution fails every time. All’inizio vi saranno tre tentativi di esecuzione consecutivi.Initially there would be 3 consecutive execution attempts. Dopo ogni tentativo, lo stato della sezione sarà Retry.After each attempt, the slice status would be Retry. Una volta terminati i 3 tentativi sulla sezione, lo stato sarà LongRetry.After first 3 attempts are over, the slice status would be LongRetry.

Dopo un'ora (vale a dire il valore di longRetryInteval), verrà eseguita un'altra serie di 3 tentativi di esecuzione consecutivi.After an hour (that is, longRetryInteval’s value), there would be another set of 3 consecutive execution attempts. Al termine, lo stato della sezione sarà Failed e non verranno eseguiti altri tentativi.After that, the slice status would be Failed and no more retries would be attempted. Quindi, sono stati eseguiti 6 tentativi.Hence overall 6 attempts were made.

Se un'esecuzione ha esito positivo, lo stato della sezione sarà Ready e non saranno ripetuti altri tentativi.If any execution succeeds, the slice status would be Ready and no more retries are attempted.

longRetry può essere usato nelle situazioni in cui i dati dipendenti arrivano in orari non deterministici o l'ambiente complessivo in cui si verifica l'elaborazione dei dati è debole.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 tali casi, l'esecuzione di tentativi consecutivi potrebbe non essere utile, mentre l'applicazione di un intervallo consente di ottenere il risultato voluto.In such cases, doing retries one after another may not help and doing so after an interval of time results in the desired output.

Attenzione: non impostare valori elevati per longRetry o longRetryInterval.Word of caution: do not set high values for longRetry or longRetryInterval. In genere, valori più elevati comportano altri problemi sistemici.Typically, higher values imply other systemic issues.
longRetryIntervallongRetryInterval TimeSpanTimeSpan 00:00:0000:00:00 Il ritardo tra tentativi longRetryThe delay between long retry attempts

Per altre informazioni, vedere l'articolo Pipeline.For more information, see Pipelines article.

Elaborazione parallela delle sezioni di datiParallel processing of data slices

È possibile impostare la data di inizio della pipeline nel passato.You can set the start date for the pipeline in the past. Così facendo, Data Factory calcolerà automaticamente tutte le sezioni di dati nel passato recuperando le informazioni e ne avvierà l'elaborazione.When you do so, Data Factory automatically calculates (back fills) all data slices in the past and begins processing them. Ad esempio: si crea una pipeline con data di inizio 01.04.2017 e la data corrente è 10.04.2017.For example: if you create a pipeline with start date 2017-04-01 and the current date is 2017-04-10. Se il set di dati di output ha cadenza giornaliera, Data Factory inizierà immediatamente l'elaborazione di tutte le sezioni dal 01.04.2017 al 09.04.2017 perché la data di inizio è nel passato.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. La sezione dal 10.04.2017 non verrà ancora elaborata perché il valore della proprietà di stile nella sezione availability è EndOfInterval per impostazione predefinita.The slice from 2017-04-10 is not processed yet because the value of style property in the availability section is EndOfInterval by default. La sezione meno recente verrà elaborata per prima perché il valore predefinito di executionPriorityOrder è OldestFirst.The oldest slice is processed first as the default value of executionPriorityOrder is OldestFirst. Per una descrizione della proprietà style, vedere la sezione disponibilità dei set di dati.For a description of the style property, see dataset availability section. Per una descrizione della sezione executionPriorityOrder, vedere la sezione criteri di attività.For a description of the executionPriorityOrder section, see the activity policies section.

È possibile configurare le sezioni di dati recuperati perché siano eseguite in parallelo, impostando la proprietà concurrency nella sezione policy dell'attività JSON.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. Questa proprietà determina il numero di esecuzioni di attività parallele che possono verificarsi in sezioni diverse.This property determines the number of parallel activity executions that can happen on different slices. Il valore predefinito per questa proprietà è 1.The default value for the concurrency property is 1. Pertanto, per impostazione predefinita viene elaborata una sola sezione alla volta.Therefore, one slice is processed at a time by default. Il valore massimo è 10.The maximum value is 10. Se una pipeline deve passare attraverso grandi set di dati disponibili, con un valore di concorrenza maggiore che consente di velocizzare l'elaborazione dei dati.When a pipeline needs to go through a large set of available data, having a larger concurrency value speeds up the data processing.

Nuova esecuzione di una sezione di dati non riuscitaRerun a failed data slice

Quando si verifica un errore durante l'elaborazione di una sezione di dati, è possibile scoprire perché l'elaborazione di una sezione non è riuscita tramite i pannelli del portale di Azure o l'App Monitoraggio e gestione.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. Per informazioni dettagliate, vedere Monitorare e gestire le pipeline con i pannelli del portale di Azure o App di monitoraggio e gestione.See Monitoring and managing pipelines using Azure portal blades or Monitoring and Management app for details.

Si consideri l'esempio seguente che descrive due attività.Consider the following example, which shows two activities. Activity1 e Activity 2.Activity1 and Activity 2. Activity1 usa una sezione di Dataset1 e genera una sezione di Dataset2, che viene usata come input da Activity2 per produrre una sezione del set di dati finale.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.

Sezione non riuscita

Il diagramma illustra che in una delle tre sezioni recenti si è verificato un errore durante la produzione della sezione 9-10 AM per Dataset2.The diagram shows that out of three recent slices, there was a failure producing the 9-10 AM slice for Dataset2. Data Factory tiene automaticamente traccia della dipendenza per il set di dati della serie temporale.Data Factory automatically tracks dependency for the time series dataset. Di conseguenza, non viene avviata l'esecuzione dell'attività per la sezione di downstream 9-10 AM.As a result, it does not start the activity run for the 9-10 AM downstream slice.

Gli strumenti di monitoraggio e gestione di Data Factory consentono inoltre di analizzare i log di diagnostica relativi alla sezione con esito negativo e individuare facilmente la causa principale del problema per permetterne la risoluzione.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. Dopo aver risolto il problema, è possibile avviare facilmente l'esecuzione di attività per generare la sezione non riuscita.After you have fixed the issue, you can easily start the activity run to produce the failed slice. Per altre informazioni su come riavviare le esecuzioni o per comprendere le transizioni di stato per le sezioni di dati, vedere Monitorare e gestire le pipeline con i pannelli del portale di Azure o App di monitoraggio e gestione.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.

Dopo che la sezione 9-10 AM di Dataset2è stata eseguita nuovamente, Data Factory avvia l'esecuzione della sezione dipendente 9-10 AM nel set di dati finale.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.

Nuova esecuzione di una sezione non riuscita

Attività multiple in una pipelineMultiple activities in a pipeline

È possibile avere più di un'attività in una pipeline.You can have more than one activity in a pipeline. Se si hanno più attività in una pipeline e l'output di un'attività non è l'input di un'altra attività, le attività possono essere eseguite in parallelo se le sezioni di dati di input per le attività sono pronte.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.

È possibile concatenare due attività, ovvero eseguire un'attività dopo l'altra, impostando il set di dati di output di un'attività come set di dati di input di altre attività.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. Le attività possono essere nella stessa pipeline o in pipeline diverse.The activities can be in the same pipeline or in different pipelines. La seconda attività viene eseguita solo quando la prima viene completata correttamente.The second activity executes only when the first one finishes successfully.

Ad esempio, si consideri il caso seguente in cui una pipeline ha due attività:For example, consider the following case where a pipeline has two activities:

  1. L'attività A1, che richiede il set di dati di input esterno D1 e produce il set di dati di output D2.Activity A1 that requires external input dataset D1, and produces output dataset D2.
  2. L'attività A2, che richiede l'input del set di dati D2 e produce il set di dati di output D3.Activity A2 that requires input from dataset D2, and produces output dataset D3.

In questo scenario, le attività A1 e A2 si trovano nella stessa pipeline.In this scenario, activities A1 and A2 are in the same pipeline. L'attività A1 viene eseguita quando i dati esterni sono disponibili e viene raggiunta la frequenza di disponibilità pianificata.The activity A1 runs when the external data is available and the scheduled availability frequency is reached. L'attività A2 viene eseguita quando le sezioni pianificate di D2 diventano disponibili e viene raggiunta la frequenza di disponibilità pianificata.The activity A2 runs when the scheduled slices from D2 become available and the scheduled availability frequency is reached. Se è presente un errore in una delle sezioni del set di dati D2, A2 non verrà eseguita per tale sezione fino a quando non diventa disponibile.If there is an error in one of the slices in dataset D2, A2 does not run for that slice until it becomes available.

La visualizzazione diagramma con entrambe le attività nella stessa pipeline sarebbe simile al diagramma seguente:The Diagram view with both activities in the same pipeline would look like the following diagram:

Concatenamento di attività nella stessa pipeline

Come accennato in precedenza, le attività possono trovarsi in pipeline diverse.As mentioned earlier, the activities could be in different pipelines. In questo caso, la visualizzazione diagramma sarebbe simile al diagramma seguente:In such a scenario, the diagram view would look like the following diagram:

Concatenamento di attività in due pipeline

Per un esempio, vedere la sezione per copiare in sequenza nell'appendice.See the copy sequentially section in the appendix for an example.

Modellare i set di dati con frequenze diverseModel datasets with different frequencies

Negli esempi, la finestra di pianificazione dell'attività e le frequenze relative ai set di dati di input e di output erano identiche.In the samples, the frequencies for input and output datasets and the activity schedule window were the same. Alcuni scenari richiedono tuttavia la possibilità di generare output a una frequenza diversa da quella degli input.Some scenarios require the ability to produce output at a frequency different than the frequencies of one or more inputs. Data Factory supporta la modellazione di questi scenari.Data Factory supports modeling these scenarios.

Esempio 1: Generazione di un report di output giornaliero per i dati di input, disponibile ogni oraSample 1: Produce a daily output report for input data that is available every hour

Si consideri uno scenario in cui i dati delle misurazioni di input dei sensori sono disponibili ogni ora nell'archiviazione BLOB di Azure.Consider a scenario in which you have input measurement data from sensors available every hour in Azure Blob storage. Si intende generare un report aggregato giornaliero con statistiche, ad esempio media, max e min, per il giorno con attività Hive di Data Factory.You want to produce a daily aggregate report with statistics such as mean, maximum, and minimum for the day with Data Factory hive activity.

Ecco come modellare questo scenario con Data Factory:Here is how you can model this scenario with Data Factory:

Set di dati di inputInput dataset

I file di input vengono rilasciati ogni ora nella cartella relativa al giorno specificato.The hourly input files are dropped in the folder for the given day. Il valore di disponibilità per l'input è impostato su 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
    }
  }
}

Set di dati di outputOutput dataset

Un file di output viene creato ogni giorno nella cartella relativa al giorno corrispondente.One output file is created every day in the day's folder. Il valore di disponibilità per l'output è impostato su 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
    }
  }
}

Attività: attività Hive in una pipelineActivity: hive activity in a pipeline

Lo script Hive riceve le informazioni DateTime appropriate sotto forma di parametri che usano la variabile WindowStart , come illustrato nel frammento seguente.The hive script receives the appropriate DateTime information as parameters that use the WindowStart variable as shown in the following snippet. Lo script Hive usa quindi questa variabile per caricare i dati dall'apposita cartella relativa al giorno ed eseguire l'aggregazione per generare l'output.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"
            }
         }
     ]
   }
}

Il diagramma seguente illustra lo scenario dal punto di vista della dipendenza dei dati.The following diagram shows the scenario from a data-dependency point of view.

Dipendenza dei dati

Per ogni giorno, la sezione di output dipende dalle 24 sezioni orarie ottenute dal set di dati di input.The output slice for every day depends on 24 hourly slices from an input dataset. Data Factory calcola automaticamente queste dipendenze prevedendo le sezioni di dati di input che rientrano nello stesso periodo di tempo della sezione di output da produrre.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. Se una delle 24 sezioni di input non è disponibile, Data Factory attenderà che la sezione di input sia pronta prima di avviare l'esecuzione dell'attività giornaliera.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.

Esempio 2: Definizione di una dipendenza con espressioni e funzioni di Data FactorySample 2: Specify dependency with expressions and Data Factory functions

Si consideri ora un altro scenarioLet’s consider another scenario. Si supponga di avere un'attività Hive che elabora i due set di dati di input.Suppose you have a hive activity that processes two input datasets. Uno di questi dispone di nuovi dati ogni giorno, mentre l'altro li riceve ogni settimana.One of them has new data daily, but one of them gets new data every week. Si supponga inoltre di voler eseguire un join tra i due input e produrre un output ogni giorno.Suppose you wanted to do a join across the two inputs and produce an output every day.

L'approccio semplice, in cui Data Factory determina automaticamente le sezioni di input da elaborare tramite l'allineamento con il periodo di tempo della sezione dei dati di output, non funziona.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.

È necessario definire un nuovo approccio per ogni esecuzione di attività in cui Data Factory possa usare la sezione di dati dell'ultima settimana per il set di dati di input settimanale.You must specify that for every activity run, the Data Factory should use last week’s data slice for the weekly input dataset. Per implementare questo comportamento, è possibile usare le funzioni di Azure Data Factory, come illustrato nel frammento seguente.You use Azure Data Factory functions as shown in the following snippet to implement this behavior.

Input1: BLOB di AzureInput1: Azure blob

Il primo input è il BLOB di Azure aggiornato ogni giorno.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: BLOB di AzureInput2: Azure blob

Input2 è il BLOB di Azure aggiornato ogni settimana.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: BLOB di AzureOutput: Azure blob

Un file di output viene creato ogni giorno nella cartella relativa al giorno corrispondente.One output file is created every day in the folder for the day. Il valore di disponibilità per l'output è impostato su 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
    }
  }
}

Attività: attività Hive in una pipelineActivity: hive activity in a pipeline

L'attività Hive usa i due input e genera una sezione di output giornaliera.The hive activity takes the two inputs and produces an output slice every day. È possibile specificare che la sezione di output giornaliera dipenda dalla sezione di input della settimana precedente per l'input settimanale procedendo come indicato di seguito.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"
        }
       }
     ]
   }
}

Per un elenco di funzioni e variabili di sistema supportate da Data Factory, vedere l'articolo Funzioni e variabili di sistema di Data Factory .See Data Factory functions and system variables for a list of functions and system variables that Data Factory supports.

AppendiceAppendix

Esempio: copiare in sequenzaExample: copy sequentially

È possibile eseguire più operazioni di copia l'una dopo l'altra in modo sequenziale o ordinato.It is possible to run multiple copy operations one after another in a sequential/ordered manner. Ad esempio, si supponga di avere due attività di copia in una pipeline (CopyActivity1 e CopyActivity2) con i set di dati di input e output seguenti: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. Output: Dataset2.Output: Dataset2.

CopyActivity2CopyActivity2

Input: Dataset2.Input: Dataset2. Output: Dataset3.Output: Dataset3.

CopyActivity2 viene eseguita solo se l'esecuzione di CopyActivity1 è riuscita e Dataset2 è disponibile.CopyActivity2 would run only if the CopyActivity1 has run successfully and Dataset2 is available.

Ecco la pipeline JSON di esempio: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
    }
}

Si noti che nell'esempio, il set di dati di output della prima attività di copia (Dataset2) è specificato come input per la seconda attività.Notice that in the example, the output dataset of the first copy activity (Dataset2) is specified as input for the second activity. La seconda attività viene quindi eseguita solo quando è pronto il set di dati di output dalla prima attività.Therefore, the second activity runs only when the output dataset from the first activity is ready.

Nell'esempio, CopyActivity2 può avere un input diverso, ad esempio Dataset3, ma è necessario specificare Dataset2 anche come input per CopyActivity2, in modo che l'attività non venga eseguita fino a quando CopyActivity1 non è stata completata.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. Ad esempio:For example:

CopyActivity1CopyActivity1

Input: Dataset1.Input: Dataset1. Output: Dataset2.Output: Dataset2.

CopyActivity2CopyActivity2

Input: Dataset3, Dataset2.Inputs: Dataset3, Dataset2. Output: 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
    }
}

Si noti che nell'esempio vengono specificati due set di dati di input per la seconda attività di copia.Notice that in the example, two input datasets are specified for the second copy activity. Quando si specificano più input, solo il primo set di dati di input viene usato per la copia dei dati e gli altri set di dati vengono usati come dipendenze.When multiple inputs are specified, only the first input dataset is used for copying data, but other datasets are used as dependencies. L'esecuzione di CopyActivity2 si avvia solo dopo che le seguenti condizioni sono soddisfatte:CopyActivity2 would start only after the following conditions are met:

  • L’esecuzione di CopyActivity1 è riuscita e Dataset2 è disponibile.CopyActivity1 has successfully completed and Dataset2 is available. Questo set di dati non viene usato per la copia dei dati in Dataset4.This dataset is not used when copying data to Dataset4. La sua funzione è semplicemente quella di pianificare la dipendenza per CopyActivity2.It only acts as a scheduling dependency for CopyActivity2.
  • Dataset3 è disponibile.Dataset3 is available. Questo set di dati rappresenta i dati che vengono copiati nella destinazione.This dataset represents the data that is copied to the destination.