

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

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

# パイプラインの式と関数
<a name="dp-expressions-functions"></a>

このセクションでは、関連するデータ型を含め、パイプラインで式と関数を使用するための構文について説明します。

## 単純データ型
<a name="dp-pipeline-datatypes"></a>

以下のデータ型をフィールド値として設定できます。

**Topics**
+ [DateTime](#dp-datatype-datetime)
+ [数値](#dp-datatype-numeric)
+ [オブジェクト参照](#dp-datatype-object-reference)
+ [Period](#dp-datatype-period)
+ [String](#dp-datatype-section)

### DateTime
<a name="dp-datatype-datetime"></a>

 AWS Data Pipeline は、UTC/GMT でのみYYYY-MM-DDTHH:MM:SS」形式で表される日付と時刻をサポートします。以下の例では、`Schedule` オブジェクトの `startDateTime`フィールドを、UTC/GMT タイムゾーンの `1/15/2012, 11:59 p.m.` に設定します。

```
"startDateTime" : "2012-01-15T23:59:00"
```

### 数値
<a name="dp-datatype-numeric"></a>

 AWS Data Pipeline は整数と浮動小数点値の両方をサポートします。

### オブジェクト参照
<a name="dp-datatype-object-reference"></a>

パイプライン定義内のオブジェクト。これは、現在のオブジェクト、パイプライン内の他の場所で定義されているオブジェクトの名前、または `node` キーワードで参照されるフィールド内の現在のオブジェクトをリストするオブジェクトのいずれかです。`node` の詳細については、「[フィールドとオブジェクトの参照](dp-pipeline-expressions.md#dp-pipeline-expressions-reference)」を参照してください。パイプラインオブジェクトのタイプについては、「[パイプラインオブジェクトリファレンス](dp-pipeline-objects.md)」を参照してください。

### Period
<a name="dp-datatype-period"></a>

 予定されているイベントを実行する頻度を示します。これは、"*N* [`years`\$1`months`\$1`weeks`\$1`days`\$1`hours`\$1`minutes`]" という形式で表されます。ここで、*N* は正の整数値です。

最小間隔は 15 分で、最大間隔は 3 年です。

次の例では、`Schedule` オブジェクトの `period` フィールドを 3 時間に設定します。つまり、3 時間ごとに実行されるスケジュールが設定されます。

```
"period" : "3 hours"
```

### String
<a name="dp-datatype-section"></a>

 標準文字列値。文字列は、二重引用符（"）で囲む必要があります。バックスラッシュ文字（\$1）を使用して、文字列内の文字をエスケープすることができます。複数行の文字列はサポートされていません。

次の例では、`id` フィールドの有効な文字列値の例を示します。

```
"id" : "My Data Object"

"id" : "My \"Data\" Object"
```

文字列には、文字列値に評価される式を含めることもできます。これらの式は文字列内に挿入され、"\$1\$1" と "\$1" で区切られます。次の例では、式を使用してパスに現在のオブジェクト名を挿入します。

```
"filePath" : "s3://amzn-s3-demo-bucket/#{name}.csv"
```

式の使用の詳細については、「[フィールドとオブジェクトの参照](dp-pipeline-expressions.md#dp-pipeline-expressions-reference)」および「[式の評価](dp-pipeline-expressions.md#dp-datatype-functions)」を参照してください。

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

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

式は "\$1\$1" と "\$1" で区切られます。文字列が有効である、任意のパイプライン定義オブジェクトで式を使用できます。スロットが参照であるか、タイプ 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)"
```

# 数学関数
<a name="dp-pipeline-reference-functions-math"></a>

以下の関数は、数値を操作するために使用できます。


****  

| 関数 | 説明 | 
| --- | --- | 
|  \$1  |  加算。 例: `#{1 + 2}` 結果: `3`  | 
|  -  |  減算。 例: `#{1 - 2}` 結果: `-1`  | 
|  \$1  |  乗算。 例: `#{1 * 2}` 結果: `2`  | 
|  /  |  除算。2 個の整数を除算する場合、結果は切り捨てられます。 例: `#{1 / 2}`、結果: `0` 例: `#{1.0 / 2}`、結果: `.5`  | 
|  ^  |  指数。 例: `#{2 ^ 2}` 結果: `4.0`  | 

# 文字列関数
<a name="dp-pipeline-reference-functions-string"></a>

 以下の関数は、文字列値を操作するために使用できます。


****  

| 関数 | 説明 | 
| --- | --- | 
|  \$1  |  連結。非文字列値は最初に文字列に変換されます。 例: `#{"hel" + "lo"}` 結果: `"hello"`  | 

# 日付および時刻関数
<a name="dp-pipeline-reference-functions-datetime"></a>

 以下の関数は、DateTime 値を操作するために使用できます。例では、`myDateTime` の値は、`May 24, 2011 @ 5:10 pm GMT` です。

**注記**  
の日付/時刻形式 AWS Data Pipeline は Joda Time です。これは Java の日付/時刻クラスに代わるものです。詳細については、「[Joda Time - DateTimeFormat クラス](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html)」を参照してください。


****  

| 関数 | 説明 | 
| --- | --- | 
|  `int day(DateTime myDateTime)`  |  DateTime 値の日付を整数として取得します。 例: `#{day(myDateTime)}` 結果: `24`  | 
|  `int dayOfYear(DateTime myDateTime)`  |  DateTime 値の年初からの日数を整数として取得します。 例: `#{dayOfYear(myDateTime)}` 結果: `144`  | 
|  `DateTime firstOfMonth(DateTime myDateTime)`  |  指定された DateTime の月初の DateTime オブジェクトを作成します。 例: `#{firstOfMonth(myDateTime)}` 結果: `"2011-05-01T17:10:00z"`  | 
|  `String format(DateTime myDateTime,String format)`  |  指定された書式文字列を使用して、指定された DateTime を変換した結果である String オブジェクトを作成します。 例: `#{format(myDateTime,'YYYY-MM-dd HH:mm:ss z')}` 結果: `"2011-05-24T17:10:00 UTC"`  | 
|  `int hour(DateTime myDateTime)`  |  DateTime 値の時間を整数として取得します。 例: `#{hour(myDateTime)}` 結果: `17`  | 
|  `DateTime makeDate(int year,int month,int day)`  |  指定された年、月、日の深夜 0 時で、UTC の DateTime オブジェクトを作成します。 例: `#{makeDate(2011,5,24)}` 結果: `"2011-05-24T0:00:00z"`  | 
|  `DateTime makeDateTime(int year,int month,int day,int hour,int minute)`  |  指定された年、月、日、時、分で、UTC の DateTime オブジェクトを作成します。 例: `#{makeDateTime(2011,5,24,14,21)}` 結果: `"2011-05-24T14:21:00z"`  | 
|  `DateTime midnight(DateTime myDateTime)`  |  指定された DateTime を基準として、現在の深夜 0 時の DateTime オブジェクトを作成します。たとえば、`MyDateTime` が `2011-05-25T17:10:00z` である場合、結果は次のとおりです。 例: `#{midnight(myDateTime)}` 結果: `"2011-05-25T0:00:00z"`  | 
|  `DateTime minusDays(DateTime myDateTime,int daysToSub)`  |  指定された DateTime から指定された日数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusDays(myDateTime,1)}` 結果: `"2011-05-23T17:10:00z"`  | 
|  `DateTime minusHours(DateTime myDateTime,int hoursToSub)`  |  指定された DateTime から指定された時間数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusHours(myDateTime,1)}` 結果: `"2011-05-24T16:10:00z"`  | 
|  `DateTime minusMinutes(DateTime myDateTime,int minutesToSub)`  |  指定された DateTime から指定された分数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusMinutes(myDateTime,1)}` 結果: `"2011-05-24T17:09:00z"`  | 
|  `DateTime minusMonths(DateTime myDateTime,int monthsToSub)`  |  指定された DateTime から指定された月数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusMonths(myDateTime,1)}` 結果: `"2011-04-24T17:10:00z"`  | 
|  `DateTime minusWeeks(DateTime myDateTime,int weeksToSub)`  |  指定された DateTime から指定された週数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusWeeks(myDateTime,1)}` 結果: `"2011-05-17T17:10:00z"`  | 
|  `DateTime minusYears(DateTime myDateTime,int yearsToSub)`  |  指定された DateTime から指定された年数を引いた結果の DateTime オブジェクトを作成します。 例: `#{minusYears(myDateTime,1)}` 結果: `"2010-05-24T17:10:00z"`  | 
|  `int minute(DateTime myDateTime)`  |  DateTime 値の分を整数として取得します。 例: `#{minute(myDateTime)}` 結果: `10`  | 
|  `int month(DateTime myDateTime)`  |  DateTime 値の月を整数として取得します。 例: `#{month(myDateTime)}` 結果: `5`  | 
|  `DateTime plusDays(DateTime myDateTime,int daysToAdd)`  |  指定された DateTime に指定された日数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusDays(myDateTime,1)}` 結果: `"2011-05-25T17:10:00z"`  | 
|  `DateTime plusHours(DateTime myDateTime,int hoursToAdd)`  |  指定された DateTime に指定された時間数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusHours(myDateTime,1)}` 結果: `"2011-05-24T18:10:00z"`  | 
|  `DateTime plusMinutes(DateTime myDateTime,int minutesToAdd)`  |  指定された DateTime に指定された分数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusMinutes(myDateTime,1)}` 結果: `"2011-05-24 17:11:00z"`  | 
|  `DateTime plusMonths(DateTime myDateTime,int monthsToAdd)`  |  指定された DateTime に指定された月数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusMonths(myDateTime,1)}` 結果: `"2011-06-24T17:10:00z"`  | 
|  `DateTime plusWeeks(DateTime myDateTime,int weeksToAdd)`  |  指定された DateTime に指定された週数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusWeeks(myDateTime,1)}` 結果: `"2011-05-31T17:10:00z"`  | 
|  `DateTime plusYears(DateTime myDateTime,int yearsToAdd)`  |  指定された DateTime に指定された年数を足した結果の DateTime オブジェクトを作成します。 例: `#{plusYears(myDateTime,1)}` 結果: `"2012-05-24T17:10:00z"`  | 
|  `DateTime sunday(DateTime myDateTime)`  |  指定された DateTime を基準として、前の日曜日の DateTime オブジェクトを作成します。指定された DateTime が日曜日である場合、結果は指定された DateTime です。 例: `#{sunday(myDateTime)}` 結果: `"2011-05-22 17:10:00 UTC"`  | 
|  `int year(DateTime myDateTime)`  |  DateTime 値の年を整数として取得します。 例: `#{year(myDateTime)}` 結果: `2011`  | 
|  `DateTime yesterday(DateTime myDateTime)`  |  指定された DateTime を基準として、前の日の DateTime オブジェクトを作成します。結果は minusDays(1) と同じです。 例: `#{yesterday(myDateTime)}` 結果: `"2011-05-23T17:10:00z"`  | 

# 特殊文字
<a name="dp-pipeline-characters"></a>

AWS Data Pipeline は、次の表に示すように、パイプライン定義で特別な意味を持つ特定の文字を使用します。


****  

| 特殊文字 | 説明 | 例 | 
| --- | --- | --- | 
| @ | 実行時フィールド。この文字は、パイプラインの実行時にのみ使用できるフィールドのフィールド名プレフィックスです。 | @actualStartTime @failureReason @resourceStatus | 
| \$1 | 式 式は「\$1\$1」と「\$1」で区切られ、中括弧の内容は によって評価されます AWS Data Pipeline。詳細については、「[表現](dp-pipeline-expressions.md)」を参照してください。 | \$1\$1format(myDateTime,'YYYY-MM-dd hh:mm:ss')\$1 s3://amzn-s3-demo-bucket/\$1\$1id\$1.csv | 
| \$1 | 暗号化されたフィールド。この文字は、 AWS Data Pipeline がコンソールまたは CLI と AWS Data Pipeline サービス間で転送中のこのフィールドの内容を暗号化する必要があることを示すフィールド名のプレフィックスです。 | \$1パスワード | 