

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

# 数据结构配方步骤
<a name="recipe-actions.data-structure"></a>

使用这些配方步骤可从不同的角度对数据进行制表和汇总，或者执行高级函数。

**Topics**
+ [NEST\$1TO\$1ARRAY](recipe-actions.NEST_TO_ARRAY.md)
+ [NEST\$1TO\$1MAP](recipe-actions.NEST_TO_MAP.md)
+ [NEST\$1TO\$1STRUCT](recipe-actions.NEST_TO_STRUCT.md)
+ [UNNEST\$1ARRAY](recipe-actions.UNNEST_ARRAY.md)
+ [UNNEST\$1MAP](recipe-actions.UNNEST_MAP.md)
+ [UNNEST\$1STRUCT](recipe-actions.UNNEST_STRUCT.md)
+ [UNNEST\$1STRUCT\$1N](recipe-actions.UNNEST_STRUCT_N.md)
+ [GROUP\$1BY](recipe-actions.GROUP_BY.md)
+ [JOIN](recipe-actions.JOIN.md)
+ [PIVOT](recipe-actions.PIVOT.md)
+ [SCALE](#recipe-actions.SCALE)
+ [TRANSPOSE](recipe-actions.TRANSPOSE.md)
+ [联合](recipe-actions.UNION.md)
+ [UNPIVOT](recipe-actions.UNPIVOT.md)

# NEST\$1TO\$1ARRAY
<a name="recipe-actions.NEST_TO_ARRAY"></a>

将用户选择的列转换为数组值。在创建结果数组时会保留选定列的顺序。不同的列数据类型将强制类型转换为支持所有列的数据类型的通用类型。

**参数**
+ `sourceColumns`：源列列表。
+ `targetColumn`：目标列的名称。
+ `removeSourceColumns`：包含值 `true` 或 `false`，以指示用户是否要删除选定的源列。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "NEST_TO_ARRAY",
        "Parameters": {
            "sourceColumns": "[\"age\",\"weight_kg\",\"height_cm\"]",
            "targetColumn": "columnName",
            "removeSourceColumns": "true"
        }
    }
}
```

# NEST\$1TO\$1MAP
<a name="recipe-actions.NEST_TO_MAP"></a>

将用户选择的列转换为键值对，每个键值对都有一个表示列名称的键和一个表示行值的值。在创建结果映射时不保留选定列的顺序。不同的列数据类型将强制类型转换为支持所有列的数据类型的通用类型。

**参数**
+ `sourceColumns`：源列列表。
+ `targetColumn`：目标列的名称。
+ `removeSourceColumns`：包含值 `true` 或 `false`，以指示用户是否要删除选定的源列。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "NEST_TO_MAP",
        "Parameters": {
            "sourceColumns": "[\"age\",\"weight_kg\",\"height_cm\"]",
            "targetColumn": "columnName",
            "removeSourceColumns": "true"
        }
    }
}
```

# NEST\$1TO\$1STRUCT
<a name="recipe-actions.NEST_TO_STRUCT"></a>

将用户选择的列转换为键值对，每个键值对都有一个表示列名称的键和一个表示行值的值。选定列的顺序和每列的数据类型都保留在结果结构中。

**参数**
+ `sourceColumns`：源列列表。
+ `targetColumn`：目标列的名称。
+ `removeSourceColumns`：包含值 `true` 或 `false`，以指示用户是否要删除选定的源列。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "NEST_TO_STRUCT",
        "Parameters": {
            "sourceColumns": "[\"age\",\"weight_kg\",\"height_cm\"]",
            "targetColumn": "columnName",
            "removeSourceColumns": "true"
        }
    }
}
```

# UNNEST\$1ARRAY
<a name="recipe-actions.UNNEST_ARRAY"></a>

将类型为 `array` 的列取消嵌套到新列中。如果该数组包含多个值，则会生成与每个元素对应的一行。此函数仅取消数组列的一层的嵌套。

**参数**
+ `sourceColumn`：现有列的名称。此列必须是 `struct` 类型。
+ `targetColumn`：生成的目标列的名称。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "UNNEST_ARRAY",
        "Parameters": {
            "sourceColumn": "address",
            "targetColumn": "address"
        }
    }
}
```

# UNNEST\$1MAP
<a name="recipe-actions.UNNEST_MAP"></a>

取消类型为 `map` 的列的嵌套，并为键和值生成一列。如果有多个键值对，则会生成与每个键值对应的一行。此函数仅取消映射列的一层的嵌套。

**参数**
+ `sourceColumn`：现有列的名称。此列必须是 `struct` 类型。
+ `removeSourceColumn`：如果为 `true`，则在函数完成后删除源列。
+ `targetColumn`：如果提供，则生成的每列都将以此作为前缀开始。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "UNNEST_MAP",
        "Parameters": {
            "sourceColumn": "address",
            "removeSourceColumn": "false",
            "targetColumn": "address"
        }
    }
}
```

# UNNEST\$1STRUCT
<a name="recipe-actions.UNNEST_STRUCT"></a>

取消类型为 `struct` 的列的嵌套，并为结构中存在的每个键生成一列。此函数仅取消结构第一层的嵌套。

**参数**
+ `sourceColumn`：现有列的名称。此列必须是结构类型。
+ `removeSourceColumn`：如果为 `true`，则在函数完成后删除源列。
+ `targetColumn`：如果提供，则生成的每列都将以此作为前缀开始。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "UNNEST_STRUCT",
        "Parameters": {
            "sourceColumn": "address",
            "removeSourceColumn": "false"
            "targetColumn": "add"
        }
    }
}
```

# UNNEST\$1STRUCT\$1N
<a name="recipe-actions.UNNEST_STRUCT_N"></a>

为类型为 `struct` 的选定列的每个字段创建一个新列。

例如，给定以下结构：

```
            user {
               name: “Ammy” 
               address: {
                  state: "CA",
                  zipcode: 12345
               }
            }
```

此函数将创建 3 列：


| user.name | user.address.state | user.address.zipcode | 
| --- | --- | --- | 
|  Ammy  |  CA  |  12345  | 

**参数**
+ `sourceColumns`：源列列表。
+ `regexColumnSelector`：用于选择要取消嵌套的列的正则表达式。
+ `removeSourceColumn`：布尔值。如果为 true，则删除源列；否则保留。
+ `unnestLevel`：要取消嵌套的层数。
+ `delimiter`：在新创建的列名称中使用此分隔符以分隔结构的不同层。例如：如果分隔符为“/”，则列名称将采用以下形式：“用户/地址/状态”。
+ `conditionExpressions`：条件表达式。

**Example 示例**  
  

```
{
    "RecipeAction": {
        "Operation": "UNNEST_STRUCT_N",
        "Parameters": {
            "sourceColumns": "[\"address\"]",
            "removeSourceColumn": "true",
            "unnestLevel": "2",
            "delimiter": "/"
        }
    }
}
```

# GROUP\$1BY
<a name="recipe-actions.GROUP_BY"></a>

通过按一列或多列对行进行分组，然后对每个组应用聚合函数来汇总数据。

**参数**
+ `sourceColumns`：JSON 编码字符串，表示构成每组基础的列的列表。
+ `groupByAggFunctions`：JSON 编码字符串，表示要应用的聚合函数列表。（如果您不想聚合，请指定 `UNAGGREGATED`。）
+ `useNewDataFrame`：如果为 true，来自 GROUP\$1BY 的结果将在项目会话中可用，从而替换其当前内容。

**Example 示例**  
  

```
[
  {
    "Action": {
      "Operation": "GROUP_BY",
      "Parameters": {
        "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"all_votes\",\"targetColumnName\":\"all_votes_count\",\"targetColumnDataType\":\"number\",\"functionName\":\"COUNT\"}]",
        "sourceColumns": "[\"year\",\"state_name\"]",
        "useNewDataFrame": "true"
      }
    }
  }
]
```

# JOIN
<a name="recipe-actions.JOIN"></a>

对两个数据集执行联接操作。

**参数**
+ `joinKeys`：JSON 编码字符串，表示每个数据集中用作联接键的列的列表。
+ `joinType`：要执行的联接类型。必须是以下类型之一：`INNER_JOIN` \$1 `LEFT_JOIN ` \$1 `RIGHT_JOIN` \$1 `OUTER_JOIN ` \$1 `LEFT_EXCLUDING_JOIN` \$1 `RIGHT_EXCLUDING_JOIN` \$1 `OUTER_EXCLUDING_JOIN`
+ `leftColumns`：JSON 编码字符串，表示当前活动数据集中的列列表。
+ `rightColumns`：JSON 编码字符串，表示来自另一个（辅助）数据集的要联接到当前数据集的列列表。
+ `secondInputLocation`：解析为辅助数据集的数据文件的 Amazon S3 URL。
+ `secondaryDatasetName`：辅助数据集的名称。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "JOIN",
        "Parameters": {
            "joinKeys": "[{\"key\":\"assembly_session\",\"value\":\"assembly_session\"},{\"key\":\"state_code\",\"value\":\"state_code\"}]",
            "joinType": "INNER_JOIN",
            "leftColumns": "[\"year\",\"assembly_session\",\"state_code\",\"state_name\",\"all_votes\",\"yes_votes\",\"no_votes\",\"abstain\",\"idealpoint_estimate\",\"affinityscore_usa\",\"affinityscore_russia\",\"affinityscore_china\",\"affinityscore_india\",\"affinityscore_brazil\",\"affinityscore_israel\"]",
            "rightColumns": "[\"assembly_session\",\"vote_id\",\"resolution\",\"state_code\",\"state_name\",\"member\",\"vote\"]",
            "secondInputLocation": "s3://databrew-public-datasets-us-east-1/votes.csv",
            "secondaryDatasetName": "votes"
        }
    }
}
```

# PIVOT
<a name="recipe-actions.PIVOT"></a>

将选定列中的所有行值转换为带有值的各个列。

![\[Diagram showing pivot column transformation: original table to new table with columns as values.\]](http://docs.aws.amazon.com/zh_cn/databrew/latest/dg/images/pivot.png)


**参数**
+ `sourceColumn`：现有列的名称。该列最多可以有 10 个不同的值。
+ `valueColumn`：现有列的名称。该列最多可以有 10 个不同的值。
+ `aggregateFunction`：聚合函数的名称。如果您不想聚合，请使用关键字 `COLLECT_LIST`。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "PIVOT",
        "Parameters": {
            "aggregateFunction": "SUM",
            "sourceColumn": "state_name",
            "valueColumn": "all_votes"
        }
    }
}
```

## SCALE
<a name="recipe-actions.SCALE"></a>

缩放或标准化数值列中的数据范围。

**参数**
+ `sourceColumn`：现有列的名称。
+ `strategy`：要应用于列值的操作：
  + `MIN_MAX`：将值重新缩放到 [0,1] 的范围内。
  + `SCALE_BETWEEN`：将值重新缩放到两个指定值的范围内。
  +  `MEAN_NORMALIZATION`：在 [-1, 1] 的范围内重新缩放数据，使其平均值（μ）为 0，标准差（σ）为 1。
  +  `Z_SCORE`：线性缩放数据值，使其平均值（μ）为 0，标准差（σ）为 1。最适合处理异常值。
+ `targetColumn`：要包含结果的列的名称。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "NORMALIZATION",
        "Parameters": {
            "sourceColumn": "all_votes",
            "strategy": "MIN_MAX",
            "targetColumn": "all_votes_normalized"
        }
    }
}
```

# TRANSPOSE
<a name="recipe-actions.TRANSPOSE"></a>

将所有选定行转换为列，将选定列转换为行。

![\[Table transformation from rows to columns, showing data reorganization for improved analysis.\]](http://docs.aws.amazon.com/zh_cn/databrew/latest/dg/images/transpose.png)


**参数**
+ `pivotColumns`：JSON 编码字符串，表示其行将转换为列名称的列的列表。
+ `valueColumns`：JSON 编码字符串，表示要转换为行的一列或多列的列表。
+ `aggregateFunction`：聚合函数的名称。如果您不想聚合，请使用关键字 `COLLECT_LIST`。
+ `newColumn`：要作为值保存转置后的列的列。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "TRANSPOSE",
        "Parameters": {
            "pivotColumns": "[\"Teacher\"]",
            "valueColumns": "[\"Tom\",\"John\",\"Harry\"]",
            "aggregateFunction": "COLLECT_LIST",
            "newColumn": "Student"
        }
    }

}
```

# 联合
<a name="recipe-actions.UNION"></a>

将两个或更多数据集中的行合并到单个结果中。

**参数**
+ `datasetsColumns`：JSON 编码字符串，表示数据集中所有列的列表。
+ `secondaryDatasetNames`：JSON 编码字符串，表示一个或多个辅助数据集的列表。
+ `secondaryInputs`：JSON 编码字符串，表示 Amazon S3 存储桶和对象键名称的列表，这些名称将告诉 DataBrew 在哪里可以找到辅助数据集。
+ `targetColumnNames`：JSON 编码字符串，表示结果的列名称列表。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "UNION",
        "Parameters": {
            "datasetsColumns": "[[\"assembly_session\",\"state_code\",\"state_name\",\"year\",\"all_votes\",\"yes_votes\",\"no_votes\",\"abstain\",\"idealpoint_estimate\",\"affinityscore_usa\",\"affinityscore_russia\",\"affinityscore_china\",\"affinityscore_india\",\"affinityscore_brazil\",\"affinityscore_israel\"],[\"assembly_session\",\"state_code\",\"state_name\",null,null,null,null,null,null,null,null,null,null,null,null]]",
            "secondaryDatasetNames": "[\"votes\"]",
            "secondaryInputs": "[{\"S3InputDefinition\":{\"Bucket\":\"databrew-public-datasets-us-east-1\",\"Key\":\"votes.csv\"}}]",
            "targetColumnNames": "[\"assembly_session\",\"state_code\",\"state_name\",\"year\",\"all_votes\",\"yes_votes\",\"no_votes\",\"abstain\",\"idealpoint_estimate\",\"affinityscore_usa\",\"affinityscore_russia\",\"affinityscore_china\",\"affinityscore_india\",\"affinityscore_brazil\",\"affinityscore_israel\"]"
        }
    }
}
```

# UNPIVOT
<a name="recipe-actions.UNPIVOT"></a>

将选定行中的所有列值转换为带有值的各个行。

![\[Table transformation showing column values converted to individual rows with values.\]](http://docs.aws.amazon.com/zh_cn/databrew/latest/dg/images/unpivot.png)


**参数**
+ `sourceColumns`：JSON 编码字符串，表示要反转置的一列或多列的列表。
+ `unpivotColumn`：反转置操作的值列。
+ `valueColumn`：用于保存反转置的列。

**Example 示例**  
  

```
{
    "Action": {
        "Operation": "UNPIVOT",
        "Parameters": {
            "sourceColumns": "[\"idealpoint_estimate\"]",
            "unpivotColumn": "unpivoted_idealpoint_estimate",
            "valueColumn": "unpivoted_column_values"
        }
    }
}
```