

AWS Data Pipeline は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS Data Pipeline 引き続き使用できます。[詳細はこちら](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

式を使用すると、関連するオブジェクト間で値を共有できます。式は実行時に AWS Data Pipeline ウェブサービスによって処理され、すべての式が式の値に置き換えられます。

式は "\#{" と "}" で区切られます。文字列が有効である、任意のパイプライン定義オブジェクトで式を使用できます。スロットが参照であるか、タイプ ID、NAME、TYPE、SPHERE のいずれかであれば、値は評価されず、逐語的に使用されます。

次の式は、 AWS Data Pipeline 関数の 1 つを呼び出します。詳細については、「[式の評価](#dp-datatype-functions)」を参照してください。

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

## フィールドとオブジェクトの参照
<a name="dp-pipeline-expressions-reference"></a>

式では、式が含まれる現在のオブジェクトのフィールドを使用したり、参照によってリンクされている別のオブジェクトのフィールドを使用したりすることができます。

スロットの形式は、作成時間に続いてオブジェクトの作成時間 (`@S3BackupLocation_2018-01-31T11:05:33` など) で構成されます。

 パイプライン定義で指定された正確なスロット ID (Amazon S3 バックアップ場所のスロット ID など) を参照することもできます。スロット ID を参照するには、`#{parent.@id}` を使用します。

次の例では、`filePath` フィールドは同じオブジェクトの `id` フィールドを参照してファイル名を形成します。値 `filePath` は「`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"}
}
```

参照によってリンクされる別のオブジェクトに存在するフィールドを使用するには、`node` キーワードを使用します。このキーワードはアラームおよび前提条件のオブジェクトでのみ使用できます。

引き続き前の例で説明すると、`SnsAlarm` 内の式で `Schedule` 内の日時の範囲を参照できます。これは、`S3DataNode` が両方を参照しているためです。

 具体的には、`FailureNotify` の `message` フィールドで`ExampleSchedule` の `@scheduledStartTime` および `@scheduledEndTime` 実行時フィールドを使用できます。これは、`ExampleDataNode` の `onFail` フィールドが `FailureNotify` を参照し、その `schedule` フィールドが `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"
},
```

**注記**  
他のシステムまたはタスクの作業に依存するパイプライン内のタスクなど、依存関係を持つパイプラインを作成できます。パイプラインで特定のリソースが必要な場合、データノードやタスクに関連付ける前提条件を使用して、それらの依存関係をパイプラインに追加します。これにより、パイプラインはデバッグが容易になり、柔軟性が高くなります。さらに、複数のパイプラインにまたがるトラブルシューティングは困難であるため、可能な場合は依存関係を 1 つのパイプライン内に維持します。

## 入れ子式
<a name="dp-datatype-nested"></a>

 AWS Data Pipeline では、値をネストして、より複雑な式を作成できます。たとえば、時間の計算 (`scheduledStartTime` から 30 分を引く) を行い、結果の書式を設定してパイプライン定義で使用するには、アクティビティで次の式を使用できます。

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

 さらに、式が SnsAlarm または前提条件の一部である場合は、`node` プレフィックスを使用します。

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

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

式はリストやリストを指定した関数に対して評価できます。たとえば、`"myList":["one","two"]` のようにリストが定義されているとします。このリストが `#{'this is ' + myList}` という式で使用された場合、`["this is one", "this is two"]` に評価されます。2 つのリストがある場合、Data Pipeline による評価では、最終的に平坦化されます。たとえば、`myList1` が `[1,2]` として定義され、`myList2` が `[3,4]` として定義されている場合、式 `[#{myList1}, #{myList2}]` は、`[1,2,3,4]` に評価されます。

## ノード式
<a name="dp-datatype-node"></a>

 AWS Data Pipeline は、パイプラインコンポーネントの親オブジェクトへのバックリファレンス`PreCondition`に `SnsAlarm`または の`#{node.*}`式を使用します。`SnsAlarm` および `PreCondition` は、後方参照なしにアクティビティやリソースから参照されるため、`node` はリファラーを参照する方法を提供します。たとえば、次のパイプライン定義は、失敗通知で `node` を使用してその親（この場合は `ShellCommandActivity`）を参照し、親の予定された開始時刻と終了時刻を `SnsAlarm` メッセージに含める方法を示しています。ShellCommandActivity の scheduledStartTime 参照は、scheduledStartTime がそれ自体を参照するため、`node` プレフィックスは必要ではありません。

**注記**  
先頭にアットマーク（@）がついているフィールドは、そのフィールドが実行時フィールドであることを示しています。

```
{
  "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 はユーザー定義フィールドの推移的な参照をサポートしますが、ランタイムフィールドはサポートしていません。推移的参照は、仲介として別のパイプラインコンポーネントに依存する 2 つのパイプラインコンポーネント間の参照です。次の例は、推移的なユーザー定義フィールドへの参照と、推移的ではない実行時フィールドへの参照を示しています。これらの参照はいずれも有効です。詳細については、「[ユーザー定義フィールド](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"
}
```

## 式の評価
<a name="dp-datatype-functions"></a>

 AWS Data Pipeline には、フィールドの値の計算に使用できる一連の関数が用意されています。次の例では、`makeDate` 関数を使用して、`Schedule` オブジェクトの `startDateTime` フィールドを、`"2011-05-24T0:00:00"` GMT/UTC に設定します。

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