

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管道定义文件语法
<a name="dp-writing-pipeline-definition"></a>

本节中的说明用于使用 AWS Data Pipeline 命令行界面 (CLI) 手动处理管道定义文件。这是使用 AWS Data Pipeline 控制台以交互方式设计管道的替代方案。

您可以使用任何支持使用 UTF-8 文件格式保存文件的文本编辑器手动创建管道定义文件，并使用 AWS Data Pipeline 命令行界面提交文件。

AWS Data Pipeline 还支持管道定义中的各种复杂表达式和函数。有关更多信息，请参阅 [管道表达式和函数](dp-expressions-functions.md)。

## 文件结构
<a name="dp-file-structure"></a>

管道创建中的第一步是在管道定义文件中编写管道定义对象。以下示例介绍了管道定义文件的一般结构。此文件定义了两个对象，使用“\$1”和“\$1”隔离对象，并以逗号分隔。

在以下示例中，第一个对象定义了两个名称/值对，称为*字段*。第二个对象定义了三个字段。

```
{
  "objects" : [
    {
       "name1" : "value1",
       "name2" : "value2"
    },
    {
       "name1" : "value3",
       "name3" : "value4",
       "name4" : "value5"
    }
  ]
}
```

创建管道定义文件时，您必须选择需要的管道对象的类型，将其添加到管道定义文件，然后添加适当的字段。有关管道对象的更多信息，请参阅[管道对象引用](dp-pipeline-objects.md)。

例如，您可以为输入数据节点创建一个管道定义对象，为输出数据节点另外创建一个。然后，为活动创建另一个管道定义对象，例如使用 Amazon EMR 处理输入数据。

## 管道字段
<a name="dp-add-fields"></a>

在您知道哪些对象类型要包括在管道定义文件中之后，将字段添加到各个管道对象的定义。字段名称括在引号内，并使用空格、冒号、空格与字段值分隔，如下例中所示。

```
"name" : "value"
```

字段值可以是文本字符串、对另一对象的引用、函数调用、表达式或以上任意类型的有序列表。有关可用于字段值的数据类型的更多信息，请参阅[简单数据类型](dp-expressions-functions.md#dp-pipeline-datatypes)。有关您可用于对字段求值的函数的更多信息，请参阅 [表达式计算](dp-pipeline-expressions.md#dp-datatype-functions)。

字段限制为 2048 个字符。对象大小可以为 20KB，这意味着您不能将过多大字段添加到一个对象。

每个管道对象必须包含以下字段：`id` 和 `type`，如以下示例所示。根据对象类型，可能还会需要其他字段。为 `id` 选择一个对您而言有意义并且在管道定义中唯一的值。`type` 的值指定对象的类型。指定一个支持的管道定义对象类型，该类型在主题[管道对象引用](dp-pipeline-objects.md)中列出。

```
{
  "id": "MyCopyToS3",
  "type": "CopyActivity"
}
```

有关各个对象的必需和可选字段的更多信息，请参阅对象的文档。

要将来自一个对象的字段包括到其他对象中，请使用 `parent` 字段并引用对象。例如，对象“B”包含其字段“B1”和“B2”，以及来自对象“A”、“A1”和“A2”的字段。

```
{
  "id" : "A",
  "A1" : "value",
  "A2" : "value"
},
{
  "id" : "B",
  "parent" : {"ref" : "A"},
  "B1" : "value",
  "B2" : "value"
}
```

您可以使用 ID“Default”定义对象中的常见字段。这些字段自动包括在管道定义文件中的每个对象中，并不明确设置其 `parent` 字段来引用不同对象。

```
{
  "id" : "Default",
  "onFail" : {"ref" : "FailureNotification"},
  "maximumRetries" : "3",
  "workerGroup" : "myWorkerGroup"
}
```

## 用户定义字段
<a name="dp-userdefined-fields"></a>

您可以在管道组件上创建用户定义字段或自定义字段，并通过表达式来引用它们。以下示例显示了名为`myCustomField`并`my_customFieldReference`添加到 S3 DataNode 对象的自定义字段：

```
{
  "id": "S3DataInput",
  "type": "S3DataNode",
  "schedule": {"ref": "TheSchedule"},
  "filePath": "s3://bucket_name",
  "myCustomField": "This is a custom value in a custom field.",
  "my_customFieldReference": {"ref":"AnotherPipelineComponent"}
  },
```

用户定义字段必须将全小写的单词“my”作为名称前缀，后跟大写字母或下划线。此外，用户定义的字段可以为字符串值，例如前面的 `myCustomField` 示例，或者引用另一个管道组件，例如前面的 `my_customFieldReference` 示例。

**注意**  
在用户定义的字段上， AWS Data Pipeline 仅检查对其他管道组件的有效引用，而不检查您添加的任何自定义字段字符串值。