

AWS Data Pipeline ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS Data Pipeline können den Service weiterhin wie gewohnt nutzen. [Weitere Informationen](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Ausdrücke
<a name="dp-pipeline-expressions"></a>

Ausdrücke ermöglichen die Nutzung eines Werts in mehreren zusammengehörigen Objekten. Ausdrücke werden zur Laufzeit vom AWS Data Pipeline Webdienst verarbeitet, wodurch sichergestellt wird, dass alle Ausdrücke durch den Wert des Ausdrucks ersetzt werden. 

Ausdrücke müssen in die "\$1\$1" und "\$1" Trennzeichen eingeschlossen werden. Ein Ausdruck kann in jedem Pipeline-Definitionsobjekt verwendet werden, in dem Zeichenfolgen zulässig sind. Wenn ein Slot ein Verweis ist bzw. den Typ ID, NAME, TYPE oder SPHERE hat, wird sein Wert nicht ausgewertet und er wird unverändert übernommen.

Der folgende Ausdruck ruft eine der AWS Data Pipeline Funktionen auf. Weitere Informationen finden Sie unter [Ausdrucksauswertung](#dp-datatype-functions).

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

## Verweisen auf Felder und Objekte
<a name="dp-pipeline-expressions-reference"></a>

Ausdrücke können Felder des aktuellen Objekts, in dem sie sich befinden, oder Felder eines anderen Objekts verwenden, das durch einen Verweis verknüpft ist.

Ein Slot-Format besteht aus einem Zeitpunkt der Erstellung, gefolgt von dem Zeitpunkt der Objekterstellung, z. B. `@S3BackupLocation_2018-01-31T11:05:33`. 

 Sie können auch auf die genaue Steckplatz-ID verweisen, die in der Pipeline-Definition angegeben ist, z. B. die Steckplatz-ID des Amazon S3 S3-Backup-Speicherorts. Um auf die Slot-ID zu verweisen, verwenden Sie `#{parent.@id}`.

Im folgenden Beispiel verweist das Feld `filePath` auf das Feld `id` desselben Objekts, um einen Dateinamen zu bilden. Der Wert von `filePath` ergibt sich als „`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"}
}
```

Um auf das Feld eines anderen, durch einen Verweis verknüpften Objekts zuzugreifen, muss das Schlüsselwort `node` angegeben werden. Dieses Schlüsselwort ist nur für Alarm- und Vorbedingungsobjekte verfügbar.

Zurück zum obigen Beispiel: Ein Ausdruck in einem `SnsAlarm`-Objekt kann auf den Datums- und Uhrzeitbereich in einem `Schedule`-Objekt zugreifen, da das `S3DataNode`-Objekt auf beide verweist.

 Insbesondere kann im `FailureNotify`-Objekt das Feld `message` die Laufzeitfelder `@scheduledStartTime` und `@scheduledEndTime` von `ExampleSchedule` verwenden, da im `ExampleDataNode`-Objekt das Feld `onFail` auf `FailureNotify` und das Feld `schedule` auf `ExampleSchedule` verweist.

```
{  
    "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"
},
```

**Anmerkung**  
Sie können Pipelines erstellen, die Abhängigkeiten enthalten, wie z. B. Pipeline-Aufgaben, die von der Verarbeitung anderer Systeme oder Aufgaben abhängen. Wenn Ihre Pipeline bestimmte Ressourcen erfordert, fügen Sie diese Abhängigkeiten mithilfe von Vorbedingungen hinzu, die Sie dann den gewünschten Datenknoten und Aufgaben zuordnen. Die Pipeline lässt sich dann einfacher debuggen und ist weniger fehleranfällig. Verwenden Sie die Abhängigkeiten möglichst in einer einzigen Pipeline, da die Pipeline-übergreifende Fehlersuche schwierig ist.

## Verschachtelte Ausdrücke
<a name="dp-datatype-nested"></a>

 AWS Data Pipeline ermöglicht es Ihnen, Werte zu verschachteln, um komplexere Ausdrücke zu erstellen. Um beispielsweise eine Zeitberechnung durchzuführen (30 Minuten von `scheduledStartTime` subtrahieren) und das Ergebnis für die Verwendung in einer Pipeline-Definition zu formatieren, könnten Sie folgenden Ausdruck in einer Aktivität benutzen 

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

 und verwendet das `node` Präfix, wenn der Ausdruck Teil einer SnsAlarm Oder-Vorbedingung ist: 

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

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

In Ausdrücken können auch Listen verwendet werden. Gehen wir von dieser Listendefinition aus: `"myList":["one","two"]`. Wenn Sie diese Liste nun im Ausdruck `#{'this is ' + myList}` verwenden, wird sie zu `["this is one", "this is two"]` ausgewertet. Wenn zwei Listen vorhanden sind, werden diese von Data Pipeline bei der Auswertung "abgeflacht" (flattened). Ist beispielsweise `myList1` als `[1,2]` definiert und `myList2` als `[3,4]`, dann wird der Ausdruck `[#{myList1}, #{myList2}]` zu `[1,2,3,4]` ausgewertet.

## Knotenausdruck
<a name="dp-datatype-node"></a>

 AWS Data Pipeline verwendet den `#{node.*}` Ausdruck entweder in `SnsAlarm` oder `PreCondition` für einen Rückverweis auf das übergeordnete Objekt einer Pipeline-Komponente. Da der Verweis auf `SnsAlarm` und `PreCondition` in einer Aktivität oder Ressource ohne Rückverweis aus diesen Objekten erfolgt, bietet `node` die Möglichkeit, das verweisende Objekt zu referenzieren. In der folgenden Pipeline-Definition wird beispielsweise gezeigt, wie in einer Fehlerbenachrichtigung mit `node` auf deren übergeordnetes Objekt (`ShellCommandActivity`) verwiesen und wie dessen geplante Start- und Endzeit in die `SnsAlarm`-Nachricht eingefügt werden. Für den scheduledStartTime Verweis auf ShellCommandActivity ist kein `node` Präfix erforderlich, da er scheduledStartTime sich auf sich selbst bezieht. 

**Anmerkung**  
Die mit dem Zeichen "@" beginnenden Felder sind Laufzeitfelder.

```
{
  "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 unterstützt transitive Verweise für benutzerdefinierte Felder, aber keine Laufzeitfelder. Ein transitiver Verweis ist ein Verweis zwischen zwei Pipeline-Komponenten, die von einer anderen als "Vermittler" dienenden Pipeline-Komponente abhängen. Das folgende Beispiel zeigt einen Verweis auf ein transitives benutzerdefiniertes Feld und einen Verweis auf ein nichttransitives Laufzeitfeld. Beide Verweise sind zulässig. Weitere Informationen finden Sie unter [Benutzerdefinierte Felder](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"
}
```

## Ausdrucksauswertung
<a name="dp-datatype-functions"></a>

 AWS Data Pipeline stellt eine Reihe von Funktionen bereit, mit denen Sie den Wert eines Felds berechnen können. Im folgenden Beispiel wird die Funktion `makeDate` verwendet, um dem Feld `startDateTime` eines `Schedule`-Objekts die GMT/UTC-Zeit `"2011-05-24T0:00:00"` zuzuweisen. 

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