

AWS Data Pipeline non è più disponibile per i nuovi clienti. I clienti esistenti di AWS Data Pipeline possono continuare a utilizzare il servizio normalmente. [Ulteriori informazioni](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Espressioni
<a name="dp-pipeline-expressions"></a>

Le espressioni consentono di condividere un valore negli oggetti correlati. Le espressioni vengono elaborate dal servizio AWS Data Pipeline Web in fase di esecuzione, assicurando che tutte le espressioni vengano sostituite con il valore dell'espressione. 

Le espressioni sono delimitate da:"\$1\$1" e "\$1". È possibile utilizzare un'espressione in qualsiasi oggetto di definizione della pipeline in cui una stringa è legale. Se uno slot è un riferimento o uno di tipo ID, NAME, TYPE e SPHERE, il valore non viene valutato e viene utilizzato integralmente.

L'espressione seguente chiama una delle AWS Data Pipeline funzioni. Per ulteriori informazioni, consulta [Valutazione delle espressioni](#dp-datatype-functions).

```
#{format(myDateTime,'YYYY-MM-dd hh:mm:ss')}
```

## Riferimento a campi e oggetti
<a name="dp-pipeline-expressions-reference"></a>

Le espressioni possono utilizzare i campi dell'oggetto corrente in cui l'espressione esistente o i campi di un altro oggetto collegato da un riferimento.

Un formato di slot è composto da un tempo di creazione seguito dal momento della creazione dell'oggetto, ad esempio `@S3BackupLocation_2018-01-31T11:05:33`. 

 Puoi anche fare riferimento all'ID esatto dello slot specificato nella definizione della pipeline, ad esempio l'ID dello slot della posizione di backup di Amazon S3. Per fare riferimento all'ID dello slot, utilizzare `#{parent.@id}`.

In questo esempio il campo `filePath` si riferisce al campo `id` nello stesso oggetto per creare un nome di file. Il valore di `filePath` restituisce "`s3://amzn-s3-demo-bucket/ExampleDataNode.csv`". 

```
{
  "id" : "ExampleDataNode",
  "type" : "S3DataNode",
  "schedule" : {"ref" : "ExampleSchedule"},
  "filePath" : "s3://amzn-s3-demo-bucket/#{parent.@id}.csv",
  "precondition" : {"ref" : "ExampleCondition"},
  "onFail" : {"ref" : "FailureNotify"}
}
```

Per usare un campo esistente su un altro oggetto collegato da un riferimento, utilizzare la parola chiave `node`. Questa parola chiave è disponibile solo con allarmi e oggetti di precondizione.

Per continuare con l'esempio precedente, un'espressione in un `SnsAlarm` può fare riferimento alla data e all'intervallo di tempo in un `Schedule`, poiché `S3DataNode` si riferisce a entrambi.

 Nello specifico, il campo `message` di `FailureNotify` può utilizzare i campi di runtime `@scheduledStartTime` e `@scheduledEndTime` di `ExampleSchedule`, poiché il campo `onFail` di `ExampleDataNode` fa riferimento a `FailureNotify` e il relativo campo `schedule` fa riferimento a `ExampleSchedule`.

```
{  
    "id" : "FailureNotify",
    "type" : "SnsAlarm",
    "subject" : "Failed to run pipeline component",
    "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.",
    "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic"
},
```

**Nota**  
È possibile creare pipeline con dipendenze, ad esempio le attività nella pipeline che dipendono dal lavoro di altri sistemi o attività. Se la pipeline richiede alcune risorse, aggiungere tali dipendenze alla pipeline utilizzando le precondizioni associate ai nodi di dati e alle attività. In questo modo il debug della pipeline è più semplice e la pipeline stessa è più resiliente. Inoltre, mantenere le dipendenze all'interno di una singola pipeline quando è possibile, perché la risoluzione dei problemi in più pipeline è difficile.

## Espressioni nidificate
<a name="dp-datatype-nested"></a>

 AWS Data Pipeline consente di annidare valori per creare espressioni più complesse. Ad esempio, per eseguire un calcolo relativo al tempo (sottrarre 30 minuti da `scheduledStartTime`) e utilizzare il risultato in una definizione di pipeline, è possibile usare la seguente espressione in un'attività: 

```
#{format(minusMinutes(@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
```

 e utilizzando il `node` prefisso se l'espressione fa parte di una precondizione SnsAlarm or: 

```
#{format(minusMinutes(node.@scheduledStartTime,30),'YYYY-MM-dd hh:mm:ss')}
```

## Elenchi
<a name="dp-datatype-list-function"></a>

Le espressioni possono essere valutate su elenchi e su funzioni degli elenchi. Ad esempio, supponiamo che un elenco viene definito come il seguente: `"myList":["one","two"]`. Se l'elenco viene utilizzato nell'espressione `#{'this is ' + myList}`, restituirà `["this is one", "this is two"]`. Se si dispone di due elenchi, Data Pipeline finirà per appiattirli nella valutazione. Ad esempio, se `myList1` è definito come `[1,2]` e `myList2` è definito come `[3,4]`, allora l'espressione `[#{myList1}, #{myList2}]` restituirà `[1,2,3,4]`.

## Espressione del nodo
<a name="dp-datatype-node"></a>

 AWS Data Pipeline utilizza l'`#{node.*}`espressione in una delle due `SnsAlarm` o `PreCondition` come riferimento all'oggetto principale di un componente della pipeline. Poiché `SnsAlarm` e `PreCondition` sono citati da un'attività o una risorsa senza alcun riferimento da parte loro, `node` fornisce il modo per consultare il referrer. Ad esempio, la seguente definizione di pipeline dimostra come una notifica di errore può utilizzare `node` per effettuare un riferimento al proprio padre, in questo caso `ShellCommandActivity`, e includere i tempi di inizio e di fine programmati nel messaggio `SnsAlarm`. Il scheduledStartTime riferimento on non ShellCommandActivity richiede il `node` prefisso perché scheduledStartTime si riferisce a se stesso. 

**Nota**  
I campi preceduti dal segno AT (@) sono campi di runtime.

```
{
  "id" : "ShellOut",
  "type" : "ShellCommandActivity",
  "input" : {"ref" : "HourlyData"},
  "command" : "/home/userName/xxx.sh #{@scheduledStartTime} #{@scheduledEndTime}",   
  "schedule" : {"ref" : "HourlyPeriod"},
  "stderr" : "/tmp/stderr:#{@scheduledStartTime}",
  "stdout" : "/tmp/stdout:#{@scheduledStartTime}",
  "onFail" : {"ref" : "FailureNotify"},
},
{  
  "id" : "FailureNotify",
  "type" : "SnsAlarm",
  "subject" : "Failed to run pipeline component",
  "message": "Error for interval #{node.@scheduledStartTime}..#{node.@scheduledEndTime}.",
  "topicArn":"arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic"
},
```

AWS Data Pipeline supporta riferimenti transitivi per i campi definiti dall'utente, ma non per i campi di runtime. Un riferimento transitivo è un riferimento tra due componenti di pipeline che dipende da un altro componente di pipeline come intermediario. L'esempio seguente mostra un riferimento a un campo transitivo definito dall'utente e un riferimento a un campo di runtime non transitivo, entrambi validi. Per ulteriori informazioni, consulta [Campi definiti dall'utente](dp-writing-pipeline-definition.md#dp-userdefined-fields). 

```
{
  "name": "DefaultActivity1",
  "type": "CopyActivity",
  "schedule": {"ref": "Once"},
  "input": {"ref": "s3nodeOne"},  
  "onSuccess": {"ref": "action"},
  "workerGroup": "test",  
  "output": {"ref": "s3nodeTwo"}
},
{
  "name": "action",
  "type": "SnsAlarm",
  "message": "S3 bucket '#{node.output.directoryPath}' succeeded at #{node.@actualEndTime}.",
  "subject": "Testing",  
  "topicArn": "arn:aws:sns:us-east-1:28619EXAMPLE:ExampleTopic",
  "role": "DataPipelineDefaultRole"
}
```

## Valutazione delle espressioni
<a name="dp-datatype-functions"></a>

 AWS Data Pipeline fornisce una serie di funzioni che è possibile utilizzare per calcolare il valore di un campo. L'esempio seguente utilizza la funzione `makeDate` per impostare il campo `startDateTime` di un oggetto `Schedule` su GMT/UTC `"2011-05-24T0:00:00"`. 

```
"startDateTime" : "makeDate(2011,5,24)"
```