

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

# 使用 Amazon Data Wrangler 准备机器学习 SageMaker 数据
<a name="data-wrangler"></a>

**重要**  
亚马逊 SageMaker Data Wrangler 已集成到亚马 SageMaker 逊 Canvas 中。在 Can SageMaker vas 中的全新 Data Wrangler 体验中，除了可视化界面外，您还可以使用自然语言界面来探索和转换数据。有关 Canvas 中的 Data Wrangler 的更多信息， SageMaker 请参阅。[数据准备](canvas-data-prep.md)

Amazon SageMaker Data Wrangler（Data Wrangler）是 Amazon SageMaker Studio Classic 的一项功能，它提供了导入、准备、转换、特征化和分析数据的 end-to-end解决方案。您可以将 Data Wrangler 数据准备流集成到机器学习 (ML) 工作流中，以简化和精简数据预处理和特征工程，只需少量甚至无需编码。您还可以添加自己的 Python 脚本和转换，以自定义工作流。

Data Wrangler 可提供以下核心功能，帮助您分析和准备用于机器学习应用程序的数据。
+ **导入** — 连接亚马逊简单存储服务 (Amazon S3)、（Athena）、亚马逊 Redshift、Snow Amazon Athena flake 和 Databricks 并从中导入数据。
+ **数据流** – 创建数据流以定义一系列机器学习数据准备步骤。您可以使用流合并来自不同数据源的数据集，确定要应用于数据集的转换数量和类型，并定义可集成到机器学习管线中的数据准备工作流。
+ **转换** – 使用标准*转换*（如字符串、矢量和数字数据格式化工具）清理和转换数据集。使用文本和 date/time 嵌入等变换以及分类编码来展示您的数据。
+ **生成数据见解** – 使用 Data Wrangler 数据见解和质量报告，自动验证数据质量并检测数据中的异常。
+ **分析** – 在流中的任意点分析数据集中的特征。Data Wrangler 包括内置的数据可视化工具，如散点图和直方图，以及目标泄漏分析和快速建模等数据分析工具，以了解特征相关性。
+ **导出** – 将数据准备工作流导出至其他位置。以下是一些示例位置：
  + Amazon Simple Storage Service（Amazon S3）桶
  + Amazon P SageMaker ipelines — 使用管道自动部署模型。您可以将转换后的数据直接导出至管线。
  + Amazon F SageMaker eature Store — 将功能及其数据存储在中央存储中。
  + Python 脚本 – 将数据及其转换存储在 Python 脚本中，用于您的自定义工作流。

要开始使用 Data Wrangler，请参阅[开始使用 Data Wrangler](data-wrangler-getting-started.md)。

**重要**  
Data Wrangler 不再支持 Jupyter Lab 版本 1 ()。JL1要访问最新功能和更新，请更新为 Jupyter Lab 版本 3。有关升级的更多信息，请参阅[从控制台查看和更新应用程序的 JupyterLab 版本](studio-jl.md#studio-jl-view)。

**重要**  
本指南中的信息和程序使用最新版本的 Amazon SageMaker Studio Classic。有关将 Studio Classic 升级到最新版本的信息，请参阅 [亚马逊 SageMaker Studio 经典用户界面概述](studio-ui.md)。

您必须使用 Studio Classic 1.3.0 或更高版本。使用以下步骤打开 Amazon SageMaker Studio Classic 并查看您正在运行哪个版本。

要打开 Studio Classic 并检查其版本，请参阅以下步骤。

1. 按照中的[先决条件](data-wrangler-getting-started.md#data-wrangler-getting-started-prerequisite)步骤通过 Amazon SageMaker Studio Classic 访问 Data Wrangler。

1. 在要用来启动 Studio Classic 的用户旁边，选择**启动应用程序**。

1. 选择 **Studio**。

1. Studio Classic 载入后，选择**文件**，然后选择**新建**，再选择**终端**。  
![\[步骤 4 中描述的 Studio Classic 上下文菜单选项。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/terminal.png)

1. 启动 Studio Classic 后，选择**文件**，然后选择**新建**，再选择**终端**。

1. 输入 `cat /opt/conda/share/jupyter/lab/staging/yarn.lock | grep -A 1 "@amzn/sagemaker-ui-data-prep-plugin@"`，打印 Studio Classic 实例的版本。您必须安装 Studio Classic 1.3.0 版本才能使用 Snowflake。  
![\[在 Studio Classic 中打开终端窗口，复制并粘贴步骤 6 中的命令。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/cat-command.png)

您可以从内部更新 Amazon SageMaker Studio Classic AWS 管理控制台。有关更新 Studio Classic 的更多信息，请参阅 [亚马逊 SageMaker Studio 经典用户界面概述](studio-ui.md)。

**Topics**
+ [开始使用 Data Wrangler](data-wrangler-getting-started.md)
+ [导入](data-wrangler-import.md)
+ [创建和使用 Data Wrangler 流](data-wrangler-data-flow.md)
+ [获取有关数据和数据质量的见解](data-wrangler-data-insights.md)
+ [根据您的数据流自动训练模型](data-wrangler-autopilot.md)
+ [转换数据](data-wrangler-transform.md)
+ [分析和可视化](data-wrangler-analyses.md)
+ [针对不同数据集重用数据流](data-wrangler-parameterize.md)
+ [导出](data-wrangler-data-export.md)
+ [使用 Amazon SageMaker Studio 经典笔记本中的交互式数据准备小工具获取数据见解](data-wrangler-interactively-prepare-data-notebook.md)
+ [安全性和权限](data-wrangler-security.md)
+ [发行说明](data-wrangler-release-notes.md)
+ [故障排除](data-wrangler-trouble-shooting.md)
+ [提高 Amazon EC2 实例限制](data-wrangler-increase-instance-limit.md)
+ [更新 Data Wrangler](data-wrangler-update.md)
+ [关闭 Data Wrangler](data-wrangler-shut-down.md)

# 开始使用 Data Wrangler
<a name="data-wrangler-getting-started"></a>

Amazon SageMaker Data Wrangler 是亚马逊 SageMaker Studio Classic 中的一项功能。使用此部分学习如何访问和开始使用 Data Wrangler。执行以下操作：

1. 完成 [先决条件](#data-wrangler-getting-started-prerequisite) 中的每个步骤。

1. 按照 [访问 Data Wrangler](#data-wrangler-getting-started-access) 中的步骤开始使用 Data Wrangler。

## 先决条件
<a name="data-wrangler-getting-started-prerequisite"></a>

要使用 Data Wrangler，您必须完成以下必备步骤。

1. 要使用 Data Wrangler，您需要访问 Amazon Elastic Compute Cloud (Amazon EC2) 实例。有关可使用的 Amazon EC2 实例的更多信息，请参阅 [实例](data-wrangler-data-flow.md#data-wrangler-data-flow-instances)。要了解如何查看配额以及根据需要申请增加配额，请参阅 [AWS 服务限额](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

1. 配置 [安全性和权限](data-wrangler-security.md) 中介绍的必要权限。

1. 如果您的组织正在使用阻止互联网流量的防火墙，则您必须有权访问以下内容 URLs：
   + `https://ui.prod-1.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-2.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-3.data-wrangler.sagemaker.aws/`
   + `https://ui.prod-4.data-wrangler.sagemaker.aws/`

要使用 Data Wrangler，您需要一个活动的 Studio Classic 实例。要了解如何启动新实例，请参阅 [亚马逊 SageMaker AI 域名概述](gs-studio-onboard.md)。当您的 Studio Classic 实例为**就绪**时，请使用 [访问 Data Wrangler](#data-wrangler-getting-started-access) 中的说明。

## 访问 Data Wrangler
<a name="data-wrangler-getting-started-access"></a>

以下过程假定您已完成 [先决条件](#data-wrangler-getting-started-prerequisite)。

要在 Studio Classic 中访问 Data Wrangler，请执行以下操作。

1. 登录 Studio Classic。有关更多信息，请参阅 [亚马逊 SageMaker AI 域名概述](gs-studio-onboard.md)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 您也可以执行以下操作，来创建 Data Wrangler 流。

   1. 在顶部导航栏中，选择**文件**。

   1. 选择**新建**。

   1. 选择 **Data Wrangler 流**。  
![\[Studio Classic 管理控制台的“主页”选项卡。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/new-flow-file-menu.png)

1. （可选）重命名新目录和 .flow 文件。

1. 在 Studio Classic 中创建新的 .flow 文件时，您可能会看到一个向您介绍 Data Wrangler 的旋转木马。

   **该过程可能需要几分钟。**

   只要您的 “**用户详细信息**” 页面上的**KernelGateway**应用程序处于 “**待处理**” 状态，此消息就会一直存在。要查看此应用程序的状态，请在 A **mazon SageMaker Studio Classic** 页面的 A SageMaker I 控制台中，选择您用于访问 Studio Classic 的用户名。在**用户详细信息**页面上，您可以在 “**KernelGateway**应用程序” 下看到一个**应用程序**。等待此应用程序状态变为**准备就绪**，再开始使用 Data Wrangler。首次启动 Data Wrangler 时，可能需要大约 5 分钟时间。  
![\[在 “用户详细信息” 页面上显示KernelGateway应用程序状态为 “就绪” 的示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/gatewayKernel-ready.png)

1. 要开始使用，请选择一个数据来源并使用它导入数据集。要了解更多信息，请参阅 [导入](data-wrangler-import.md)。

   导入数据集时，该数据集会显示在您的数据流中。要了解更多信息，请参阅[创建和使用 Data Wrangler 流](data-wrangler-data-flow.md)。

1. 导入数据集后，Data Wrangler 会自动推断每个列中的数据类型。选择**数据类型**步骤旁边的 **\$1**，然后选择**编辑数据类型**。
**重要**  
在**数据类型**步骤中添加转换后，您无法使用**更新类型**批量更新列类型。

1. 使用数据流添加转换和分析。要了解更多信息，请参阅 [转换数据](data-wrangler-transform.md) 和 [分析和可视化](data-wrangler-analyses.md)。

1. 要导出完整的数据流，请选择**导出**，然后选择导出选项。要了解更多信息，请参阅[导出](data-wrangler-data-export.md)。

1. 最后，选择**组件和注册表**图标，然后从下拉列表中选择 **Data Wrangler**，以查看您创建的所有 .flow 文件。可以使用此菜单在数据流之间查找和移动。

启动 Data Wrangler 后，可以使用以下部分了解如何使用 Data Wrangler 创建机器学习数据准备流程。

## 更新 Data Wrangler
<a name="data-wrangler-update-studio-app"></a>

我们建议您定期更新 Data Wrangler Studio Classic 应用程序，以访问最新功能和更新。Data Wrangler 应用程序名称以开头。**sagemaker-data-wrang**要了解如何更新 Studio Classic 应用程序，请参阅 [关闭并更新 Amazon SageMaker Studio 经典版应用程序](studio-tasks-update-apps.md)。

## 演示：Data Wrangler Titanic 数据集演练
<a name="data-wrangler-getting-started-demo"></a>

下面几个部分提供了演练，可协助您了解如何使用 Data Wrangler。本演练假设您已按照 [访问 Data Wrangler](#data-wrangler-getting-started-access) 中的步骤操作，并打开了要用于演示的新数据流文件。您可能需要将此 .flow 文件重命名为类似于 `titanic-demo.flow` 这样的名称。

本演练使用 [Titanic 数据集](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)。这是 [Titanic 数据集](https://www.openml.org/d/40945)的修改版本，您可以更轻松地将该数据集导入到 Data Wrangler 流中。该数据集包含 1912 年*泰坦尼克号皇家邮轮*首航乘客的生存状况、年龄、性别和阶层（代表经济状况）。

在本教程中，您会执行以下步骤。

1. 请执行以下操作之一：
   + 打开 Data Wrangler 流，然后选择**使用样本数据集**。
   + 将 [Titanic 数据集](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)上传到 Amazon Simple Storage Service (Amazon S3)，然后导入到 Data Wrangler。

1. 使用 Data Wrangler 分析来分析此数据集。

1. 使用 Data Wrangler 数据转换来定义数据流。

1. 将您的流导出到 Jupyter 笔记本中，您可以用它来创建 Data Wrangler 作业。

1. 处理您的数据，然后开始 SageMaker 训练作业来训练 XGBoost 二进制分类器。

### 将数据集上传到 S3 并导入
<a name="data-wrangler-getting-started-demo-import"></a>

在开始时，您可以使用以下方法之一，将 Titanic 数据集导入到 Data Wrangler：
+ 直接从 Data Wrangler 流导入数据集
+ 将数据集上传到 Amazon S3，然后导入到 Data Wrangler

要将数据集直接导入到 Data Wrangler，请打开该流，然后选择**使用样本数据集**。

将数据集上传到 Amazon S3 并导入到 Data Wrangler 时，更接近导入自己的数据的体验。以下信息向您介绍如何上传和导入数据集。

开始将数据导入到 Data Wrangler 之前，请下载 [Titanic 数据集](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)，并上传到您要完成此演示的 AWS 区域中的 Amazon S3 (Amazon S3) 存储桶。

如果您是 Amazon S3 的新用户，可以在 Amazon S3 控制台中，通过拖放操作来完成此操作。要了解如何操作，请参阅《Amazon Simple Storage Service 用户指南》中的[使用拖放功能上传文件和文件夹](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html#upload-objects-by-drag-and-drop)。

**重要**  
将您的数据集上传到您要用于完成此演示的同一 AWS 区域的 S3 存储桶。

当数据集成功上传到 Amazon S3 后，您可以将该数据集导入到 Data Wrangler。

**将 Titanic 数据集导入到 Data Wrangler**

1. 在**数据流**选项卡中选择**导入数据**按钮，或者选择**导入**选项卡。

1. 选择 **Amazon S3**。

1. 使用**从 S3 导入数据集**表，查找已将 Titanic 数据集添加到的存储桶。选择 Titanic 数据集 CSV 文件以打开**详细信息**窗格。

1. 在**详细信息**下，**文件类型**应该为 CSV。选中**第一行是标题**，指定数据集的第一行是标题。您还可以将数据集命名为更友好的名称，例如 **Titanic-train**。

1. 选择**导入**按钮。

将数据集导入到 Data Wrangler 后，该数据集会显示在**数据流**选项卡中。可以双击节点进入节点详细信息视图，在其中可以添加转换或分析。可以使用加号图标快速访问导航方式。在下一个部分中，您将会使用此数据流添加分析和转换步骤。

### 数据流
<a name="data-wrangler-getting-started-demo-data-flow"></a>

在数据流部分中，数据流中仅有的步骤是您最近导入数据集的步骤和一个**数据类型**步骤。在应用转换后，可以返回到此选项卡，查看数据流的具体情况。现在，在**准备**和**分析**选项卡下，添加一些基本的转换。

#### 准备和可视化
<a name="data-wrangler-getting-started-demo-prep-visualize"></a>

Data Wrangler 具有内置的转换和可视化功能，可用于分析、清理和转换您的数据。

在节点详细信息视图的**数据**选项卡中，右侧面板列出了所有内置转换，其中还包含一个可添加自定义转换的区域。以下使用场景展示了如何使用这些转换。

要获取可协助您进行数据探索和特征工程的信息，请创建数据质量和见解报告。报告中的信息有助于您清理和处理数据。该报告为您提供诸如缺失值数量和异常值数量之类的信息。如果您的数据存在问题，例如目标泄漏或不平衡，则见解报告可以让您注意到这些问题。有关创建报告的更多信息，请参阅 [获取有关数据和数据质量的见解](data-wrangler-data-insights.md)。

##### 数据探究
<a name="data-wrangler-getting-started-demo-explore"></a>

首先，使用分析创建数据的表摘要。执行以下操作：

1. 选择数据流中**数据类型**步骤旁边的 **\$1**，然后选择**添加分析**。

1. 在**分析**区域中，从下拉列表中选择**表摘要**。

1. 为表摘要指定**名称**。

1. 选择**预览**以预览将要创建的表。

1. 选择**保存**，将其保存到您的数据流中。数据显示在**所有分析**下。

使用看到的统计数据，您可以对该数据集得到类似以下内容的观测结果：
+ 平均票价（平均值）约为 33 美元，最高票价超过 500 美元。此列可能有异常值。
+ 该数据集使用 *?* 来表示缺失值。许多列都有缺失值：*cabin*、*embarked* 和 *home.dest*
+ 年龄类别缺少超过 250 个值。

接下来，使用从这些统计数据获得的见解来清理您的数据。

##### 删除未使用的列
<a name="data-wrangler-getting-started-demo-drop-unused"></a>

利用上一部分中的分析，清理数据集，为训练做好准备。要向数据流添加新的转换，请选择数据流中**数据类型**步骤旁边的 **\$1**，然后选择**添加转换**。

首先，删除您不希望用于训练的列。可以使用 [pandas](https://pandas.pydata.org/) 数据分析库来完成这项工作，也可以使用其中一个内置的转换。

通过以下步骤来删除未使用的列。

删除未使用的列。

1. 打开 Data Wrangler 流。

1. Data Wrangler 流中有两个节点。选择**数据类型**节点右侧的 **\$1**。

1. 选择**添加转换**。

1. 在**所有步骤**列中，选择**添加步骤**。

1. 在**标准**转换列表中，选择**管理列**。标准转换是现成的内置转换。确保选中**删除列**。

1. 在**要删除的列**下，选中以下列名：
   + cabin
   + ticket
   + name
   + sibsp
   + parch
   + home.dest
   + boat
   + body

1. 选择**预览**。

1. 验证这些列是否已删除，然后选择**添加**。

要使用 pandas 执行此操作，请按照以下步骤操作。

1. 在**所有步骤**列中，选择**添加步骤**。

1. 在**自定义**转换列表中，选择**自定义转换**。

1. 为您的转换提供名称，然后从下拉列表中选择 **Python (Pandas)**。

1. 在代码框中输入以下 Python 脚本。

   ```
   cols = ['name', 'ticket', 'cabin', 'sibsp', 'parch', 'home.dest','boat', 'body']
   df = df.drop(cols, axis=1)
   ```

1. 选择**预览**以预览更改，然后选择**添加**以添加转换。

##### 清理缺失值
<a name="data-wrangler-getting-started-demo-missing-vals"></a>

现在清理缺失的值。您可以使用**处理缺失值**转换组来执行此操作。

许多列有缺失值。在其余列中，*age* 和 *fare* 包含缺失值。使用**自定义转换**进行检查。

使用 **Python (Pandas)** 选项，通过以下命令快速查看每个列中的条目数量：

```
df.info()
```

![\[示例：查看每栏的条目数。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/inspect-missing-pandas.png)


要删除 *age* 类别中缺少值的行，请执行以下操作：

1. 选择**处理缺失值**。

1. 为**转换器**选择**删除缺失值**。

1. 为**输入列**选择 *age*。

1. 选择**预览**查看新的数据框，然后选择**添加**，将转换添加到您的流中。

1. 对 *fare* 重复同样的过程。

您可以在**自定义转换**部分中使用 `df.info()`，来确认所有行现在都有 1045 个值。

##### 自定义 Pandas：编码
<a name="data-wrangler-getting-started-demo-encode"></a>

尝试使用 Pandas 进行平面编码。对分类数据进行编码是为分类创建数字表示形式的过程。例如，如果您的分类是 `Dog` 和 `Cat`，则可以将此信息编码为两个向量：`[1,0]` 表示 `Dog`，`[0,1]` 表示 `Cat`。

1. 在**自定义转换**部分中，从下拉列表中选择 **Python (Pandas)**。

1. 在代码框中，输入以下内容。

   ```
   import pandas as pd
   
   dummies = []
   cols = ['pclass','sex','embarked']
   for col in cols:
       dummies.append(pd.get_dummies(df[col]))
       
   encoded = pd.concat(dummies, axis=1)
   
   df = pd.concat((df, encoded),axis=1)
   ```

1. 选择**预览**以预览更改。将每个列的编码版本添加到数据集内。

1. 选择**添加**来添加转换。

#### 自定义 SQL：SELECT 列
<a name="data-wrangler-getting-started-demo-sql"></a>

现在，选择要继续使用 SQL 的列。对于此演示，请选择以下 `SELECT` 语句中列出的列。因为 *survived* 是训练的目标列，所以将该列放在第一位。

1. 在 “**自定义转换**” 部分，从下拉列表中选择 **PySpark SQL (SQL)**。

1. 在代码框中，输入以下内容。

   ```
   SELECT survived, age, fare, 1, 2, 3, female, male, C, Q, S FROM df;
   ```

1. 选择**预览**以预览更改。您的 `SELECT` 语句中列出的列仅仅是剩余的列。

1. 选择**添加**来添加转换。

### 导出到 Data Wrangler 笔记本
<a name="data-wrangler-getting-started-export"></a>

完成创建数据流后，可以选择多种导出选项。以下部分介绍如何导出到 Data Wrangler 作业笔记本。Data Wrangler 作业用于通过数据流中定义的步骤来处理您的数据。要了解有关所有导出选项的更多信息，请参阅 [导出](data-wrangler-data-export.md)。

#### 导出到 Data Wrangler 作业笔记本
<a name="data-wrangler-getting-started-export-notebook"></a>

使用 **Data Wrangler 作业**导出数据流时，该过程会自动创建 Jupyter 笔记本。此笔记本会自动在您的 Studio Classic 实例中打开，并配置为运行 SageMaker 处理作业来运行您的 Data Wrangler 数据流，这被称为数据牧马人作业。

1. 保存数据流。选择**文件**，然后选择**保存 Data Wrangler 流**。

1. 返回到**数据流**选项卡，选择数据流 (SQL) 中的最后一步，然后选择 **\$1** 以打开导航。

1. 选择**导出**，然后选择 **Amazon S3（通过 Jupyter 笔记本）**。这将打开 Jupyter 笔记本。  
![\[示例显示如何在 Data Wrangler 管理控制台的数据流选项卡中打开导航。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/export-select-step.png)

1. 为**内核**选择任何 **Python 3 (Data Science)** 内核。

1. 当内核启动时，运行笔记本书中的单元格，直到 **Kick off Trainin SageMaker g Job（可选）**。

1. 或者，如果您想创建 SageMaker AI ** SageMaker训练作业来训练 XGBoost 分类器，则可以在 Kick off Training Job（可选）**中运行单元格。您可以在 [Amazon Pricin SageMaker g 中找到开展培训工作的 SageMaker 费用](https://aws.amazon.com/sagemaker/pricing/)。

   或者，您可以将中找到的代码块添加到笔记本中[训练 XGBoost 分类器](#data-wrangler-getting-started-train-xgboost)并运行它们以使用[XGBoost](https://xgboost.readthedocs.io/en/latest/)开源库来训练 XGBoost 分类器。

1. 取消注释并在 C **leanup** 下运行单元格，然后运行它以将 Pyth SageMaker on SDK 恢复到其原始版本。

您可以在 SageMaker AI 控制台的 “**处理**” 选项卡中监控您的 Data Wrangler 作业状态。此外，您还可以使用 Amazon 监控您的 Data Wrangler 作业。 CloudWatch有关更多信息，请参阅[使用 CloudWatch 日志和指标监控 Amazon SageMaker 处理任务](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html#processing-job-cloudwatch)。

如果您启动了训练作业，则可以使用 SageMaker AI 控制台在 “训练” **部分**的 “**训练作业**” 下方监控其状态。

#### 训练 XGBoost 分类器
<a name="data-wrangler-getting-started-train-xgboost"></a>

你可以使用 Jupyter 笔记本或 Amazon Autopilot 来训练 XGBoost 二进制分类器。 SageMaker 可以使用 Autopilot，根据直接从 Data Wrangler 流转换的数据自动训练和优化模型。有关 Autopilot 的信息，请参阅 [根据您的数据流自动训练模型](data-wrangler-autopilot.md)。

在启动 Data Wrangler 作业的同一个笔记本中，您可以使用准备好的数据提取数据并训练 XGBoost 二进制分类器，只需最少的数据准备工作。

1. 首先，使用 `pip` 升级必要的模块，然后删除 \$1SUCCESS 文件（最后一个文件在使用 `awswrangler` 时有问题）。

   ```
   ! pip install --upgrade awscli awswrangler boto sklearn
   ! aws s3 rm {output_path} --recursive  --exclude "*" --include "*_SUCCESS*"
   ```

1. 从 Amazon S3 读取数据。可以使用 `awswrangler` 递归读取 S3 前缀中的所有 CSV 文件。然后，将数据拆分为特征和标签。标签是数据框的第一列。

   ```
   import awswrangler as wr
   
   df = wr.s3.read_csv(path=output_path, dataset=True)
   X, y = df.iloc[:,:-1],df.iloc[:,-1]
   ```
   + 最后，创建 DMatrices （数据 XGBoost 的原始结构）并使用 XGBoost 二元分类进行交叉验证。

     ```
     import xgboost as xgb
     
     dmatrix = xgb.DMatrix(data=X, label=y)
     
     params = {"objective":"binary:logistic",'learning_rate': 0.1, 'max_depth': 5, 'alpha': 10}
     
     xgb.cv(
         dtrain=dmatrix, 
         params=params, 
         nfold=3,
         num_boost_round=50,
         early_stopping_rounds=10,
         metrics="rmse", 
         as_pandas=True, 
         seed=123)
     ```

#### 关闭 Data Wrangler
<a name="data-wrangler-getting-started-shut-down"></a>

完成使用 Data Wrangler 后，我们建议您关闭运行的实例，以免产生额外费用。要了解如何关闭 Data Wrangler 应用程序和关联的实例，请参阅 [关闭 Data Wrangler](data-wrangler-shut-down.md)。

# 导入
<a name="data-wrangler-import"></a>

您可以使用 Amazon SageMaker Data Wrangler 从以下数据*源*导入数据：亚马逊简单存储服务 (Amazon S3)、亚马逊雅典娜、亚马逊 Redshift 和 Snowflake。您导入的数据集最多可以包含 1000 列。

**Topics**
+ [从 Amazon S3 导入数据](#data-wrangler-import-s3)
+ [从 Athena 导入数据](#data-wrangler-import-athena)
+ [从 Amazon Redshift 导入数据](#data-wrangler-import-redshift)
+ [从 Amazon EMR 导入数据](#data-wrangler-emr)
+ [从 Databricks (JDBC) 导入数据](#data-wrangler-databricks)
+ [从 Salesforce Data Cloud 导入数据](#data-wrangler-import-salesforce-data-cloud)
+ [从 Snowflake 导入数据](#data-wrangler-snowflake)
+ [从软件即服务 (SaaS) 平台导入数据](#data-wrangler-import-saas)
+ [导入的数据存储](#data-wrangler-import-storage)

使用某些数据来源可以添加多个*数据连接*：
+ 可以连接到多个 Amazon Redshift 集群。每个集群会变成一个数据来源。
+ 您可以查询账户中的任何 Athena 数据库，从该数据库导入数据。



从数据来源导入数据集时，该数据集将显示在数据流中。Data Wrangler 会自动推断数据集内每个列的数据类型。要修改这些类型，请选择**数据类型**步骤，然后选择**编辑数据类型**。

当您从 Athena 或 Amazon Redshift 导入数据时，导入的数据将自动存储在您使用 Studio Classic 的地区的 SageMaker 默认 AI S3 存储桶中。 AWS 此外，Athena 会将您在 Data Wrangler 中预览的数据存储在此存储桶中。要了解更多信息，请参阅[导入的数据存储](#data-wrangler-import-storage)。

**重要**  
默认 Amazon S3 存储桶可能未设置最严格的安全设置，例如存储桶策略和服务器端加密 (SSE)。我们强烈建议您[添加存储桶策略，来限制对导入到 Data Wrangler 的数据集的访问](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-security.html#data-wrangler-security-bucket-policy)。

**重要**  
此外，如果您将托管策略用于 SageMaker AI，我们强烈建议您将其范围缩小到允许您执行用例的最严格的策略。有关更多信息，请参阅 [授予 IAM 角色使用 Data Wrangler 的权限](data-wrangler-security.md#data-wrangler-security-iam-policy)。

除 Amazon Simple Storage Service (Amazon S3) 以外的所有数据来源，都要求您指定 SQL 查询来导入数据。对于每个查询，必须指定以下内容：
+ **数据目录**
+ **数据库**
+ **表**

可以在下拉菜单或查询中指定数据库或数据目录的名称。下面是示例查询：
+ `select * from example-data-catalog-name.example-database-name.example-table-name` – 查询不使用用户界面 (UI) 下拉菜单中指定的任何项来运行。它在 `example-data-catalog-name` 内部的 `example-database-name` 中查询 `example-table-name`。
+ `select * from example-database-name.example-table-name` – 查询使用您在**数据目录**下拉菜单中指定的数据目录来运行。它会在您指定的数据目录内的 `example-database-name` 中查询 `example-table-name`。
+ `select * from example-table-name` – 查询要求您为**数据目录**和**数据库名称**下拉菜单选择字段。它会在您指定的数据库和数据目录内的数据目录中查询 `example-table-name`。

Data Wrangler 与数据来源之间的关联是*连接*。可以使用该连接从您的数据来源导入数据。

有以下几种类型的连接：
+ 直接
+ 编目

Data Wrangler 始终可以通过直接连接访问最新的数据。如果数据来源中的数据已更新，则可以使用连接导入数据。例如，如果有人将文件添加到您的某个 Amazon S3 存储桶，您可以导入该文件。

编目连接是数据传输的结果。编目连接中的数据不一定包含最新数据。例如，您可以设置 Salesforce 与 Amazon S3 之间的数据传输。如果 Salesforce 数据发生更新，则必须重新传输数据。您可以自动执行数据传输过程。有关数据传输的更多信息，请参阅 [从软件即服务 (SaaS) 平台导入数据](#data-wrangler-import-saas)。

## 从 Amazon S3 导入数据
<a name="data-wrangler-import-s3"></a>

可以使用 Amazon Simple Storage Service (Amazon S3) 随时从任何位置在 Web 上存储和检索任何数量的数据。您可以使用简单直观的 AWS 管理控制台网页界面和 Amazon S3 API 来完成这些任务。如果您已将数据集存储在本地，我们建议您将数据集添加到 S3 存储桶中，以便导入到 Data Wrangler 中。要了解具体方法，请参阅《Amazon Simple Storage Service 用户指南》中的[将对象上传到存储桶](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html)。

Data Wrangler 使用 [S3 Select](https://aws.amazon.com/s3/features/#s3-select) 来允许您在 Data Wrangler 中预览 Amazon S3 文件。每次预览文件时，您都需要支付标准费用。要了解有关定价的更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)中的**请求和数据检索**选项卡。

**重要**  
如果您计划导出数据流并启动 Data Wrangler 作业、将数据提取到 AI feature store 或创建 A SageMaker I 管道，请注意这些集成要求 Amazon S3 的输入数据位于同一区域。 SageMaker AWS 

**重要**  
如果正在导入 CSV 文件，请确保该文件满足以下要求：  
数据集内的记录不能超过一行。
反斜杠 `\` 是唯一有效的转义字符。
您的数据集必须使用以下分隔符之一：  
逗号 – `,`
冒号 – `:`
分号 – `;`
竖线 – `|`
Tab 键 – `[TAB]`
为了节省空间，您可以导入压缩的 CSV 文件。

使用 Data Wrangler，您能够导入整个数据集或对其中的一部分进行采样。对于 Amazon S3，它提供了以下采样选项：
+ 无 – 导入整个数据集。
+ 前 K 行 – 对数据集的前 K 行进行采样，其中 K 是您指定的整数。
+ 随机化 – 随机提取指定大小的样本。
+ 分层 – 随机提取分层样本。分层样本保持列中的值比例。

导入数据后，您还可以使用采样转换器，从整个数据集内提取一个或多个样本。有关采样转换器的更多信息，请参阅 [采样](data-wrangler-transform.md#data-wrangler-transform-sampling)。

您可以使用以下资源标识符之一来导入数据：
+ 使用 Amazon S3 存储桶或 Amazon S3 接入点的 Amazon S3 URI
+ Amazon S3 接入点别名
+ 使用 Amazon S3 接入点或 Amazon S3 存储桶的 Amazon 资源名称 (ARN)

Amazon S3 接入点是附加到存储桶的命名网络端点。每个接入点都有您可配置的不同的权限和网络控制。有关接入点的更多信息，请参阅[使用 Amazon S3 接入点管理数据访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html)。

**重要**  
如果您使用亚马逊资源名称 (ARN) 来导入数据，则该名称必须与您用于访问 Amazon SageMaker Studio Classic 的资源相同 AWS 区域 。

可以将单个文件或多个文件作为数据集导入。如果您有分为多个单独文件的数据集，可以使用多文件导入操作。该操作从 Amazon S3 目录中获取所有文件，并将这些文件作为单个数据集导入。有关您可导入的文件类型以及如何导入这些文件的信息，请参阅以下各个部分。

------
#### [ Single File Import ]

可以导入以下格式的单个文件：
+ 逗号分隔值 (CSV)
+ Parquet
+ Javascript 对象表示法 (JSON)
+ 优化的行列式 (ORC)
+ 图像 – Data Wrangler 使用 OpenCV 导入图像。有关支持的图像格式的更多信息，请参阅[图像文件读取和写入](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)。

对于采用 JSON 格式的文件，Data Wrangler 同时支持 JSON 行(.jsonl) 和 JSON 文档 (.json)。预览数据时，它会自动以表格格式显示 JSON。对于超过 5 MB 的嵌套 JSON 文档，Data Wrangler 会将结构和数组的架构显示为数据集内的值。使用**拼合结构**和**分解数组**运算符，以表格格式显示嵌套值。有关更多信息，请参阅[取消嵌套 JSON 数据](data-wrangler-transform.md#data-wrangler-transform-flatten-column)和[爆炸数组](data-wrangler-transform.md#data-wrangler-transform-explode-array)。

选择数据集时，可以重命名、指定文件类型并将第一行标识为标题。

只需一个导入步骤，即可导入 Amazon S3 存储桶中划分为多个文件的数据集。

**要将数据集从存储在 Amazon S3 中的单个文件导入到 Data Wrangler，请执行以下操作：**

1. 如果您当前不在**导入**选项卡上，请选择**导入**。

1. 在**可用**下，选择 **Amazon S3**。

1. 在**从 S3 导入表、图像或时间序列数据**中，执行以下操作之一：
   + 从表视图中选择一个 Amazon S3 存储桶，然后导航到要导入的文件。
   + 对于 **S3 源**，指定 Amazon S3 存储桶或 Amazon S3 URI，然后选择**开始**。Amazon S3 URIs 可以采用以下格式之一：
     + `s3://amzn-s3-demo-bucket/example-prefix/example-file`
     + *example-access-point*-*aqfqprnstn7aefdfbarligizwgyfouse1a*-s3alias/datasets/ *example-file*
     + `s3://arn:aws:s3:AWS-Region:111122223333:accesspoint/example-prefix/example-file`

1. 选择数据集，以打开**导入设置**窗格。

1. 如果 CSV 文件有标题，请选中**将标题添加到表**旁边的复选框。

1. 使用**预览**表来预览数据集。此表最多可显示 100 行。

1. 在**详细信息**窗格中，验证或更改您的数据集的**名称**和**文件类型**。如果添加的**名称**中包含空格，则在导入数据集时，这些空格将替换为下划线。

1. 指定希望使用的采样配置。

1. 选择**导入**。

------
#### [ Multifile Import ]

下面是导入多个文件的要求：
+ 文件必须位于相同的 Amazon S3 存储桶文件夹中。
+ 这些文件必须共用相同的标题，或者没有标题。

每个文件必须采用以下格式之一：
+ CSV
+ Parquet
+ 优化的行列式 (ORC)
+ 图像 – Data Wrangler 使用 OpenCV 导入图像。有关支持的图像格式的更多信息，请参阅[图像文件读取和写入](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)。

可以通过以下步骤导入多个文件。

**将数据集从存储在 Amazon S3 目录中的多个文件导入到 Data Wrangler**

1. 如果您当前不在**导入**选项卡上，请选择**导入**。

1. 在**可用**下，选择 **Amazon S3**。

1. 在**从 S3 导入表、图像或时间序列数据**中，执行以下操作之一：
   + 从表视图中选择一个 Amazon S3 存储桶，然后导航到包含要导入文件的文件夹。
   + 对于 **S3 源**，指定包含您的文件的 Amazon S3 存储桶或 Amazon S3 URI，然后选择**开始**。以下是有效的 URIs：
     + `s3://amzn-s3-demo-bucket/example-prefix/example-prefix`
     + `example-access-point-aqfqprnstn7aefdfbarligizwgyfouse1a-s3alias/example-prefix/`
     + `s3://arn:aws:s3:AWS-Region:111122223333:accesspoint/example-prefix`

1. 选择包含要导入文件的文件夹。每个文件都必须采用支持的格式之一。您的文件必须属于相同的数据类型。

1. 如果您的文件夹包含带标题的 CSV 文件，请选中**第一行是标题**旁边的复选框。

1. 如果您的文件嵌套在其他文件夹中，请选中**包括嵌套目录**旁边的复选框。

1. （可选）选择**添加文件名列**，向数据集内添加一列，其中显示每个观测值的文件名。

1. （可选）默认情况下，Data Wrangler 不会显示文件夹的预览。可以通过选择蓝色的**关闭预览**按钮，来激活预览。预览会显示该文件夹中前 10 个文件的前 10 行数据。

1. 在**详细信息**窗格中，验证或更改您的数据集的**名称**和**文件类型**。如果添加的**名称**中包含空格，则在导入数据集时，这些空格将替换为下划线。

1. 指定希望使用的采样配置。

1. 选择**导入数据集**。

------

您也可以使用参数来导入与模式匹配的文件子集。使用参数有助于您更有选择性地选择要导入的文件。要开始使用参数，请编辑数据来源，并将其应用于您用于导入数据的路径。有关更多信息，请参阅 [针对不同数据集重用数据流](data-wrangler-parameterize.md)。

## 从 Athena 导入数据
<a name="data-wrangler-import-athena"></a>

使用 Amazon Athena 将您的数据从 Amazon Simple Storage Service (Amazon S3) 导入到 Data Wrangler。在 Athena 中，可以编写标准的 SQL 查询，来选择要从 Amazon S3 导入的数据。有关更多信息，请参阅[什么是 Amazon Athena？](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)

您可以使用 AWS 管理控制台 来设置 Amazon Athena。开始运行查询之前，必须在 Athena 中至少创建一个数据库。有关开始使用 Athena 的更多信息，请参阅[入门](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)。

Athena 直接与 Data Wrangler 集成。无需离开 Data Wrangler UI，即可编写 Athena 查询。

除了在 Data Wrangler 中编写简单的 Athena 查询之外，您还可以使用：
+ 用于查询结果管理的 Athena 工作组。有关工作组的更多信息，请参阅 [管理查询结果](#data-wrangler-import-manage-results)。
+ 用于设置数据留存期的生命周期配置。有关数据留存的更多信息，请参阅 [设置数据留存期](#data-wrangler-import-athena-retention)。

### 在 Data Wrangler 中查询 Athena
<a name="data-wrangler-import-athena-query"></a>

**注意**  
Data Wrangler 不支持联合查询。

如果您 AWS Lake Formation 与 Athena 一起使用，请确保您的 Lake Formation IAM 权限不会覆盖数据库的 IAM 权限。`sagemaker_data_wrangler`

使用 Data Wrangler，您能够导入整个数据集或对其中的一部分进行采样。对于 Athena，提供了以下采样选项：
+ 无 – 导入整个数据集。
+ 前 K 行 – 对数据集的前 K 行进行采样，其中 K 是您指定的整数。
+ 随机化 – 随机提取指定大小的样本。
+ 分层 – 随机提取分层样本。分层样本保持列中的值比例。

以下过程介绍如何将 Athena 中的数据集导入到 Data Wrangler。

**将数据集从 Athena 导入到 Data Wrangler**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Amazon Athena**。

1. 对于**数据目录**，选择一个数据目录。

1. 使用**数据库**下拉列表选择要查询的数据库。选择数据库后，您可以使用**详细信息**下列出的**表**预览数据库中的所有表。

1. （可选）选择**高级配置**。

   1. 选择一个**工作组**。

   1. 如果您的工作组尚未强制使用 Amazon S3 输出位置，或者您没有使用工作组，请为**查询结果的 Amazon S3 位置**指定一个值。

   1. （可选）对于**数据留存期**，选中该复选框以设置数据留存期，并指定在删除数据之前存储数据的天数。

   1. （可选）默认情况下，Data Wrangler 会保存连接。可以选择取消选中该复选框，此时不保存连接。

1. 对于**采样**，选择一种采样方法。选择**无**可关闭采样。

1. 在查询编辑器中输入您的查询，然后使用**运行**按钮运行查询。查询成功后，可以在编辑器下预览您的结果。
**注意**  
Salesforce 数据使用 `timestamptz` 类型。如果您要查询从 Salesforce 导入到 Athena 的时间戳列，请将该列中的数据转换为 `timestamp` 类型。以下查询将时间戳列转换为正确的类型。  

   ```
   # cast column timestamptz_col as timestamp type, and name it as timestamp_col
   select cast(timestamptz_col as timestamp) as timestamp_col from table
   ```

1. 要导入查询结果，请选择**导入**。

完成上述过程后，您查询并导入的数据集将会显示在 Data Wrangler 流中。

默认情况下，Data Wrangler 会将连接设置保存为新连接。导入数据时，已指定的查询将显示为新的连接。保存的连接存储有关正在使用的 Athena 工作组和 Amazon S3 存储桶的信息。当您再次连接到数据来源时，可以选择已保存的连接。

### 管理查询结果
<a name="data-wrangler-import-manage-results"></a>

Data Wrangler 支持使用 Athena 工作组来管理账户 AWS 中的查询结果。可以为每个工作组指定 Amazon S3 输出位置。您还可以指定查询输出是否可以保存到不同的 Amazon S3 位置。有关更多信息，请参阅[使用工作组控制查询访问和成本](https://docs.aws.amazon.com/athena/latest/ug/manage-queries-control-costs-with-workgroups.html)。

您的工作组可能已配置为强制使用 Amazon S3 查询输出位置。您无法更改这些工作组的查询结果输出位置。

如果您不使用工作组或为查询指定输出位置，Data Wrangler 会使用您的 Studio Classic 实例所在 AWS 区域的默认 Amazon S3 存储桶来存储 Athena 查询结果。它会在此数据库中创建临时表，以将查询输出移至此 Amazon S3 存储桶。它会在导入数据后删除这些表；不过数据库 `sagemaker_data_wrangler` 仍然存在。要了解更多信息，请参阅[导入的数据存储](#data-wrangler-import-storage)。

要使用 Athena 工作组，请设置用于授予工作组访问权限的 IAM 策略。如果您使用 `SageMaker AI-Execution-Role`，我们建议将策略添加到角色中。有关用于工作组的 IAM 策略的更多信息，请参阅[用于访问工作组的 IAM 策略](https://docs.aws.amazon.com/athena/latest/ug/workgroups-iam-policy.html)。有关工作组策略示例，请参阅[工作组示例策略](https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html)。

### 设置数据留存期
<a name="data-wrangler-import-athena-retention"></a>

Data Wrangler 会自动为查询结果设置数据留存期。留存期过后，结果将被删除。例如，默认留存期为五天。查询结果将在五天后被删除。此配置可以协助您清理不再使用的数据。清理您的数据可以防止未授权用户获得访问权限。该操作还有助于控制在 Amazon S3 上存储数据的成本。

如果您未设置留存期，Amazon S3 生命周期配置将决定对象的存储期限。您为生命周期配置指定的数据留存策略会删除任何超过指定生命周期配置的查询结果。有关更多信息，请参阅[设置存储桶的生命周期配置](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)。

Data Wrangler 使用 Amazon S3 生命周期配置来管理数据留存和过期。您必须授予您的 Amazon SageMaker Studio Classic IAM 执行角色权限才能管理存储桶生命周期配置。可以通过以下步骤授予权限。

要授予管理生命周期配置的权限，请执行以下操作。

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择**角色**。

1. 在搜索栏中，指定 Amazon SageMaker Studio Classic 正在使用的亚马逊 A SageMaker I 执行角色。

1. 选择角色 。

1. 选择**添加权限**。

1. 选择**创建内联策略**。

1. 对于**服务**，指定 **S3** 并选择该项。

1. 在 “**阅读**” 部分下，选择**GetLifecycleConfiguration**。

1. 在 **“写入**” 部分下，选择**PutLifecycleConfiguration**。

1. 对于**资源**，选择**特定**。

1. 对于**操作**，选择**权限管理**旁边的箭头图标。

1. 选择 **PutResourcePolicy**。

1. 对于**资源**，选择**特定**。

1. 选中**此账户中的任何资源**旁边的复选框。

1. 选择**查看策略**。

1. 对于**名称**，指定一个名称。

1. 选择**创建策略**。

## 从 Amazon Redshift 导入数据
<a name="data-wrangler-import-redshift"></a>

Amazon Redshift 是云中一种完全托管的 PB 级数据仓库服务。创建数据仓库的第一步是启动一组节点（称为 Amazon Redshift 集群）。预置集群后，您可以上传数据集，然后执行数据分析查询。

可以在 Data Wrangler 中连接并查询一个或多个 Amazon Redshift 集群。要使用此导入选项，必须在 Amazon Redshift 中至少创建一个集群。要了解操作方法，请参阅 [Amazon Redshift 入门](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)。

可以将 Amazon Redshift 查询结果输出到以下位置之一：
+ Amazon S3 存储桶
+ 指定的 Amazon S3 输出位置

可以导入整个数据集，或者对其中一部分进行采样。对于 Amazon Redshift，它提供了以下采样选项：
+ 无 – 导入整个数据集。
+ 前 K 行 – 对数据集的前 K 行进行采样，其中 K 是您指定的整数。
+ 随机化 – 随机提取指定大小的样本。
+ 分层 – 随机提取分层样本。分层样本保持列中的值比例。

默认 Amazon S3 存储桶位于您的 Studio Classift 实例所在的同一 AWS 区域，用于存储 Amazon Redshift 查询结果。有关更多信息，请参阅 [导入的数据存储](#data-wrangler-import-storage)。

对于默认 Amazon S3 存储桶或您指定的存储桶，都可以使用以下加密选项：
+ 使用 Amazon S3 托管密钥进行默认 AWS 服务端加密 (SSE-S3)
+  您指定的 AWS Key Management Service (AWS KMS) 密钥

 AWS KMS 密钥是您创建和管理的加密密钥。有关 KMS 密钥的更多信息，请参阅 [AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)。

您可以使用账户的 AWS KMS 密钥 ARN 或 ARN 来指定密钥。 AWS 

如果您使用 IAM 托管式策略 `AmazonSageMakerFullAccess` 授予角色在 Studio Classic 中使用 Data Wrangler 的权限，则**数据库用户**名称的前缀必须是 `sagemaker_access`。

通过以下过程，了解如何添加新集群。

**注意**  
Data Wrangler 通过临时凭证来使用 Amazon Redshift Data API。要了解有关此 API 的更多信息，请参阅《Amazon Redshift 管理指南》中的[使用 Amazon Redshift Data API](https://docs.aws.amazon.com//redshift/latest/mgmt/data-api.html)。

**连接到 Amazon Redshift 集群**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Amazon Athena**。

1. 选择 **Amazon Redshift**。

1. 为**类型**选择**临时凭证 (IAM)**。

1. 输入**连接名称**。这是 Data Wrangler 用来标识该连接的名称。

1. 输入**集群标识符**以指定要连接的集群。注意：仅输入集群标识符，而不要输入 Amazon Redshift 集群的完整端点。

1. 输入要连接到的数据库的**数据库名称**。

1. 输入**数据库用户**以标识要用于连接数据库的用户。

1. 对于 **UNLOAD IAM 角色**，输入 Amazon Redshift 集群在向 Amazon S3 移动和写入数据时应代入的角色的 IAM 角色 ARN。有关此角色的更多信息，请参阅《[亚马逊 Redshift 管理指南》中的授权亚马逊 Redshift 代表您访问 AWS 其他服务](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)。

1. 选择**连接**。

1. （可选）对于 **Amazon S3 输出位置**，指定用于存储查询结果的 S3 URI。

1. （可选）对于 **KMS 密钥 ID**，指定 AWS KMS 密钥的 ARN 或别名。下图显示了在 AWS 管理控制台中可以找到任一密钥的位置。  
![\[AWS KMS 别名 ARN、别名和密钥 ARN 在控制台中的位置。 AWS KMS\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/kms-alias-redacted.png)

下图显示了前述过程中的所有字段。

![\[添加 Amazon Redshift 连接面板。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/redshift-connection.png)


成功建立连接后，它将作为数据来源显示在**数据导入**下。选择此数据来源可以查询您的数据库并导入数据。

**从 Amazon Redshift 查询和导入数据**

1. 从**数据来源**中选择要查询的连接。

1. 选择**架构**。要了解有关 Amazon Redshift 架构的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》中的[架构](https://docs.aws.amazon.com/redshift/latest/dg/r_Schemas_and_tables.html)。

1. （可选）在**高级配置**下，指定要使用的**采样**方法。

1. 在查询编辑器中输入您的查询，然后选择**运行**以运行查询。查询成功后，可以在编辑器下预览您的结果。

1. 选择**导入数据集**以导入已查询的数据集。

1. 输入**数据集名称**。如果您添加的**数据集名称**中包含空格，则在导入您的数据集时，这些空格将替换为下划线。

1. 选择**添加**。

要编辑数据集，请执行以下操作。

1. 导航到您的 Data Wrangler 流。

1. 选择**来源 – 采样**旁边的 \$1 号。

1. 更改要导入的数据。

1. 选择**应用**

## 从 Amazon EMR 导入数据
<a name="data-wrangler-emr"></a>

您可以使用 Amazon EMR 作为您的 Amazon Data Wrangler 流程 SageMaker 的数据源。Amazon EMR 是一个托管式集群平台，可用来处理和分析大量数据。有关 Amazon EMR 的更多信息，请参阅[什么是 Amazon EMR？](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)。要从 EMR 导入数据集，您需要连接到该数据集并进行查询。

**重要**  
必须满足以下先决条件，才能连接 Amazon EMR 集群：  
您在该地区有一个亚马逊 VPC，用于启动 Amazon SageMaker Studio Classic 和亚马逊 EMR。
亚马逊 EMR 和 Amazon SageMaker Studio Classic 都必须在私有子网中启动。它们可位于相同的子网中，也可以位于不同的子网中。
Amazon SageMaker Studio Classic 必须处于仅限 VPC 的模式。  
有关创建 VPC 的更多信息，请参阅[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)。  
有关创建 VPC 的更多信息，请参阅[将 VPC 中的 SageMaker Studio 经典笔记本电脑连接到外部资源](https://docs.aws.amazon.com/vpc/latest/userguide/studio-notebooks-and-internet-access.html)。
您正在运行的 Amazon EMR 集群必须位于相同的 Amazon VPC 中。
亚马逊 EMR 集群和亚马逊 VPC 必须位于同一个 AWS 账户中。
您的 Amazon EMR 集群正在运行 Hive 或 Presto。  
Hive 集群必须允许来自 Studio Classic 安全组 10000 端口的入站流量。
Presto 集群必须允许来自 Studio Classic 安全组 8889 端口的入站流量。  
使用 IAM 角色的 Amazon EMR 集群的端口号有所不同。有关更多信息，请导航到先决条件部分的结尾。
亚马逊 SageMaker Studio Classic 必须运行 Jupyter Lab 版本 3。有关更新 Jupyter Lab 版本的信息，请参阅 [从控制台查看和更新应用程序的 JupyterLab 版本](studio-jl.md#studio-jl-view)。
Amazon SageMaker Studio Classic 有一个控制用户访问权限的 IAM 角色。你用于运行 Amazon SageMaker Studio Classic 的默认 IAM 角色没有允许你访问亚马逊 EMR 集群的策略。您必须附加向 IAM 角色授予权限的策略。有关更多信息，请参阅 [配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)。
IAM 角色还必须附加有以下策略：`secretsmanager:PutResourcePolicy`。
如果您使用的是已创建的 Studio Classic 域，请确保其 `AppNetworkAccessType` 处于 VPC 专属模式。有关将域更新为使用仅 VPC 模式的信息，请参阅 [关闭并更新 Amazon SageMaker Studio 经典版](studio-tasks-update-studio.md)。
您的集群上必须已安装 Hive 或 Presto。
Amazon EMR 版本必须为 5.5.0 或更高版本。  
Amazon EMR 支持自动终止。自动终止功能会阻止空闲集群运行，可防止产生成本。下面是支持自动终止功能的版本：  
对于 6.x 发行版，版本 6.1.0 或更高版本。
对于 5.x 发行版，版本 5.30.0 或更高版本。
使用以下页面可以为 Amazon EMR 集群设置 IAM 运行时角色。在使用运行时角色时，必须启用传输中加密功能：  
[使用运行时角色启动 Amazon EMR 集群的先决条件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html#emr-steps-runtime-roles-configure)
[通过基于角色的访问控制启动 Amazon EMR 集群](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html#emr-steps-runtime-roles-launch)
您必须将 Lake Formation 用作监管数据库中数据的工具。您还必须使用外部数据筛选功能进行访问控制。  
有关 Lake Formation 的更多信息，请参阅[什么是 AWS Lake Formation？](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)
有关将 Lake Formation 集成到 Amazon EMR 中的更多信息，请参阅[将第三方服务与 Lake Formation 集成](https://docs.aws.amazon.com/lake-formation/latest/dg/Integrating-with-LakeFormation.html)。
集群的版本必须是 6.9.0 或更高版本。
访问权限 AWS Secrets Manager。有关 Secrets Manager 的更多信息，请参阅[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
Hive 集群必须允许来自 Studio Classic 安全组 10000 端口的入站流量。

Amazon VPC 是一种在逻辑上与 AWS 云上其他网络隔离的虚拟网络。Amazon SageMaker Studio Classic 和您的亚马逊 EMR 集群仅存在于亚马逊 VPC 中。

使用以下步骤在亚马逊 VPC 中启动 Amazon SageMaker Studio Classic。

要在 VPC 中启动 Studio Classic，请执行以下操作。

1. 导航到 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 选择**启动 SageMaker 工作室经典版**。

1. 选择**标准设置**。

1. 在**默认执行角色**中，选择要设置 Studio Classic 的 IAM 角色。

1. 选择您启动 Amazon EMR 集群的 VPC。

1. 对于**子网**，选择私有子网。

1. 对于**安全组**，指定用于在您的 VPC 之间进行控制的安全组。

1. 选择**仅 VPC**。

1. （可选） AWS 使用默认加密密钥。您还可以指定另一个 AWS Key Management Service 密钥来加密数据。

1. 选择**下一步**。

1. 在 **Studio 设置**下，选择最适合您的配置。

1. 选择 “**下一步**” 可跳过 “ SageMaker 画布” 设置。

1. 选择 “**下一步**” 跳过 RStudio 设置。

如果您还没有准备好 Amazon EMR 集群，可以使用以下步骤创建一个。有关 Amazon EMR 的更多信息，请参阅[什么是 Amazon EMR？](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html)

要创建集群，请执行以下操作。

1. 导航到 AWS 管理控制台。

1. 在搜索栏中指定 **Amazon EMR**。

1. 选择**创建集群**。

1. 对于**集群名称**，指定您的集群名称。

1. 对于**版本**，选择集群的发布版本。
**注意**  
Amazon EMR 支持以下版本的自动终止功能：  
对于 6.x 发行版，版本 6.1.0 或更高版本
对于 5.x 发行版，版本 5.30.0 或更高版本
自动终止功能会阻止空闲集群运行，可防止产生成本。

1. （可选）对于**应用程序**，选择 **Presto**。

1. 选择您在集群上运行的应用程序。

1. 在**联网**下，对于**硬件配置**，指定硬件配置设置。
**重要**  
对于**网络**，请选择运行 Amazon SageMaker Studio Classic 的 VPC 并选择私有子网。

1. 在**安全和访问权限**下，指定安全设置。

1. 选择**创建**。

有关创建 Amazon EMR 集群的教程，请参阅 [Amazon EMR 入门](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。有关配置集群的最佳实践的信息，请参阅[注意事项和最佳实践](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha-considerations.html)。

**注意**  
出于安全最佳实践，Data Wrangler 只能通过私有子网 VPCs 进行连接。除非您用 AWS Systems Manager 于 Amazon EMR 实例，否则您无法连接到主节点。有关更多信息，请参阅[使用 AWS Systems Manager保护对 EMR 集群的访问](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)。

目前，您可以使用以下方法来访问 Amazon EMR 集群：
+ 不使用身份验证
+ 轻型目录访问协议 (LDAP)
+ IAM（运行时角色）

如果不使用身份验证或使用 LDAP，可能会要求您创建多个集群和 Amazon EC2 实例配置文件。如果您是管理员，则可能需要为用户组提供不同级别的数据访问权限。这些方法可能会导致管理开销，从而使管理您的用户变得更加困难。

我们建议使用一个 IAM 运行时角色向多个用户授予连接到同一 Amazon EMR 集群的能力。运行时角色是一个 IAM 角色，您可以将该角色分配给连接到 Amazon EMR 集群的用户。可以将运行时 IAM 角色配置为具有特定于每个用户组的权限。

使用以下部分创建已激活 LDAP 的 Presto 或 Hive Amazon EMR 集群。

------
#### [ Presto ]

**重要**  
要用 AWS Glue 作 Presto 表的元数据库，请选择**用**于 **Presto 表元数据**，以便在启动 EMR 集群时将 Amazon EMR 查询结果存储在 AWS Glue 数据目录中。将查询结果存储在 AWS Glue 数据目录中可以避免产生费用。  
要查询 Amazon EMR 集群上的大型数据集，必须在 Amazon EMR 集群上的 Presto 配置文件中添加以下属性：  

```
[{"classification":"presto-config","properties":{
"http-server.max-request-header-size":"5MB",
"http-server.max-response-header-size":"5MB"}}]
```
您还可以在启动 Amazon EMR 集群时修改配置设置。  
您的 Amazon EMR 集群的配置文件位于以下路径下方：`/etc/presto/conf/config.properties`。

可以通过以下步骤，创建已激活 LDAP 的 Presto 集群。

要创建集群，请执行以下操作。

1. 导航到 AWS 管理控制台。

1. 在搜索栏中指定 **Amazon EMR**。

1. 选择**创建集群**。

1. 对于**集群名称**，指定您的集群名称。

1. 对于**版本**，选择集群的发布版本。
**注意**  
Amazon EMR 支持以下版本的自动终止功能：  
对于 6.x 发行版，版本 6.1.0 或更高版本
对于 5.x 发行版，版本 5.30.0 或更高版本
自动终止功能会阻止空闲集群运行，可防止产生成本。

1. 选择您在集群上运行的应用程序。

1. 在**联网**下，对于**硬件配置**，指定硬件配置设置。
**重要**  
对于**网络**，请选择运行 Amazon SageMaker Studio Classic 的 VPC 并选择私有子网。

1. 在**安全和访问权限**下，指定安全设置。

1. 选择**创建**。

------
#### [ Hive ]

**重要**  
要用 AWS Glue 作 Hive 表的元数据库，请选择**用**于 **Hive 表元数据**，以便在启动 EMR 集群时将 Amazon EMR 查询结果存储在 AWS Glue 数据目录中。将查询结果存储在 AWS Glue 数据目录中可以避免产生费用。  
为了能够查询 Amazon EMR 集群上的大型数据集，请在 Amazon EMR 集群上的 Hive 配置文件中添加以下属性：  

```
[{"classification":"hive-site", "properties"
:{"hive.resultset.use.unique.column.names":"false"}}]
```
您还可以在启动 Amazon EMR 集群时修改配置设置。  
您的 Amazon EMR 集群的配置文件位于以下路径下方：`/etc/hive/conf/hive-site.xml`。可以指定以下属性并重新启动集群：  

```
<property>
    <name>hive.resultset.use.unique.column.names</name>
    <value>false</value>
</property>
```

可以通过以下步骤，创建已激活 LDAP 的 Hive 集群。

要创建已激活 LDAP 的 Hive 集群，请执行以下操作。

1. 导航到 AWS 管理控制台。

1. 在搜索栏中指定 **Amazon EMR**。

1. 选择**创建集群**。

1. 选择**转到高级选项**。

1. 在**版本**中，选择 Amazon EMR 发布版本。

1. 默认情况下会选择 **Hive** 配置选项。确保 **Hive** 选项旁边有一个复选框。

1. （可选）您还可以选择 **Presto** 作为配置选项，以便在集群上同时激活 Hive 和 Presto。

1. （可选）选择 “**用于 Hive 表元数据**”，将您的 Amazon EMR 查询结果存储在数据目录中 AWS Glue 。将查询结果存储在 AWS Glue 目录中可以避免产生费用。有关更多信息，请参阅[使用 AWS Glue 数据目录作为 Hive 的元数据库](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html)。
**注意**  
要将查询结果存储到数据目录中，需要使用 Amazon EMR 版本 5.8.0 或更高版本。

1. 在**输入配置**下，指定以下 JSON：

   ```
   [
     {
       "classification": "hive-site",
       "properties": {
         "hive.server2.authentication.ldap.baseDN": "dc=example,dc=org",
         "hive.server2.authentication": "LDAP",
         "hive.server2.authentication.ldap.url": "ldap://ldap-server-dns-name:389"
       }
     }
   ]
   ```
**注意**  
作为安全最佳实践，我们建议 HiveServer 通过在前面的 Hive-site JSON 中添加一些属性来启用 SSL。有关更多信息，请参阅[在 HiveServer 2 上启用 SSL](https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.0.1/configuring-wire-encryption/content/enable_ssl_on_hiveserver2.html)。

1. 指定其余的集群设置并创建集群。

------

按照以下部分，对您已创建的 Amazon EMR 集群使用 LDAP 身份验证。

------
#### [ LDAP for Presto ]

在运行 Presto 的集群上使用 LDAP 时，需要通过 HTTPS 访问 Presto 协调器。执行以下操作，以提供访问权限：
+ 激活端口 636 上的访问权限
+ 为 Presto 协调器启用 SSL

使用以下模板配置 Presto：

```
- Classification: presto-config
     ConfigurationProperties:
        http-server.authentication.type: 'PASSWORD'
        http-server.https.enabled: 'true'
        http-server.https.port: '8889'
        http-server.http.port: '8899'
        node-scheduler.include-coordinator: 'true'
        http-server.https.keystore.path: '/path/to/keystore/path/for/presto'
        http-server.https.keystore.key: 'keystore-key-password'
        discovery.uri: 'http://master-node-dns-name:8899'
- Classification: presto-password-authenticator
     ConfigurationProperties:
        password-authenticator.name: 'ldap'
        ldap.url: !Sub 'ldaps://ldap-server-dns-name:636'
        ldap.user-bind-pattern: "uid=${USER},dc=example,dc=org"
        internal-communication.authentication.ldap.user: "ldap-user-name"
        internal-communication.authentication.ldap.password: "ldap-password"
```

有关在 Presto 中设置 LDAP 的信息，请参阅以下资源：
+ [LDAP 身份验证](https://prestodb.io/docs/current/security/ldap.html)
+ [为 Presto on Amazon EMR 使用 LDAP 身份验证](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-ldap.html)

**注意**  
建议为 Presto 启用 SSL，这是最佳安全实践。有关更多信息，请参阅[安全内部通信](https://prestodb.io/docs/current/security/internal-communication.html)。

------
#### [ LDAP for Hive ]

要对您已创建的集群使用 LDAP for Hive，请使用以下过程：[在控制台中重新配置实例组](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html#emr-configure-apps-running-cluster-considerations)。

您正在指定要连接的集群的名称。

```
[
  {
    "classification": "hive-site",
    "properties": {
      "hive.server2.authentication.ldap.baseDN": "dc=example,dc=org",
      "hive.server2.authentication": "LDAP",
      "hive.server2.authentication.ldap.url": "ldap://ldap-server-dns-name:389"
    }
  }
]
```

------

可以通过以下步骤，从集群导入数据。

要从集群导入数据，请执行以下操作。

1. 打开 Data Wrangler 流。

1. 选择**创建连接**。

1. 选择 **Amazon EMR**。

1. 请执行以下操作之一。
   + （可选）对于**密钥 ARN**，指定集群内数据库的 Amazon 资源编号 (ARN)。密钥可提供额外的安全措施。有关密钥的更多信息，请参阅[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 有关为集群创建密钥的信息，请参阅 [为您的集群创建 AWS Secrets Manager 密钥](#data-wrangler-emr-secrets-manager)。
**重要**  
如果使用 IAM 运行时角色进行身份验证，则必须指定密钥。
   + 从下拉列表中，选择一个集群。

1. 选择**下一步**。

1. **在 “为*example-cluster-name*集群选择终端节点**” 中，选择查询引擎。

1. （可选）选择**保存连接**。

1. 选择**下一步，选择登录**，然后选择以下项之一：
   + 不使用身份验证
   + LDAP
   + IAM

1. 对于**登录*example-cluster-name*集群**，请指定群集的**用户名**和**密码**。

1. 选择**连接**。

1. 在查询编辑器中，指定 SQL 查询。

1. 选择**运行**。

1. 选择**导入**。

### 为您的集群创建 AWS Secrets Manager 密钥
<a name="data-wrangler-emr-secrets-manager"></a>

如果使用 IAM 运行时角色访问您的 Amazon EMR 集群，则必须将用于访问 Amazon EMR 的凭证存储为 Secrets Manager 密钥。您将用于访问集群的所有凭证都存储在密钥中。

必须在密钥中存储以下信息：
+ JDBC 端点 – `jdbc:hive2://`
+ DNS 名称 – Amazon EMR 集群的 DNS 名称。这要么是主节点的端点，要么是主机名。
+ 端口 – `8446`

您还可以在密钥中存储以下附加信息：
+ IAM 角色 – 用于访问集群的 IAM 角色。默认情况下，Data Wrangler 使用你的 SageMaker AI 执行角色。
+ 信任库路径 – 默认情况下，Data Wrangler 会为您创建信任库路径。您还可以使用自己的信任库路径。有关信任库路径的更多信息，请参阅 2 中的[传输中加密。 HiveServer](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/hs2-encryption-intransit.html)
+ 信任库密码 – 默认情况下，Data Wrangler 会为您创建信任库密码。您还可以使用自己的信任库路径。有关信任库路径的更多信息，请参阅 2 中的[传输中加密。 HiveServer](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/hs2-encryption-intransit.html)

通过以下步骤将凭证存储在 Secrets Manager 密钥中。

要将您的凭证存储为密钥，请执行以下操作。

1. 导航到 AWS 管理控制台。

1. 在搜索栏中，指定 Secrets Manager。

1. 选择 **AWS Secrets Manager**。

1. 选择**存储新密钥**。

1. 对于**密钥类型**，请选择**其他密钥类型**。

1. 在**键/值**对下，选择**纯文本**。

1. 对于运行 Hive 的集群，可以使用以下模板进行 IAM 身份验证。

   ```
   {"jdbcURL": ""
    "iam_auth": {"endpoint": "jdbc:hive2://", #required
                   "dns": "ip-xx-x-xxx-xxx.ec2.internal", #required 
                   "port": "10000", #required
                 "cluster_id": "j-xxxxxxxxx", #required
                 "iam_role": "arn:aws:iam::xxxxxxxx:role/xxxxxxxxxxxx", #optional
                 "truststore_path": "/etc/alternatives/jre/lib/security/cacerts", #optional
                 "truststore_password": "changeit" #optional
                 
                 }}
   ```
**注意**  
导入数据后，可以对数据进行转换。然后，将转换后的数据导出到特定位置。如果您使用 Jupyter 笔记本将转换后的数据导出到 Amazon S3，则必须使用上述示例中指定的信任库路径。

Secrets Manager 密钥将 Amazon EMR 集群的 JDBC URL 存储为密钥。相比直接输入凭证，使用密钥更加安全。

通过以下步骤，将 JDBC URL 存储为密钥。

要将 JDBC URL 存储为密钥，请执行以下操作。

1. 导航到 AWS 管理控制台。

1. 在搜索栏中，指定 Secrets Manager。

1. 选择 **AWS Secrets Manager**。

1. 选择**存储新密钥**。

1. 对于**密钥类型**，请选择**其他密钥类型**。

1. 对于**键/值对**，将 `jdbcURL` 指定为键，并指定有效的 JDBC URL 作为值。

   有效 JDBC URL 的格式取决于您是否使用身份验证，以及是使用 Hive 还是 Presto 作为查询引擎。下面的列表显示了适用于可能的不同配置的有效 JBDC URL 格式。
   + Hive，不进行身份验证 – `jdbc:hive2://emr-cluster-master-public-dns:10000/;`
   + Hive，使用 LDAP 身份验证 – `jdbc:hive2://emr-cluster-master-public-dns-name:10000/;AuthMech=3;UID=david;PWD=welcome123;`
   + 对于已启用 SSL 的 Hive，JDBC URL 格式取决于您是否使用 Java 密钥库文件进行 TLS 配置。Java 密钥库文件有助于验证 Amazon EMR 集群的主节点身份。要使用 Java 密钥库文件，请在 EMR 集群上生成该文件并上传到 Data Wrangler。要生成文件，请在 Amazon EMR 集群 `keytool -genkey -alias hive -keyalg RSA -keysize 1024 -keystore hive.jks` 上使用以下命令。有关在 Amazon EMR 集群上运行命令的信息，请参阅[使用 AWS Systems Manager保护对 EMR 集群的访问](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)。要上传文件，请选择 Data Wrangler UI 左侧导航栏上的向上箭头。

     下面是已启用 SSL 的 Hive 的有效 JDBC URL 格式：
     + 没有 Java 密钥库文件 – `jdbc:hive2://emr-cluster-master-public-dns:10000/;AuthMech=3;UID=user-name;PWD=password;SSL=1;AllowSelfSignedCerts=1;`
     + 带有 Java 密钥库文件 – `jdbc:hive2://emr-cluster-master-public-dns:10000/;AuthMech=3;UID=user-name;PWD=password;SSL=1;SSLKeyStore=/home/sagemaker-user/data/Java-keystore-file-name;SSLKeyStorePwd=Java-keystore-file-passsword;`
   + Presto，没有身份验证 — jdbc: presto: //: 8889/; *emr-cluster-master-public-dns* 
   + 对于已启用 LDAP 身份验证和 SSL 的 Presto，JDBC URL 格式取决于您是否使用 Java 密钥库文件进行 TLS 配置。Java 密钥库文件有助于验证 Amazon EMR 集群的主节点身份。要使用 Java 密钥库文件，请在 EMR 集群上生成该文件并上传到 Data Wrangler。要上传文件，请选择 Data Wrangler UI 左侧导航栏上的向上箭头。有关为 Presto 创建 Java 密钥库文件的信息，请参阅[适用于 TLS 的 Java 密钥库文件](https://prestodb.io/docs/current/security/tls.html#server-java-keystore)。有关在 Amazon EMR 集群上运行命令的信息，请参阅[使用 AWS Systems Manager保护对 EMR 集群的访问](https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/)。
     + 没有 Java 密钥库文件 – `jdbc:presto://emr-cluster-master-public-dns:8889/;SSL=1;AuthenticationType=LDAP Authentication;UID=user-name;PWD=password;AllowSelfSignedServerCert=1;AllowHostNameCNMismatch=1;`
     + 带有 Java 密钥库文件 – `jdbc:presto://emr-cluster-master-public-dns:8889/;SSL=1;AuthenticationType=LDAP Authentication;SSLTrustStorePath=/home/sagemaker-user/data/Java-keystore-file-name;SSLTrustStorePwd=Java-keystore-file-passsword;UID=user-name;PWD=password;`

在从 Amazon EMR 集群导入数据的整个过程中，可能会遇到问题。有关排查故障的信息，请参阅 [排除 Amazon EMR 中的问题](data-wrangler-trouble-shooting.md#data-wrangler-trouble-shooting-emr)。

## 从 Databricks (JDBC) 导入数据
<a name="data-wrangler-databricks"></a>

您可以使用 Databricks 作为 Amazon Data Wrangler 流程 SageMaker 的数据源。要从 Databricks 导入数据集，请使用 JDBC（Java 数据库连接）导入功能访问 Databricks 数据库。访问数据库后，指定 SQL 查询，以获取数据并导入。

我们假设您有一个正在运行的 Databricks 集群，并且您已为该集群配置了 JDBC 驱动程序。有关更多信息，请参阅以下 Databricks 文档页面：
+ [JDBC 驱动程序](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-driver)
+ [JDBC 配置和连接参数](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-configuration-and-connection-parameters)
+ [身份验证参数](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#authentication-parameters)

Data Wrangler 会将你的 JDBC 网址存储在中。 AWS Secrets Manager您必须授予您的 Amazon SageMaker Studio Classic IAM 执行角色权限才能使用 Secrets Manager。可以通过以下步骤授予权限。

要向 Secrets Manager 授予权限，请执行以下操作。

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择**角色**。

1. 在搜索栏中，指定 Amazon SageMaker Studio Classic 正在使用的亚马逊 A SageMaker I 执行角色。

1. 选择角色 。

1. 选择**添加权限**。

1. 选择**创建内联策略**。

1. 对于**服务**，指定 **Secrets Manager** 并选择该项。

1. 对于**操作**，选择**权限管理**旁边的箭头图标。

1. 选择 **PutResourcePolicy**。

1. 对于**资源**，选择**特定**。

1. 选中**此账户中的任何资源**旁边的复选框。

1. 选择**查看策略**。

1. 对于**名称**，指定一个名称。

1. 选择**创建策略**。

可以使用分区更快地导入您的数据。利用分区，Data Wrangler 能够并行处理数据。默认情况下，Data Wrangler 使用 2 个分区。对于大多数使用案例而言，2 个分区能够为您提供近乎最佳的数据处理速度。

如果选择指定 2 个以上的分区，还可以指定一列来对数据进行分区。列中值的类型必须是数字或日期。

我们建议只有在您了解数据的结构及其处理方式的情况下，才使用分区。

可以导入整个数据集，或者对其中一部分进行采样。对于 Databricks 数据库，提供了以下采样选项：
+ 无 – 导入整个数据集。
+ 前 K 行 – 对数据集的前 K 行进行采样，其中 K 是您指定的整数。
+ 随机化 – 随机提取指定大小的样本。
+ 分层 – 随机提取分层样本。分层样本保持列中的值比例。

可以通过以下步骤，从 Databricks 数据库导入数据。

要从 Databricks 导入数据，请执行以下操作。

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 从 Data Wrangler 流的**导入数据**选项卡中，选择 **Databricks**。

1. 指定以下字段：
   + **数据集名称** – 要在 Data Wrangler 流中用于数据集的名称。
   + **驱动程序** – **com.simba.spark.jdbc.Driver**。
   + **JDBC URL** – Databricks 数据库的 URL。不同 Databricks 实例的 URL 格式可能有所不同。有关查找 URL 以及在其中指定参数的信息，请参阅 [JDBC 配置和连接参数](https://docs.databricks.com/integrations/bi/jdbc-odbc-bi.html#jdbc-configuration-and-connection-parameters)。以下是如何格式化网址的示例：jdbc: spark: //.c aws-sagemaker-datawrangler loud.databricks.com: 443/default；transportMode=http；ssl=1；httpPath= /3122619508517275/0909-200301-cut318；=3；UID=；PWD=。sql/protocolv1/o AuthMech *token* *personal-access-token*
**注意**  
可以指定包含 JDBC URL 的密钥 ARN，而不是指定 JDBC URL 本身。密钥必须包含以下格式的键/值对：`jdbcURL:JDBC-URL`。有关更多信息，请参阅[什么是 Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

1. 指定 SQL SELECT 语句。
**注意**  
Data Wrangler 不支持查询中的公用表表达式 (CTE) 或临时表。

1. 对于**采样**，选择一种采样方法。

1. 选择**运行**。

1. （可选）对于**预览**，选择齿轮以打开**分区设置**。

   1. 指定分区的数量。如果指定分区数，可以按列进行分区：
     + **输入分区数** – 指定一个大于 2 的值。
     + （可选）**按列分区** – 指定以下字段。只有在**输入分区数**中指定值后，才能按列进行分区。
       + **选择列** – 选择要用于数据分区的列。列的数据类型必须为数字或日期。
       + **上限** – 根据您指定的列中的值，上限是正在分区中使用的值。指定的值不会更改正在导入的数据。只会影响导入的速度。为了获得最佳性能，请指定接近列最大值的上限。
       + **下限** – 根据您指定的列中的值，下限是正在分区中使用的值。指定的值不会更改正在导入的数据。只会影响导入的速度。为了获得最佳性能，请指定接近列最小值的下限。

1. 选择**导入**。

## 从 Salesforce Data Cloud 导入数据
<a name="data-wrangler-import-salesforce-data-cloud"></a>

您可以使用 Salesforce 数据云作为 Amazon Data Wrangler 中的 SageMaker 数据源，为机器学习准备 Salesforce 数据云中的数据。

使用 Salesforce Data Cloud 作为 Data Wrangler 中的数据来源，您不需要编写一行代码，即可快速连接到 Salesforce 数据。在 Data Wrangler 中，可以将您的 Salesforce 数据与来自任何其他数据来源的数据联接起来。

连接到数据云后，可以执行以下操作：
+ 使用内置的可视化效果可视化您的数据
+ 了解数据并标识潜在的错误和极端值
+ 使用 300 多种内置转换功能转换数据
+ 导出转换后的数据

**Topics**
+ [管理员设置](#data-wrangler-import-salesforce-data-cloud-administrator)
+ [《数据科学家指南》](#data-wrangler-salesforce-data-cloud-ds)

### 管理员设置
<a name="data-wrangler-import-salesforce-data-cloud-administrator"></a>

**重要**  
在开始之前，请确保您的用户运行的是 Amazon SageMaker Studio Classic 版本 1.3.0 或更高版本。有关检查 Studio Classic 版本和更新的信息，请参阅 [使用 Amazon Data Wrangler 准备机器学习 SageMaker 数据](data-wrangler.md)。

设置对 Salesforce Data Cloud 的访问权限时，您必须完成以下任务：
+ 获取您的 Salesforce 域 URL。Salesforce 也将域 URL 称为您的组织的 URL。
+ 从 Salesforce 获取 OAuth 证书。
+ 获取您的 Salesforce 域的授权 URL 和令牌 URL。
+ 使用 OAuth 配置创建 AWS Secrets Manager 密钥。
+ 创建 Data Wrangler 用来从密钥中读取凭证的生命周期配置。
+ 向 Data Wrangler 授予读取密钥的权限。

执行上述任务后，您的用户可以使用登录到 Salesforce 数据云。 OAuth

**注意**  
在完成所有设置后，您的用户可能会遇到问题。有关排查故障的信息，请参阅 [Salesforce 故障排除](data-wrangler-trouble-shooting.md#data-wrangler-troubleshooting-salesforce-data-cloud)。

可以通过以下步骤获取域 URL。

1. 导航到 [Salesforce](login.salesforce.com) 登录页面。

1. 对于**快速查找**，指定**我的域**。

1. 将**当前我的域 URL** 的值复制到文本文件中。

1. 将 `https://` 添加到 URL 的开头。

获取 Salesforce 域 URL 后，可以通过以下过程，从 Salesforce 获取登录凭证，并允许 Data Wrangler 访问您的 Salesforce 数据。

要从 Salesforce 获取登录凭证并提供对 Data Wrangler 的访问权限，请执行以下操作。

1. 导航到您的 Salesforce 域 URL 并登录到您的账户。

1. 选择齿轮图标。

1. 在显示的搜索栏中，指定**应用程序管理器**。

1. 选择**新建连接的应用程序**。

1. 指定以下字段：
   + 连接的应用程序名称 – 您可以指定任何名称，但我们建议选择包含 Data Wrangler 的名称。例如，可以指定 **Salesforce Data Cloud Data Wrangler Integration**。
   + API 名称 – 使用默认值。
   + 联系人电子邮件 – 指定电子邮件地址。
   + 在 **API 标题（启用 OAuth 设置）**下，选中复选框以激活 OAuth 设置。
   + 对于**回调网址**，请指定亚马逊 SageMaker Studio 经典版网址。要获取 Studio Classic 的网址，请从访问 AWS 管理控制台 并复制网址。

1. 在 “**选定 OAuth 范围”** 下，将以下内容从 “**可用 OAuth 范围**” 移至 “**选定 OAuth范围”**：
   + 通过 APIs (`api`) 管理用户数据
   + 随时执行请求 (`refresh_token`, `offline_access`)
   + 对 Salesforce Data Cloud 数据执行 ANSI SQL 查询 (`cdp_query_api`)
   + 管理 Salesforce 客户数据平台配置文件数据 (`cdp_profile_api`)

1. 选择**保存**。保存更改后，Salesforce 会打开一个新页面。

1. 选择**继续**。

1. 导航到**使用者密钥和私有密钥**。

1. 选择**管理使用者详细信息**。Salesforce 会将您重定向到一个新页面，其中您可能需要通过双因素身份验证。

1. 
**重要**  
将使用者密钥和私有密钥复制到文本编辑器中。您需要该信息，才能将数据云连接到 Data Wrangler。

1. 导航回**管理连接的应用程序**。

1. 导航到**连接的应用程序名称**和您的应用程序名称。

1. 选择**管理**。

   1. 选择**编辑策略**。

   1. 将 **IP 放宽**更改为**放宽 IP 限制**。

   1. 选择**保存**。

在提供对 Salesforce Data Cloud 的访问权限后，您需要为用户提供权限。可以通过以下步骤为他们提供权限。

要为您的用户提供权限，请执行以下操作。

1. 导航到设置主页。

1. 在左侧导航栏中，搜索**用户**，然后选择**用户**菜单项。

1. 选择包含您的用户名的超链接。

1. 导航到**权限集分配**。

1. 选择**编辑分配**。

1. 添加以下权限：
   + **客户数据平台管理员**
   + **客户数据平台数据感知专家**

1. 选择**保存**。

获取 Salesforce 域名的信息后，必须获取正在创建的 AWS Secrets Manager 密钥的授权网址和令牌网址。

可以通过以下步骤获取授权 URL 和令牌 URL。

**获取授权 URL 和令牌 URL**

1. 导航到您的 Salesforce 域 URL。

1. 使用以下方法之一获取 URLs. 如果您使用的是安装有 `curl` 和 `jq` 的 Linux 发行版，我们建议您使用仅适用于 Linux 的方法。
   + （仅限 Linux）在终端中指定以下命令。

     ```
     curl salesforce-domain-URL/.well-known/openid-configuration | \
     jq '. | { authorization_url: .authorization_endpoint, token_url: .token_endpoint }' | \
     jq '.  += { identity_provider: "SALESFORCE", client_id: "example-client-id", client_secret: "example-client-secret" }'
     ```
   + 

     1. 在您的浏览器中导航到 **example-org-URL*/.well-known/openid-configuration*。

     1. 将 `authorization_endpoint` 和 `token_endpoint` 复制到文本编辑器中。

     1. 创建以下 JSON 对象：

        ```
        {
          "identity_provider": "SALESFORCE",
          "authorization_url": "example-authorization-endpoint", 
          "token_url": "example-token-endpoint",
          "client_id": "example-consumer-key",
          "client_secret": "example-consumer-secret"
        }
        ```

创建 OAuth 配置对象后，您可以创建一个存储该对象的 AWS Secrets Manager 密钥。通过以下过程创建密钥。

要创建密钥，请执行以下操作。

1. 导航至 [AWS Secrets Manager 控制台](https://console.aws.amazon.com/secretsmanager/)。

1. 选择**存储密钥**。

1. 选择**其他密钥类型**。

1. 在**键/值**对下，选择**纯文本**。

1. 将空的 JSON 替换为以下配置设置。

   ```
   {
     "identity_provider": "SALESFORCE",
     "authorization_url": "example-authorization-endpoint", 
     "token_url": "example-token-endpoint",
     "client_id": "example-consumer-key",
     "client_secret": "example-consumer-secret"
   }
   ```

1. 选择**下一步**。

1. 对于**密钥名称**，指定密钥的名称。

1. 在**标签**下，选择**添加**。

   1. 对于**键**，指定 **sagemaker:partner**。对于**值**，我们建议指定一个可能对您的使用案例有用的值。不过，可以指定任何值。
**重要**  
您必须创建键。如果不创建键，则无法从 Salesforce 导入数据。

1. 选择**下一步**。

1. 选择**存储**。

1. 选择您创建的密钥。

1. 记录以下字段：
   + 密钥的 Amazon 资源编号 (ARN)
   + 密钥的名称

创建密钥后，必须为 Data Wrangler 添加读取密钥的权限。通过以下过程添加权限。

要为 Data Wrangler 添加读取权限，请执行以下操作。

1. 导航到[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker/)。

1. 选择**域**。

1. 选择您用于访问 Data Wrangler 的域。

1. 选择您的**用户配置文件**。

1. 在**详细信息**下，找到**执行角色**。ARN 的格式如下：`arn:aws:iam::111122223333:role/example-role`。记下 A SageMaker I 执行角色。在 ARN 中，这是位于 `role/` 后面的全部内容。

1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

1. 在**搜索 IAM** 搜索栏中，指定 SageMaker AI 执行角色的名称。

1. 选择角色 。

1. 选择**添加权限**。

1. 选择**创建内联策略**。

1. 选择 JSON 选项卡。

1. 在编辑器中指定以下策略。

------
#### [ JSON ]

****  

   ```
   {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "aws:ResourceTag/sagemaker:partner": "*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:UpdateSecret"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:AmazonSageMaker-*"
        }
    ]
   }
   ```

------

1. 选择**查看策略**。

1. 对于**名称**，指定一个名称。

1. 选择**创建策略**。

在您授予 Data Wrangler 读取密钥的权限后，您必须将使用您的 Secrets Manager 密钥的生命周期配置添加到您的 Amazon SageMaker Studio Classic 用户个人资料中。

使用以下步骤创建生命周期配置并将其添加到 Studio Classic 配置文件。

要创建生命周期配置并将其添加到 Studio Classic 配置文件，请执行以下操作。

1. 导航到[亚马逊 A SageMaker I 控制台](console.aws.amazon.com/sagemaker)。

1. 选择**域**。

1. 选择您用于访问 Data Wrangler 的域。

1. 选择您的**用户配置文件**。

1. 如果您看到以下应用程序，请将其删除：
   + KernelGateway
   + JupyterKernel
**注意**  
删除应用程序会更新 Studio Classic。更新操作可能需要一段时间才能生效。

1. 在等待更新生效时，选择**生命周期配置**。

1. 确保您所在的页面显示 **Studio Classic Lifecycle 配置**。

1. 选择**创建配置**。

1. 确保已选择 **Jupyter 服务器应用程序**。

1. 选择**下一步**。

1. 对于**名称**，指定配置的名称。

1. 对于**脚本**，指定以下脚本：

   ```
   #!/bin/bash
   set -eux
   
   cat > ~/.sfgenie_identity_provider_oauth_config <<EOL
   {
       "secret_arn": "secrets-arn-containing-salesforce-credentials"
   }
   EOL
   ```

1. 选择**提交**。

1. 在左侧导航栏选择**域**。

1. 选择您的域。

1. 选择**环境**。

1. 在**个人 Studio Classic 应用程序的生命周期配置**下，选择**附加**。

1. 选择**现有配置**。

1. 在 **Studio Classic Lifecycle 配置**下选择已创建的生命周期配置。

1. 选择**附加到域**。

1. 选中附加的生命周期配置旁边的复选框。

1. 选择**设为默认值**。

设置生命周期配置时，可能会遇到问题。有关调试生命周期配置的信息，请参阅 [在亚马逊 SageMaker Studio 经典版中调试生命周期配置](studio-lcc-debug.md)。

### 《数据科学家指南》
<a name="data-wrangler-salesforce-data-cloud-ds"></a>

使用以下方法连接 Salesforce Data Cloud，并在 Data Wrangler 中访问您的数据。

**重要**  
您的管理员需要使用上述部分中的信息来设置 Salesforce Data Cloud。如果您遇到问题，请与他们联系，以获得故障排除帮助。

要打开 Studio Classic 并检查其版本，请参阅以下步骤。

1. 按照中的[先决条件](data-wrangler-getting-started.md#data-wrangler-getting-started-prerequisite)步骤通过 Amazon SageMaker Studio Classic 访问 Data Wrangler。

1. 在要用来启动 Studio Classic 的用户旁边，选择**启动应用程序**。

1. 选择 **Studio**。

**在 Data Wrangler 中使用 Salesforce Data Cloud 的数据创建数据集**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Salesforce Data Cloud**。

1. 对于**连接名称**，为与 Salesforce Data Cloud 的连接指定一个名称。

1. 对于**组织 URL**，指定您的 Salesforce 账户中的组织 URL。可以从管理员那里获取 URL。

1. 选择**连接**。

1. 指定用于登录 Salesforce 的凭证。

连接到 Salesforce Data Cloud 后，即可开始使用其中的数据创建数据集。

选择表后，可以编写查询并运行。查询输出显示在**查询结果**下方。

确定查询输出后，可以将查询的输出导入到 Data Wrangler 流中，以执行数据转换。

创建数据集后，导航到**数据流**屏幕，开始转换数据。

## 从 Snowflake 导入数据
<a name="data-wrangler-snowflake"></a>

您可以在 Data Wrangler 中使用 Snowflake 作为 SageMaker 数据源，在 Snowflake 中为机器学习准备数据。

利用 Snowflake 作为 Data Wrangler 中的数据来源，您可以快速连接到 Snowflake，而无需编写一行代码。在 Data Wrangler 中，可以将 Snowflake 中的数据与来自任何其他数据来源的数据联接起来。

连接后，您可以交互式查询存储在 Snowflake 中的数据，使用 300 多种预配置的数据转换方式来转换数据，使用一组强大的预配置可视化模板了解数据并识别潜在的错误和极端值，快速识别数据准备工作流中的不一致性，并在将模型部署到生产环境之前诊断问题。最后，您可以将数据准备工作流程导出到 Amazon S3，用于其他 SageMaker 人工智能功能，例如亚马逊 SageMaker 自动驾驶、亚马逊 SageMaker 功能商店和亚马逊 SageMaker 管道。

您可以使用自己创建的 AWS Key Management Service 密钥对查询输出进行加密。有关的更多信息 AWS KMS，请参阅[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)。

**Topics**
+ [管理员指南](#data-wrangler-snowflake-admin)
+ [《数据科学家指南》](#data-wrangler-snowflake-ds)

### 管理员指南
<a name="data-wrangler-snowflake-admin"></a>

**重要**  
要了解有关细粒度访问控制和最佳实践的更多信息，请参阅[安全访问控制](https://docs.snowflake.com/en/user-guide/security-access-control.html)。

本节适用于在 Data Wrangler 中设置对 Snowflake 的访问权限的 Snowflake 管理员。 SageMaker 

**重要**  
您负责管理和监控 Snowflake 中的访问控制。Data Wrangler 不会添加与 Snowflake 相关的访问控制层。  
访问控制包括以下内容：  
用户访问的数据
（可选）使 Snowflake 能够将查询结果写入到 Amazon S3 存储桶的存储集成
用户可以运行的查询

#### （可选）配置 Snowflake 数据导入权限
<a name="data-wrangler-snowflake-admin-config"></a>

默认情况下，Data Wrangler 会查询 Snowflake 中的数据，而不在 Amazon S3 位置中创建数据的副本。如果要配置与 Snowflake 的存储集成，请使用以下信息。您的用户可以使用存储集成，将查询结果存储在 Amazon S3 位置。

您的用户对敏感数据的访问权限可能会有所不同。为了获得最佳的数据安全性，请为每位用户提供各自的存储集成。每个存储集成都应具有各自的数据监管策略。

该功能目前在您所选择的区域中不可用。

Snowflake 需要对 S3 存储桶和目录具有以下权限，才能访问目录中的文件：
+ `s3:GetObject`
+ `s3:GetObjectVersion`
+ `s3:ListBucket`
+ `s3:ListObjects`
+ `s3:GetBucketLocation`

**创建一个 IAM 策略**

您必须创建 IAM 策略，以便配置 Snowflake 从 Amazon S3 存储桶加载数据以及将数据卸载到 Amazon S3 存储桶的访问权限。

下面是用来创建策略的 JSON 策略文档：

```
# Example policy for S3 write access
# This needs to be updated
{
"Version": "2012-10-17",		 	 	 
"Statement": [
  {
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::bucket/prefix/*"
  },
  {
    "Effect": "Allow",
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::bucket/",
    "Condition": {
        "StringLike": {
            "s3:prefix": ["prefix/*"]
        }
    }
  }
 ]
}
```

有关使用策略文档创建策略的信息和过程，请参阅[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

有关概要介绍如何在 Snowflake 中使用 IAM 权限的文档，请参阅以下资源：
+ [什么是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)
+ [在中创建 IAM 角色 AWS](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-2-create-the-iam-role-in-aws)
+ [在 Snowflake 中创建云存储集成](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-3-create-a-cloud-storage-integration-in-snowflake)
+ [检索你的 Snowflake 账户的 AWS IAM 用户](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-4-retrieve-the-aws-iam-user-for-your-snowflake-account)
+ [向 IAM 用户授予访问存储桶的权限](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-5-grant-the-iam-user-permissions-to-access-bucket-objects)。

要向数据科学家的 Snowflake 角色授予对存储集成的使用权限，必须运行 `GRANT USAGE ON INTEGRATION integration_name TO snowflake_role;`。
+ `integration_name` 是您的存储集成的名称。
+ `snowflake_role` 是为数据科学家用户授予的默认 [Snowflake 角色](https://docs.snowflake.com/en/user-guide/security-access-control-overview.html#roles)的名称。

#### 设置 Snowflake 访问权限 OAuth
<a name="data-wrangler-snowflake-oauth-setup"></a>

可以让您的用户使用身份提供商来访问 Snowflake，而不是让用户直接在 Data Wrangler 中输入凭证。下面是介绍 Data Wrangler 支持的身份提供商的 Snowflake 文档的链接。
+ [Azure AD](https://docs.snowflake.com/en/user-guide/oauth-azure.html)
+ [Okta](https://docs.snowflake.com/en/user-guide/oauth-okta.html)
+ [Ping Federate](https://docs.snowflake.com/en/user-guide/oauth-pingfed.html)

使用前述链接中的文档来设置对您的身份提供商的访问权限。本节中的信息和过程有助于您了解如何正确使用文档在 Data Wrangler 中访问 Snowflake。

您的身份提供商需要将 Data Wrangler 识别为应用程序。通过以下过程，将 Data Wrangler 注册为身份提供商中的应用程序：

1. 选择开始将 Data Wrangler 注册为应用程序的过程的配置。

1. 为身份提供商中的用户提供对 Data Wrangler 的访问权限。

1. 通过将 OAuth 客户端凭据存储为 AWS Secrets Manager 密钥来启用客户端身份验证。

1. 使用以下格式指定重定向网址：https://*domain-ID*.studio。 *AWS 区域*.sagemaker。 aws/jupyter/default/lab
**重要**  
您正在指定用于运行 Data Wrangl AWS 区域 er 的 SageMaker Amazon AI 域名 ID。
**重要**  
您必须为每个 Amazon A SageMaker I 域名以及运行 Data Wrangler 的 AWS 区域 位置注册一个 URL。来自某个域且未为 AWS 区域 其 URLs 设置重定向的用户将无法通过身份提供商进行身份验证以访问 Snowflake 连接。

1. 确保 Data Wrangler 应用程序允许使用授权代码和刷新令牌授予类型。

在您的身份提供商中，您必须设置一台服务器，以便在用户级别向 Data Wrangler 发送 OAuth 令牌。该服务器应发送以 Snowflake 为受众的令牌。

Snowflake 使用的角色概念与 IAM 角色中使用的角色截然不同。 AWS您必须配置身份提供商，以便让任何角色来使用与 Snowflake 账户关联的默认角色。例如，如果用户在 Snowflake 配置文件中使用 `systems administrator` 作为默认角色，则从 Data Wrangler 到 Snowflake 的连接会将 `systems administrator` 用作角色。

通过以下过程设置驱动程序。

要设置服务器，请执行以下操作。除最后一个步骤外，在所有其他步骤中，您在 Snowflake 中工作。

1. 开始设置服务器或 API。

1. 将授权服务器配置为使用授权代码和刷新令牌授予类型。

1. 指定访问令牌的生命周期。

1. 设置刷新令牌空闲超时。空闲超时是指刷新令牌在未使用的情况下失效的时间。
**注意**  
如果在 Data Wrangler 中调度作业，我们建议将空闲超时时间设置为大于处理作业的频率。否则，由于刷新令牌在运行之前就已过期，某些处理作业可能会失败。刷新令牌到期后，用户必须通过 Data Wrangler 访问他们与 Snowflake 建立的连接，以便重新进行身份验证。

1. 将 `session:role-any` 指定为新范围。
**注意**  
对于 Azure AD，复制作用域的唯一标识符。Data Wrangler 要求您提供标识符。

1. 
**重要**  
在 Snowflake 的外部 OAuth 安全集成中，启用。`external_oauth_any_role_mode`

**重要**  
Data Wrangler 不支持轮换刷新令牌。使用轮换刷新令牌可能会导致访问失败或用户需要经常登录。

**重要**  
如果刷新令牌过期，用户必须通过 Data Wrangler 访问他们与 Snowflake 建立的连接，以便重新进行身份验证。

设置 OAuth 提供商后，您需要向 Data Wrangler 提供连接到提供商所需的信息。可以使用身份提供商提供的文档来获取以下字段的值：
+ 令牌 URL – 身份提供商发送给 Data Wrangler 的令牌的 URL。
+ 授权 URL – 身份提供商的授权服务器的 URL。
+ 客户端 ID – 身份提供商的 ID。
+ 客户端密钥 – 只有授权服务器或 API 能够识别的密钥。
+ （仅限 Azure AD）你复制的 OAuth 范围凭据。

您将字段和值存储在 AWS Secrets Manager 密钥中，然后将其添加到用于数据牧马人的 Amazon SageMaker Studio Classic 生命周期配置中。生命周期配置是一个 shell 脚本。通过该配置，Data Wrangler 可以访问密钥的 Amazon 资源名称 (ARN)。有关创建密钥的信息，请参阅[将硬编码密钥移至。 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html)有关在 Studio Classic 中使用生命周期配置的信息，请参阅 [使用生命周期配置自定义 Amazon SageMaker Studio 经典版](studio-lcc.md)。

**重要**  
在创建 Secrets Manager 密钥之前，请确保你在 Amazon SageMaker Studio Classic 中使用的 A SageMaker I 执行角色有权在 Secrets Manager 中创建和更新密钥。有关添加权限的更多信息，请参阅[示例：创建密钥的权限](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html#auth-and-access_examples_create)。

对于 Okta 和 Ping 联合身份验证，密钥格式如下：

```
{
    "token_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/token",
    "client_id":"example-client-id",
    "client_secret":"example-client-secret",
    "identity_provider":"OKTA"|"PING_FEDERATE",
    "authorization_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/authorize"
}
```

对于 Azure AD，密钥格式如下：

```
{
    "token_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/token",
    "client_id":"example-client-id",
    "client_secret":"example-client-secret",
    "identity_provider":"AZURE_AD",
    "authorization_url":"https://identityprovider.com/oauth2/example-portion-of-URL-path/v2/authorize",
    "datasource_oauth_scope":"api://appuri/session:role-any)"
}
```

生命周期配置必须使用已创建的 Secrets Manager 密钥。可以创建生命周期配置，也可以修改已创建的生命周期配置。配置必须使用以下脚本。

```
#!/bin/bash

set -eux

## Script Body

cat > ~/.snowflake_identity_provider_oauth_config <<EOL
{
    "secret_arn": "example-secret-arn"
}
EOL
```

有关设置生命周期配置的信息，请参阅 [创建生命周期配置并将其与 Amazon SageMaker Studio Classic 关联](studio-lcc-create.md)。完成设置过程时，请执行以下操作：
+ 将配置的应用程序类型设置为 `Jupyter Server`。
+ 将配置附加到拥有您的用户的 SageMaker Amazon AI 域。
+ 让配置在默认情况下运行。每次用户登录 Studio Classic 时，它都必须运行。否则，您的用户在使用 Data Wrangler 时，将无法使用保存在配置中的凭证。
+ 生命周期配置将在用户的主文件夹中创建一个名为 `snowflake_identity_provider_oauth_config` 的文件。该文件包含 Secrets Manager 密钥。确保每次初始化 Jupyter Server 的实例时，该文件都位于用户的主文件夹中。

#### 通过 Data Wrangler 和 Snowflake 之间的私有连接 AWS PrivateLink
<a name="data-wrangler-security-snowflake-vpc"></a>

本节介绍如何使用 AWS PrivateLink 在 Data Wrangler 和 Snowflake 之间建立私有连接。这些步骤将在以下各节详细介绍。

##### 创建 VPC
<a name="data-wrangler-snowflake-snowflake-vpc-setup"></a>

如果您尚未设置 VPC，请按照[创建新的 VPC](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/gsg_create_vpc.html#create_vpc) 中的说明，创建一个。

选择要用于建立私有连接的 VPC 后，请向 Snowflake 管理员提供以下凭证，以便启用 AWS PrivateLink：
+  - VPC ID
+ AWS 账户编号
+ 您用于访问 Snowflake 的相应账户 URL

**重要**  
按照 Snowflake 文档中所述，启用 Snowflake 账户最多可能需要两个工作日。

##### 设置 Snowflake AWS PrivateLink 集成
<a name="data-wrangler-snowflake-snowflake-vpc-privatelink-setup"></a>

激活后 AWS PrivateLink ，通过在 Snowflake 工作表中运行以下命令来检索您所在地区的 AWS PrivateLink 配置。登录您的 Snowflake 控制台，然后在**工作表**下输入以下内容：`select SYSTEM$GET_PRIVATELINK_CONFIG();`

1. 从生成的 JSON 对象中检索以下项的值：`privatelink-account-name`、`privatelink_ocsp-url`、`privatelink-account-url` 和 `privatelink_ocsp-url`。以下代码段显示了每个值的示例。存储这些值以供以后使用。

   ```
   privatelink-account-name: xxxxxxxx.region.privatelink
   privatelink-vpce-id: com.amazonaws.vpce.region.vpce-svc-xxxxxxxxxxxxxxxxx
   privatelink-account-url: xxxxxxxx.region.privatelink.snowflakecomputing.com
   privatelink_ocsp-url: ocsp.xxxxxxxx.region.privatelink.snowflakecomputing.com
   ```

1. 切换到您的 AWS 控制台并导航到 VPC 菜单。

1. 在左侧面板中，选择**端点**链接，导航到 **VPC 端点**设置。

   在设置中，选择**创建端点**。

1. 选择**按名称查找服务**单选按钮，如以下屏幕截图所示。  
![\[管理控制台中的创建端点部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-radio.png)

1. 在**服务名称**字段中，粘贴您在上一步中为 `privatelink-vpce-id` 检索到的值，然后选择**验证**。

   如果连接成功，屏幕上会显示一条绿色提醒消息，提示**已找到服务名称**，并且 **VPC** 和**子网**选项会自动展开，如以下屏幕截图中所示。根据您的目标区域，出现的屏幕中可能会显示其他 AWS 区域名称。  
![\[管理控制台中的创建端点部分显示连接成功。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-service-name-found.png)

1. 从 **VPC** 下拉列表中，选择您发送到 Snowflake 的相同 VPC ID。

1. 如果您尚未创建子网，请按照以下有关创建子网的说明执行操作。

1. 从 **VPC** 下拉列表中选择**子网**。然后选择**创建子网**，并按照提示在您的 VPC 中创建子集。确保选择您发送到 Snowflake 的 VPC ID。

1. 在**安全组配置**下，选择**创建新安全组**，在新选项卡中打开默认**安全组**屏幕。在这个新选项卡中，选择**创建安全组**。

1. 提供新安全组的名称（例如 `datawrangler-doc-snowflake-privatelink-connection`）和描述。确保选择您在之前步骤中使用的 VPC ID。

1. 添加两个规则，以便允许流量从 VPC 内部流向此 VPC 端点。

   在单独的选项卡 VPCs中导航到**您的** VPC，然后检索您的 VPC 的 CIDR 块。在**入站规则**部分中，选择**添加规则**。为类型选择 `HTTPS`，在表单中将**源**保留为**自定义**，然后粘贴从上一个 `describe-vpcs` 调用中检索到的值（例如 `10.0.0.0/16`）。

1. 选择**创建安全组**。从新创建的安全组中检索**安全组 ID**（例如 `sg-xxxxxxxxxxxxxxxxx`）。

1. 在 **VPC 端点**配置屏幕中，删除默认安全组。在搜索字段中粘贴安全组 ID，然后选中该复选框。  
![\[管理控制台中的安全组部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-security-group.png)

1. 选择**创建端点**。

1. 如果端点创建成功，您将看到一个页面，其中包含指向 VPC ID 所指定的 VPC 端点配置的链接。选择该链接可以查看完整配置。  
![\[端点详情部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-success-endpoint.png)

   检索 DNS 名称列表中最上面的记录。这可以与其他 DNS 名称区分开来，因为它只包含区域名称（例如 `us-west-2`），但不包含可用区字母表示法（例如 `us-west-2a`）。存储此信息以供以后使用。

##### 在 VPC 中为 Snowflake 端点配置 DNS
<a name="data-wrangler-snowflake-vpc-privatelink-dns"></a>

本节介绍如何在您的 VPC 中为 Snowflake 端点配置 DNS。这样，VPC 就可以解析对 Snowflake AWS PrivateLink 端点的请求。

1. 导航到 AWS 控制台中的 [Route 53 菜单](https://console.aws.amazon.com/route53)。

1. 选择**托管区域**选项（如有必要，展开左侧菜单以找到此选项）。

1. 选择**创建托管区域**。

   1. 在**域名**字段中，引用在前述步骤中为 `privatelink-account-url` 存储的值。在此字段中，Snowflake 账户 ID 将从 DNS 名称中删除，并且只使用以区域标识符开头的值。后面还会为子域创建一个**资源记录集**，例如 `region.privatelink.snowflakecomputing.com`。

   1. 在**类型**部分中，选择**私有托管区域**的单选按钮。您的区域代码可能不是 `us-west-2`。引用 Snowflake 返回的 DNS 名称。  
![\[管理控制台中的创建托管区域页面。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-create-hosted-zone.png)

   1. 在**VPCs 要与托管区域关联**部分中，选择您的 VPC 所在的区域以及前面步骤中使用的 VPC ID。  
![\[控制台中的 “VPCs 要与托管区域关联” 部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-vpc-hosted-zone.png)

   1. 选择**创建托管区域**。

1. 接下来，创建两个记录，一条用于 `privatelink-account-url`，另一个用于 `privatelink_ocsp-url`。
   + 在**托管区域**菜单中，选择**创建记录集**。

     1. 在**记录名称**下，只输入您的 Snowflake 账户 ID（`privatelink-account-url` 中的前 8 个字符）。

     1. 在**记录类型**下，选择 **CNAME**。

     1. 在**值**下，输入您在*设置 Snowflake AWS PrivateLink 集成*部分的最后一步中检索的区域 VPC 端点的 DNS 名称。  
![\[管理控制台中的快速创建记录部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-quick-create-record.png)

     1. 选择**创建记录**。

     1. 对我们标注为 `privatelink-ocsp-url` 的 OCSP 记录重复上述步骤，从 `ocsp` 开始到记录名称的 8 个字符的 Snowflake ID（例如 `ocsp.xxxxxxxx`）。  
![\[管理控制台中的快速创建记录部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-quick-create-ocsp.png)

##### 为 VPC 配置 Route 53 解析器入站端点
<a name="data-wrangler-snowflake-vpc-privatelink-route53"></a>

本节介绍如何为您的 VPC 配置 Route 53 解析器入站端点。

1. 导航到 AWS 控制台中的 [Route 53 菜单](https://console.aws.amazon.com/route53)。
   + 在左侧面板的**安全**部分中，选择**安全组**选项。

1. 选择**创建安全组**。
   + 提供您的安全组的名称（例如 `datawranger-doc-route53-resolver-sg`）和描述。
   + 选择之前步骤中使用的 VPC ID。
   + 创建允许从 VPC CIDR 块内通过 UDP 和 TCP 进行 DNS 的规则。  
![\[管理控制台中的入站规则部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-inbound-rules.png)
   + 选择**创建安全组**。请注意**安全组 ID**，因为将会添加允许流向 VPC 端点安全组的流量的规则。

1. 导航到 AWS 控制台中的 [Route 53 菜单](https://console.aws.amazon.com/route53)。
   + 在**解析器**部分中，选择**入站端点**选项。

1. 选择**创建入站端点**。
   + 提供端点名称。
   + 从**区域中的 VPC** 下拉列表中，选择您在前面的所有步骤中使用的 VPC ID。
   + 在**此端点的安全组**下拉列表中，选择本节步骤 2 中的安全组 ID。  
![\[管理控制台中的入站端点的常规设置部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-inbound-endpoint.png)
   + 在 **IP 地址**部分中，选择可用区，选择一个子网，然后保留为每个 IP 地址选择的**使用自动选择的 IP 地址**单选按钮。  
![\[管理控制台中的 IP 地址部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-ip-address-1.png)
   + 选择**提交**。

1. 创建入站端点后，选择**入站端点**。

1. 创建入站端点后，记录解析器的两个 IP 地址。  
![\[管理控制台中的 IP 地址部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/snowflake-ip-addresses-2.png)

##### SageMaker AI VPC 终端节点
<a name="data-wrangler-snowflake-sagemaker-vpc-endpoints"></a>

 本节介绍如何为以下设备创建 VPC 终端节点：Amazon SageMaker Studio Classic、 SageMaker 笔记本电脑、 SageMaker API、 SageMaker 运行时和亚马逊 SageMaker 功能商店运行时。

**创建应用于所有端点的安全组。**

1. 导航到 AWS 控制台中的 [EC2 菜单](https://console.aws.amazon.com/ec2)。

1. 在**网络和安全**部分中，选择**安全组**选项。

1. 选择**创建安全组**。

1. 提供安全组的名称和描述（例如 `datawrangler-doc-sagemaker-vpce-sg`）。稍后会添加一条规则，允许通过 HTTPS 从 SageMaker AI 向该群组发送流量。

**创建端点**

1. 导航到 AWS 控制台中的 [VPC 菜单](https://console.aws.amazon.com/vpc)。

1. 选择**端点**选项。

1. 选择**创建端点**。

1. 通过在**搜索**字段中输入服务名称，来搜索服务。

1. 从 **VPC** 下拉列表中，选择存在您的 Snowflake AWS PrivateLink 连接的 VPC。

1. 在**子网**部分中，选择有权访问 Snow PrivateLink flake 连接的子网。

1. 将**启用 DNS 名称**复选框保留选中状态。

1. 在**安全组**部分中，选择您在上一节中创建的安全组。

1. 选择**创建端点**。

**配置 Studio Classic 和 Data Wrangler**

本节介绍如何配置 Studio Classic 和 Data Wrangler。

1. 配置安全组。

   1. 在 AWS 控制台中导航至 Amazon EC2 菜单。

   1. 在**网络和安全**部分中，选择**安全组**选项。

   1. 选择**创建安全组**。

   1. 提供您的安全组（例如 `datawrangler-doc-sagemaker-studio`）的名称和描述。

   1. 创建以下入站规则。
      + 与您为在设置 Snowflake 集成步骤中创建的 Snowflake PrivateLink 连接配置的安全*组的 HTTPS 连接*。 PrivateLink 
      + 与您为在设置 Snowflake 集成步骤中创建的 Snowflake PrivateLink 连接配置的安全*组的 HTTP 连接*。 PrivateLink 
      + 到 Route 53 解析器入站端点安全组的 DNS（端口 53）的 UDP 和 TCP 连接，该安全组是您在*为 VPC 配置 Route 53 解析器入站端点*的步骤 2 中创建的。

   1. 选择右下角的**创建安全组**按钮。

1. 配置 Studio Classic。
   + 导航到 AWS 控制台中的 SageMaker AI 菜单。
   + 在左侧控制台中，选择 **SageMaker AI Studio Classic** 选项。
   + 如果您未配置任何域，则会出现**开始使用**菜单。
   + 从**开始使用**菜单中，选择**标准安装**选项。
   + 对于**身份验证方法**，选择 **AWS Identity and Access Management (IAM)**。
   + 从**权限**菜单中，可以创建新角色或使用预先存在的角色，具体取决于您的使用案例。
     + 如果选择**创建新角色**，则可以选择提供 S3 存储桶名称，并且系统会为您生成策略。
     + 如果已经创建了一个角色，该角色对您需要访问的 S3 存储桶拥有权限，请从下拉列表中选择该角色。该角色应附加有 `AmazonSageMakerFullAccess` 策略：
   + 选择**网络和存储**下拉列表以配置 SageMaker AI 使用的 VPC、安全和子网。
     + 在 **VPC** 下，选择存在您的 Snowflake PrivateLink 连接的 VPC。
     + 在 “**子网” 下，选择有权访问 S** nowfl PrivateLink ake 连接的子网。
     + 在 **Studio Classic 的网络访问权限**下，选择**仅 VPC**。
     + 在**安全组**下，选择在步骤 1 中创建的安全组。
   + 选择**提交**。

1. 编辑 A SageMaker I 安全组。
   + 创建以下入站规则：
     + 将 2049 端口连接到 SageMaker AI 在步骤 2 中自动创建的入站和出站 NFS 安全组（安全组名称包含 Studio Classic 域 ID）。
     + 访问其自身的所有 TCP 端口（仅适用于 VPC 的 SageMaker AI 需要）。

1. 编辑 VPC 端点安全组：
   + 在 AWS 控制台中导航至 Amazon EC2 菜单。
   + 找到您在前一个步骤中创建的安全组。
   + 添加一条入站规则，允许来自步骤 1 中创建的安全组的 HTTPS 流量。

1. 创建用户配置文件。
   + 从 **SageMaker Studio Classic 控制面板**中，选择**添加用户**。
   + 提供用户名称。
   + 然后，对于**执行角色**，选择创建新的角色或使用现有角色。
     + 如果选择**创建新角色**，则可以选择提供 Amazon S3 存储桶名称，并且系统会为您生成策略。
     + 如果已经创建了一个角色，该角色对您需要访问的 Amazon S3 存储桶拥有权限，请从下拉列表中选择该角色。该角色应附加有 `AmazonSageMakerFullAccess` 策略：
   + 选择**提交**。

1. 创建数据流（按照上一节中概述的数据科学家指南执行操作）。
   + 添加 Snowflake 连接时，在 Snowflake 帐户名`privatelink-account-name`（**字母数字）字段中输入值（来自*设置 Snowflake PrivateLink 集成*步骤），而不是普通的 Snowflake 帐户名**。其他所有内容都保持不变。

#### 向数据科学家提供信息
<a name="data-wrangler-snowflake-admin-ds-info"></a>

向数据科学家提供从亚马逊 AI Data Wrangler 访问 Snowfl SageMaker ake 所需的信息。

**重要**  
您的用户需要运行 Amazon SageMaker Studio 经典版 1.3.0 或更高版本。有关检查 Studio Classic 版本和更新的信息，请参阅 [使用 Amazon Data Wrangler 准备机器学习 SageMaker 数据](data-wrangler.md)。

1. 要允许您的数据科学家从 SageMaker Data Wrangler 访问 Snowflake，请为他们提供以下内容之一：
   + 对于基本身份验证，提供 Snowflake 账户名称、用户名和密码。
   + 对于 OAuth，身份提供者中的用户名和密码。
   + 对于 ARN，提供 Secrets Manager 密钥的 Amazon 资源名称 (ARN)。
   + 使用 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 创建的密钥以及密钥的 ARN。如果您选择此选项，请通过以下步骤为 Snowflake 创建密钥。
**重要**  
如果您的数据科学家使用 **Snowflake 凭证（用户名和密码）**选项连接到 Snowflake，则可以使用 [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 将凭证存储在密钥中。Secrets Manager 会作为最佳实践安全计划的一部分轮换密钥。只有在设置 Studio Classic 用户配置文件时配置了 Studio Classic 角色，才能访问在 Secrets Manager 中创建的密文。这需要在 Studio Classic 角色的附加策略中添加 `secretsmanager:PutResourcePolicy` 权限。  
我们强烈建议您确定角色策略的范围，以便对不同的 Studio Classic 用户组使用不同的角色。可以为 Secrets Manager 密钥添加其他基于资源的权限。有关您可以使用的条件密钥，请参阅[管理密钥策略](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_secret-policy.html)。  
有关创建密钥的信息，请参阅[创建密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。您需要为自己创建的密钥付费。

1. （可选）向数据科学家提供您使用以下过程创建的存储集成的名称：[在 Snowflake 中创建云存储集成](                                      https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html#step-3-create-a-cloud-storage-integration-in-snowflake)。这是新集成的名称，在您运行的 `CREATE INTEGRATION` SQL 命令中称为 `integration_name`，如以下代码段所示：

   ```
     CREATE STORAGE INTEGRATION integration_name
     TYPE = EXTERNAL_STAGE
     STORAGE_PROVIDER = S3
     ENABLED = TRUE
     STORAGE_AWS_ROLE_ARN = 'iam_role'
     [ STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' ]
     STORAGE_ALLOWED_LOCATIONS = ('s3://bucket/path/', 's3://bucket/path/')
     [ STORAGE_BLOCKED_LOCATIONS = ('s3://bucket/path/', 's3://bucket/path/') ]
   ```

### 《数据科学家指南》
<a name="data-wrangler-snowflake-ds"></a>

通过以下过程在 Data Wrangler 中连接 Snowflake 并访问您的数据。

**重要**  
您的管理员需要使用上述部分中的信息来设置 Snowflake。如果您遇到问题，请与他们联系，以获得故障排除帮助。

可以使用以下方法之一连接到 Snowflake：
+ 在 Data Wrangler 中指定 Snowflake 凭证（账户名称、用户名称和密码）。
+ 提供包含凭证的密钥的 Amazon 资源名称 (ARN)。
+ 使用开放标准连接到 Snowflake 的访问委托 (OAuth) 提供商。您的管理员可以授予您访问以下 OAuth 提供商之一的权限：
  + [Azure AD](https://docs.snowflake.com/en/user-guide/oauth-azure.html)
  + [Okta](https://docs.snowflake.com/en/user-guide/oauth-okta.html)
  + [Ping Federate](https://docs.snowflake.com/en/user-guide/oauth-pingfed.html)

请咨询您的管理员，了解连接到 Snowflake 要使用的方法。

下面各个部分提供了有关您如何使用上述方法连接到 Snowflake 的信息。

------
#### [ Specifying your Snowflake Credentials ]

**使用您的凭证将数据集从 Snowflake 导入到 Data Wrangler**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Snowflake**。

1. 对于**连接名称**，指定一个唯一标识连接的名称。

1. 对于**身份验证方法**，选择**基本用户名/密码**。

1. 对于 **Snowflake 账户名称（字母数字）**，指定 Snowflake 账户的全名。

1. 对于**用户名**，指定用于访问 Snowflake 账户的用户名。

1. 对于**密码**，输入与用户名关联的密码。

1. （可选）对于**高级设置**，指定以下项：
   + **角色** – Snowflake 中的角色。某些角色可以访问不同的数据集。如果您未指定角色，则 Data Wrangler 将使用您的 Snowflake 账户中的默认角色。
   + **存储集成** – 当您指定并运行查询时，Data Wrangler 会在内存中创建查询结果的临时副本。要存储查询结果的永久副本，请为存储集成指定 Amazon S3 位置。管理员已向您提供 S3 URI。
   + **KMS 密钥 ID** – 已创建的 KMS 密钥。您可以指定其 ARN，以便加密 Snowflake 查询的输出。否则，Data Wrangler 会使用默认加密方式。

1. 选择**连接**。

------
#### [ Providing an Amazon Resource Name (ARN) ]

**使用 ARN 将数据集从 Snowflake 导入到 Data Wrangler**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Snowflake**。

1. 对于**连接名称**，指定一个唯一标识连接的名称。

1. 对于**身份验证方法**，选择 **ARN**。

1. S@@ **ecrets Manager ARN** — 用于存储用于连接到 Snowflake 的凭据的 AWS Secrets Manager 密钥的 ARN。

1. （可选）对于**高级设置**，指定以下项：
   + **角色** – Snowflake 中的角色。某些角色可以访问不同的数据集。如果您未指定角色，则 Data Wrangler 将使用您的 Snowflake 账户中的默认角色。
   + **存储集成** – 当您指定并运行查询时，Data Wrangler 会在内存中创建查询结果的临时副本。要存储查询结果的永久副本，请为存储集成指定 Amazon S3 位置。管理员已向您提供 S3 URI。
   + **KMS 密钥 ID** – 已创建的 KMS 密钥。您可以指定其 ARN，以便加密 Snowflake 查询的输出。否则，Data Wrangler 会使用默认加密方式。

1. 选择**连接**。

------
#### [ Using an OAuth Connection ]

**重要**  
您的管理员自定义了您的 Studio Classic 环境，以提供您使用 OAuth 连接时使用的功能。可能需要重新启动 Jupyter 服务器应用程序，才能使用此功能。  
可以通过以下步骤更新 Jupyter 服务器应用程序。  
在 Studio Classic 中，选择**文件**
选择**关闭**。
选择**关闭服务器**。
关闭用于访问 Studio Classic 的选项卡或窗口。
在亚马逊 A SageMaker I 控制台上，打开 Studio Classic。

**使用您的凭证将数据集从 Snowflake 导入到 Data Wrangler**

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择 **Snowflake**。

1. 对于**连接名称**，指定一个唯一标识连接的名称。

1. 对于**身份验证方法**，选择**OAuth**。

1. （可选）对于**高级设置**，指定以下项：
   + **角色** – Snowflake 中的角色。某些角色可以访问不同的数据集。如果您未指定角色，则 Data Wrangler 将使用您的 Snowflake 账户中的默认角色。
   + **存储集成** – 当您指定并运行查询时，Data Wrangler 会在内存中创建查询结果的临时副本。要存储查询结果的永久副本，请为存储集成指定 Amazon S3 位置。管理员已向您提供 S3 URI。
   + **KMS 密钥 ID** – 已创建的 KMS 密钥。您可以指定其 ARN，以便加密 Snowflake 查询的输出。否则，Data Wrangler 会使用默认加密方式。

1. 选择**连接**。

------

连接到 Snowflake 后，可以开始从 Snowflake 导入数据。

在 Data Wrangler 中，可以查看您的数据仓库、数据库和架构，还会看到可用于预览表的眼睛图标。选择**预览表**图标后，将生成该表的架构预览。必须先选择数据仓库，然后才能预览表。

**重要**  
如果您要导入的数据集包含的列类型为 `TIMESTAMP_TZ` 或 `TIMESTAMP_LTZ`，请在查询的列名中添加 `::string`。有关更多信息，请参阅[方法：将 TIMESTAMP\$1TZ 和 TIMESTAMP\$1LTZ 数据卸载到 Parquet 文件](https://community.snowflake.com/s/article/How-To-Unload-Timestamp-data-in-a-Parquet-file)。

选择数据仓库、数据库和架构后，现在可以编写并运行查询。查询输出显示在**查询结果**下方。

确定查询输出后，可以将查询的输出导入到 Data Wrangler 流中，以执行数据转换。

在导入数据后，导航到 Data Wrangler 流，并开始向该流中添加转换。有关可用转换的列表，请参阅 [转换数据](data-wrangler-transform.md)。

## 从软件即服务 (SaaS) 平台导入数据
<a name="data-wrangler-import-saas"></a>

可以使用 Data Wrangler，从四十多个软件即服务 (SaaS) 平台导入数据。要从 SaaS 平台导入数据，您或您的管理员必须使用亚马逊 AppFlow 将数据从该平台传输到亚马逊 S3 或 Amazon Redshift。有关亚马逊的更多信息 AppFlow，请参阅[什么是亚马逊 AppFlow？](https://docs.aws.amazon.com/appflow/latest/userguide/what-is-appflow.html) 如果不需要使用 Amazon Redshift，我们建议您将数据传输到 Amazon S3，以便简化流程。

Data Wrangler 支持从以下 SaaS 平台传输数据：
+ [Amplitude](https://docs.aws.amazon.com/appflow/latest/userguide/amplitude.html)
+ [Asana](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-asana.html)
+ [Braintree](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-braintree.html)
+ [CircleCI](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-circleci.html)
+ [DocuSign 监控](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-docusign-monitor.html)
+ [Delighted](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-delighted.html)
+ [Domo](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-domo.html)
+ [Datadog](https://docs.aws.amazon.com/appflow/latest/userguide/datadog.html)
+ [Dynatrace](https://docs.aws.amazon.com/appflow/latest/userguide/dynatrace.html)
+ [Facebook Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-facebook-ads.html)
+ [Facebook Page Insights](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-facebook-page-insights.html)
+ [Google Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-ads.html)
+ [Google Analytics 4](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-analytics-4.html)
+ [Google Calendar](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-calendar.html)
+ [Google Search Console](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-google-search-console.html)
+ [GitHub](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-github.html)
+ [GitLab](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-gitlab.html)
+ [Infor Nexus](https://docs.aws.amazon.com/appflow/latest/userguide/infor-nexus.html)
+ [Instagram Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-instagram-ads.html)
+ [Intercom](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-intercom.html)
+ [JDBC (Sync)](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-jdbc.html)
+ [Jira Cloud](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-jira-cloud.html)
+ [LinkedIn 广告](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-linkedin-ads.html)
+ [Mailchimp](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-mailchimp.html)
+ [Marketo](https://docs.aws.amazon.com/appflow/latest/userguide/marketo.html)
+ [Microsoft Dynamics 365](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-microsoft-dynamics-365.html)
+ [Microsoft Teams](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-microsoft-teams.html)
+ [Mixpanel](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-mixpanel.html)
+ [Okta](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-okta.html)
+ [Oracle HCM](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-oracle-hcm.html)
+ [Paypal Checkout](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-paypal.html)
+ [Pendo](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-pendo.html)
+ [Salesforce](https://docs.aws.amazon.com/appflow/latest/userguide/salesforce.html)
+ [Salesforce Marketing Cloud](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-salesforce-marketing-cloud.html)
+ [Salesforce Pardot](https://docs.aws.amazon.com/appflow/latest/userguide/pardot.html)
+ [SAP OData](https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html)
+ [SendGrid](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-sendgrid.html)
+ [ServiceNow](https://docs.aws.amazon.com/appflow/latest/userguide/servicenow.html)
+ [Singular](https://docs.aws.amazon.com/appflow/latest/userguide/singular.html)
+ [Slack](https://docs.aws.amazon.com/appflow/latest/userguide/slack.html)
+ [Smartsheet](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-smartsheet.html)
+ [Snapchat Ads](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-snapchat-ads.html)
+ [Stripe](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-stripe.html)
+ [Trend Micro](https://docs.aws.amazon.com/appflow/latest/userguide/trend-micro.html)
+ [Typeform](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-typeform.html)
+ [Veeva](https://docs.aws.amazon.com/appflow/latest/userguide/veeva.html)
+ [WooCommerce](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-woocommerce.html)
+ [Zendesk](https://docs.aws.amazon.com/appflow/latest/userguide/slack.html)
+ [Zendesk Chat](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-chat.html)
+ [Zendesk Sell](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-sell.html)
+ [Zendesk Sunshine](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zendesk-sunshine.html)
+ [Zoho CRM](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zoho-crm.html)
+ [Zoom Meetings](https://docs.aws.amazon.com/appflow/latest/userguide/connectors-zoom-meetings.html)

上述列表包含指向有关设置数据来源的更多信息的链接。阅读以下信息后，您或您的管理员可以参考前面的链接。

导航到 Data Wrangler 流的**导入**选项卡时，您将在以下部分下看到数据来源：
+ **可用**
+ **设置数据来源**

不需要进行额外配置，即可连接到**可用**下的数据来源。您可以选择数据来源并导入数据。

“**设置数据源” 下的数据源**要求您或您的管理员使用亚马逊将数据从 SaaS 平台传输 AppFlow 到 Amazon S3 或 Amazon Redshift。有关执行传输的信息，请参阅 [使用 Amazon AppFlow 传输您的数据](#data-wrangler-import-saas-transfer)。

执行数据传输后，SaaS 平台将作为数据来源显示在**可用**下。可以选择该数据来源，然后将您传输的数据导入到 Data Wrangler 中。您传输的数据会以表形式出现，可供您查询。

### 使用 Amazon AppFlow 传输您的数据
<a name="data-wrangler-import-saas-transfer"></a>

亚马逊 AppFlow 是一个无需编写任何代码即可将数据从 SaaS 平台传输到 Amazon S3 或 Amazon Redshift 的平台。要执行数据传输，您可以使用 AWS 管理控制台。

**重要**  
必须确保已设置执行数据传输的权限。有关更多信息，请参阅 [亚马逊 AppFlow 权限](data-wrangler-security.md#data-wrangler-appflow-permissions)。

添加权限后，可以传输数据。在 Amazon 中 AppFlow，您可以创建一个用于传输数据的*流程*。流是一系列配置。您可以使用流来指定是否按计划运行数据传输，或者是否要将数据分区为单独的文件。配置完流后，运行该流来传输数据。

有关创建流程的信息，请参阅[在 Amazon 中创建流程 AppFlow](https://docs.aws.amazon.com/appflow/latest/userguide/create-flow.html)。有关运行流程的信息，请参阅[激活 Amazon AppFlow 流程](https://docs.aws.amazon.com/appflow/latest/userguide/run-flow.html)。

数据传输完成后，使用以下步骤访问 Data Wrangler 中的数据。
**重要**  
尝试访问数据之前，请确保您的 IAM 角色具有以下策略：  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:SearchTables",
            "Resource": [
                "arn:aws:glue:*:*:table/*/*",
                "arn:aws:glue:*:*:database/*",
                "arn:aws:glue:*:*:catalog"
            ]
        }
    ]
}
```
默认情况下，用于访问 Data Wrangler 的 IAM 角色是 `SageMakerExecutionRole`。有关添加策略的更多信息，请参阅[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

要连接到数据来源，请执行以下操作。

1. 登录[亚马逊 A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 **Studio**。

1. 选择**启动应用程序**。

1. 从下拉列表中选择 **Studio**。

1. 选择主页图标。

1. 选择**数据**。

1. 选择 **Data Wrangler**。

1. 选择**导入数据**。

1. 在**可用**下，选择数据来源。

1. 在**名称**字段中，指定连接名称。

1. （可选）选择**高级配置**。

   1. 选择一个**工作组**。

   1. 如果您的工作组尚未强制使用 Amazon S3 输出位置，或者您没有使用工作组，请为**查询结果的 Amazon S3 位置**指定一个值。

   1. （可选）对于**数据留存期**，选中该复选框以设置数据留存期，并指定在删除数据之前存储数据的天数。

   1. （可选）默认情况下，Data Wrangler 会保存连接。可以选择取消选中该复选框，此时不保存连接。

1. 选择**连接**。

1. 指定查询。
**注意**  
为了协助您指定查询，可以在左侧导航面板上选择一个表。Data Wrangler 将显示表名和表的预览。选择表名称旁边的图标来复制名称。可以在查询中使用表名。

1. 选择**运行**。

1. 选择**导入查询**。

1. 对于**数据集名称**，指定数据集的名称。

1. 选择**添加**。

导航到**导入数据**屏幕时，您会看到已创建的连接。可以使用该连接来导入更多数据。

## 导入的数据存储
<a name="data-wrangler-import-storage"></a>

**重要**  
 我们强烈建议您采用[安全最佳实践](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)，遵循有关保护 Amazon S3 存储桶的最佳实践。

当您查询来自 Amazon Athena 或 Amazon Redshift 的数据时，查询的数据集会自动存储在 Amazon S3 中。数据存储在您使用 Studio Classic 的 AWS 区域的默认 SageMaker AI S3 存储桶中。

默认 S3 存储桶的命名约定如下：`sagemaker-region-account number`。例如，如果您的账号是 111122223333，并且在 `us-east-1` 中使用 Studio Classic，那么导入的数据集将存储在 `sagemaker-us-east-1-`111122223333 中。

 Data Wrangler 流依赖于此 Amazon S3 数据集位置，因此在使用依赖流时，不应在 Amazon S3 中修改此数据集。如果您确实修改了此 S3 位置，并且希望继续使用您的数据流，则必须移除 .flow 文件的 `trained_parameters` 中的所有对象。为此，请从 Studio Classic 下载 .flow 文件，然后删除 `trained_parameters` 的每个实例中的所有条目。完成操作后，`trained_parameters` 应该是一个空的 JSON 对象：

```
"trained_parameters": {}
```

当您导出数据流并使用数据流来处理数据时，导出的 .flow 文件会引用 Amazon S3 中的此数据集。使用以下部分了解更多信息。

### Amazon Redshift 导入存储
<a name="data-wrangler-import-storage-redshift"></a>

Data Wrangler 将您的查询结果的数据集存储在默认 SageMaker AI S3 存储桶中的 Parquet 文件中。

此文件存储在以下前缀（目录）下：redshift/ *uuid* /data/，其中*uuid*是为每个查询创建的唯一标识符。

例如，如果您的默认存储桶是`sagemaker-us-east-1-111122223333`，则从 Amazon Redshift 查询的单个数据集位于 s3: sagemaker-us-east //-1-111122223333/redshift/ /data/。*uuid*

### Amazon Athena 导入存储
<a name="data-wrangler-import-storage-athena"></a>

在查询 Athena 数据库并导入数据集时，Data Wrangler 会将数据集以及该数据集的子集（或称*预览文件*）存储在 Amazon S3 中。

您通过选择**导入数据集**导入的数据集，将以 Parquet 格式存储在 Amazon S3 中。

在 Athena 导入屏幕上选择**运行**时，预览文件将以 CSV 格式写入，并且最多可包含来自所查询数据集的 100 行。

您查询的数据集位于前缀（目录）下：athena/ *uuid* /data/，其中*uuid*是为每个查询创建的唯一标识符。

例如，如果您的默认存储桶是`sagemaker-us-east-1-111122223333`，则从 Athena 查询的单个数据集位于 /athena/ /data/ 中。`s3://sagemaker-us-east-1-111122223333` *uuid* *example\$1dataset.parquet*

用于在 Data Wrangler 中预览数据框架的数据集子集则存储在以下前缀下：athena/。

# 创建和使用 Data Wrangler 流
<a name="data-wrangler-data-flow"></a>

使用 Amazon SageMaker Data Wrangler 流程或*数据流*来创建和修改数据准备管道。数据流将您创建的数据集、转换和分析或*步骤*连接起来，并且可用于定义您的管道。

## 实例
<a name="data-wrangler-data-flow-instances"></a>

当您在 Amazon SageMaker Studio Classic 中创建 Data Wrangler 流程时，Data Wrangler 会使用 Amazon EC2 实例在您的流程中运行分析和转换。默认情况下，Data Wrangler 使用 m5.4xlarge 实例。m5 实例是通用实例，可以在计算和内存之间实现平衡。您可以将 m5 实例用于各种计算工作负载。

Data Wrangler 还使您能够选择使用 r5 实例。r5 实例旨在提供快速性能，以便处理内存中的大型数据集。

我们建议您选择针对您的工作负载进行了最佳优化的实例。例如，r5.8xlarge 的价格可能比 m5.4xlarge 高，但 r5.8xlarge 可能针对您的工作负载进行了更好的优化。借助更优化的实例，您可以在更短的时间内，以更低的成本运行数据流。

下表显示了您可以用来运行 Data Wrangler 流的实例。


| 标准实例 | vCPU | 内存 | 
| --- | --- | --- | 
| ml.m5.4xlarge | 16 | 64 GiB | 
| ml.m5.8xlarge | 32 | 128 GiB | 
| ml.m5.16xlarge | 64 |  256 GiB  | 
| ml.m5.24xlarge | 96 | 384 GiB | 
| r5.4xlarge | 16 | 128 GiB | 
| r5.8xlarge | 32 | 256 GiB | 
| r5.24xlarge | 96 | 768 GiB | 

有关 r5 实例的更多信息，请参阅 [Amazon EC2 R5 实例](https://aws.amazon.com/ec2/instance-types/r5/)。有关 m5 实例的更多信息，请参阅 [Amazon EC2 M5 实例](https://aws.amazon.com/ec2/instance-types/m5/)。

每个 Data Wrangler 流都有一个关联的 Amazon EC2 实例。可能有多个流程与单个实例相关联。

对于每个流文件，您可以无缝切换实例类型。如果您切换实例类型，则用于运行该流的实例会继续运行。

要切换流的实例类型，请执行以下操作。

1. 选择**运行终端和内核**图标 (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/icons/running-terminals-kernels.png))。

1. 导航到您正在使用的实例并选择该实例。

1. 选择要删除的实例。  
![\[示例显示如何在 Data Wrangler 管理控制台的数据流页面中选择实例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-instance-switching-list-instances.png)

1. 选择**保存**。

对于运行的所有实例，您都需要付费。为避免产生额外费用，请手动关闭您未使用的实例。要关闭正在运行的实例，请按以下步骤操作。

关闭正在运行的实例。

1. 选择实例图标。下图显示了在什么位置选择**正在运行的实例**图标。  
![\[\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/instance-switching-running-instances.png)

1. 选择要关闭的实例旁边的**关闭**。

如果您关闭了用于运行流的实例，则暂时会无法访问该流。如果您在尝试打开运行之前关闭的实例的流时遇到错误，请等待 5 分钟，然后再次尝试打开。

当您将数据流导出到亚马逊简单存储服务或亚马逊 SageMaker 功能商店等位置时，Data Wrangler 会运行亚马逊 SageMaker 处理任务。可以将以下实例之一用于处理作业。有关导出数据的更多信息，请参阅 [导出](data-wrangler-data-export.md)。


| 标准实例 | vCPU | 内存 | 
| --- | --- | --- | 
| ml.m5.4xlarge | 16 | 64 GiB | 
| ml.m5.12xlarge | 48 |  192 GiB  | 
| ml.m5.24xlarge | 96 | 384 GiB | 

有关使用可用实例类型的每小时费用的更多信息，请参阅[SageMaker 定价](https://aws.amazon.com//sagemaker/pricing/)。

## 数据流 UI
<a name="data-wrangler-data-flow-ui"></a>

导入数据集时，原始数据集会出现在数据流中，并被命名为**来源**。如果您在导入数据时启用了采样，则此数据集将被命名为**来源 – 采样**。Data Wrangler 会自动推断数据集内每个列的类型，并创建一个名为**数据类型**的新数据框。您可以选择此框架来更新推断的数据类型。上传单个数据集后，您将看到类似于下图中显示的结果：

![\[示例显示 Data Wrangler 管理控制台中的来源 - 采样和 数据类型。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/dataflow-after-import.png)


每次添加转换步骤时，都会创建一个新的数据框。将多个转换步骤（**联接**或**串联**除外）添加到同一个数据集时，它们会堆叠在一起。

**联接**和**串联**会创建包含新的联接或串联数据集的独立步骤。

下图显示了两个数据集之间存在联接的数据流，以及两个步骤堆栈。第一个堆栈（**步骤 (2)**）向**数据类型**数据集内推断的类型添加两个转换。*下游*堆栈（也就是右边的堆栈）向通过名为 **demo-join** 的联接生成的数据集添加转换。

![\[显示 Data Wrangler 管理控制台数据流页面步骤的示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-flow-steps.png)


数据流右下角的小灰色框提供了流中堆栈和步骤的数量以及流布局的概述。灰色框内的较亮框表示 UI 视图中的步骤。可以使用此框查看数据流中不属于 UI 视图的部分。使用“适合屏幕”图标 (![\[Dotted square outline icon representing a placeholder or empty state.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/fit-screen.png)) 将所有步骤和数据集填充到 UI 视图中。

左下方的导航栏包括一些图标，您可以用它们来放大 (![\[Plus symbol icon representing an addition or new item action.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/zoom-in.png)) 和缩小 (![\[Horizontal line or divider, typically used to separate content sections.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/zoom-out.png)) 数据流，并调整数据流的大小以适应屏幕 (![\[Dotted square outline icon representing a placeholder or empty state.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/fit-screen.png))。使用锁定图标 (![\[Trash can icon representing deletion or removal functionality.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/lock-nodes.png)) 可以锁定和解锁屏幕上每个步骤的位置。



## 为您的数据流添加步骤
<a name="data-wrangler-data-flow-add-step"></a>

选择任何数据集或之前添加的步骤旁边的 **\$1**，然后选择以下选项之一：
+ **编辑数据类型**（仅适用于**数据类型**步骤）：如果您还没有向**数据类型**步骤添加任何转换，则可以选择**编辑数据类型**，来更新 Data Wrangler 在导入您的数据集时推断出的数据类型。
+ **添加转换**：添加新的转换步骤。要了解有关您可添加的数据转换的更多信息，请参阅 [转换数据](data-wrangler-transform.md)。
+ **添加分析**：添加分析。可以使用此选项在数据流中的任何点分析您的数据。向某个步骤添加一个或多个分析时，该步骤上会出现一个分析图标 (![\[Bar chart icon representing data visualization or analytics functionality.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/updates/analysis-icon.png))。要了解有关可添加的分析的更多信息，请参阅 [分析和可视化](data-wrangler-analyses.md)。
+ **联接**：联接两个数据集并将生成的数据集添加到数据流中。要了解更多信息，请参阅[联接数据集](data-wrangler-transform.md#data-wrangler-transform-join)。
+ **串联**：串联两个数据集并将生成的数据集添加到数据流中。要了解更多信息，请参阅[串联数据集](data-wrangler-transform.md#data-wrangler-transform-concatenate)。

## 从数据流中删除一个步骤
<a name="data-wrangler-data-flow-delete-step"></a>

要删除某个步骤，请选择该步骤，然后选择**删除**。如果该节点是具有单个输入的节点，则只能删除您选择的步骤。删除具有单个输入的步骤时，不会删除该步骤后面的步骤。如果您要删除源节点、联接节点或串联节点的步骤，则后面的所有步骤也会被删除。

要从步骤堆栈中删除某个步骤，请选择该堆栈，然后选择要删除的步骤。

可以使用以下过程之一删除一个步骤，而不删除下游步骤。

------
#### [ Delete a step in the Data Wrangler flow ]

可以删除数据流中具有单个输入的节点的单个步骤。无法删除源节点、联接节点和串联节点的单独步骤。

使用以下过程可以删除 Data Wrangler 流中的步骤。

1. 选择您要删除的步骤所属的步骤组。

1. 选择步骤旁边的图标。

1. 选择**删除步骤**。  
![\[示例显示如何在 Data Wrangler 管理控制台的数据流页面中删除一个步骤。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/delete-step-flow-1.png)

------
#### [ Delete a step in the table view ]

使用以下过程删除表视图中的步骤。

可以删除数据流中具有单个输入的节点的单个步骤。无法删除源节点、联接节点和串联节点的单独步骤。

1. 选择步骤，并打开该步骤的表视图。

1. 将光标移到步骤上方，即可显示省略号图标。

1. 选择步骤旁边的图标。

1. 选择**删除**。  
![\[示例显示如何在 Data Wrangler 管理控制台的表视图中删除一个步骤。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/delete-step-table-0.png)

------

## 编辑 Data Wrangler 流中的步骤
<a name="data-wrangler-data-flow-edit-step"></a>

可以编辑在 Data Wrangler 流中添加的每个步骤。通过编辑步骤，您可以更改列的转换或数据类型。可以编辑步骤以进行更改，从而更好地使用步骤进行分析。

您可以使用多种方式编辑步骤。一些示例包括更改插补估计法，或更改将值视为异常值的阈值。

可以使用以下过程编辑步骤。

要编辑步骤，请执行以下操作。

1. 在 Data Wrangler 流中选择一个步骤，打开表视图。  
![\[Data Wrangler 管理控制台数据流页面中的示例步骤。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-flow-edit-choose-step.png)

1. 在数据流中选择一个步骤。

1. 编辑该步骤。

下图显示了一个步骤编辑示例。

![\[示例显示如何在 Data Wrangler 管理控制台的数据流页面中编辑步骤。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-flow-table-edit-step.png)


**注意**  
您可以使用您的 Amazon A SageMaker I 域中的共享空间来协作处理您的数据管理者流程。在共享空间中，您和协作者可以实时编辑流文件。但是，您和协作者都无法实时看到更改。任何人对 Data Wrangler 流进行更改后，都必须立即进行保存。当有人保存文件时，除非关闭文件并重新打开，否则协作者无法看到更改。如果某个人做出任何更改但未保存，都会被其他人保存的更改覆盖。

# 获取有关数据和数据质量的见解
<a name="data-wrangler-data-insights"></a>

使用**数据质量和见解报告**对您导入到 Data Wrangler 中的数据进行分析。建议您在导入数据集之后创建报告。可以使用该报告来协助您清理和处理自己的数据。该报告为您提供诸如缺失值数量和异常值数量之类的信息。如果您的数据存在问题，例如目标泄漏或不平衡，则见解报告可以让您注意到这些问题。

按照以下过程创建数据质量和见解报告。该过程假设您已将数据集导入到 Data Wrangler 流中。

**创建数据质量和见解报告**

1. 选择 Data Wrangler 流中节点旁边的 **\$1**。

1. 选择**获取数据见解**。

1. 对于**分析名称**，为见解报告指定名称。

1. （可选）对于**目标列**，指定目标列。

1. 对于**问题类型**，请指定**回归**或**分类**。

1. 对于**数据大小**，指定下列项之一：
   + **50 K** – 使用您导入的数据集的前 50000 行来创建报告。
   + **整个数据集** – 使用您导入的整个数据集来创建报告。
**注意**  
针对整个数据集创建数据质量和见解报告需要使用 Amazon SageMaker 处理任务。 SageMaker 处理任务预置了获取所有数据见解所需的额外计算资源。有关 SageMaker 处理任务的更多信息，请参阅[带 SageMaker 处理功能的数据转换工作负载](processing-job.md)。

1. 选择**创建**。

下面的主题说明了报告的各个部分：

**Topics**
+ [Summary](#data-wrangler-data-insights-summary)
+ [目标列](#data-wrangler-data-insights-target-column)
+ [快速模型](#data-wrangler-data-insights-quick-model)
+ [特征摘要](#data-wrangler-data-insights-feature-summary)
+ [样本](#data-wrangler-data-insights-samples)
+ [定义](#data-wrangler-data-insights-definitions)

可以下载报告或在线查看。要下载报告，请选择屏幕右上角的下载按钮。下图显示了该按钮。

![\[显示下载按钮的示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-download.png)


## Summary
<a name="data-wrangler-data-insights-summary"></a>

见解报告对数据进行了简单汇总，其中包括缺失值、无效值、特征类型、异常值计数等一般信息。还可能包括高严重性警告，这些警告指出数据可能存在问题。我们建议您对警告进行调查研究。

下面是一个报告摘要示例。

![\[报告摘要示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-report-summary.png)


## 目标列
<a name="data-wrangler-data-insights-target-column"></a>

在创建数据质量和见解报告时，Data Wrangler 会为您提供选项来选择目标列。目标列是要预测的列。在选择目标列时，Data Wrangler 会自动创建目标列分析。它还按特征的预测能力顺序对特征进行排名。选择目标列时，必须指定是要解决回归问题还是分类问题。

对于分类，Data Wrangler 会显示最常见分类的表和直方图。分类是指类别。它还会显示目标值缺失或无效的观测值或行。

下图显示了分类问题的目标列分析示例。

![\[目标列分析示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-target-column-classification.png)


对于回归，Data Wrangler 会显示目标列中所有值的直方图。它还会显示带有缺失、无效或异常值目标值的观测值或行。

下图显示了回归问题的目标列分析示例。

![\[目标列分析示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-target-column-regression.png)


## 快速模型
<a name="data-wrangler-data-insights-quick-model"></a>

**快速模型**提供您用于训练数据的模型的预期预测质量的估计值。

Data Wrangler 将您的数据拆分为训练层和验证层。它使用 80% 的样本进行训练，使用 20% 的值进行验证。对于分类，对样本进行分层分割。对于分层分割，每个数据分区的标签比例相同。对于分类问题，训练层和分类层之间的标签比例必须相同，这一点非常重要。Data Wrangler 使用默认的超参数训练 XGBoost 模型。它对验证数据进行提前停止，并执行最少的特征预处理。

对于分类模型，Data Wrangler 会返回模型摘要和混淆矩阵。

以下是分类模型摘要示例。要详细了解所返回的信息，请参阅 [定义](#data-wrangler-data-insights-definitions)。

![\[分类模型摘要示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-classification-summary.png)


以下是快速模型返回的混淆矩阵的示例。

![\[混淆矩阵示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-classification-confusion-matrix.png)


混淆矩阵提供了以下信息：
+ 预测标签与真实标签匹配的次数。
+ 预测标签与真实标签不匹配的次数。

真实标签表示数据中的实际观察值。例如，如果您使用模型来检测欺诈性交易，那么真实标签表示实际上是欺诈性交易或非欺诈性交易。预测标签表示模型为数据分配的标签。

可以使用混淆矩阵来查看模型对状况存在或不存在的预测程度。如果您预测的是欺诈性交易，可以使用混淆矩阵来了解模型的敏感性和特定性。敏感性是指模型检测欺诈性交易的能力。特定性是指该模型能够避免将非欺诈性交易检测为欺诈性交易。

以下是回归问题的快速模型输出的示例。

![\[回归问题的快速模型输出示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-quick-model-regression-summary.png)


## 特征摘要
<a name="data-wrangler-data-insights-feature-summary"></a>

当您指定目标列时，Data Wrangler 会根据特征的预测能力对特征进行排序。预测能力是在将数据拆分为 80% 训练层和 20% 验证层之后，根据数据来衡量的。Data Wrangler 在训练层上分别拟合每个特征的模型。它应用最少的特征预处理并衡量验证数据的预测性能。

它将得分标准化为范围 [0,1]。预测得分越高，表示列自身对用于预测目标更有用。得分较低的列表示无法用于预测目标列的列。

某一列无法单独用于预测，但与其他列一起使用时具有预测性，这种情况并不常见。您可以放心地使用预测得分来确定数据集内的某个特征是否具有预测性。

得分低通常表示该特征是多余的。得分为 1 表示完美的预测能力，这通常表示目标泄漏。目标泄漏通常发生在数据集包含预测时不可用的列时。例如，它可能是目标列的重复项。

以下是显示每个特征预测值的表和直方图的示例。

![\[显示每个功能预测值的示例汇总表。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-feature-summary-table.png)


![\[显示每个功能预测值的柱状图示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-insights/data-insights-feature-summary-histogram.png)


## 样本
<a name="data-wrangler-data-insights-samples"></a>

Data Wrangler 提供有关样本是否异常或数据集内是否存在重复项的信息。

Data Wrangler 使用*孤立森林算法*来检测异常样本。孤立森林算法将异常得分与数据集的每个样本（行）相关联。异常得分低表示样本异常。高得分与非异常样本关联。异常得分为负的样本通常被视为异常样本，异常得分为正的样本被视为非异常样本。

查看可能存在异常的样本时，我们建议您注意异常值。例如，可能会由于收集和处理数据时出错而存在的异常值。我们建议您在检查异常样本时运用专业领域知识和业务逻辑。

Data Wrangler 会检测重复行，并计算您的数据中重复行的比例。某些数据来源可能包含有效的重复项。其他数据来源可能具有表明数据收集存在问题的重复项。由于数据收集错误而产生的重复样本可能会干扰依赖于将数据拆分为独立训练层和验证层的机器学习流程。

以下是见解报告中可能受到重复样本影响的元素：
+ 快速模型
+ 预测能力估计
+ 自动超参数优化

可以使用**管理行**下的**删除重复项**转换，从数据集内删除重复样本。Data Wrangler 会显示重复程度最高的行。

## 定义
<a name="data-wrangler-data-insights-definitions"></a>

以下是数据见解报告中使用的技术术语的定义。

------
#### [ Feature types ]

以下是每种特征类型的定义：
+ **数字** – 数字值可以是浮点数或整数，例如年龄或收入。机器学习模型假设数字值是有序的，并且在数字值上定义了距离。例如，3 比 10 更接近 4，3 < 4 < 10。
+ 分类：列条目属于一组唯一值，这组值通常比列中的条目数小得多。例如，长度为 100 的列可以包含唯一值 `Dog`、`Cat`、和 `Mouse`。值可以是数字、文本或两者的组合。`Horse`、`House`、`8`、`Love` 和 `3.1` 都可以是有效值，可在同一个分类列中找到。与数字特征相比，即使所有值都是数字，机器学习模型也不会对分类特征值采用顺序或距离。
+ **二进制** – 二进制特征是一种特殊的分类特征类型，其中唯一值集的基数为 2。
+ **文本** – 文本列包含许多非数字唯一值。在极端情况下，该列的所有元素都是唯一的。在极端情况下，没有两个条目是相同的。
+ **日期时间** – 日期时间列包含有关日期或时间的信息。其中可以同时包含有关日期和时间的信息。

------
#### [ Feature statistics ]

以下是每个特征统计数据的定义：
+ **预测能力** – 预测能力衡量该列在预测目标方面的作用如何。
+ **异常值**（在数字列中）– Data Wrangler 使用两个对异常值稳健的统计数据来检测异常值：中位数和稳健标准差 (RSTD)。通过将特征值裁剪到 [5 百分位数，95 百分位数] 范围并计算剪切向量的标准差，可得出 RSTD。所有大于“中位数 \$1 5 \$1 RSTD”或小于“中位数 – 5 \$1 RSTD”的值都被视为异常值。
+ **偏度**（在数字列中）– 偏度测量分布的对称性，并定义为分布的第三矩除以标准差的三次方。正态分布或任何其他对称分布的偏度为零。正值表示分布的右尾比左尾要长。负值表示分布的左尾比右尾要长。根据经验法则，当偏度的绝对值大于 3 时，分布被视为不对称。
+ **峰度**（在数字列中）– Pearson 峰度测量分布尾部的沉重度。它被定义为分布的第四矩除以第二矩的平方。正态分布的峰度为 3。峰度值低于 3 意味着分布集中在均值周围，尾部比正态分布的尾部轻。峰度值大于 3 表示尾部或异常值较重。
+ **缺失值** – 类似 NULL 的对象、空字符串以及仅由空格组成的字符串被视为缺失值。
+ **数值特征或回归目标的有效值** – 可以转换为有限浮点数的所有值均为有效值。缺失值无效。
+ **分类、二进制或文本特征的有效值或分类目标的有效值** – 所有未缺失的值均为有效值。
+ **日期时间特征** – 可以转换为日期时间对象的所有值均为有效值。缺失值无效。
+ **无效值** – 缺失或无法正确转换的值。例如，在数字列中，不能转换字符串 `"six"` 或 null 值。

------
#### [ Quick model metrics for regression ]

以下是快速模型指标的定义：
+ R2 或决定系数 – R2 是模型预测的目标差异的比例。R2 在 [-infty, 1] 范围内。1 是完美预测目标的模型的得分，0 是始终预测目标均值的平凡模型的得分。
+ MSE 或均方误差：MSE 在 [0, infty] 范围内。0 是完美预测目标的模型的得分。
+ MAE 或平均绝对误差：MAE 在 [0, infty] 范围内，其中 0 是完美预测目标的模型的得分。
+ RMSE 或均方根误差：RMSE 在 [0, infty] 范围内，其中 0 是完美预测目标的模型的得分。
+ 最大误差 – 数据集上误差的最大绝对值。最大误差在 [0，infty] 范围内。0 是完美预测目标的模型的得分。
+ 绝对误差中值：绝对误差中位数在 [0, infty] 范围内。0 是完美预测目标的模型的得分。

------
#### [ Quick model metrics for classification ]

以下是快速模型指标的定义：
+ **准确性** – 准确性是准确预测的样本的比率。准确性在 [0, 1] 范围内。0 是不正确预测所有样本的模型的得分，1 是完美模型的得分。
+ **平衡准确性** – 平衡准确性是调整分类权重来平衡数据时准确预测的样本的比率。无论分类的频率如何，所有分类都被赋予相同的重要性。平衡准确性在 [0, 1] 范围内。0 是错误预测所有样本的模型的得分，1 是完美模型的得分。
+ **AUC（二进制分类）**– 这是接收者操作特征曲线下方的区域。AUC 在 [0, 1] 范围内，其中随机模型返回的得分为 0.5，完美模型返回的得分为 1。
+ **AUC (OVR)** – 对于多分类器，这是接收者操作特征曲线下方的区域，对每个标签分别使用一个分类计算，并使用其余分类进行计算。Data Wrangler 会报告区域的平均值。AUC 在 [0, 1] 范围内，其中随机模型返回的得分为 0.5，完美模型返回的得分为 1。
+ **精度** – 精度是为特定分类定义的。精度是模型归类为该分类的所有实例中真阳性的比例。精度在 [0, 1] 范围内。1 是该分类没有误报的模型的得分。对于二进制分类，Data Wrangler 会报告正类的精度。
+ **查全率** – 查全率是针对特定分类定义的。查全率是成功检索的相关分类实例的比例。查全率在 [0, 1] 范围内。1 是正确对分类的所有实例进行分类的模型的得分。对于二进制分类，Data Wrangler 会报告正类的查全率。
+ **F1** – F1 是为特定分类定义的。它是精度和查全率之间的调和平均数。F1 在 [0, 1] 范围内。1 是完美模型的得分。对于二进制分类，Data Wrangler 会报告具有正值的分类的 F1。

------
#### [ Textual patterns ]

**模式**使用一种易于阅读的格式描述字符串的文本格式。以下是文本模式的示例：
+ “\$1digits:4-7\$1”描述了长度介于 4 到 7 之间的数字序列。
+ “\$1alnum:5\$1”描述了一个长度正好为 5 的字母数字字符串。

Data Wrangler 通过查看数据中的非空字符串样本，来推断模式。它可以描述许多常用的模式。**置信度**以百分比形式表示，指示估计有多少数据与该模式匹配。使用文本模式，可以了解需要更正或删除数据中的哪些行。

以下内容描述了 Data Wrangler 可识别的模式：


| 模式 | 文本格式 | 
| --- | --- | 
|  \$1alnum\$1  |  字母数字字符串  | 
|  \$1any\$1  |  任何单词字符串  | 
|  \$1digits\$1  |  数字序列  | 
|  \$1lower\$1  |  小写单词  | 
|  \$1mixed\$1  |  大小写混合的单词  | 
|  \$1name\$1  |  以大写字母开头的单词  | 
|  \$1upper\$1  |  大写单词  | 
|  \$1whitespace\$1  |  空格字符  | 

单词字符可以是下划线，也可以是可能会出现在任何语言的单词中的字符。例如，字符串“Hello\$1word”和“écoute”都由单词字符组成。“H”和“é”都是单词字符的示例。

------

# 根据您的数据流自动训练模型
<a name="data-wrangler-autopilot"></a>

您可以使用 Amazon A SageMaker utopilot 根据您在数据流中转换的数据自动训练、调整和部署模型。Amazon A SageMaker utopilot 可以分析多种算法，并使用最适合您的数据的算法。有关 Amazon A SageMaker utopilot 的更多信息，请参阅[SageMaker 自动驾驶](autopilot-automate-model-development.md)。

当您训练和调整模型时，Data Wrangler 会将您的数据导出到亚马逊 SageMaker 自动驾驶仪可以访问的 Amazon S3 位置。

您可以在 Data Wrangler 流中选择一个节点，然后在数据预览中选择**导出并训练**，来准备和部署模型。选择在数据集上训练模型之前，您可以使用此方法查看该数据集。

您也可以直接从数据流训练和部署模型。

下面的过程从数据流准备和部署模型。对于具有多行转换的 Data Wrangler 流，在部署模型时不能使用 Data Wrangler 流中的变换。您可以使用以下过程处理数据，然后再使用数据进行推理。

要直接从数据流中训练和部署模型，请执行以下操作。

1. 选择包含训练数据的节点旁边的 **\$1**。

1. 选择**训练模型**。

1. （可选）指定 AWS KMS 密钥或 ID。有关创建和控制加密密钥以保护数据的更多信息，请参阅 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)。

1. 选择**导出并训练**。

1. **在 Amazon A SageMaker utopilot 根据 Data Wrangler 导出的数据训练模型后，为实验名称指定一个名称。**

1. 在 “**输入数据**” 下，选择 “**预览**” 以验证 Data Wrangler 是否正确地将您的数据导出到 Ama SageMaker zon Autopilot。

1. 对于**目标**，选择目标列。

1. （可选）对于**输出数据**下的 **S3 位置**，请指定默认位置以外的 Amazon S3 位置。

1. 选择**下一步：训练方法**。

1. 选择训练方法。有关更多信息，请参阅 [模型训练](autopilot-model-support-validation.md#autopilot-training-mode)。

1. （可选）对于**自动部署端点**，指定端点名称。

1. 对于**部署选项**，选择一个部署方法。您可以选择在对数据进行转换或不转换的情况下进行部署。
**重要**  
你无法使用你在数据牧马人流程中所做的转换来部署 Amazon A SageMaker utopilot 模型。有关这些转换的更多信息，请参阅 [导出到推理端点](data-wrangler-data-export.md#data-wrangler-data-export-inference)。

1. 选择**复查并创建**。

1. 选择 **Create experiment (创建实验)**。

有关模型训练和部署的更多信息，请参阅 [使用 AutoML API 为表格数据创建回归或分类作业](autopilot-automate-model-development-create-experiment.md)。Autopilot 会向您显示有关最佳模型性能的分析。有关模型性能的更多信息，请参阅 [查看 Autopilot 模型性能报告](autopilot-model-insights.md)。

# 转换数据
<a name="data-wrangler-transform"></a>

Amazon SageMaker Data Wrangler 提供大量机器学习数据转换，以简化数据的清理、转换和特征化。当您添加转换时，数据流会增加一个步骤。您添加的每个转换都会修改数据集，并生成新的数据框。所有后续转换都适用于生成的数据框。

Data Wrangler 包括内置转换，可用于转换列而无需任何代码。您还可以使用 Python（用户定义函数） PySpark、pandas 和 PySpark SQL 添加自定义转换。有些转换可就地运行，而其他一些转换会在数据集中创建新的输出列。

您可以一次将转换应用于多列。例如，您可以在一个步骤中删除多列。

**处理数字**和**处理缺失值**转换只能应用于单列。

可通过本页面了解有关内置转换和自定义转换的更多信息。

## 转换 UI
<a name="data-wrangler-transform-ui"></a>

大多数内置转换都位于 Data Wrangler UI 的**准备**选项卡中。您可以通过数据流视图访问联接转换和串联转换。可使用下表预览这两种视图。

------
#### [ Transform ]

您可以将转换添加到数据流中的任何步骤。可使用以下过程，将转换添加到数据流。

要在数据流中添加步骤，请执行以下操作。

1. 选择数据流中步骤旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**添加步骤**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-add-step.png)

1. 选择转换。

1. （可选）您可以搜索要使用的转换。Data Wrangler 会在结果中突出显示此查询。  
![\[\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-search.png)

------
#### [ Join View ]

要联接两个数据集，可选择数据流中的第一个数据集，然后选择**联接**。选择**联接**后，您会看到类似下图所示的结果。左数据集和右数据集显示在左侧面板中。主面板将显示您的数据流，并添加了新联接的数据集。

![\[Data Wrangler 管理控制台数据流部分中的连接数据集流。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/join-1.png)


如果选择**配置**以配置您的联接，您会看到类似下图所示的结果。联接配置显示在左侧面板中。您可以使用此面板选择联接的数据集名称、联接类型和要联接的列。主面板将显示三个表。上面两个表在左侧和右侧分别显示左数据集和右数据集。在此表下方，可以预览联接的数据集。

![\[Data Wrangler 管理控制台数据流部分中的连接数据集表。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/join-2.png)


请参阅[联接数据集](#data-wrangler-transform-join)，了解更多信息。

------
#### [ Concatenate View ]

要串联两个数据集，可选择数据流中的第一个数据集，然后选择**串联**。选择**串联**后，您会看到类似下图所示的结果。左数据集和右数据集显示在左侧面板中。主面板将显示您的数据流，并添加了新串联的数据集。

![\[Data Wrangler 管理控制台数据流部分中的连接数据集流程示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/concat-1.png)


如果选择**配置**以配置您的串联，您会看到类似下图所示的结果。串联配置将显示在左侧面板中。您可以使用此面板选择串联的数据集名称，并选择串联后删除重复项，然后添加列以指示源数据框。主面板将显示三个表。上面两个表在左侧和右侧分别显示左数据集和右数据集。在此表下方，可以预览串联的数据集。

![\[Data Wrangler 管理控制台数据流部分中的数据集表格连接示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/concat-2.png)


请参阅 [串联数据集](#data-wrangler-transform-concatenate)，了解更多信息。

------

## 联接数据集
<a name="data-wrangler-transform-join"></a>

您可以在数据流中直接联接数据框。在联接两个数据集时，生成的联接数据集将显示在流中。Data Wrangler 支持以下联接类型。
+ **左外** – 包括左表中的所有行。如果左表行中联接的列值与任何右表行值均不匹配，那么在联接的表中该行为所有右表列显示空值。
+ **左反** – 包括左表中不包含右表中联接列的值的行。
+ **左半** – 对于满足联接语句中标准的所有相同行，包括左表中的单行。此类型从左表中排除了符合联接标准的重复行。
+ **右外** – 包括右表中的所有行。如果右表行中联接的列值与任何左表行值均不匹配，那么在联接的表中该行为所有左表列显示空值。
+ **内部** – 包括左表和右表中联接列中包含匹配值的行。
+ **全外** – 包括左表和右表中的所有行。如果任一表中联接列的行值不匹配，则会在联接的表中创建单独的行。如果在联接的表中行不包含列的值，则为该列插入空值。
+ **笛卡尔交叉** – 包括将第一个表中的每一行与第二个表中的每一行相结合的行。这是联接中表行的[笛卡尔乘积](https://en.wikipedia.org/wiki/Cartesian_product)。乘积的结果即左表的大小乘以右表的大小。因此，我们建议在大型数据集之间慎用此联接类型。

可使用以下过程，联接两个数据框。

1. 选择要联接的左数据框旁边的 **\$1**。您选择的第一个数据框始终是联接中的左表。

1. 选择**联接**。

1. 选择右数据框。您选择的第二个数据框始终是联接中的右表。

1. 选择**配置**以配置您的联接。

1. 使用**名称**字段，为联接的数据集命名。

1. 选择**联接类型**。

1. 从左表和右表中选择要联接的列。

1. 选择**应用**，在右侧预览联接的数据集。

1. 要将联接的表添加到数据流，可选择**添加**。

## 串联数据集
<a name="data-wrangler-transform-concatenate"></a>

**串联两个数据集：**

1. 选择要串联的左数据框旁边的 **\$1**。您选择的第一个数据框始终是串联中的左表。

1. 选择**串联**。

1. 选择右数据框。您选择的第二个数据框始终是串联中的右表。

1. 选择**配置**以配置您的串联。

1. 使用**名称**字段，为串联的数据集命名。

1. （可选）选中**串联后删除重复项**旁边的复选框，以删除重复的列。

1. （可选）如果您希望为新数据集中的每一列添加列源指示器，可选中**添加列以指示源数据框**旁边的复选框。

1. 选择**应用**，预览新数据集。

1. 选择**添加**，将新数据集添加到数据流中。

## 平衡数据
<a name="data-wrangler-transform-balance-data"></a>

对于具代表不足的类别的数据集，您可以平衡其数据。平衡数据集有助于创建更好的二进制分类模型。

**注意**  
包含列向量的数据集无法平衡。

您可以通过**平衡数据**操作，使用以下运算符之一来平衡数据：
+ *随机过采样* – 在少数类别中随机重复样本。例如，如果您尝试检测欺诈行为，但可能只有 10% 的数据存在欺诈案例。为使欺诈案例和非欺诈案例达到同等比例，此运算符将数据集中的欺诈案例随机重复 8 次。
+ *随机欠采样* – 大致等同于随机过采样。从过度代表的类别中随机删除样本，以获得您所需的样本比例。
+ *合成少数过采样技术 (SMOTE)* – 使用代表不足的类别中的样本，插入新的合成少数样本。有关 SMOTE 的更多信息，请参阅以下说明。

对于包含数字和非数字特征的数据集，可以使用所有转换。SMOTE 通过使用相邻样本插入值。Data Wrangler 使用 R 平方距离确定领域，以插入额外的样本。Data Wrangler 仅使用数字特征来计算代表不足的组中样本之间的距离。

对于代表不足的组中的两个实际样本，Data Wrangler 使用加权平均值插入数字特征。它会为 [0, 1] 范围内的样本随机分配权重。对于数字特征，Data Wrangler 使用样本的加权平均值来插入样本。对于样本 A 和 B，Data Wrangler 可能随机为 A 分配 0.7 的权重，为 B 分配 0.3。插入的样本值为 0.7A \$1 0.3B。

Data Wrangler 通过复制插入的任一实际样本，插入非数字特征。它按照随机分配给每个样本的概率复制样本。对于样本 A 和 B，它可能为 A 分配概率 0.8，为 B 分配 0.2。按照它所分配的概率，80% 的时间会复制 A。

## 自定义转换
<a name="data-wrangler-transform-custom"></a>

**自定义变换**组允许您使用 Python（用户定义函数） PySpark、pandas 或 PySpark (SQL) 来定义自定义转换。对于所有三个选项，可以使用变量 `df` 访问要应用转换的数据框。要将自定义代码应用于数据框，可将已进行转换的数据框分配给 `df` 变量。如果您未使用 Python（用户定义函数），则无需包含返回语句。可选择**预览**，预览自定义转换的结果。可选择**添加**，将自定义转换添加到**先前的步骤**列表中。

您可以在自定义转换代码块中，使用 `import` 语句导入常用的库，如下所示：
+ NumPy 版本 1.19.0
+ scikit-learn 版本 0.23.2
+ SciPy 版本 1.5.4
+ pandas 版本 1.0.3
+ PySpark 版本 3.0.0

**重要**  
**自定义转换**不支持名称中包含空格或特殊字符的列。我们建议您指定仅包含字母数字字符和下划线的列名。您可以使用**管理列**转换组中的**重命名列**转换，从列名中删除空格。您也可以添加类似如下所示的 **Python (Pandas)** **自定义转换**，在单个步骤中删除多列的空格。以下示例将名为 `A column` 和 `B column` 的列分别更名为 `A_column` 和 `B_column`。  

```
df.rename(columns={"A column": "A_column", "B column": "B_column"})
```

如果在代码块中包含打印语句，那么当您选择**预览**时会显示结果。您可以调整自定义代码转换器面板的大小。调整面板大小可为编写代码提供更多空间。下图显示了如何调整面板大小。

![\[对于 Python 函数，请将 pd.Series 下的注释替换为您的代码。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/resizing-panel.gif)


以下各部分提供了更多上下文和示例，以便您编写自定义转换代码。

**Python（用户定义函数）**

借助 Python 函数，您无需了解 Apache Spark 或 pandas，即可编写自定义转换。Data Wrangler 经过优化，可快速运行您的自定义代码。通过使用自定义 Python 代码和 Apache Spark 插件，您可以获得类似的性能。

要使用 Python（用户定义函数）代码块，您需要指定以下设置：
+ **输入列** – 您要应用转换的输入列。
+ **模式** – 脚本模式，可以是 pandas 或 Python。
+ **返回类型** – 您要返回的值的数据类型。

使用 pandas 模式可以获得更好的性能。Python 模式更便于您使用纯 Python 函数编写转换。

以下视频显示了如何使用自定义代码创建转换的示例。此示例使用 [Titanic 数据集](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/walkthrough_titanic.csv)，创建包含人员称呼的列。

![\[对于 Python 函数，请将 pd.Series 下的注释替换为您的代码。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/python-function-transform-titanic-720.gif)


**PySpark**

以下示例从时间戳中提取日期和时间。

```
from pyspark.sql.functions import from_unixtime, to_date, date_format
df = df.withColumn('DATE_TIME', from_unixtime('TIMESTAMP'))
df = df.withColumn( 'EVENT_DATE', to_date('DATE_TIME')).withColumn(
'EVENT_TIME', date_format('DATE_TIME', 'HH:mm:ss'))
```

**pandas**

以下示例提供要向其添加转换的数据框的概述。

```
df.info()
```

**PySpark (SQL)**

以下示例创建一个包含四列的新数据框：*name*、*fare*、*pclass*、*survived*。

```
SELECT name, fare, pclass, survived FROM df
```

如果您不知道如何使用 PySpark，则可以使用自定义代码片段来帮助您入门。

Data Wrangler 有一个可搜索的代码片段集合。您可以使用代码片段执行多种任务，例如删除列、按列分组或建模。

要使用代码片段，可选择**搜索示例代码片段**，然后在搜索栏中指定查询。您在查询中指定的文本不需要与代码片段的名称完全匹配。

以下示例显示了**删除重复行**代码片段，该代码片段可以删除数据集中具有相似数据的行。您可以通过搜索以下文本之一，查找该代码片段：
+ 重复
+ 相同
+ 删除

以下代码片段包含注释，有助于您了解需要进行哪些更改。对于大多数代码片段，您必须在代码中指定数据集的列名。

```
# Specify the subset of columns
# all rows having identical values in these columns will be dropped

subset = ["col1", "col2", "col3"]
df = df.dropDuplicates(subset)  

# to drop the full-duplicate rows run
# df = df.dropDuplicates()
```

要使用代码片段，请将其内容复制并粘贴到**自定义转换**字段中。您可以将多个代码片段复制并粘贴到自定义转换字段中。

## 自定义公式
<a name="data-wrangler-transform-custom-formula"></a>

通过**自定义公式**，可使用 Spark SQL 表达式定义新列，以查询当前数据框中的数据。查询必须使用 Spark SQL 表达式的约定。

**重要**  
**自定义转换**不支持名称中包含空格或特殊字符的列。我们建议您指定仅包含字母数字字符和下划线的列名。您可以使用**管理列**转换组中的**重命名列**转换，从列名中删除空格。您也可以添加类似如下所示的 **Python (Pandas)** **自定义转换**，在单个步骤中删除多列的空格。以下示例将名为 `A column` 和 `B column` 的列分别更名为 `A_column` 和 `B_column`。  

```
df.rename(columns={"A column": "A_column", "B column": "B_column"})
```

您可以使用此转换对列执行操作，按名称引用列。例如，假设当前数据框包含名为 *col\$1a* 和 *col\$1b* 的列，您可以使用以下操作生成**输出列**，该列是上述两列的乘积，代码如下：

```
col_a * col_b
```

其他常见操作包括以下操作（假设数据框包含 `col_a` 和 `col_b` 列）：
+ 串联两列：`concat(col_a, col_b)`
+ 两列相加：`col_a + col_b`
+ 两列相减：`col_a - col_b`
+ 两列相除：`col_a / col_b`
+ 取一列的绝对值：`abs(col_a)`

有关更多信息，请参阅关于选择数据的 [Spark 文档](http://spark.apache.org/docs/latest/api/python)。

## 降低数据集中的维度
<a name="data-wrangler-transform-dimensionality-reduction"></a>

可使用主成分分析 (PCA) 降低数据的维度。数据集的维度与特征的数量相对应。如果您在 Data Wrangler 中使用降维，您会得到一组名为“成分”的新特征。每个成分在数据中占一定的可变性。

第一个成分在数据中占最大的变化量。第二个成分在数据中占第二大的变化量，以此类推。

您可以使用降维，减小用于训练模型的数据集大小。您可以使用主成分，替代数据集中的特征。

为了执行 PCA，Data Wrangler 会为数据创建轴。轴是数据集中列的仿射组合。第一个主成分即轴上变化量最大的值。第二个主成分即轴上变化量第二大的值。第 n 个主成分即轴上变化量第 n 大的值。

您可以配置 Data Wrangler 返回的主成得分量。您可以直接指定主成分的数量，也可以指定变化阈值百分比。每个主成分都解释了数据中的变化量。例如，您可能有一个值为 0.5 的主成分。该成分可解释数据中 50% 的变化。如果您指定变化阈值百分比，Data Wrangler 会返回符合所指定百分比的最小数量的成分。

以下示例为各个主成分及其在数据中解释的变化量。
+ 成分 1 – 0.5
+ 成分 2 – 0.45
+ 成分 3 – 0.05

如果将变化阈值百分比指定为 `94` 或 `95`，则 Data Wrangler 将返回成分 1 和成分 2。如果将变化阈值百分比指定为 `96`，则 Data Wrangler 将返回全部三个主成分。

您可以使用以下过程，对数据集运行 PCA。

要对数据集运行 PCA，请执行以下操作。

1. 打开 Data Wrangler 数据流。

1. 选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**降维**。

1. 对于**输入列**，选择要简化为主成分的特征。

1. （可选）对于**主成得分量**，选择 Data Wrangler 在数据集中返回的主成得分量。如果为该字段指定值，那么无法为**变化阈值百分比**指定值。

1. （可选）对于**变化阈值百分比**，指定希望主成分可解释的数据变化百分比。如果没有为变化阈值指定值，Data Wrangler 将使用默认值 `95`。如果已经为**主成得分量**指定了值，那么无法指定变化阈值百分比。

1. （可选）取消选择**居中**，不使用列的平均值作为数据的中心。默认情况下，Data Wrangler 在缩放之前采用平均值将数据居中。

1. （可选）取消选择**缩放**，不按单位标准差缩放数据。

1. （可选）选择**列**，将成分输出到单独的列。选择**向量**，将成分输出为单个向量。

1. （可选）对于**输出列**，指定输出列的名称。如果要将成分输出到单独的列，则指定的名称为前缀。如果要将成分输出到向量，则指定的名称为向量列的名称。

1. （可选）选择**保留输入列**。如果您计划仅使用主成分来训练模型，我们不建议您选择此选项。

1. 选择**预览**。

1. 选择**添加**。

## 对分类数据进行编码
<a name="data-wrangler-transform-cat-encode"></a>

分类数据通常由有限数量的类别组成，其中每个类别用字符串表示。例如，如果您有客户数据表，则表明某人居住的国家/地区的列即为分类数据。类别有 *Afghanistan*、*Albania*、*Algeria* 等等。分类数据可以是*标称的*或*有序的*。有序类别有固有的次序，标称类别则没有。获得的最高学位（*High school*、*Bachelors*、*Masters* 等）即有序类别的一个示例。

对分类数据进行编码是为类别创建数字表示形式的过程。例如，如果你的分类是 *Dog* 和 *Cat*，则可以将此信息编码为两个向量：`[1,0]` 表示 *Dog*，`[0,1]` 表示 *Cat*。

对有序类别进行编码时，可能需要将类别的自然顺序转换为编码。例如，您可以采用以下映射表示获得的最高学位：`{"High school": 1, "Bachelors": 2, "Masters":3}`。

可使用分类编码，将字符串格式的分类数据编码为整数数组。

Data Wrangler 分类编码器会在定义步骤时，为列中存在的所有类别创建编码。如果在时间 *t*，您启动 Data Wrangler 作业以处理数据集时，列中添加了新的类别，并且此列在时间 *t*-1 是 Data Wrangler 分类编码转换的输入，那么这些新类别在 Data Wrangler 中将被视为*缺失*。您为**无效值处理策略**所选择的选项将应用于这些缺失值。何时会发生此类情况的示例如下：
+ 当您使用 .flow 文件创建 Data Wrangler 作业以处理数据集，而此数据集在数据流创建后更新了的时候。例如，您可能使用数据流每月定期处理销售数据。如果销售数据每周更新一次，对于已定义编码分类步骤的列，可能会有新的类别引入该列中。
+ 当您在导入数据集时选择**采样**，某些类别可能被排除在样本之外的时候。

在上述情况中，这些新的类别在 Data Wrangler 作业中被视为缺失值。

您可以选择*有序的*或*独热编码*，并进行配置。可通过以下部分了解有关这些选项的更多信息。

两种转换均创建一个名为**输出列**的新列。可以使用**输出样式**，指定此列的输出格式:
+ 选择**向量**，生成包含稀疏向量的单列。
+ 选择**列**，为每个类别创建一列，其中包含一个指示器变量，用于指示原始列中的文本是否包含等于该类别的值。

### 有序编码
<a name="data-wrangler-transform-cat-encode-ordinal"></a>

选择**有序编码**，将类别编码为介于 0 到所选**输入列**中类别总数之间的整数。

**无效值处理策略**：选择处理无效值或缺失值的方法。
+ 如果您希望忽略含缺失值的行，可选择**跳过**。
+ 选择**保留**，将缺失值保留为最后一个类别。
+ 如果您希望当**输入列**中遇到缺失值时，Data Wrangler 引发错误，可选择**错误**。
+ 选择**替换为 NaN**，用 NaN 替换缺失值。如果机器学习算法可以处理缺失值，我们建议使用此选项。否则，此列表中的前三个选项可能会产生更好的结果。

### 独热编码
<a name="data-wrangler-transform-cat-encode-onehot"></a>

可以为**转换**选择**独热编码**，以使用独热编码。可通过以下选项配置此转换：
+ **删除最后一个类别**：如果为 `True`，则最后一个类别在独热编码中没有相应的索引。当可能存在缺失值时，缺失的类别始终是最后一个，将此选项设置为 `True` 意味着缺失值会导致全零向量。
+ **无效值处理策略**：选择处理无效值或缺失值的方法。
  + 如果您希望忽略含缺失值的行，可选择**跳过**。
  + 选择**保留**，将缺失值保留为最后一个类别。
  + 如果您希望当**输入列**中遇到缺失值时，Data Wrangler 引发错误，可选择**错误**。
+ **输入是否为有序编码**：如果输入向量包含有序编码的数据，可选择此选项。此选项要求输入数据包含非负整数。如果为**真**，则输入 *i* 被编码为在第 *i* 个位置非零的向量。

### 相似性编码
<a name="data-wrangler-transform-cat-encode-similarity"></a>

如果您有以下数据，则可使用相似性编码：
+ 大量分类变量
+ 噪声数据

相似性编码器为包含分类数据的列创建嵌入。嵌入即从离散对象（如单词）到实数向量的映射。该编码器将类似的字符串编码为包含相似值的向量。例如，为“California”和“Calfornia”创建极为相似的编码。

Data Wrangler 使用 3-gram 分词器将数据集中的每个类别转换为一组令牌。该编码器使用最小哈希编码将令牌转换为嵌入。

以下示例显示了相似性编码器如何从字符串创建向量。

![\[在 Data Wrangler 管理控制台中对表格使用 ENCODE CATEGORICAL 的示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/similarity-encode-example-screenshot-0.png)


![\[Data Wrangler 管理控制台中表格变量的向量表示示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/similarity-encode-example-screenshot-1.png)


Data Wrangler 创建的相似性编码：
+ 具有较低维度
+ 可扩展到大量类别
+ 稳健且耐噪声

出于上述原因，相似性编码比独热编码更为通用。

要将相似性编码转换添加到数据集中，请按以下过程操作。

要使用相似性编码，请执行以下操作。

1. 登录 [Amazon A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker/)。

1. 选择**打开 Studio Classic**。

1. 选择**启动应用程序**。

1. 选择 **Studio**。

1. 指定数据流。

1. 选择有转换的步骤。

1. 选择**添加步骤**。

1. 选择**对分类数据进行编码**。

1. 指定以下内容：
   + **转换** – **相似性编码**
   + **输入列** – 包含要编码的分类数据的列。
   + **目标维度** –（可选）分类嵌入向量的维度。默认值为 30。如果您的大型数据集包含许多类别，我们建议使用较大的目标维度。
   + **输出样式** – 选择**向量**，在单个向量中包含所有编码的值。选择**列**，将编码的值放在单独的列中。
   + **输出列** –（可选）对于向量编码的输出，为输出列的名称。对于列编码的输出，为列名称的前缀，后跟列出的数字。

## 特征化文本
<a name="data-wrangler-transform-featurize-text"></a>

可使用**特征化文本**转换组，检查字符串类型的列，并使用文本嵌入对这些列特征化。

此特征组包含两个特征：*字符统计*和*向量化*。可通过以下部分了解有关这些转换的更多信息。对于这两个选项，**输入列**必须包含文本数据（字符串类型）。

### 字符统计
<a name="data-wrangler-transform-featurize-text-character-stats"></a>

可使用**字符统计**，为包含文本数据的列中的每一行生成统计信息。

此转换将为每一行计算以下比率和计数，并创建新的列以报告结果。该新列采用输入列名称作为前缀，以及特定于比率或计数的后缀来命名。
+ **字数**：该行中单词的总数。此输出列的后缀为 `-stats_word_count`。
+ **字符数**：该行中字符的总数。此输出列的后缀为 `-stats_char_count`。
+ **大写比率**：从 A 到 Z 的大写字符数除以列中的所有字符数。此输出列的后缀为 `-stats_capital_ratio`。
+ **小写比率**：从 a 到 z 的小写字符数除以列中的所有字符数。此输出列的后缀为 `-stats_lower_ratio`。
+ **数字比率**：单行中的数字与输入列中数字总和的比率。此输出列的后缀为 `-stats_digit_ratio`。
+ **特殊字符比率**：非字母数字字符（如 \$1\$1&%:@）与输入列中所有字符总和的比率。此输出列的后缀为 `-stats_special_ratio`。

### 向量化
<a name="data-wrangler-transform-featurize-text-vectorize"></a>

文本嵌入涉及将词汇表中的单词或短语映射到实数向量。可使用 Data Wrangler 文本嵌入转换，将文本数据令牌化和向量化为词频-逆文档频率 (TF-IDF) 向量。

当为一列文本数据计算 TF-IDF 时，每句话中的每个单词都将转换为代表其语义重要性的实数。数字越高，与之关联的单词出现频率越低，这些单词往往更有意义。

在定义**向量化**转化步骤时，Data Wrangler 使用数据集中的数据来定义计数向量化器和 TF-IDF 方法。运行 Data Wrangler 作业时会使用相同的方法。

您可以使用以下选项配置此转换：
+ **输出列名**：此转换将创建包含文本嵌入的新列。此字段可用于指定此输出列的名称。
+ **分词器**：分词器将句子转换为单词或*令牌*列表。

  可选择**标准**，使用按空格拆分单词并将每个单词转换为小写的分词器。例如，`"Good dog"` 被令牌化为 `["good","dog"]`。

  可选择**自定义**，使用自定义的分词器。如果选择**自定义**，则可使用以下字段来配置分词器：
  + **最小令牌长度**：令牌有效的最小长度（以字符为单位）。默认值为 `1`。例如，如果将最小令牌长度指定为 `3`，那么诸如 `a, at, in` 等单词将从令牌化句子中删除。
  + **正则表达式是否按间隔拆分**：如果选中，则**正则表达式**按间隔拆分。否则，将与令牌匹配。默认值为 `True`。
  + **正则表达式模式**：定义令牌化过程的正则表达式模式。默认值为 `' \\ s+'`。
  + **转换为小写**：如果选中，则 Data Wrangler 在令牌化之前将所有字符转换为小写。默认值为 `True`。

  要了解更多信息，请参阅有关[分词器](https://spark.apache.org/docs/latest/ml-features#tokenizer)的 Spark 文档。
+ **向量器**：向量器将令牌列表转换为稀疏数字向量。每个令牌对应于向量中的索引，非零表示输入句子中存在该令牌。您可以从两个向量器选项中进行选择：*计数*和*哈希*。
  + **计数向量化**允许自定义筛选不常见或太常见的令牌。**计数向量化参数**包括以下选项：
    + **最低词频**：在每一行中，筛选掉频率较低的词（令牌）。如果指定一个整数，那么该值为绝对阈值（含该值）。如果指定一个介于 0（含）到 1 之间的得分，那么阈值是总词数的相对值。默认值为 `1`。
    + **最小文档频率**：必须包含词（令牌）的最小行数。如果指定一个整数，那么该值为绝对阈值（含该值）。如果指定一个介于 0（含）到 1 之间的得分，那么阈值是总词数的相对值。默认值为 `1`。
    + **最大文档频率**：可以包含词（令牌）的最大文档（行）数。如果指定一个整数，那么该值为绝对阈值（含该值）。如果指定一个介于 0（含）到 1 之间的得分，那么阈值是总词数的相对值。默认值为 `0.999`。
    + **最大词汇量**：词汇表的最大大小。词汇表由列所有行中的所有词（令牌）组成。默认值为 `262144`。
    + **二进制输出**：如果选中，则向量输出不包括词在文档中的出现次数，而是词是否出现的二进制指示器。默认值为 `False`。

    要了解有关此选项的更多信息，请参阅上的 Spark 文档[CountVectorizer](https://spark.apache.org/docs/latest/ml-features#countvectorizer)。
  + **哈希**计算速度更快。**哈希向量化参数**包括以下选项：
    + **哈希过程中的特征数**：哈希向量器根据令牌的哈希值，将令牌映射到向量索引。此特征决定了可能的哈希值的数量。较大的值会减少哈希值之间的冲突，但会导致较高的维度输出向量。

    要了解有关此选项的更多信息，请参阅上的 Spark 文档 [FeatureHasher](https://spark.apache.org/docs/latest/ml-features#featurehasher)
+ **应用 IDF**：选中后，将应用 IDF 转换，该转换将词频与用于 TF-IDF 嵌入的标准逆文档频率相乘。**IDF 参数**包括以下选项：
  + **最小文档频率**：必须包含词（令牌）的最小文档（行）数。如果 **count \$1vectorize** 是选择的向量器，我们建议您保留默认值，只修改**计数向量化参数**中的 **min\$1doc\$1freq** 字段。默认值为 `5`。
+ **输出格式**：每行的输出格式。
  + 选择**向量**，生成包含稀疏向量的单列。
  + 选择**展平**，为每个类别创建一列，其中包含一个指示器变量，以指示原始列中的文本是否包含与该类别相等的值。如果**向量器**设置为**计数向量器**，那么只能选择展平。

## 转换时间序列
<a name="data-wrangler-transform-time-series"></a>

在 Data Wrangler 中，您可以转换时间序列数据。时间序列数据集中的值按特定时间编制索引。例如，显示一天中每小时商店中的顾客数量的数据集，即时间序列数据集。下表显示了时间序列数据集示例。

商店中每小时的顾客数


| 顾客数 | 时间（小时） | 
| --- | --- | 
| 4 | 09:00 | 
| 10 | 10:00 | 
| 14 | 11:00 | 
| 25 | 12:00 | 
| 20 | 13:00 | 
| 18 | 14:00 | 

对于上表，**顾客数**列中包含时间序列数据。时间序列数据根据**时间（小时）**列中的每小时数据编制索引。

您可能需要对数据执行一系列转换，才能获得可用于分析的格式。可使用**时间序列**转换组，对时间序列数据进行转换。有关可执行的转换的详细信息，请参阅以下各节。

**Topics**
+ [按时间序列分组](#data-wrangler-group-by-time-series)
+ [重新采样时间序列数据](#data-wrangler-resample-time-series)
+ [处理缺失的时间序列数据](#data-wrangler-transform-handle-missing-time-series)
+ [验证时间序列数据的时间戳](#data-wrangler-transform-validate-timestamp)
+ [标准化时间序列的长度](#data-wrangler-transform-standardize-length)
+ [从时间序列数据中提取特征](#data-wrangler-transform-extract-time-series-features)
+ [使用时间序列数据的滞后特征](#data-wrangler-transform-lag-time-series)
+ [在时间序列中创建日期时间范围](#data-wrangler-transform-datetime-range)
+ [在时间序列中使用滚动窗口](#data-wrangler-transform-rolling-window)

### 按时间序列分组
<a name="data-wrangler-group-by-time-series"></a>

您可以使用按操作分组，对列中特定值的时间序列数据进行分组。

例如，您通过下表跟踪住户的平均每日用电量：

平均每日住户用电量


| 住户 ID | 每日时间戳 | 用电量 (kWh) | 住户人数 | 
| --- | --- | --- | --- | 
| household\$10 | 1/1/2020 | 30 | 2 | 
| household\$10 | 2020 年 2 月 1 日 | 40 | 2 | 
| household\$10 | 2020 年 4 月 1 日 | 35 | 3 | 
| household\$11 | 2020 年 2 月 1 日 | 45 | 3 | 
| household\$11 | 2020 年 3 月 1 日 | 55 | 4 | 

如果您选择按 ID 分组，则可获得下表。

按住户 ID 分组的用电量


| 住户 ID | 用电量序列 (kWh) | 住户人数序列 | 
| --- | --- | --- | 
| household\$10 | [30, 40, 35] | [2, 2, 3] | 
| household\$11 | [45, 55] | [3, 4] | 

时间序列中的每一项按照相应的时间戳排序。序列的第一个元素对应于该序列的第一个时间戳。对于 `household_0`，`30` 是**用电量序列**的第一个值。值 `30` 对应于第一个时间戳 `1/1/2020`。

您可以将开始时间戳和结束时间戳包括在内。下表显示了这些信息的显示方式。

按住户 ID 分组的用电量


| 住户 ID | 用电量序列 (kWh) | 住户人数序列 | Start\$1time | End\$1time | 
| --- | --- | --- | --- | --- | 
| household\$10 | [30, 40, 35] | [2, 2, 3] | 1/1/2020 | 2020 年 4 月 1 日 | 
| household\$11 | [45, 55] | [3, 4] | 2020 年 2 月 1 日 | 2020 年 3 月 1 日 | 

您可以使用以下过程，按时间序列列进行分组。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**时间序列**。

1. 在**转换**下，选择**分组依据**。

1. 在**按此列分组**中，指定一列。

1. 对于**应用于列**，指定一个值。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 重新采样时间序列数据
<a name="data-wrangler-resample-time-series"></a>

时间序列数据中通常包含并非定期取得的观测值。例如，数据集中某些观测值是每小时记录的，而其他一些观测值是每两小时记录的。

许多分析（如预测算法）需要定期取得的观测值。您可以通过重新采样，为数据集中的观测值建立定期间隔。

您可以对时间序列进行上采样或下采样。下采样会延长数据集中观测值之间的间隔。例如，如果对每小时或每两小时记录的观测值进行下采样，那么数据集中的每个观测值将每两小时记录一次。对于每小时观测值，将使用聚合方法（如平均值或中位数）聚合为单个值。

上采样则会缩短数据集中观测值之间的间隔。例如，如果将每两小时记录一次的观测值上采样为每小时观测值，那么可以使用插值方法，从每两小时取得的观测值中推断出每小时观测值。[有关插值方法的信息，请参阅 pandas。 DataFrame. 插值。](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html)

您可以对数字数据和非数字数据重新采样。

可使用**重新采样**操作，对时间序列数据重新采样。如果数据集中有多个时间序列，Data Wrangler 会标准化每个时间序列的时间间隔。

下表显示了使用平均值聚合方法对时间序列数据进行下采样的示例。数据采样从每两小时一次降到每小时一次。

下采样前一天的每小时温度读数


| Timestamp | 温度（摄氏度） | 
| --- | --- | 
| 12:00 | 30 | 
| 1:00 | 32 | 
| 2:00 | 35 | 
| 3:00 | 32 | 
| 4:00 | 30 | 

延长至每两小时的温度读数


| Timestamp | 温度（摄氏度） | 
| --- | --- | 
| 12:00 | 30 | 
| 2:00 | 33.5 | 
| 4:00 | 35 | 

您可以使用以下过程，对时间序列数据重新采样。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**重新采样**。

1. 对于**时间戳**，选择时间戳列。

1. 对于**频率单位**，指定要重新采样的频率。

1. （可选）指定**频率数量**值。

1. 指定其余的字段配置转换。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 处理缺失的时间序列数据
<a name="data-wrangler-transform-handle-missing-time-series"></a>

如果数据集中有缺失值，可执行以下操作之一：
+ 对于具有多个时间序列的数据集，可删除其缺失值大于指定阈值的时间序列。
+ 使用时间序列中的其他值，填补时间序列中的缺失值。

填补缺失值涉及通过指定值或使用推理方法来替换数据。以下是可用于填补的方法：
+ 常量值 – 将数据集中所有缺失数据替换为指定值。
+ 最常见的值 – 将所有缺失数据替换为数据集中出现频率最高的值。
+ 向前填充 – 使用向前填充，将缺失值替换为缺失值前面的非缺失值。对于序列 [2, 4, 7, NaN, NaN, NaN, 8]，所有缺失值将替换为 7。采用向前填充产生的序列为 [2, 4, 7, 7, 7, 7, 8]。
+ 向后填充 – 使用向后填充，将缺失值替换为缺失值后面的非缺失值。对于序列 [2, 4, 7, NaN, NaN, NaN, 8]，所有缺失值将替换为 8。采用向后填充产生的序列为 [2, 4, 7, 8, 8, 8, 8]。
+ 插值 – 使用插值函数填补缺失值。[有关可用于插值的函数的更多信息，请参阅 pandas。 DataFrame. 插值。](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html)

某些填补方法可能无法填补数据集中的所有缺失值。例如，**向前填充**无法填补出现在时间序列开头的缺失值。您可以使用向前填充或向后填充来填补值。

您可以填补单元格内或列中的缺失值。

以下示例显示了如何填补单元格内的值。

含缺失值的用电量


| 住户 ID | 用电量序列 (kWh) | 
| --- | --- | 
| household\$10 | [30, 40, 35, NaN, NaN] | 
| household\$11 | [45, NaN, 55] | 

采用向前填充填补值的用电量


| 住户 ID | 用电量序列 (kWh) | 
| --- | --- | 
| household\$10 | [30, 40, 35, 35, 35] | 
| household\$11 | [45, 45, 55] | 

以下示例显示了如何填补列中的值。

含缺失值的平均每日住户用电量


| 住户 ID | 用电量 (kWh) | 
| --- | --- | 
| household\$10 | 30 | 
| household\$10 | 40 | 
| household\$10 | NaN | 
| household\$11 | NaN | 
| household\$11 | NaN | 

采用向前填充填补值的平均每日住户用电量


| 住户 ID | 用电量 (kWh) | 
| --- | --- | 
| household\$10 | 30 | 
| household\$10 | 40 | 
| household\$10 | 40 | 
| household\$11 | 40 | 
| household\$11 | 40 | 

您可以使用以下过程，处理缺失值。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**处理缺失值**。

1. 对于**时间序列输入类型**，选择是按照单元格还是列，处理缺失值。

1. 对于**填补此列的缺失值**，指定包含缺失值的列。

1. 对于**填补值的方法**，选择一种方法。

1. 指定其余的字段配置转换。

1. 选择**预览**，生成转换的预览。

1. 如果您有缺失值，那么可以在**填补值的方法**下，指定方法来填补缺失值。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 验证时间序列数据的时间戳
<a name="data-wrangler-transform-validate-timestamp"></a>

您可能有无效的时间戳数据。您可以使用**验证时间戳**函数，确定数据集中的时间戳是否有效。时间戳可能因以下一个或多个原因无效：
+ 时间戳列包含缺失值。
+ 时间戳列中的值格式不正确。

如果数据集中有无效的时间戳，则无法成功执行分析。您可以使用 Data Wrangler 来识别无效的时间戳，并了解需要在哪里清理数据。

时间序列验证按下面的两种方式之一运行：

可以配置 Data Wrangler，使之在数据集中遇到缺失值时执行以下操作之一：
+ 删除含缺失值或无效值的行。
+ 识别含缺失值或无效值的行。
+ 如果在数据集中发现任何缺失值或无效值，则引发错误。

可以对包含 `timestamp` 类型或 `string` 类型的列，验证时间戳。如果列包含 `string` 类型，Data Wrangler 会将列的类型转换为 `timestamp`，然后执行验证。

您可以使用以下过程，验证数据集中的时间戳。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**验证时间戳**。

1. 对于**时间戳列**，选择时间戳列。

1. 对于**策略**，选择是否要处理缺失的时间戳。

1. （可选）对于**输出列**，指定输出列的名称。

1. 如果日期时间列的格式为字符串类型，可选择**转为日期时间**。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 标准化时间序列的长度
<a name="data-wrangler-transform-standardize-length"></a>

如果将时间序列数据存储为数组，那么可以将每个时间序列标准化为相同的长度。通过标准化时间序列数组的长度，您或许能更轻松地执行数据分析。

对于需要固定数据长度的数据转换，您可以对时间序列进行标准化。

许多机器学习算法要求您在使用时间序列数据之前，对数据进行展平。展平时间序列数据是在数据集中，将时间序列的每个值分隔到自己的列中。数据集中的列数不能更改，因此需要在将每个数组展平为一组特征的过程中，对时间序列的长度进行标准化。

每个时间序列的长度可设置为指定的时间序列集的分位数或百分位数。例如，您可能拥有三个长度如下的序列：
+ 3
+ 4
+ 5

您可以将所有序列的长度设置为长度为第 50 个百分位数的序列的长度。

小于指定长度的时间序列数组会添加缺失值。以下示例格式将时间序列标准化为更长的长度：[2, 4, 5, NaN, NaN, NaN]。

您可以使用不同的方法处理缺失值。有关这些方法的信息，请参阅[处理缺失的时间序列数据](#data-wrangler-transform-handle-missing-time-series)。

大于指定长度的时间序列数组将被截断。

您可以使用以下过程，对时间序列的长度进行标准化。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**标准化长度**。

1. 对于**为此列标准化时间序列长度**，选择一列。

1. （可选）对于**输出列**，指定输出列的名称。如果未指定名称，则转换将就地完成。

1. 如果日期时间列的格式为字符串类型，可选择**转为日期时间**。

1. 选择**截止分位数**，指定一个分位数以设置序列的长度。

1. 选择**展平输出**，将时间序列的值输出到单独的列中。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 从时间序列数据中提取特征
<a name="data-wrangler-transform-extract-time-series-features"></a>

如果对时间序列数据运行分类或回归算法，我们建议在运行算法之前，从时间序列中提取特征。提取特征可能会提高算法的性能。

可使用以下选项，选择要从数据中提取特征的方式：
+ 使用**最小子集**，指定提取您认为在下游分析中有用的 8 个特征。如果需要快速执行计算，则可使用最小子集。如果机器学习算法有过度拟合的高风险，并且您希望为其提供较少的特征，那么也可以使用此方式。
+ 使用**高效子集**，指定在不提取分析中计算密集型特征的情况下，尽可能提取最多的特征。
+ 使用**所有特征**，指定从调整序列中提取所有特征。
+ 使用**手动子集**，选择您认为可充分解释数据变化的特征列表。

可使用以下过程，从时间序列数据中提取特征。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**提取特征**。

1. 对于**为此列提取特征**，选择一列。

1. （可选）选择**展平**，将特征输出到单独的列中。

1. 对于**策略**，选择提取特征的策略。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 使用时间序列数据的滞后特征
<a name="data-wrangler-transform-lag-time-series"></a>

对于许多使用案例来说，预测时间序列未来行为的最佳方法，是使用其最近的行为。

滞后特征最常见的用途如下：
+ 收集少许过去的值。例如，对于时间 t \$1 1，收集 t、t - 1、t - 2 和 t - 3。
+ 收集与数据中的周期性行为对应的值。例如，要预测下午 1:00 餐厅的上座率，您可能要使用前一天下午 1:00 的特征。如果使用当天中午 12:00 或上午 11:00 的特征，可能不像使用前几天的特征那样具有预测性。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**滞后特征**。

1. 对于**为此列生成滞后特征**，选择一列。

1. 对于**时间戳列**，选择包含时间戳的列。

1. 对于**滞后**，指定滞后的持续时间。

1. （可选）可使用以下选项之一配置输出：
   + **包括整个滞后窗口**
   + **展平输出**
   + **删除无历史记录的行**

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 在时间序列中创建日期时间范围
<a name="data-wrangler-transform-datetime-range"></a>

您可能有不含时间戳的时间序列数据。如果您知道观测值是定期取得的，那么可以在单独的列中为时间序列生成时间戳。要生成时间戳，请指定开始时间戳的值和时间戳的频率。

例如，您可能有以下时间序列数据，一家餐厅的顾客数量。

餐厅顾客数的时间序列数据


| 顾客数 | 
| --- | 
| 10 | 
| 14 | 
| 24 | 
| 40 | 
| 30 | 
| 20 | 

如果您知道餐厅下午 5:00 开始营业，并且每小时记录一次观测值，那么可以添加与时间序列数据对应的时间戳列。您可以在下表中看到时间戳列。

餐厅顾客数的时间序列数据


| 顾客数 | Timestamp | 
| --- | --- | 
| 10 | 1:00 PM | 
| 14 | 2:00 PM | 
| 24 | 3:00 PM | 
| 40 | 4:00 PM | 
| 30 | 5:00 PM | 
| 20 | 6:00 PM | 

可使用以下过程，向数据添加日期时间范围。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**日期时间范围**。

1. 对于**频率类型**，选择用于衡量时间戳频率的单位。

1. 对于**开始时间戳**，指定开始的时间戳。

1. 对于**输出列**，指定输出列的名称。

1. （可选）使用其余的字段配置输出。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

### 在时间序列中使用滚动窗口
<a name="data-wrangler-transform-rolling-window"></a>

您可以提取一段时间内的特征。例如，给定时间 *t*，时间窗口长度为 3，以及表示第 *t* 个时间戳的行，我们可追加时间 *t* - 3、*t* -2 和 *t* - 1 时从时间序列提取的特征。有关提取特征的信息，请参阅[从时间序列数据中提取特征](#data-wrangler-transform-extract-time-series-features)。

您可以使用以下过程，提取一段时间内的特征。

1. 打开 Data Wrangler 数据流。

1. 如果尚未导入数据集，在**导入数据**选项卡下进行导入。

1. 在数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**滚动窗口特征**。

1. 对于**为此列生成滚动窗口特征**，选择一列。

1. 对于**时间戳列**，选择包含时间戳的列。

1. （可选）对于**输出列**，指定输出列的名称。

1. 对于**窗口大小**中，指定窗口大小。

1. 对于**策略**，选择提取策略。

1. 选择**预览**，生成转换的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

## 特征化日期时间
<a name="data-wrangler-transform-datetime-embed"></a>

可使用**特征化日期/时间**，创建表示日期时间字段的向量嵌入。要使用此转换，日期时间数据必须采用以下格式之一：
+ 描述日期时间的字符串：例如，`"January 1st, 2020, 12:44pm"`。
+ Unix 时间戳：描述自 1970 年 1 月 1 日以来的秒数、毫秒数、微秒数或纳秒数的 Unix 时间戳。

您可以选择**推断日期时间格式**，或者提供**日期时间格式**。如果提供日期时间格式，则必须使用 [Python 文档](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)中所述的代码。为这两种配置选择的选项，会影响到操作速度和最终结果：
+ 手动程度最高且计算速度最快的选项是指定**日期时间格式**，并为**推断日期时间格式**选择**否**。
+ 要减少手动工作量，可以选择**推断日期时间格式**，而不是指定日期时间格式。此操作的计算速度也很快，不过，此配置会假定在输入列中遇到的第一个日期时间格式是整个列的格式。如果列中还有其他格式，这些值在最终输出中会显示为 NaN。推断日期时间格式可为您提供未解析的字符串。
+ 如果未指定格式，并且为**推断日期时间格式**选择了**否**，那么您会得到最稳健的结果。所有有效的日期时间字符串都将进行解析。但是，此操作可能会比列表中的前两个选项慢一个数量级。

使用此转换时，应指定包含上述格式之一的日期时间数据的**输入列**。转换会创建名为**输出列名**的输出列。输出列的格式取决于通过以下选项进行的配置：
+ **向量**：将单列输出为向量。
+ **列**：为每个特征创建新的列。例如，如果输出包含年、月和日，那么将会为年、月和日创建三个单独的列。

此外，必须选择**嵌入模式**。对于线性模型和深度网络，我们建议选择**循环的**。对于基于树的算法，我们建议选择**有序的**。

## 格式化字符串
<a name="data-wrangler-transform-format-string"></a>

**格式化字符串**转换包含标准的字符串格式化操作。例如，您可以使用这些操作删除特殊字符、规范化字符串长度以及更新字符串大小写。

此特征组包含以下转换。所有转换都将在**输入列**中返回字符串副本，然后将结果添加到新的输出列。


| Name | 函数 | 
| --- | --- | 
| 左侧填充 |  使用给定的**填充字符**，填充字符串的左侧，以达到给定**宽度**。如果字符串的长度超过**宽度**，则返回值将缩短至**宽度**字符。  | 
| 右侧填充 |  使用给定的**填充字符**，填充字符串的右侧，以达到给定**宽度**。如果字符串的长度超过**宽度**，则返回值将缩短至**宽度**字符。  | 
| 中心（两侧填充） |  使用给定的**填充字符**，在字符串两侧进行填充，以达到给定**宽度**。如果字符串的长度超过**宽度**，则返回值将缩短至**宽度**字符。  | 
| 前面加零 |  用零填充数字字符串的左侧，以达到给定**宽度**。如果字符串的长度超过**宽度**，则返回值将缩短至**宽度**字符。  | 
| 左右剥离 |  返回删除了前导字符和尾随字符的字符串副本。  | 
| 左侧字符剥离 |  返回删除了前导字符的字符串副本。  | 
| 右侧字符剥离 |  返回删除了尾随字符的字符串副本。  | 
| 小写 |  将文本中的所有字母转换为小写。  | 
| 大写 |  将文本中的所有字母转换为大写。  | 
| 首字母大写 |  将每个句子的第一个字母大写。  | 
| 交换大小写 | 将给定字符串的所有大写字符转换为小写，将所有小写字符转换为大写，然后返回。 | 
| 添加前缀或后缀 |  为字符串列添加前缀和后缀。必须指定至少一个**前缀**和**后缀**。  | 
| 删除符号 |  从字符串中删除给定符号。列出的所有字符都将删除。默认值为空格。  | 

## 处理异常值
<a name="data-wrangler-transform-handle-outlier"></a>

机器学习模型对特征值的分布和范围很敏感。异常值或稀有值可能会对模型准确性产生负面影响，并导致更长的训练时间。可使用此特征组，检测并更新数据集中的异常值。

在定义**处理异常值**转换步骤时，用于检测异常值的统计数据是在定义此步骤时，根据 Data Wrangler 中的可用数据生成的。运行 Data Wrangler 作业时，也会用到这些统计数据。

可通过以下部分，了解有关此组所包含的转换的更多信息。指定**输出名称**以及以下转换中的每一个，都会生成含结果数据的输出列。

### 稳健标准差数字异常值
<a name="data-wrangler-transform-handle-outlier-rstdev"></a>

此转换使用对异常值而言稳健的统计数据，检测并修复数字特征中的异常值。

您必须为用于计算异常值的统计数据，定义**上分位数**和**下分位数**。还必须指定一个**标准差**数，值必须偏离平均值此数额，才能被视为异常值。例如，如果指定**标准差**为 3，那么值必须偏离平均值 3 个标准差以上，才会被视为异常值。

**修复方法**是在检测到异常值后，用于处理异常值的方法。可从以下选项中进行选择：
+ **裁剪**：使用此选项可将异常值剪裁到相应的异常值检测边界。
+ **删除**：使用此选项可从数据框中删除含异常值的行。
+ **失效**：使用此选项可用无效值替换异常值。

### 标准差数字异常值
<a name="data-wrangler-transform-handle-outlier-sstdev"></a>

此转换使用平均值和标准差检测并修复数字特征中的异常值。

您可以指定一个**标准差**数，值必须偏离平均值此数额，才能被视为异常值。例如，如果指定**标准差**为 3，那么值必须偏离平均值 3 个标准差以上，才会被视为异常值。

**修复方法**是在检测到异常值后，用于处理异常值的方法。可从以下选项中进行选择：
+ **裁剪**：使用此选项可将异常值剪裁到相应的异常值检测边界。
+ **删除**：使用此选项可从数据框中删除含异常值的行。
+ **失效**：使用此选项可用无效值替换异常值。

### 分位数数字异常值
<a name="data-wrangler-transform-handle-outlier-quantile-numeric"></a>

可使用此转换，通过分位数检测并修复数字特征中的异常值。您可以定义**上分位数**和**下分位数**。所有高于上分位数或低于下分位数的值，均被视为异常值。

**修复方法**是在检测到异常值后，用于处理异常值的方法。可从以下选项中进行选择：
+ **裁剪**：使用此选项可将异常值剪裁到相应的异常值检测边界。
+ **删除**：使用此选项可从数据框中删除含异常值的行。
+ **失效**：使用此选项可用无效值替换异常值。

### 最小-最大数字异常值
<a name="data-wrangler-transform-handle-outlier-minmax-numeric"></a>

此转换使用上限和下限阈值检测并修复数字特征中的异常值。如果您知道区分异常值的阈值，可使用此方法。

您应指定**上限阈值**和**下限阈值**，如果值分别高于或低于这些阈值，则被视为异常值。

**修复方法**是在检测到异常值后，用于处理异常值的方法。可从以下选项中进行选择：
+ **裁剪**：使用此选项可将异常值剪裁到相应的异常值检测边界。
+ **删除**：使用此选项可从数据框中删除含异常值的行。
+ **失效**：使用此选项可用无效值替换异常值。

### 替换稀有值
<a name="data-wrangler-transform-handle-outlier-replace-rare"></a>

使用**替换稀有值**转换时，您指定一个阈值，Data Wrangler 会查找符合该阈值的所有值，然后将其替换为您指定的字符串。例如，您可能希望使用此转换，将列中的所有异常值归类到“其他”类别中。
+ **替换字符串**：用来替换异常值的字符串。
+ **绝对阈值**：如果实例数小于或等于此绝对阈值，则类别为稀有。
+ **得分阈值**：如果实例数小于或等于此得分阈值乘以行数，则类别为稀有。
+ **最大常见类别**：操作后保留的最大非稀有类别。如果阈值未筛选足够多的类别，那么出现频率最多的类别将被归为非稀有类别。如果设置为 0（默认值），那么类别数量没有硬性限制。

## 处理缺失值
<a name="data-wrangler-transform-handle-missing"></a>

在机器学习数据集中，缺失值属于常见情况。在某些情况下，使用计算值（如平均值或绝对普通值）来填补缺失的数据是合适的。您可以使用**处理缺失值**转换组来处理缺失值。此组包含以下转换。

### 填充缺失值
<a name="data-wrangler-transform-fill-missing"></a>

可使用**填充缺失值**转换，将缺失值替换为您所定义的**填充值**。

### 填补缺失值
<a name="data-wrangler-transform-impute"></a>

可使用**填补缺失值**转换，创建新的列，其中包含在输入分类数据和数字数据中发现的缺失值的填补值。配置取决于您的数据类型。

对于数字数据，可选择一个填补策略，用于确定要填补的新值。您可以选择填补数据集中所存在值的平均值或中位数。Data Wrangler 使用它所计算的值来填补缺失值。

对于分类数据，Data Wrangler 使用列中最常见的值来填补缺失值。如果要填补自定义字符串，可改用**填充缺失值**转换。

### 添加缺失值指示器
<a name="data-wrangler-transform-missing-add-indicator"></a>

可使用**添加缺失值指示器**转换，创建包含布尔值的新的指示器列：如果行中包含值，则为 `"false"`；如果行中包含缺失值，则为 `"true"`。

### 删除缺失值
<a name="data-wrangler-transform-drop-missing"></a>

可使用**删除缺失值**选项，从**输入列**中删除包含缺失值的行。

## 管理列
<a name="data-wrangler-manage-columns"></a>

您可以使用以下转换，快速更新和管理数据集中的列：


| Name | 函数 | 
| --- | --- | 
| 删除列 | 对列进行删除。 | 
| 复制列 | 对列进行复制。 | 
| 重命名列 | 对列进行重命名。 | 
| 移动列 |  移动列在数据集中的位置。可选择将列移动到数据集的起始或结尾、参考列之前或之后，或特定索引。  | 

## 管理行
<a name="data-wrangler-transform-manage-rows"></a>

可使用此转换组，对行快速执行排序和打乱操作。此组包含以下转换：
+ **排序**：按给定列对整个数据框进行排序。可为此选项选中**升序**旁边的复选框。或者，取消选中该复选框并按降序进行排列。
+ **打乱**：随机打乱数据集中的所有行。

## 管理向量
<a name="data-wrangler-transform-manage-vectors"></a>

可使用此转换组，合并或展平向量列。此组包含以下转换。
+ **组合**：可使用此转换，将 Spark 向量和数字数据合并到单列中。例如，您可以合并三列：两列包含数字数据，另一列包含向量。在**输入列**中添加要合并的所有列，然后为合并的数据指定**输出列名称**。
+ **展平**：可使用此转换，对包含向量数据的单列进行展平。输入列必须包含 PySpark 向量或类似数组的对象。您可以通过指定**检测输出数量的方法**，控制创建的列数。例如，如果您选择**第一个向量的长度**，那么在列中找到的第一个有效向量或数组中的元素数量，决定了创建的输出列的数量。包含太多项的所有其他输入向量将被截断。项目太少的输入会被填满 NaNs。

  您还可以指定**输出前缀**，用作每个输出列的前缀。

## 处理数字
<a name="data-wrangler-transform-process-numeric"></a>

可使用**处理数字**特征组，处理数字数据。此组中的每个缩放器均使用 Spark 库定义。支持以下缩放器：
+ **标准缩放器**：通过从每个值中减去平均值并缩放到单位方差，对输入列进行标准化。要了解更多信息，请参阅 Spark 文档[StandardScaler](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-transform.html)。
+ **稳健缩放器**：使用对异常值而言稳健的统计数据缩放输入列。要了解更多信息，请参阅 Spark 文档[RobustScaler](https://spark.apache.org/docs/latest/ml-features#robustscaler)。
+ **最小最大缩放器**：通过将每个特征缩放到给定范围来转换输入列。要了解更多信息，请参阅 Spark 文档[MinMaxScaler](https://spark.apache.org/docs/latest/ml-features#minmaxscaler)。
+ **最大绝对缩放器**：通过将每个值除以最大绝对值来缩放输入列。要了解更多信息，请参阅 Spark 文档[MaxAbsScaler](https://spark.apache.org/docs/latest/ml-features#maxabsscaler)。

## 采样
<a name="data-wrangler-transform-sampling"></a>

导入数据后，您可以使用**采样**转换器，抽取数据的一个或多个样本。使用采样转换器时，Data Wrangler 会对原始数据集进行采样。

您可以选择以下采样方法之一：
+ **限制**：从第一行开始对数据集采样，直到指定的限制。
+ **随机化**：随机提取指定大小的样本。
+ **分层**：随机提取分层样本。

您可以对随机样本进行分层，以确保样本代表数据集的原始分布。

您可能正在为多个使用案例执行数据准备。对于每个使用案例，您可以抽取不同的样本并应用一组不同的转换。

以下过程描述了创建随机样本的过程。

从数据中抽取随机样本。

1. 选择导入的数据集右侧的 **\$1**。数据集名称位于 **\$1** 下方。

1. 选择**添加转换**。

1. 选择**采样**。

1. 对于**采样方法**，选择采样方法。

1. 对于**近似样本量**，选择样本中所需的近似观测值数量。

1. （可选）为**随机种子**指定一个整数以创建可重现的样本。

以下过程描述了创建分层样本的过程。

从数据中抽取分层样本。

1. 选择导入的数据集右侧的 **\$1**。数据集名称位于 **\$1** 下方。

1. 选择**添加转换**。

1. 选择**采样**。

1. 对于**采样方法**，选择采样方法。

1. 对于**近似样本量**，选择样本中所需的近似观测值数量。

1. 对于**分层列**，指定要对其分层的列的名称。

1. （可选）为**随机种子**指定一个整数以创建可重现的样本。

## 搜索和编辑
<a name="data-wrangler-transform-search-edit"></a>

可使用此部分，搜索和编辑字符串中的特定模式。例如，您可以查找并更新句子或文档中的字符串、按分隔符拆分字符串，以及查找特定字符串的多次出现。

**搜索和编辑**支持以下转换。所有转换都将在**输入列**中返回字符串副本，然后将结果添加到新的输出列。


| Name | 函数 | 
| --- | --- | 
|  查找子字符串  |  返回您搜索的**子字符串**第一次出现的索引。您可以分别在**开始**和**结束**处开始和结束搜索。  | 
|  查找子字符串（从右起）  |  返回您搜索的**子字符串**最后一次出现的索引。您可以分别在**开始**和**结束**处开始和结束搜索。  | 
|  匹配前缀  |  如果字符串包含给定**模式**，则返回布尔值。模式可以是字符序列或正则表达式。您可以选择让模式区分大小写。  | 
|  查找所有出现  |  返回一个数组，其中包含给定模式的所有出现。模式可以是字符序列或正则表达式。  | 
|  使用正则表达式提取  |  返回一个与给定正则表达式模式相匹配的字符串。  | 
|  在分隔符之间提取  |  返回一个字符串，其中包含在**左分隔符**与**右分隔符**之间找到的所有字符。  | 
|  从位置提取  |  返回一个字符串，以输入字符串的**开始位置**开头，包含开始位置加上**长度**之前的所有字符。  | 
|  查找并替换子字符串  |  返回一个字符串，其中给定**模式**（正则表达式）的所有匹配项均替换为**替换字符串**。  | 
|  在分隔符之间替换  |  返回一个字符串，其中在**左分隔符**的第一次出现与**右分隔符**的最后一次出现之间找到的字符串，替换为**替换字符串**。如果未找到匹配项，则不进行任何替换。  | 
|  从位置替换  |  返回一个字符串，其中**开始位置**与**开始位置**加上**长度**之间的子字符串，替换为**替换字符串**。如果**开始位置**加上**长度**大于替换字符串的长度，则输出包含 **...**。  | 
|  将正则表达式转换为缺失值  |  如果无效则将字符串转换为 `None`，并返回结果。有效性通过**模式**中的正则表达式定义。  | 
|  按分隔符拆分字符串  |  返回输入字符串的一个字符串数组，按**分隔符**拆分，最多可以达到**最大拆分数量**（可选）。分隔符默认为空格。  | 

## 拆分数据
<a name="data-wrangler-transform-split-data"></a>

可使用**拆分数据**转换，将数据集拆分为两个或三个数据集。例如，您可以将数据集拆分为用于训练模型的数据集，以及用于测试模型的数据集。您可以决定每次拆分的数据集比例。例如，如果您要将一个数据集拆分为两个数据集，则训练数据集可以包含 80% 的数据，测试数据集包含 20% 的数据。

您可以将数据拆分为三个数据集，以便创建训练、验证和测试数据集。您可以通过删除目标列，来查看模型在测试数据集上的表现。

您的使用场景决定了每个数据集可获得多少原始数据集，以及用于拆分数据的方法。例如，您可能希望使用分层拆分，确保目标列中观测值在数据集中的分布相同。您可以使用以下拆分转换：
+ 随机拆分 – 每个拆分都是原始数据集的随机、非重叠样本。对于较大的数据集，使用随机拆分的计算成本可能很高，而且比有序拆分花费的时间更长。
+ 有序拆分：根据观测值的顺序拆分数据集。例如，对于 80/20 的训练/测试拆分，数据集前面 80% 的观测值将去到训练数据集。后面 20% 的观测结果去到测试数据集。有序拆分可有效保持拆分之间数据的现有顺序。
+ 分层拆分：拆分数据集以确保输入列中的观测值数量按比例代表。对于包含如下观测值的输入列：1、1、1、1、1、1、2、2、2、2、2、2、2、2、3、3、3、3、3、3、3，该列的 80/20 拆分意味着大约 80% 的 1、80% 的 2 和 80% 的 3 去到训练集。大约 20% 的每种类型的观测值去到测试集。
+ 按键拆分 – 避免具有相同键的数据出现在多个拆分中。例如，如果数据集中包含“customer\$1id”列，并且您将该列用作键，则客户 ID 不会出现在多个拆分中。

拆分数据之后，您可以对每个数据集应用其他转换。对于大多数使用案例而言，并不是必需的。

Data Wrangler 会计算拆分的比例，以提高性能。您可以选择误差阈值来设置拆分的准确性。较低的误差阈值可以更准确地反映您指定的拆分比例。如果设置较高的误差阈值，则性能会更好，但准确性会降低。

要获得完美拆分的数据，可将误差阈值设置为 0。您可以指定介于 0 与 1 之间的阈值，以提高性能。如果指定的值大于 1，则 Data Wrangler 将该值解释为 1。

如果数据集有 10000 行，并且您指定了 80/20 拆分，误差为 0.001，那么观测值将接近以下结果之一：
+ 训练集中有 8010 个观测值，测试集中有 1990 个观测值
+ 训练集中有 7990 个观测值，测试集中有 2010 个观测值

在上述示例中，训练集的观测值数量在 8010 到 7990 之间的区间内。

默认情况下，Data Wrangler 使用随机种子来使拆分可重现。您可以为种子指定不同的值，以创建不同的可重现拆分。

------
#### [ Randomized split ]

可使用以下过程，对数据集执行随机拆分。

要随机拆分数据集，请执行以下操作

1. 选择包含要拆分的数据集的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**拆分数据**。

1. （可选）对于**拆分**，指定每个拆分的名称和比例。比例之和必须为 1。

1. （可选）选择 **\$1** 以创建其他拆分。

   1. 指定所有拆分的名称和比例。比例之和必须为 1。

1. （可选）为**误差阈值**指定一个默认值以外的值。

1. （可选）为**随机种子**指定值。

1. 选择**预览**。

1. 选择**添加**。

------
#### [ Ordered split ]

可使用以下过程，对数据集执行有序拆分。

要在数据集中进行有序拆分，请执行以下操作。

1. 选择包含要拆分的数据集的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 对于**转换**，选择**有序拆分**。

1. 选择**拆分数据**。

1. （可选）对于**拆分**，指定每个拆分的名称和比例。比例之和必须为 1。

1. （可选）选择 **\$1** 以创建其他拆分。

   1. 指定所有拆分的名称和比例。比例之和必须为 1。

1. （可选）为**误差阈值**指定一个默认值以外的值。

1. （可选）对于**输入列**，指定包含数字值的列。可使用列的值来推断每个拆分中有哪些记录。较小值在一个拆分中，较大值在多个拆分中。

1. （可选）选择**处理重复项**，向重复值添加噪声，并创建一个完全唯一值的数据集。

1. （可选）为**随机种子**指定值。

1. 选择**预览**。

1. 选择**添加**。

------
#### [ Stratified split ]

可使用以下过程，对数据集执行分层拆分。

要在数据集中进行分层拆分，请执行以下操作。

1. 选择包含要拆分的数据集的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**拆分数据**。

1. 对于**转换**，选择**分层拆分**。

1. （可选）对于**拆分**，指定每个拆分的名称和比例。比例之和必须为 1。

1. （可选）选择 **\$1** 以创建其他拆分。

   1. 指定所有拆分的名称和比例。比例之和必须为 1。

1. 对于**输入列**，指定最多包含 100 个唯一值的列。Data Wrangler 无法对唯一值超过 100 个的列进行分层。

1. （可选）为**误差阈值**指定一个默认值以外的值。

1. （可选）为**随机种子**指定值，以指定不同的种子。

1. 选择**预览**。

1. 选择**添加**。

------
#### [ Split by column keys ]

可使用以下过程，按数据集中的列键进行拆分。

要按数据集中的列键进行拆分，请执行以下操作。

1. 选择包含要拆分的数据集的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**拆分数据**。

1. 对于**转换**，选择**按键拆分**。

1. （可选）对于**拆分**，指定每个拆分的名称和比例。比例之和必须为 1。

1. （可选）选择 **\$1** 以创建其他拆分。

   1. 指定所有拆分的名称和比例。比例之和必须为 1。

1. 对于**键列**，指定您不希望出现在两个数据集中的值所在的列。

1. （可选）为**误差阈值**指定一个默认值以外的值。

1. 选择**预览**。

1. 选择**添加**。

------

## 将值解析为类型
<a name="data-wrangler-transform-cast-type"></a>

可使用此转换，将列转为新的类型。支持的 Data Wrangler 数据类型包括：
+ 长整型
+ 浮点型
+ 布尔值
+ 日期，格式 dd-MM-yyyy分别代表日、月和年。
+ 字符串

## 验证字符串
<a name="data-wrangler-transform-validate-string"></a>

可使用**验证字符串**转换，创建新列以指示文本数据行是否符合指定的条件。例如，您可以使用**验证字符串**转换，验证字符串是否只包含小写字符。**验证字符串**支持以下转换。

此转换组中包括以下转换。如果转换输出布尔值，则 `True` 用 `1` 表示，`False` 用 `0` 表示。


| Name | 函数 | 
| --- | --- | 
|  字符串长度  |  如果字符串长度等于指定长度，则返回 `True`。否则返回 `False`。  | 
|  开始字符  |  如果字符串以指定前缀开头，则返回 `True`。否则返回 `False`。  | 
|  结束字符  |  如果字符串长度等于指定长度，则返回 `True`。否则返回 `False`。  | 
|  是字母数字  |  如果字符串仅包含数字和字母，则返回 `True`。否则返回 `False`。  | 
|  是字母  |  如果字符串仅包含字母，则返回 `True`。否则返回 `False`。  | 
|  是数字  |  如果字符串仅包含数字，则返回 `True`。否则返回 `False`。  | 
|  是空格  |  如果字符串仅包含数字和字母，则返回 `True`。否则返回 `False`。  | 
|  是标题  |  如果字符串包含任何空格，则返回 `True`。否则返回 `False`。  | 
|  是小写  |  如果字符串仅包含小写字母，则返回 `True`。否则返回 `False`。  | 
|  是大写  |  如果字符串仅包含大写字母，则返回 `True`。否则返回 `False`。  | 
|  是数值  |  如果字符串仅包含数值，则返回 `True`。否则返回 `False`。  | 
|  是十进制  |  如果字符串仅包含十进制数字，则返回 `True`。否则返回 `False`。  | 

## 取消嵌套 JSON 数据
<a name="data-wrangler-transform-flatten-column"></a>

如果您有 .csv 文件，则数据集中的值可能是 JSON 字符串。同样地，Parquet 文件或 JSON 文档的列中可能存在嵌套数据。

可使用**展平结构**运算符，将第一级键分隔到单独的列中。第一级键即没有嵌套在值中的键。

例如，您可能有一个数据集，其中包含 *person* 列，且每个人的人口统计信息存储为 JSON 字符串。JSON 字符串可能类似如下所示。

```
 "{"seq": 1,"name": {"first": "Nathaniel","last": "Ferguson"},"age": 59,"city": "Posbotno","state": "WV"}"
```

**展平结构**运算符会将以下第一级键转换到数据集中的其他列：
+ seq
+ name
+ age
+ city
+ 状态

Data Wrangler 将键的值作为值放在列下。下面显示了 JSON 的列名和值。

```
seq, name,                                    age, city, state
1, {"first": "Nathaniel","last": "Ferguson"}, 59, Posbotno, WV
```

对于数据集中包含 JSON 的每个值，**展平结构**运算符会为第一级键创建列。要为嵌套键创建列，可再次调用运算符。对于上述示例，调用运算符将创建以下列：
+ name\$1first
+ name\$1last

以下示例显示了再次调用操作后产生的数据集。

```
seq, name,                                    age, city, state, name_first, name_last
1, {"first": "Nathaniel","last": "Ferguson"}, 59, Posbotno, WV, Nathaniel, Ferguson
```

可选择**要展平的键**，指定要提取为单独列的第一级键。如果未指定任何键，默认情况下 Data Wrangler 会提取所有键。

## 爆炸数组
<a name="data-wrangler-transform-explode-array"></a>

可使用**爆炸数组**，将数组的值扩展为单独的输出行。例如，此操作可提取如下数组中的每个值：[[1, 2, 3,], [4, 5, 6], [7, 8, 9]]，并创建包含以下行的新列：

```
                [1, 2, 3]
                [4, 5, 6]
                [7, 8, 9]
```

Data Wrangler 将新列命名为 input\$1column\$1name\$1flatten。

您可以多次调用**爆炸数组**操作，将数组的嵌套值放入单独的输出列中。以下示例显示了对包含嵌套数组的数据集多次调用此操作的结果。

将嵌套数组的值放入单独的列中


| id | array | id | array\$1items | id | array\$1items\$1items | 
| --- | --- | --- | --- | --- | --- | 
| 1 | [ [cat, dog], [bat, frog] ] | 1 | [cat, dog] | 1 | cat | 
| 2 |  [[rose, petunia], [lily, daisy]]  | 1 | [bat, frog] | 1 | dog | 
|  |  | 2 | [rose, petunia] | 1 | bat | 
|  |  | 2 | [lily, daisy] | 1 | frog | 
|  |  |  | 2 | 2 | rose | 
|  |  |  | 2 | 2 | petunia | 
|  |  |  | 2 | 2 | lily | 
|  |  |  | 2 | 2 | daisy | 

## 转换图像数据
<a name="data-wrangler-transform-image"></a>

可使用 Data Wrangler 导入并转换用于机器学习 (ML) 管线的图像。准备好图像数据后，可以将其从 Data Wrangler 流导出至机器学习管线。

您可以使用此处提供的信息，来熟悉如何在 Data Wrangler 中导入并转换图像数据。Data Wrangler 使用 OpenCV 导入图像。有关支持的图像格式的更多信息，请参阅[图像文件读取和写入](https://docs.opencv.org/3.4/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56)。

熟悉转换图像数据的概念后，请阅读以下教程 “使用 [Amazon Data Wrangler 准备图像 SageMaker 数据](https://aws.amazon.com/blogs/machine-learning/prepare-image-data-with-amazon-sagemaker-data-wrangler/)”。

以下是将机器学习应用于转换后的图像数据的行业和使用案例，这些示例可能会有帮助：
+ 制造业 – 识别装配线中物品的缺陷
+ 食品业 – 识别变质或腐烂的食物
+ 医学 – 识别组织中的病变

在 Data Wrangler 中处理图像数据时，会经历以下过程：

1. 导入 – 通过在 Amazon S3 存储桶中选择包含图像的目录来选择图像。

1. 转换 – 使用内置的转换，为机器学习管线准备图像。

1. 导出 – 将转换后的图像导出至可从管线访问的位置。

可使用以下过程，导入图像数据。

**导入图像数据**

1. 导航至**创建连接**页面。

1. 选择 **Amazon S3**。

1. 指定包含图像数据的 Amazon S3 文件路径。

1. 对于**文件类型**，选择**图像**。

1. （可选）选择**导入嵌套目录**，从多个 Amazon S3 路径导入图像。

1. 选择**导入**。

Data Wrangler 使用开源 [imgaug](https://imgaug.readthedocs.io/en/latest/) 库进行内置图像转换。您可以使用以下内置转换：
+ **ResizeImage**
+ **EnhanceImage**
+ **CorruptImage**
+ **SplitImage**
+ **DropCorruptedImages**
+ **DropImageDuplicates**
+ **Brightness**
+ **ColorChannels**
+ **Grayscale**
+ **Rotate**

使用以下过程，无需编写代码即可转换图像。

**无需编写代码即可转换图像数据**

1. 在 Data Wrangler 流中，选择代表已导入图像的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**添加步骤**。

1. 选择转换并进行配置。

1. 选择**预览**。

1. 选择**添加**。

除了使用 Data Wrangler 提供的转换之外，您还可以使用自己的自定义代码片段。有关使用自定义代码片段的更多信息，请参阅[自定义转换](#data-wrangler-transform-custom)。您可以在代码片段中导入 OpenCV 和 imgaug 库，并使用与之相关的转换。以下是一个用于检测图像边缘的代码片段示例。

```
# A table with your image data is stored in the `df` variable
import cv2
import numpy as np
from pyspark.sql.functions import column

from sagemaker_dataprep.compute.operators.transforms.image.constants import DEFAULT_IMAGE_COLUMN, IMAGE_COLUMN_TYPE
from sagemaker_dataprep.compute.operators.transforms.image.decorators import BasicImageOperationDecorator, PandasUDFOperationDecorator


@BasicImageOperationDecorator
def my_transform(image: np.ndarray) -> np.ndarray:
  # To use the code snippet on your image data, modify the following lines within the function
    HYST_THRLD_1, HYST_THRLD_2 = 100, 200
    edges = cv2.Canny(image,HYST_THRLD_1,HYST_THRLD_2)
    return edges
    

@PandasUDFOperationDecorator(IMAGE_COLUMN_TYPE)
def custom_image_udf(image_row):
    return my_transform(image_row)
    

df = df.withColumn(DEFAULT_IMAGE_COLUMN, custom_image_udf(column(DEFAULT_IMAGE_COLUMN)))
```

在 Data Wrangler 流中应用转换时，Data Wrangler 仅对数据集中的图像样本应用转换。为了优化应用程序体验，Data Wrangler 不会对所有图像应用转换。

要将转换应用于所有图像，可将 Data Wrangler 流导出至 Amazon S3 位置。您可以在训练或推理管线中使用导出的图像。可使用目标节点或 Jupyter 笔记本导出数据。您可以通过任一方法从 Data Wrangler 流导出数据。有关使用这些方法的信息，请参阅[导出到 Amazon S3](data-wrangler-data-export.md#data-wrangler-data-export-s3)。

## 筛选数据
<a name="data-wrangler-transform-filter-data"></a>

可使用 Data Wrangler 筛选列中的数据。筛选列中的数据时，需要指定以下字段：
+ **列名** – 用于筛选数据的列的名称。
+ **条件** – 要对列中的值应用的筛选器类型。
+ **值** – 要应用筛选器的列中的值或类别。

您可以按以下条件进行筛选：
+ **=** – 返回与指定值或类别相匹配的值。
+ **\$1=** – 返回与指定值或类别不匹配的值。
+ **>=** – 对于**长整型**或**浮点型**数据，筛选大于或等于指定值的值。
+ **<=** – 对于**长整型**或**浮点型**数据，筛选小于或等于指定值的值。
+ **>** – 对于**长整型**或**浮点型**数据，筛选大于指定值的值。
+ **<** – 对于**长整型**或**浮点型**数据，筛选小于指定值的值。

对于包含类别 `male` 和 `female` 的列，可以筛选出所有 `male` 值。也可以筛选出所有 `female` 值。由于列中只有 `male` 和 `female` 值，因此筛选器返回仅包含 `female` 值的列。

您还可以添加多个筛选器。筛选器可应用于多列或同一列。例如，如果您要创建仅包含特定范围内的值的列，那么可添加两个不同的筛选器。一个筛选器指定列的值必须大于提供的值。另一个筛选器指定列的值必须小于提供的值。

可使用以下过程，将筛选转换添加到数据。

**筛选数据**

1. 在 Data Wrangler 流中，选择包含要筛选的数据的节点旁边的 **\$1**。

1. 选择**添加转换**。

1. 选择**添加步骤**。

1. 选择**筛选数据**。

1. 指定以下字段：
   + **列名** – 要筛选的列。
   + **条件** – 筛选器的条件。
   + **值** – 要应用筛选器的列中的值或类别。

1. （可选）选择创建的筛选器后面的 **\$1**。

1. 配置筛选器。

1. 选择**预览**。

1. 选择**添加**。

## 为 Amazon Personalize 映射列
<a name="data-wrangler-transform-personalize"></a>

Data Wrangler 可与 Amazon Personalize 集成，后者是一项完全托管的机器学习服务，可生成项目建议和用户细分。您可以使用**为 Amazon Personalize 映射列**转换，将数据转换为 Amazon Personalize 可以解释的格式。有关特定于 Amazon Personalize 的转换的更多信息，请参阅[使用 Amazon Data Wrangler 导入 SageMaker 数据](https://docs.aws.amazon.com/personalize/latest/dg/preparing-importing-with-data-wrangler.html#dw-transform-data)。有关 Amazon Personalize 的更多信息，请参阅 [Amazon Personalize 是什么？](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html)

# 分析和可视化
<a name="data-wrangler-analyses"></a>

Amazon SageMaker Data Wrangler 包含内置分析，只需点击几下即可帮助您生成可视化和数据分析。您还可以使用自己的代码创建自定义分析。

通过在数据流中选择一个步骤，然后选择**添加分析**，可以将分析添加到数据框中。要访问您创建的分析，请选择包含该分析的步骤，然后选择分析。

所有分析都是使用包含 10 万行数据的数据集生成的。

您可以将以下分析添加到数据框中：
+ 数据可视化，包括直方图和散点图。
+ 数据集的快速摘要，包括条目数、最小值和最大值（对于数字数据）以及最频繁和最少的类别（对于分类数据）。
+ 数据集的快速模型，可用于为每个特征生成重要性得分。
+ 目标泄漏报告，您可以使用该报告来确定一个或多个特征是否与目标特征密切关联。
+ 使用自己的代码进行自定义可视化。

可通过以下部分了解有关这些选项的更多信息。

## 直方图
<a name="data-wrangler-visualize-histogram"></a>

使用直方图可以查看特定特征的特征值计数。您可以使用**着色方式**选项检查特征之间的关系。例如，以下直方图显示了 2009-2019 年亚马逊畅销书的用户得分分布情况，按类型着色。

![\[Data Wrangler 管理控制台中的柱状图表示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/histogram.png)


您可以使用**划分方式**功能为一个列中的每个值创建另一个列的直方图。例如，下图显示了用户对亚马逊上畅销书的评论的直方图（如果按年份划分）。

![\[Data Wrangler 管理控制台中的柱状图示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/review_by_year.png)


## 散点图
<a name="data-wrangler-visualize-scatter-plot"></a>

使用**散点图**功能可以检查各特征之间的关系。要创建散点图，请选择要在 **X 轴**和 **Y 轴**上绘制的特征。这两列都必须是数字类型的列。

您可以通过额外的列为散点图着色。例如，以下示例显示了一个散点图，该散点图将 2009 年至 2019 年间亚马逊上畅销书的评论数量与用户得分进行了比较。散点图按书籍类型着色。

![\[Data Wrangler 管理控制台中的散点图示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/scatter-plot.png)


此外，您还可以按特征划分散点图。例如，下图显示了按年份划分的相同评论与用户得分散点图的示例。

![\[Data Wrangler 管理控制台中的分面散点图示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/scatter-plot-facet.png)


## 表摘要
<a name="data-wrangler-table-summary"></a>

使用**表摘要**分析可以快速总结数据。

对于包含数值数据（包括日志和浮点数据）的列，表摘要会报告每列的条目数 (count)、最小值 (min)、最大值 (max)、均值和标准差 (stddev)。

对于包含非数值数据的列，包括带有字符串、布尔值或 date/time 数据的列，表格摘要会报告条目数（计数）、频率最低的值（最小值）和最频繁的值（最大值）。

## 快速模型
<a name="data-wrangler-quick-model"></a>

使用**快速模型**可视化可以快速评估数据并为每个特征生成重要性得分。一个[特征重要性得分](http://spark.apache.org/docs/2.1.0/api/python/pyspark.ml.html#pyspark.ml.classification.DecisionTreeClassificationModel.featureImportances)指明特征在预测目标标签方面的有用性。特征重要性得分介于 [0, 1] 之间，数字越高表示该特征对整个数据集更重要。在快速模型图表的顶部，有一个模型得分。分类问题显示 F1 得分。回归问题有均方差 (MSE) 得分。

创建快速模型图表时，您可以选择要评估的数据集，以及要比较特征重要性的目标标签。Data Wrangler 会执行以下操作：
+ 推断目标标签的数据类型以及所选数据集内的每个特征的数据类型。
+ 确定问题类型。根据标签列中不同值的数量，Data Wrangler 确定这是回归还是分类问题类型。Data Wrangler 将分类阈值设置为 100。如果标签列中存在超过 100 个不同的值，Data Wrangler 会将其归类为回归问题；否则，会将其归类为分类问题。
+ 预处理特征和标签数据以供训练。所使用的算法要求将特征编码为向量类型，将标签编码为双精度类型。
+ 使用 70% 的数据训练随机森林算法。Spark [RandomForestRegressor](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-regression)'s 用于训练回归问题的模型。[RandomForestClassifier](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-classifier)用于训练模型以解决分类问题。
+ 使用剩余 30% 的数据评估随机森林模型。Data Wrangler 使用 F1 得分评估分类模型，并使用 MSE 得分评估回归模型。
+ 使用基尼重要性方法计算每个特征的特征重要性。

下图显示了快速模型特征的用户界面。

![\[Data Wrangler 管理控制台中快速模型功能的用户界面示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/quick-model.png)


## 目标泄漏
<a name="data-wrangler-analysis-target-leakage"></a>

当机器学习训练数据集内存在与目标标签密切相关但在真实世界数据中不可用的数据时，就会发生目标泄漏。例如，您的数据集内可能有一列作为您要在模型中预测的列的代理。

使用**目标泄漏**分析时，可以指定以下内容：
+ **目标**：这是您希望机器学习模型能够预测的特征。
+ **问题类型**：这是您正在处理的 ML 问题类型。问题类型可以是**分类**，也可以是**回归**。
+  （可选）**最大特征数**：这是要在可视化中显示的最大特征数，它显示了按目标泄漏风险排序的特征。

为了进行分类，目标泄漏分析使用接收者操作特征下的区域，或者对每一列使用 AUC - ROC 曲线，直到达到**最大特征数**。对于回归，使用确定系数或 R2 指标。

AUC - ROC 曲线提供了一个预测指标，该指标使用交叉验证为每列单独计算，样本最多约为 1000 行。得分为 1 表示完美的预测能力，这通常表示目标泄漏。得分为 0.5 或更低，表明该栏中的信息本身无法提供预测目标的任何有用信息。尽管一列本身可能无法提供信息，但与其他特征一起使用时可用于预测目标，但如果得分较低，可能表示该特征是多余的。

例如，下图显示了糖尿病分类问题的目标泄漏报告，即预测一个人是否患有糖尿病。AUC - ROC 曲线用于计算五个特征的预测能力，所有特征都被确定为不受目标泄漏的影响。

![\[Data Wrangler 管理控制台中的目标泄漏报告示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/target-leakage.png)


## 多重共线性
<a name="data-wrangler-multicollinearity"></a>

多重共线性是指两个或多个预测变量相互关联的情况。预测变量是数据集内用来预测目标变量的特征。当您具有多重共线性时，预测变量不仅可以预测目标变量，还可以相互预测。

您可以使用**方差膨胀系数 (VIF)**、**主成分分析 (PCA)** 或 **Lasso 特征选择**作为数据中多重共线性的度量。有关更多信息，请参阅下列内容。

------
#### [ Variance Inflation Factor (VIF) ]

方差膨胀系数 (VIF) 是衡量变量对之间共线性的指标。Data Wrangler 返回一个 VIF 得分，以此来衡量变量彼此之间的紧密关系。VIF 得分是一个大于等于 1 的正数。

得分为 1 表示该变量与其他变量不相关。得分大于 1 表示相关性更高。

理论上，您可以获得一个值为无穷大的 VIF 得分。Data Wrangler 将高得分限制为 50。如果您的 VIF 得分大于 50，则 Data Wrangler 会将得分设置为 50。

您可以使用以下准则来解释 VIF 得分：
+ VIF 得分小于或等于 5 表示变量与其他变量之间具有中度相关性。
+ VIF 得分大于或等于 5 表示变量与其他变量高度相关。

------
#### [ Principle Component Analysis (PCA) ]

主成分分析 (PCA) 测量数据在特征空间中沿不同方向的方差。特征空间由用于预测数据集内目标变量的所有预测变量构成。

例如，如果您想要预测谁在*泰坦尼克号皇家邮轮*撞上冰山后幸存下来，那么您的特征空间可以包括乘客的年龄、性别以及他们支付的票价。

PCA 从特征空间生成有序的方差列表。这些方差也称为奇异值。方差列表中的值大于或等于 0。我们可以使用这些值来确定我们的数据中存在多少多重共线性。

当数字大致相等时，数据中很少出现多重共线性情况。当值之间存在很多可变性时，我们就会有许多多重共线性情况。在执行 PCA 之前，Data Wrangler 会将每个特征标准化，实现平均值为 0，标准差为 1。

**注意**  
在这种情况下，PCA 也可以称为奇异值分解 (SVD)。

------
#### [ Lasso feature selection ]

Lasso 特征选择使用 L1 正则化技术，只包含数据集内预测性最高的特征。

对于分类和回归，正则化技术会为每个特征生成一个系数。系数绝对值为该特征提供了重要性得分。重要性得分越高，表示对目标变量的预测性越强。一种常见的特征选择方法是使用 lasso 系数为非零值的所有特征。

------

## 检测时间序列数据中的异常
<a name="data-wrangler-time-series-anomaly-detection"></a>

您可以使用异常检测可视化来查看时间序列数据中的异常值。要了解决定异常的因素，您需要明白，我们将时间序列分解为预测项和误差项。我们将时间序列的季节性和趋势视为预测项。我们将残差视为误差项。

对于误差项，您可以指定阈值，当残差远离平均值的偏差标准数达到该阈值时，便会将其视为异常。例如，您可以将阈值指定为 3 个标准差。任何距离平均值大于 3 个标准差的残差均为异常。

您可以使用以下步骤执行**异常检测**分析。

1. 打开 Data Wrangler 数据流。

1. 在您的数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加分析**。

1. 对于**分析类型**，选择**时间序列**。

1. 对于**可视化**，选择**异常检测**。

1. 对于**异常阈值**，选择将某个值视为异常的阈值。

1. 选择**预览**以生成分析的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

## 时间序列数据中的季节性趋势分解
<a name="data-wrangler-seasonal-trend-decomposition"></a>

您可以使用季节性趋势分解可视化，来确定时间序列数据中是否存在季节性。我们使用 STL（使用 LOESS 进行季节性趋势分解）方法进行分解。我们将时间序列分解为季节性、趋势和残差成分。这一趋势反映了该系列的长期进展。季节性成分是在一段时间内重复出现的信号。从时间序列中删除趋势和季节性成分后，您就获得了残差。

可以使用以下步骤执行**季节性趋势分解**分析。

1. 打开 Data Wrangler 数据流。

1. 在您的数据流中，在**数据类型**下，选择 **\$1**，然后选择**添加分析**。

1. 对于**分析类型**，选择**时间序列**。

1. 对于**可视化**，请选择**季节性趋势分解**。

1. 对于**异常阈值**，选择将某个值视为异常的阈值。

1. 选择**预览**以生成分析的预览。

1. 选择**添加**，将转换添加到 Data Wrangler 数据流中。

## 偏差报告
<a name="data-wrangler-bias-report"></a>

您可以使用 Data Wrangler 中的偏差报告，来发现数据中的潜在偏差。要生成偏差报告，必须指定要预测的目标列或**标签**，以及要检查偏差的**分面**或列。

**标签**：您希望模型进行预测的特征。例如，如果您在预测客户转化率，则可以选择一个列，其中包含客户是否已下订单的数据。您还必须指定此特征是标签还是阈值。如果指定标签，则必须指定数据中*积极结果*应该是什么样的。在买家转化示例中，积极结果可能是订单列中的 1，表示买家在过去三个月内下订单的积极结果。如果指定阈值，则必须指定定义积极结果的下限。例如，如果您的客户订单列包含去年下的订单数，则可能需要指定 1。

**分面**：您要检查偏差的列。例如，如果您尝试预测客户转化率，您的分面可能是客户的年龄。您之所以选择这个分面，是因为您认为自己的数据偏向于某个年龄组。您必须确定分面是以值还是阈值来衡量。例如，如果您希望检查一个或多个特定年龄，则可以选择**值**并指定这些年龄。如果想要查看某个年龄组，可以选择**阈值**，然后指定要检查的年龄阈值。

选择特征和标签后，可以选择要计算的偏差指标类型。

要了解更多信息，请参阅[为训练前数据中的偏差生成报告](https://docs.aws.amazon.com/sagemaker/latest/dg/data-bias-reports.html)。

## 创建自定义可视化
<a name="data-wrangler-visualize-custom"></a>

您可以向 Data Wrangler 流添加分析，来创建自定义可视化。您的数据集以及您应用的所有变换，都可以 [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) 的形式提供。Data Wrangler 使用 `df` 变量来存储数据框。可以通过调用变量来访问该数据框。

必须提供输出变量 `chart`，以便存储 [Altair](https://altair-viz.github.io/) 输出图表。例如，您可以通过以下代码块，使用泰坦尼克号数据集创建自定义直方图。

```
import altair as alt
df = df.iloc[:30]
df = df.rename(columns={"Age": "value"})
df = df.assign(count=df.groupby('value').value.transform('count'))
df = df[["value", "count"]]
base = alt.Chart(df)
bar = base.mark_bar().encode(x=alt.X('value', bin=True, axis=None), y=alt.Y('count'))
rule = base.mark_rule(color='red').encode(
    x='mean(value):Q',
    size=alt.value(5))
chart = bar + rule
```

**要创建自定义可视化，请执行以下操作：**

1. 在包含要可视化的变换的节点旁边，选择 **\$1**。

1. 选择**添加分析**。

1. 对于**分析类型**，选择**自定义可视化**。

1. 在**分析名称**中指定名称。

1. 在代码框中输入您的代码。

1. 选择**预览**以预览可视化。

1. 选择**保存**以添加可视化。

![\[如何在 Data Wrangler 管理控制台中添加可视化示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/custom-visualization.png)


如果您不知道如何在 Python 中使用 Altair 可视化包，可以使用自定义代码片段来协助您开始入手。

Data Wrangler 有一系列可搜索的可视化代码片段。要使用可视化代码片段，请选择**搜索示例代码片段**，然后在搜索栏中指定查询。

下面的示例使用**分仓散点图**代码片段，其中绘制了一个双维度直方图。

这些代码片段包含注释，有助于您了解需要对代码进行哪些更改。您通常需要在代码中指定自己的数据集的列名。

```
import altair as alt

# Specify the number of top rows for plotting
rows_number = 1000
df = df.head(rows_number)  
# You can also choose bottom rows or randomly sampled rows
# df = df.tail(rows_number)
# df = df.sample(rows_number)


chart = (
    alt.Chart(df)
    .mark_circle()
    .encode(
        # Specify the column names for binning and number of bins for X and Y axis
        x=alt.X("col1:Q", bin=alt.Bin(maxbins=20)),
        y=alt.Y("col2:Q", bin=alt.Bin(maxbins=20)),
        size="count()",
    )
)

# :Q specifies that label column has quantitative type.
# For more details on Altair typing refer to
# https://altair-viz.github.io/user_guide/encoding.html#encoding-data-types
```

# 针对不同数据集重用数据流
<a name="data-wrangler-parameterize"></a>

对于 Amazon Simple Storage Service (Amazon S3) 数据源，您可以创建和使用参数。参数即保存在 Data Wrangler 流中的变量。其值可以是数据源 Amazon S3 路径的任何部分。使用参数，可以快速更改导入 Data Wrangler 流或导出至处理作业的数据。您也可以使用参数，选择和导入数据的特定子集。

创建 Data Wrangler 流后，您可能已经在转换的数据上训练了一个模型。对于架构相同的数据集，可以使用参数，对不同的数据集应用相同的转换并训练不同的模型。可以使用新的数据集对模型进行推理，也可以用它们重新训练模型。

通常，参数具有以下属性：
+ 名称 – 为参数指定的名称
+ 类型 – 参数所表示的值的类型
+ 默认值 – 未指定新值时参数的值

**注意**  
日期时间参数在用作默认值时，具有时间范围属性。

Data Wrangler 使用大括号 `{{}}` 表示参数正用在 Amazon S3 路径中。例如，您可能有一个如下网址：`s3://amzn-s3-demo-bucket1/{{example_parameter_name}}/example-dataset.csv`。

您可以在编辑导入的 Amazon S3 数据源时创建参数。可以将文件路径的任何部分设置为参数值。可以将参数值设置为值或模式。以下是 Data Wrangler 流中可用的参数值类型：
+ 数字
+ 字符串
+ 模式
+ 日期时间

**注意**  
对于 Amazon S3 路径中存储桶的名称，不能创建模式参数或日期时间参数。

必须设置一个数字作为数字参数的默认值。在编辑参数或启动处理作业时，可以将参数的值更改为其他数字。例如，在 S3 路径 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv` 中，可以创建名为 `number_parameter` 的数字参数代替 `1`。S3 路径现在显示为 `s3://amzn-s3-demo-bucket/example-prefix/example-file-{{number_parameter}}.csv`。路径继续指向 `example-file-1.csv` 数据集，直到您更改参数的值。如果将 `number_parameter` 的值更改为 `2`，则现在路径为 `s3://amzn-s3-demo-bucket/example-prefix/example-file-2.csv`。如果您已将文件 `example-file-2.csv` 上传到该 Amazon S3 位置，那么可以将此文件导入 Data Wrangler 中。

字符串参数存储一个字符串作为其默认值。例如，在 S3 路径 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv` 中，可以创建名为 `string_parameter` 的字符串参数代替文件名 `example-file-1.csv`。路径现在显示为 `s3://amzn-s3-demo-bucket/example-prefix/{{string_parameter}}`。它会继续匹配 `s3://amzn-s3-demo-bucket/example-prefix/example-file-1.csv`，直到您更改参数的值。

您可以使用整个 Amazon S3 路径创建字符串参数，而不必将文件名指定为字符串参数。您可以在字符串参数中指定来自任何 Amazon S3 位置的数据集。

模式参数存储一个正则表达式（Python 正则表达式）字符串作为其默认值。您可以使用模式参数同时导入多个数据文件。要一次导入多个对象，可指定与要导入的 Amazon S3 对象相匹配的参数值。

您还可以为以下数据集创建模式参数：
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-1.csv
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-2.csv
+ s3://amzn-s3-demo-bucket1/example-prefix/example-file-10.csv
+ s3://amzn-s3-demo-bucket/example-prefix/example-file-0123.csv

对于 `s3://amzn-s3-demo-bucket1/example-prefix/example-file-1.csv`，您可以创建模式参数代替 `1`，并将该参数的默认值设置为 `\d+`。`\d+` 正则表达式字符串可匹配任意一个或多个十进制数字。如果创建名为 `pattern_parameter` 的模式参数，则 S3 路径显示为 `s3://amzn-s3-demo-bucket1/example-prefix/example-file-{{pattern_parameter}}.csv`。

您还可以使用模式参数匹配存储桶中的所有 CSV 对象。要匹配存储桶中的所有对象，可使用默认值 `.*` 创建模式参数，并将路径设置为 `s3://amzn-s3-demo-bucket/{{pattern_parameter}}.csv`。`.*` 字符可匹配路径中的任何字符串字符。

`s3://amzn-s3-demo-bucket/{{pattern_parameter}}.csv` 路径可以匹配以下数据集。
+ `example-file-1.csv`
+ `other-example-file.csv`
+ `example-file-a.csv`

日期时间参数存储包含以下信息的格式：
+ 用于解析 Amazon S3 路径中字符串的格式。
+ 用于限制匹配的日期时间值的相对时间范围

例如，在 Amazon S3 文件路径 `s3://amzn-s3-demo-bucket/2020/01/01/example-dataset.csv` 中，2020/01/01 用 `year/month/day` 的格式表示日期时间。您可以将参数的时间范围设置为间隔，如 `1 years` 或 `24 hours`。间隔 `1 years` 可匹配日期时间介于当前时间与当前时间前整一年的时间之间的所有 S3 路径。当前时间即开始导出对数据所做转换的时间。有关导出数据的更多信息，请参阅[导出](data-wrangler-data-export.md)。如果当前日期为 2022/01/01，时间范围为 `1 years`，那么 S3 路径可匹配如下数据集：
+ s3://amzn-s3-demo-bucket/2021/01/01/example-dataset.csv
+ s3://amzn-s3-demo-bucket/2021/06/30/example-dataset.csv
+ s3://amzn-s3-demo-bucket/2021/12/31/example-dataset.csv

相对时间范围内的日期时间值会随着时间的流逝而变化。位于相对时间范围内的 S3 路径也可能有所不同。

对于 Amazon S3 文件路径 `s3://amzn-s3-demo-bucket1/20200101/example-dataset.csv`，`20220101` 是一个可以成为日期时间参数的路径示例。

要查看您在 Data Wrangler 流中创建的所有参数的表，可在包含 Amazon S3 路径的文本框右侧选择“\$1\$1\$1\$1”。如果不再需要创建的参数，可以编辑或删除。要编辑或删除参数，可选择参数右侧的图标。

**重要**  
在删除参数之前，请确保没有在 Data Wrangler 流中的任何地方使用过该参数。删除仍在流中的参数会导致错误。

您可以为 Data Wrangler 流的任何步骤创建参数。可以编辑或删除创建的参数。如果要对与使用案例不再相关的数据应用转换，则可修改参数的值。修改参数的值会更改正在导入的数据。

以下各部分提供了有关使用参数的更多示例和一般指导。您可以通过这些部分来了解最适合您的参数。

**注意**  
以下各部分包含使用 Data Wrangler 接口覆盖参数并创建处理作业的过程。  
您也可以使用以下过程覆盖参数。  
要导出 Data Wrangler 流并覆盖参数的值，可执行以下操作。  
选择要导出的节点旁边的 **\$1**。
选择**导出目标**。
选择要将数据导出到的位置。
在 `parameter_overrides` 下，为创建的参数指定不同的值。
运行 Jupyter 笔记本。

## 将 Data Wrangler 流应用于使用模式的文件
<a name="data-wrangler-pattern-parameters"></a>

您可以使用参数，将 Data Wrangler 流中的转换应用于与 Amazon S3 URI 路径中的模式相匹配的不同文件。这有助于您指定 S3 存储桶中要以高特定性进行转换的文件。例如，您可能有一个路径为 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv` 的数据集。名为 `example-dataset.csv` 的不同数据集存储在许多不同的示例前缀下。前缀也可以按顺序编号。您可以为 Amazon S3 URI 中的数字创建模式。模式参数使用正则表达式，选择与表达式模式相匹配的任意数量的文件。以下是可能有用的正则表达式模式：
+ `.*` – 匹配零个或多个任意字符，换行符除外
+ `.+` – 匹配一个或多个任意字符，换行符除外
+ `\d+` – 匹配一个或多个任意十进制数字
+ `\w+` – 匹配一个或多个任意字母数字字符
+ `[abc-_]{2,4}` – 匹配由方括号内提供的一组字符组成的 2、3 或 4 个字符的字符串
+ `abc|def` – 匹配一个或另一个字符串。例如，此操作匹配 `abc` 或 `def`

您可以用值为 `\d+` 的单个参数，替换以下路径中的每个数字。
+ `s3://amzn-s3-demo-bucket1/example-prefix-3/example-prefix-4/example-prefix-5/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix-8/example-prefix-12/example-prefix-13/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix-4/example-prefix-9/example-prefix-137/example-dataset.csv`

以下过程为路径为 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv` 的数据集创建模式参数。

要创建模式参数，可执行以下操作。

1. 在导入的数据集旁边，选择**编辑数据集**。

1. 突出显示 `example-prefix-0` 中的 `0`。

1. 为以下字段指定值：
   + **名称** – 参数的名称
   + **类型** – **模式**
   + **值** – **\$1 d\$1** 正则表达式，对应于一个或多个数字

1. 选择**创建**。

1. 将 S3 URI 路径中的 `1` 和 `2` 替换为参数。路径应采用以下格式：`s3://amzn-s3-demo-bucket1/example-prefix-{{example_parameter_name}}/example-prefix-{{example_parameter_name}}/example-prefix-{{example_parameter_name}}/example-dataset.csv`

以下是创建模式参数的一般过程。

1. 导航至 Data Wrangler 流。

1. 在导入的数据集旁边，选择**编辑数据集**。

1. 突出显示用作模式参数值的 URI 部分。

1. 选择**创建自定义参数**。

1. 为以下字段指定值：
   + **名称** – 参数的名称
   + **类型** – **模式**
   + **值** – 包含要存储的模式的正则表达式。

1. 选择**创建**。

## 将 Data Wrangler 流应用于使用数字值的文件
<a name="data-wrangler-numeric-parameters"></a>

您可以使用参数，将 Data Wrangler 流中的转换应用于具有相似路径的不同文件。例如，您可能有一个路径为 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv` 的数据集。

您可能已将 Data Wrangler 流中的转换应用于 `example-prefix-1` 下的数据集。您可能想对 `example-prefix-10` 或 `example-prefix-20` 下的 `example-dataset.csv` 应用相同的转换。

您可以创建一个参数以存储值 `1`。如果要将转换应用于不同的数据集，那么可以创建处理作业，用不同的值替换参数的值。当您要将 Data Wrangler 流中的转换应用于新数据时，此参数充当占位符供您更改。在创建 Data Wrangler 处理作业时，您可以覆盖参数的值，以便将 Data Wrangler 流中的转换应用于不同的数据集。

可使用以下过程，为 `s3://amzn-s3-demo-bucket1/example-prefix-0/example-prefix-1/example-prefix-2/example-dataset.csv` 创建数字参数。

要为上述 S3 URI 路径创建参数，可执行以下操作。

1. 导航至 Data Wrangler 流。

1. 在导入的数据集旁边，选择**编辑数据集**。

1. 在 `example-prefix-number` 的示例前缀中突出显示数字。

1. 选择**创建自定义参数**。

1. 对于**名称**，指定参数的名称。

1. 对于**类型**，选择**整数**。

1. 对于**值**，指定数字。

1. 重复此过程，为其余数字创建参数。

创建参数后，将转换应用于数据集并为其创建目标节点。有关目标节点的更多信息，请参阅[导出](data-wrangler-data-export.md)。

可使用以下过程，将 Data Wrangler 流中的转换应用于不同的时间范围。假定您已为流中的转换创建了目标节点。

要更改 Data Wrangler 处理作业中数字参数的值，可执行以下操作。

1. 在 Data Wrangler 流中，选择**创建作业**

1. 仅选择包含要对具有日期时间参数的数据集进行的转换的目标节点。

1. 选择**配置作业**。

1. 选择**参数**。

1. 选择之前创建的参数的名称。

1. 更改参数的值。

1. 对其他参数重复此过程。

1. 选择**运行**。

## 将 Data Wrangler 流应用于使用字符串的文件
<a name="data-wrangler-string-parameters"></a>

您可以使用参数，将 Data Wrangler 流中的转换应用于具有相似路径的不同文件。例如，您可能有一个路径为 `s3://amzn-s3-demo-bucket1/example-prefix/example-dataset.csv` 的数据集。

您可能已将 Data Wrangler 流中的转换应用于 `example-prefix` 下的数据集。您可能想对 `another-example-prefix` 或 `example-prefix-20` 下的 `example-dataset.csv` 应用相同的转换。

您可以创建一个参数以存储值 `example-prefix`。如果要将转换应用于不同的数据集，那么可以创建处理作业，用不同的值替换参数的值。当您要将 Data Wrangler 流中的转换应用于新数据时，此参数充当占位符供您更改。在创建 Data Wrangler 处理作业时，您可以覆盖参数的值，以便将 Data Wrangler 流中的转换应用于不同的数据集。

可使用以下过程为 `s3://amzn-s3-demo-bucket1/example-prefix/example-dataset.csv` 创建字符串参数。

要为上述 S3 URI 路径创建参数，可执行以下操作。

1. 导航至 Data Wrangler 流。

1. 在导入的数据集旁边，选择**编辑数据集**。

1. 突出显示示例前缀 `example-prefix`。

1. 选择**创建自定义参数**。

1. 对于**名称**，指定参数的名称。

1. 对于**类型**，选择**字符串**。

1. 对于**值**，指定前缀。

创建参数后，将转换应用于数据集并为其创建目标节点。有关目标节点的更多信息，请参阅[导出](data-wrangler-data-export.md)。

可使用以下过程，将 Data Wrangler 流中的转换应用于不同的时间范围。假定您已为流中的转换创建了目标节点。

要更改 Data Wrangler 处理作业中数字参数的值，可执行以下操作：

1. 在 Data Wrangler 流中，选择**创建作业**

1. 仅选择包含要对具有日期时间参数的数据集进行的转换的目标节点。

1. 选择**配置作业**。

1. 选择**参数**。

1. 选择之前创建的参数的名称。

1. 更改参数的值。

1. 对其他参数重复此过程。

1. 选择**运行**。

## 将 Data Wrangler 流应用于不同的日期时间范围
<a name="data-wrangler-datetime-parameters"></a>

可使用日期时间参数，将 Data Wrangler 流中的转换应用于不同的时间范围。突出显示 Amazon S3 URI 中带时间戳的部分，并为其创建参数。创建参数时，可以指定从当前时间到过去时间的时间范围。例如，您可能有类似以下 URI 的 Amazon S3 URI：`s3://amzn-s3-demo-bucket1/example-prefix/2022/05/15/example-dataset.csv`。您可以将 `2022/05/15` 另存为日期时间参数。如果指定一年作为时间范围，那么时间范围包括从运行具日期时间参数的处理作业的时间到整一年前的时间。如果运行处理作业的时间是 2022 年 9 月 6 日或 `2022/09/06`，则时间范围可能包括以下：
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/03/15/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/01/08/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2022/07/31/example-dataset.csv`
+ `s3://amzn-s3-demo-bucket1/example-prefix/2021/09/07/example-dataset.csv`

Data Wrangler 流中的转换适用于上述所有前缀。更改处理作业中的参数值，不会改变 Data Wrangler 流中的参数值。要将转换应用于不同时间范围内的数据集，可执行以下操作：

1. 创建一个包含要使用的所有转换的目标节点。

1. 创建 Data Wrangler 作业。

1. 配置作业，为参数使用不同的时间范围。更改处理作业中的参数值，不会改变 Data Wrangler 流中的参数值。

有关目标节点和 Data Wrangler 作业的更多信息，请参阅[导出](data-wrangler-data-export.md)。

以下过程为 Amazon S3 路径 `s3://amzn-s3-demo-bucket1/example-prefix/2022/05/15/example-dataset.csv` 创建日期时间参数。

要为上述 S3 URI 路径创建参数，可执行以下操作。

1. 导航至 Data Wrangler 流。

1. 在导入的数据集旁边，选择**编辑数据集**。

1. 突出显示用作日期时间参数值的 URI 部分。

1. 选择**创建自定义参数**。

1. 对于**名称**，指定参数的名称。

1. 对于**类型**，选择**日期时间**。
**注意**  
默认情况下，Data Wrangler 会选择**预定义**，提供一个下拉菜单供您选择日期格式。但是，您所使用的时间戳格式可能不可用。您可以选择**自定义**并手动指定时间戳格式，而不必使用**预定义**作为默认选项。

1. 对于**日期格式**，打开**预定义**后的下拉菜单并选择**yyyy/MM/dd**。**格式对应于时间戳year/month/day的格式。yyyy/MM/dd**

1. 对于**时区**，选择时区。
**注意**  
您正在分析的数据的时间戳可能产生自与您所在时区不同的时区。请确保您选择的时区与数据的时区相匹配。

1. 对于**时间范围**，指定参数的时间范围。

1. （可选）输入描述文字以说明您是如何使用参数的。

1. 选择**创建**。

创建日期时间参数后，将转换应用于数据集并为其创建目标节点。有关目标节点的更多信息，请参阅[导出](data-wrangler-data-export.md)。

可使用以下过程，将 Data Wrangler 流中的转换应用于不同的时间范围。假定您已为流中的转换创建了目标节点。

要更改 Data Wrangler 处理作业中日期时间参数的值，可执行以下操作：

1. 在 Data Wrangler 流中，选择**创建作业**

1. 仅选择包含要对具有日期时间参数的数据集进行的转换的目标节点。

1. 选择**配置作业**。

1. 选择**参数**。

1. 选择之前创建的日期时间参数的名称。

1. 对于**时间范围**，更改数据集的时间范围。

1. 选择**运行**。

# 导出
<a name="data-wrangler-data-export"></a>

在 Data Wrangler 流中，可以将所做的部分或全部转换导出到数据处理管道中。

*Data Wrangler 流*是您对数据执行的一系列数据准备步骤。在数据准备过程中，需要对数据进行一次或多次转换。每次转换都是使用转换步骤完成的。该流包含一系列节点，这些节点代表您的数据导入和您执行的转换。有关节点的示例，请参阅下面的图像。

![\[Data Wrangler 管理控制台中的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-0.png)


上图显示了带两个节点的 Data Wrangler 流。**来源 – 采样**节点显示您从中导入数据的数据来源。**数据类型**节点指示 Data Wrangler 已执行转换将数据集转换为可用格式。

添加到 Data Wrangler 流的每个转换都显示为一个附加节点。有关可添加的转换的信息，请参阅[转换数据](data-wrangler-transform.md)。下图显示了一个 Data Wrangler 流，该流具有用于更改数据集内列名的**重命名列**节点。

可以将数据转换导出到以下位置：
+ Amazon S3
+ 管道
+ Amazon SageMaker 专题商店
+ Python Code

**重要**  
我们建议您使用 IAM `AmazonSageMakerFullAccess` 托管策略来授予使用 Data Wrangler 的 AWS 权限。如果您不使用托管式策略，则可以使用 IAM 策略，向 Data Wrangler 授予对 Amazon S3 存储桶的访问权限。有关托管式策略的更多信息，请参阅[安全性和权限](data-wrangler-security.md)。

导出数据流时，您需要为所使用的 AWS 资源付费。可以使用成本分配标签来组织和管理这些资源的成本。您负责为用户配置文件创建这些标签，Data Wrangler 会自动将标签应用于用来导出数据流的资源。有关更多信息，请参阅[使用成本分配标签](https://docs.aws.amazon.com//awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

## 导出到 Amazon S3
<a name="data-wrangler-data-export-s3"></a>

利用 Data Wrangler，您可以将数据导出到 Amazon S3 存储桶中的某个位置。您可以使用以下方法之一指定该位置：
+ 目标节点 – Data Wrangler 在处理完数据后存储数据的位置。
+ 导出目标 – 将转换后生成的数据导出到 Amazon S3。
+ 导出数据 – 对于小数据集，可以快速导出转换的数据。

使用以下部分详细了解这些方法中的每种方法。

------
#### [ Destination Node ]

如果您要将已执行的一系列数据处理步骤输出到 Amazon S3，可以创建一个目标节点。处理完数据后，*目标节点*会指示 Data Wrangler 将数据存储在什么位置。创建目标节点后，您可以创建一个处理作业来输出数据。*处理任务*是 Amazon 的 SageMaker 处理任务。使用目标节点时，处理作业会运行将已转换的数据输出到 Amazon S3 所需的计算资源。

可以使用目标节点导出您在 Data Wrangler 流中进行的某些转换或所有转换。

可以使用多个目标节点来导出不同的转换或转换集。以下示例显示了单个 Data Wrangler 流中的两个目标节点。

![\[显示 Data Wrangler 管理控制台中两个目标节点的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-4.png)


可以使用以下过程创建目标节点并导出到 Amazon S3 存储桶。

要导出数据流，您需要创建目标节点以及用于导出数据的 Data Wrangler 作业。创建 Data Wrangler 作业会启动 SageMaker 处理任务以导出您的流程。您创建目标节点后，可以选择要导出的目标节点。
**注意**  
可以在 Data Wrangler 流中选择**创建作业**，查看使用处理作业的说明。

使用以下过程创建目标节点。

1. 选择代表要导出的转换的节点旁边的 **\$1**。

1. 选择**添加目标**。  
![\[显示如何在 Data Wrangler 管理控制台中添加目的地的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-add-destination-0.png)

1. 选择 **Amazon S3**。  
![\[显示如何在 Data Wrangler 管理控制台中添加目的地的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-add-destination-S3-selected.png)

1. 指定以下字段。
   + **数据集名称** – 您为要导出的数据集指定的名称。
   + **文件类型** – 要导出的文件的格式。
   + **分隔符**（仅限 CSV 和 Parquet 文件）– 用于分隔其他值的值。
   + **压缩**（仅限 CSV 和 Parquet 文件）– 用于减小文件大小的压缩方法。可以使用以下压缩方法：
     + bzip2
     + deflate
     + gzip
   + （可选）**Amazon S3 位置** – 用于输出文件的 S3 位置。
   + （可选）**分区数** – 作为处理作业输出正在写入的数据集的数量。
   + （可选）**按列分区** – 写入列中具有相同唯一值的所有数据。
   + （可选）**推理参数** – 选择**生成推理构件**会将您在 Data Wrangler 流中使用的所有转换应用于进入推理管道的数据。管道中的模型会对转换后的数据进行预测。

1. 选择**添加目标**。

使用以下过程创建处理作业。

从**数据流**页面创建作业，然后选择要导出的目标节点。
**注意**  
可以在 Data Wrangler 流中选择**创建作业**，查看创建处理作业的说明。

1. 选择**创建作业**。下图显示了在您选择**创建作业**后显示的窗格。  
![\[Data Wrangler 管理控制台中的数据流创建任务窗格示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-create-job.png)

1. 对于**作业名称**，指定导出作业的名称。

1. 选择要导出的目标节点。

1. （可选）指定密 AWS KMS 钥 ARN。密 AWS KMS 钥是可用于保护数据的加密密钥。有关 AWS KMS 密钥的更多信息，请参阅[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)。

1. （可选）在**已训练参数**下，如果您已完成以下操作，请选择**重新拟合**：
   + 已对数据集进行采样
   + 已应用了转换，即利用您的数据在数据集内创建新列

   有关重新拟合已对整个数据集所做的转换的更多信息，请参阅[重新拟合整个数据集的转换并导出](#data-wrangler-data-export-fit-transform)。
**注意**  
对于图像数据，Data Wrangler 会导出您对所有图像所做的转换。重新拟合转换不适用于您的用例。

1. 选择**配置作业**。下图显示了**配置作业**页面。  
![\[Data Wrangler 管理控制台中的数据流配置任务页面示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-configure-job.png)

1. （可选）配置 Data Wrangler 作业。可以执行以下配置：
   + **作业配置**
   + **Spark 内存配置**
   + **网络配置**
   + **标签**
   + **参数**
   + **关联日程安排**

1. 选择**运行**。

------
#### [ Export to ]

作为使用目标节点的替代方案，可以使用**导出目标**选项，使用 Jupyter 笔记本将 Data Wrangler 流导出到 Amazon S3。可以在 Data Wrangler 流中选择任何数据节点并导出。导出数据节点时，会导出该节点所代表的转换及其之前的转换。

使用以下过程生成 Jupyter 笔记本并运行，将您的 Data Wrangler 流导出到 Amazon S3。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择 **Amazon S3（通过 Jupyter 笔记本**）。

1. 运行 Jupyter 笔记本。  
![\[显示如何在 Data Wrangler 管理控制台中导出 Data Wrangler 流程的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)

当你运行笔记本时，它会以与 Data Wrangler 流程相同 AWS 区域 的方式导出你的数据流（.flow 文件）。

笔记本提供了可用于配置处理作业及其输出的数据的选项。

**重要**  
我们为您提供作业配置，以便配置您的数据输出。对于分区和驱动程序内存选项，我们强烈建议不要指定配置，除非您已了解这些配置。

在**作业配置**下，可以配置以下内容：
+ `output_content_type` – 输出文件的内容类型。使用 `CSV` 作为默认格式，但您可以指定 `Parquet`。
+ `delimiter` – 写入 CSV 文件时用于分隔数据集内的值的字符。
+ `compression` – 如果已设置，则压缩输出文件。默认情况下使用 gzip 作为压缩格式。
+ `num_partitions` – Data Wrangler 作为输出写入的分区或文件的数量。
+ `partition_by` – 用于对输出进行分区的列的名称。

要将输出文件格式从 CSV 更改为 Parquet，请将值从 `"CSV"` 更改为 `"Parquet"`。对于前面的其余字段，取消注释包含要指定的字段的行。

在**（可选）配置 Spark 集群驱动程序内存**下，可以在 `config` 字典中为作业配置 Spark 属性，例如 Spark 驱动程序内存。

下面显示了 `config` 字典。

```
config = json.dumps({
    "Classification": "spark-defaults",
    "Properties": {
        "spark.driver.memory": f"{driver_memory_in_mb}m",
    }
})
```

要将配置应用于处理作业，请取消注释以下行：

```
# data_sources.append(ProcessingInput(
#     source=config_s3_uri,
#     destination="/opt/ml/processing/input/conf",
#     input_name="spark-config",
#     s3_data_type="S3Prefix",
#     s3_input_mode="File",
#     s3_data_distribution_type="FullyReplicated"
# ))
```

------
#### [ Export data ]

如果您想快速导出小型数据集进行转换，可以使用**导出数据**方法。当您开始选择**导出数据**时，Data Wrangler 会同步工作，以导出您转换到 Amazon S3 的数据。在 Data Wrangler 完成数据导出或您取消操作之前，您无法使用 Data Wrangler。

有关在 Data Wrangler 流中使用**导出数据**方法的信息，请参阅以下过程。

要使用**导出数据**方法，请执行以下操作：

1. 在 Data Wrangler 流中选择一个节点，方法是将其打开（双击）。  
![\[显示如何在 Data Wrangler 管理控制台中导出数据的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/export-s3.png)

1. 配置导出数据的方法。

1. 选择**导出数据**。

------

当您将数据流导出到 Amazon S3 存储桶时，Data Wrangler 会将流文件的副本存储在 S3 存储桶中。它将流文件存储在 *data\$1wrangler\$1flows* 前缀下。如果您使用默认的 Amazon S3 存储桶来存储流文件，它将使用以下命名约定：`sagemaker-region-account number`。例如，如果您的账号是 111122223333，并且在 us-east-1 中使用 Studio Classic，那么导入的数据集将存储在 `sagemaker-us-east-1-111122223333` 中。在本示例中，您在 us-east-1 中创建的 .flow 文件存储在 `s3://sagemaker-region-account number/data_wrangler_flows/` 中。

## 导出到管道
<a name="data-wrangler-data-export-pipelines"></a>

当你想要构建和部署大规模机器学习 (ML) 工作流程时，你可以使用 Pipelines 来创建管理和部署 SageMaker AI 作业的工作流程。借助 Pipelines，您可以构建工作流程来管理 SageMaker AI 数据准备、模型训练和模型部署作业。你可以使用 Pipelines 来使用 SageMaker AI 提供的第一方算法。有关管道的更多信息，请参阅[SageMaker 管道](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines.html)。

当您将数据流中的一个或多个步骤导出到 Pipelines 时，Data Wrangler 会创建一个可用于定义、实例化、运行和管理管道的 Jupyter Notebook。

### 使用 Jupyter 笔记本创建管道
<a name="data-wrangler-pipelines-notebook"></a>

使用以下步骤创建 Jupyter Notebook，将您的 Data Wrangler 流导出到 Pipelines。

使用以下步骤生成 Jupyter Notebook 并运行，将您的 Data Wrangler 流导出到 Pipelines。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择 **Pipelines（通过 Jupyter Notebook）**。

1. 运行 Jupyter 笔记本。

![\[显示如何在 Data Wrangler 管理控制台中导出 Data Wrangler 流程的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


您可以使用 Data Wrangler 生成的 Jupyter 笔记本来定义管道。管道包括由 Data Wrangler 流定义的数据处理步骤。

通过将步骤添加到笔记本的以下代码中的 `steps` 列表，您可以向管道添加其他步骤：

```
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[instance_type, instance_count],
    steps=[step_process], #Add more steps to this list to run in your Pipeline
)
```

有关定义管道的更多信息，请参阅[定义 SageMaker AI 管道](https://docs.aws.amazon.com/sagemaker/latest/dg/define-pipeline.html)。

## 导出到推理端点
<a name="data-wrangler-data-export-inference"></a>

在 Data Wrangler 流程中创建 SageMaker AI 串行推理管道，在推理时使用 Data Wrangler 流程处理数据。推理管道是一系列步骤，可用于生成对新数据进行预测的经过训练的模型。Data Wrangler 中的串行推理管道可转换原始数据，并将数据提供给机器学习模型进行预测。在 Studio Classic 中，您可以通过 Jupyter Notebook 创建、运行和管理推理管道。有关访问笔记本的更多信息，请参阅[使用 Jupyter 笔记本创建推理端点](#data-wrangler-inference-notebook)。

在笔记本中，您可以训练机器学习模型，也可以指定已训练的模型。你可以使用 Amazon A SageMaker utopilot XGBoost ，也可以使用你在 Data Wrangler 流程中转换的数据来训练模型。

利用管道，您可以执行批量或实时推理。您也可以将 Data Wrangler 流程添加到 “ SageMaker 模型注册表”。有关托管模型的更多信息，请参阅[多模型端点](multi-model-endpoints.md)。

**重要**  
如果 Data Wrangler 流具有以下转换，则无法将该流导出到推理端点：  
联接
串联
分组依据
如果必须使用上述转换来准备您的数据，请使用以下过程。  
创建 Data Wrangler 流。
应用前面的不受支持的转换。
将数据导出到 Amazon S3 存储桶。
创建单独的 Data Wrangler 流。
导入您在前面的流中导出的数据。
应用其余的转换。
使用我们提供的 Jupyter 笔记本创建串行推理管道。
有关将数据导出到 Amazon S3 存储桶的信息，请参阅[导出到 Amazon S3](#data-wrangler-data-export-s3)。有关打开用于创建串行推理管道的 Jupyter 笔记本的信息，请参阅[使用 Jupyter 笔记本创建推理端点](#data-wrangler-inference-notebook)。

Data Wrangler 会忽略那些在推理时删除数据的转换。例如，如果您使用**删除缺失项**配置，Data Wrangler 会忽略[处理缺失值](data-wrangler-transform.md#data-wrangler-transform-handle-missing)转换。

如果您重新拟合整个数据集的转换，则转换会延续到您的推理管道。例如，如果使用了中位数来估算缺失值，则重新拟合转换所得的中位数将应用于您的推理请求。在使用 Jupyter 笔记本或将数据导出到推理管道时，可以重新拟合 Data Wrangler 流中的转换。有关重新拟合转换的信息，请参阅[重新拟合整个数据集的转换并导出](#data-wrangler-data-export-fit-transform)。

串行推理管道支持以下数据类型的输入和输出字符串。每个数据类型都有一组要求。

**支持的数据类型**
+ `text/csv` – CSV 字符串的数据类型
  + 字符串不能具有标头。
  + 用于推理管道的特征必须与训练数据集内的特征顺序相同。
  + 特征之间必须有一个逗号分隔符。
  + 记录必须使用一个换行符分隔。

  下面是可在推理请求中提供的有效格式的 CSV 字符串示例。

  ```
  abc,0.0,"Doe, John",12345\ndef,1.1,"Doe, Jane",67890                    
  ```
+ `application/json` – JSON 字符串的数据类型
  + 数据集内用于推理管道的特征的顺序必须与训练数据集内的特征顺序相同。
  + 数据必须具有特定架构。可以将架构定义为具有一组 `features` 的单个 `instances` 对象。每个 `features` 对象都表示一个观测值。

  下面是可在推理请求中提供的有效格式的 JSON 字符串示例。

  ```
  {
      "instances": [
          {
              "features": ["abc", 0.0, "Doe, John", 12345]
          },
          {
              "features": ["def", 1.1, "Doe, Jane", 67890]
          }
      ]
  }
  ```

### 使用 Jupyter 笔记本创建推理端点
<a name="data-wrangler-inference-notebook"></a>

按照以下过程操作，导出您的 Data Wrangler 流以创建推理管道。

要使用 Jupyter 笔记本创建推理管道，请执行以下操作。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择 **SageMaker AI 推理管道（通过 Jupyter** 笔记本）。

1. 运行 Jupyter 笔记本。

当您运行 Jupyter 笔记本时，会创建一个推理流构件。推理流构件是一个 Data Wrangler 流文件，其中包含用于创建串行推理管道的附加元数据。您正导出的节点包含来自前面节点的所有转换。

**重要**  
Data Wrangler 需要推理流构件来运行推理管道。您不能将自己的流文件用作构件。您必须使用前面的步骤创建构件。

## 导出到 Python Code
<a name="data-wrangler-data-export-python-code"></a>

要将数据流中的所有步骤导出到可手动集成到任何数据处理工作流的 Python 文件，请使用以下步骤。

使用以下过程生成 Jupyter 笔记本并运行，将您的 Data Wrangler 流导出到 Python Code。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择 **Python 代码**。

1. 运行 Jupyter 笔记本。

![\[显示如何在 Data Wrangler 管理控制台中导出 Data Wrangler 流程的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


您可能需要配置 Python 脚本才能在管道中运行。例如，如果您运行的是 Spark 环境，请确保在有权访问 AWS 资源的环境中运行脚本。

## 导出到 Amazon SageMaker 特色商店
<a name="data-wrangler-data-export-feature-store"></a>

您可以使用 Data Wrangler 将您创建的功能导出到亚马逊 SageMaker 功能商店。特征是数据集内的一列。Feature Store 是特征及其相关元数据的集中存储位置。您可以使用 Feature Store 创建、共享和管理用于机器学习 (ML) 开发的精选数据。集中式存储能够让您的数据更易于发现和重复使用。有关功能商店的更多信息，请参阅 [Amazon F SageMaker eature Store](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)。

Feature Store 中的一个核心概念是特征组。特征组是特征及其记录（观测值）和关联元数据的集合。它类似于数据库中的表。

可以使用 Data Wrangler 执行下列操作之一：
+ 使用新记录更新现有特征组。记录是数据集内的观测值。
+ 从您的 Data Wrangler 流中的节点创建新的特征组。Data Wrangler 会将数据集内的观测值作为记录添加到特征组中。

如果要更新现有特征组，则数据集的架构必须与该特征组的架构相匹配。特征组中的所有记录都将替换为数据集内的观测值。

可以通过 Jupyter 笔记本或目标节点，使用数据集内的观测值更新您的特征组。

如果您采用 Iceberg 表格式的功能组具有自定义的离线商店加密密钥，请务必向用于亚马逊 SageMaker Processing 任务的 IAM 授予使用该密钥的权限。必须至少向其授予对正写入 Amazon S3 的数据进行加密的权限。要授予权限，请让 IAM 角色能够使用[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)。有关授予 IAM 角色使用 AWS KMS 密钥的权限的更多信息，请参阅 [https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)

------
#### [ Destination Node ]

如果您要将已执行的一系列数据处理步骤输出到特征组，可以创建一个目标节点。在创建和运行目标节点时，Data Wrangler 会使用您的数据更新特征组。您还可以从目标节点 UI 创建新的特征组。创建目标节点后，您可以创建一个处理作业来输出数据。处理任务是 Amazon 的 SageMaker 处理任务。使用目标节点时，该作业会运行将已转换的数据输出到特征组所需的计算资源。

可以使用目标节点导出您在 Data Wrangler 流中进行的某些转换或所有转换。

通过以下过程创建目标节点，以使用数据集内的观测值更新特征组。

要使用目标节点更新特征组，请执行以下操作。
**注意**  
可以在 Data Wrangler 流中选择**创建作业**，查看使用处理作业更新特征组的说明。

1. 选择包含要导出的数据集的节点旁边的 **\$1** 号。

1. 在 “**添加目的地**” 下，选择 **SageMaker AI 功能库**。  
![\[显示如何在 Data Wrangler 管理控制台中添加目的地的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/feature-store-destination-node-selection.png)

1. 选择（双击）该特征组。Data Wrangler 会检查特征组的架构是否与您用于更新特征组的数据架构相匹配。

1. （可选）对于同时具有在线存储和离线存储的特征组，选择**仅导出到离线存储**。此选项仅使用数据集内的观测值更新离线存储。

1. 在 Data Wrangler 验证您的数据集架构后，选择**添加**。

通过以下过程，使用数据集内的数据创建新的特征组。

可以通过以下方式之一存储特征组：
+ 在线 – 低延迟、高可用性缓存，用于可提供实时记录查找的特征组。使用在线存储可以快速访问特征组中的记录的最新值。
+ 离线 – 将特征组的数据存储在 Amazon S3 存储桶中。当您不需要低延迟（亚秒）读取时，可以离线存储数据。可以使用离线存储来存储在进行数据探究、模型训练和批处理推理时使用的功能。
+ 在线和离线 – 将您的数据存储于在线存储和离线存储中。

要使用目标节点创建特征组，请执行以下操作。

1. 选择包含要导出的数据集的节点旁边的 **\$1** 号。

1. 在 “**添加目的地**” 下，选择 **SageMaker AI 功能库**。

1. 选择**创建特征组**。

1. 在以下对话框中，如果您的数据集没有事件时间列，请选择**创建 “EventTime” 列**。

1. 选择**下一步**。

1. 选择**复制 JSON 架构**。创建特征组时，会将架构粘贴到特征定义中。

1. 选择**创建**。

1. 在**特征组名称**中，为您的特征组指定名称。

1. 在**描述（可选）**中，指定描述以使您的特征组更便于搜索。

1. 要为在线存储创建特征组，请执行以下操作。

   1. 选择**启用在线存储**。

   1. 对于**在线商店加密密钥**，请指定 AWS 托管加密密钥或您自己的加密密钥。

1. 要为离线存储创建特征组，请执行以下操作。

   1. 选择**启用离线存储**。为以下字段指定值：
      + **S3 存储桶名称** – 存储特征组的 Amazon S3 存储桶的名称。
      + （可选）**数据集目录名称** – 用于存储特征组的 Amazon S3 前缀。
      + **IAM 角色 ARN** – 有权访问 Feature Store 的 IAM 角色。
      + **表格格式** – 离线存储的表格格式。可以指定 **Glue** 或 **Iceberg**。**Glue** 为默认格式。
      + **离线存储加密密钥** – 默认情况下，Feature Store 使用 AWS Key Management Service 托管式密钥，不过您可以使用该字段来指定自己的密钥。

   1. 为以下字段指定值：
      + **S3 存储桶名称** – 存储特征组的存储桶的名称。
      + **（可选）数据集目录名称** – 用于存储特征组的 Amazon S3 前缀。
      + **IAM 角色 ARN** – 有权访问 Feature Store 的 IAM 角色。
      + **离线存储加密密钥** – 默认情况下，Feature Store 使用 AWS 托管式密钥，不过您可以使用该字段来指定自己的密钥。

1. 选择**继续**。

1. 选择 **JSON**。

1. 删除窗口中的占位符括号。

1. 粘贴步骤 6 中的 JSON 文本。

1. 选择**继续**。

1. 对于**记录标识符特征名称**，选择数据集内对每个记录具有唯一标识符的列。

1. 对于**事件时间特征名称**，选择包含时间戳值的列。

1. 选择**继续**。

1. （可选）添加标签，使您的特征组更容易搜索到。

1. 选择**继续**。

1. 选择**创建特征组**。

1. 导航回您的 Data Wrangler 流，然后选择**特征组**搜索栏旁边的刷新图标。

**注意**  
如果您已经为流中的特征组创建了目标节点，则无法为同一特征组创建其他目标节点。如果要为同一个特征组创建另一个目标节点，则必须创建另一个流文件。

可以使用以下过程创建 Data Wrangler 作业。

从**数据流**页面创建作业，然后选择要导出的目标节点。

1. 选择**创建作业**。下图显示了在您选择**创建作业**后显示的窗格。

1. 对于**作业名称**，指定导出作业的名称。

1. 选择要导出的目标节点。

1. （可选）对于**输出 KMS 密钥**，请指定密钥的 ARN、ID 或别名。 AWS KMS KMS 密钥是一种加密密钥。对于作业的输出数据，可以使用密钥进行加密。有关 AWS KMS 密钥的更多信息，请参阅[AWS Key Management Service](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)。

1. 下图显示了**配置作业**页面，其中**作业配置**选项卡处于打开状态。  
![\[Data Wrangler 管理控制台中的数据流创建任务页面示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/destination-nodes/destination-nodes-configure-job.png)

   （可选）在**已训练参数**下，如果您已完成以下操作，请选择**重新拟合**：
   + 已对数据集进行采样
   + 已应用了转换，即利用您的数据在数据集内创建新列

   有关重新拟合已对整个数据集所做的转换的更多信息，请参阅 [重新拟合整个数据集的转换并导出](#data-wrangler-data-export-fit-transform)。

1. 选择**配置作业**。

1. （可选）配置 Data Wrangler 作业。可以执行以下配置：
   + **作业配置**
   + **Spark 内存配置**
   + **网络配置**
   + **标签**
   + **参数**
   + **关联日程安排**

1. 选择**运行**。

------
#### [ Jupyter notebook ]

使用以下步骤将 Jupyter 笔记本导出到亚马逊 SageMaker 功能商店。

使用以下过程生成 Jupyter 笔记本并运行，将您的 Data Wrangler 流导出到 Feature Store。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择**亚马逊精选商店 SageMaker （通过 Jupyter Notebook**）。

1. 运行 Jupyter 笔记本。

![\[显示如何在 Data Wrangler 管理控制台中导出 Data Wrangler 流程的数据流示例。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/data-wrangler-destination-nodes-photo-export-to.png)


运行 Jupyter 笔记本会运行 Data Wrangler 作业。运行 Data Wrangler 作业会启动 A SageMaker I 处理作业。处理作业会将流提取到在线和离线特征存放区中。

**重要**  
用于运行此笔记本的 IAM 角色必须附加以下 AWS 托管式策略：`AmazonSageMakerFullAccess` 和 `AmazonSageMakerFeatureStoreAccess`。

创建特征组时，您只需要启用一个在线或离线特征存放区。您也可以同时启用这两个特征存放区。要禁用在线存储创建，请将 `EnableOnlineStore` 设置为 `False`：

```
# Online Store Configuration
online_store_config = {
    "EnableOnlineStore": False
}
```

笔记本使用您导出的数据框的列名和类型来创建特征组架构，该架构用于创建特征组。特征组是在特征存放区中为描述记录而定义的一组特征。特征组定义了其中包含的架构和特征。特征组定义由特征列表、记录标识符特征名称、事件时间特征名称以及其在线存储和离线存储的配置组成。

特征组中的每个特征可以具有以下类型之一：*字符串*、*得分*或*整数*。如果导出的数据框中的某列不是这些类型之一，则默认为 `String`。

以下是特征组架构的示例。

```
column_schema = [
    {
        "name": "Height",
        "type": "long"
    },
    {
        "name": "Input",
        "type": "string"
    },
    {
        "name": "Output",
        "type": "string"
    },
    {
        "name": "Sum",
        "type": "string"
    },
    {
        "name": "Time",
        "type": "string"
    }
]
```

此外，您必须指定记录标识符名称和事件时间特征名称：
+ *记录标识符名称*是特征的名称，其值可以唯一标识在特征存放区中定义的记录。在线存储中仅存储每个标识符值的最新记录。记录标识符特征名称必须是特征定义名称之一。
+ *事件时间特征名称*是将记录的 `EventTime` 存储在特征组中的特征的名称。`EventTime` 是发生新事件的时间点，该事件对应于特征中记录的创建或更新。特征组中的所有记录都必须具有相应的 `EventTime`。

笔记本使用这些配置来创建特征组，大规模处理您的数据，然后将处理后的数据提取到您的在线和离线特征存放区中。要了解更多信息，请参阅[数据来源和摄取](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-ingest-data.html)。

------

笔记本使用这些配置来创建特征组，大规模处理您的数据，然后将处理后的数据提取到您的在线和离线特征存放区中。要了解更多信息，请参阅[数据来源和摄取](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-ingest-data.html)。

## 重新拟合整个数据集的转换并导出
<a name="data-wrangler-data-export-fit-transform"></a>

导入数据时，Data Wrangler 会使用数据样本来应用编码。默认情况下，Data Wrangler 使用前 50000 行作为样本，不过您可以导入整个数据集或使用不同的采样方法。有关更多信息，请参阅 [导入](data-wrangler-import.md)。

以下转换使用您的数据，在数据集内创建列：
+ [对分类数据进行编码](data-wrangler-transform.md#data-wrangler-transform-cat-encode)
+ [特征化文本](data-wrangler-transform.md#data-wrangler-transform-featurize-text)
+ [处理异常值](data-wrangler-transform.md#data-wrangler-transform-handle-outlier)
+ [处理缺失值](data-wrangler-transform.md#data-wrangler-transform-handle-missing)

如果您已使用采样来导入数据，则前面的转换仅使用样本中的数据来创建列。转换可能没有使用所有相关数据。例如，如果您使用**对分类进行编码**转换，则整个数据集内可能存在样本中不存在的类别。

您可以使用目标节点或 Jupyter 笔记本重新拟合整个数据集的转换。当 Data Wrangler 导出流程中的转换时，它会创建一个 SageMaker 处理作业。当处理作业完成后，Data Wrangler 会将以下文件保存到默认 Amazon S3 位置或您指定的 S3 位置：
+ Data Wrangler 流文件，用于指定要为数据集重新拟合的转换
+ 已应用了重新拟合转换的数据集

您可以在 Data Wrangler 中打开 Data Wrangler 流文件，然后将转换应用于不同的数据集。例如，如果您已将转换应用于训练数据集，则可以打开并使用 Data Wrangler 流文件将转换应用于用于推理的数据集。

有关使用目标节点重新拟合转换和导出的信息，请参阅以下页面：
+ [导出到 Amazon S3](#data-wrangler-data-export-s3)
+ [导出到 Amazon SageMaker 特色商店](#data-wrangler-data-export-feature-store)

使用以下步骤运行 Jupyter 笔记本来重新拟合转换并导出数据。

要运行 Jupyter 笔记本并重新拟合转换并导出 Data Wrangler 流，请执行以下操作。

1. 选择要导出的节点旁边的 **\$1**。

1. 选择**导出目标**。

1. 选择要将数据导出到的位置。

1. 对于 `refit_trained_params` 对象，将 `refit` 设置为 `True`。

1. 对于 `output_flow` 字段，指定带有重新拟合转换的输出流文件的名称。

1. 运行 Jupyter 笔记本。

## 创建自动处理新数据的计划
<a name="data-wrangler-data-export-schedule-job"></a>

如果您要定期处理数据，则可以创建一个计划来自动运行处理作业。例如，您可以创建一个计划，该计划在获得新数据时自动运行处理作业。有关处理作业的更多信息，请参阅 [导出到 Amazon S3](#data-wrangler-data-export-s3) 和 [导出到 Amazon SageMaker 特色商店](#data-wrangler-data-export-feature-store)。

创建作业时，必须指定有权创建该作业的 IAM 角色。默认情况下，您访问 Data Wrangler 所使用的 IAM 角色是 `SageMakerExecutionRole`。

以下权限允许 Data Wrangler 访问 EventBridge 和运行处理作业： EventBridge 
+ 将以下 AWS 托管策略添加到 Amazon SageMaker Studio Classic 执行角色中，该角色为 Data Wrangler 提供使用权限： EventBridge

  ```
  arn:aws:iam::aws:policy/AmazonEventBridgeFullAccess
  ```

  有关该策略的更多信息，请参阅[的AWS 托管策略 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-identity-based.html#eb-full-access-policy)。
+ 将以下策略添加到您在 Data Wrangler 中创建作业时指定的 IAM 角色：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "sagemaker:StartPipelineExecution",
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:pipeline/data-wrangler-*"
          }
      ]
  }
  ```

------

  如果您使用的是默认 IAM 角色，则可以将上述策略添加到 Amazon SageMaker Studio Classic 执行角色中。

  将以下信任策略添加到角色中 EventBridge 以允许代入该角色。

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
  }
  ```

**重要**  
当您创建计划时，Data Wrangler 会创建一个输入。`eventRule` EventBridge您需要为创建的事件规则以及用于运行处理作业的实例都支付费用。  
有关 EventBridge 定价的信息，请参阅 [Amazon EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。有关处理任务定价的信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)。

使用以下方法之一设置计划：
+ [Cron 表达式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html)
**注意**  
Data Wrangler 不支持以下表达式：  
LW\$1
天的缩写
月份的缩写
+ [Rate 表达式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html#eb-rate-expressions)
+ 重复 – 设置每小时或每天运行作业的时间间隔。
+ 特定时间 – 设置运行作业的特定日期和时间。

以下各个部分提供了作业创建过程。

------
#### [ CRON ]

使用以下步骤创建带有 CRON 表达式的计划。

要使用 CRON 表达式指定计划，请执行以下操作。

1. 打开您的 Data Wrangler 流。

1. 选择**创建作业**。

1. （可选）对于**输出 KMS 密** AWS KMS 钥，请指定一个密钥来配置任务的输出。

1. 选择**下一步，2. 配置作业**。

1. 选择**关联计划**。

1. 选择**创建新计划**。

1. 对于**计划名称**，指定计划的名称。

1. 对于**运行频率**，选择 **CRON**。

1. 指定有效的 CRON 表达式。

1. 选择**创建**。

1. （可选）选择**添加其他计划**以按其他计划运行作业。
**注意**  
您最多可以关联两个计划。这些计划是独立的，除非时间重叠，否则不会相互影响。

1. 选择下列选项之一：
   + **计划并立即运行** – Data Wrangler 作业会立即运行，随后按计划运行。
   + **仅限计划** – Data Wrangler 作业仅按您指定的计划运行。

1. 选择**运行**。

------
#### [ RATE ]

使用以下步骤创建带有 RATE 表达式的计划。

要使用 RATE 表达式指定计划，请执行以下操作。

1. 打开您的 Data Wrangler 流。

1. 选择**创建作业**。

1. （可选）对于**输出 KMS 密** AWS KMS 钥，请指定一个密钥来配置任务的输出。

1. 选择**下一步，2. 配置作业**。

1. 选择**关联计划**。

1. 选择**创建新计划**。

1. 对于**计划名称**，指定计划的名称。

1. 对于**运行频率**，选择 **Rate**。

1. 对于**值**，指定一个整数。

1. 对于**匹配程序**，选择以下项之一：
   + **分钟**
   + **小时**
   + **天**

1. 选择**创建**。

1. （可选）选择**添加其他计划**以按其他计划运行作业。
**注意**  
您最多可以关联两个计划。这些计划是独立的，除非时间重叠，否则不会相互影响。

1. 选择下列选项之一：
   + **计划并立即运行** – Data Wrangler 作业会立即运行，随后按计划运行。
   + **仅限计划** – Data Wrangler 作业仅按您指定的计划运行。

1. 选择**运行**。

------
#### [ Recurring ]

通过以下步骤创建定期运行作业的计划。

要使用 CRON 表达式指定计划，请执行以下操作。

1. 打开您的 Data Wrangler 流。

1. 选择**创建作业**。

1. （可选）对于**输出 KMS 密** AWS KMS 钥，请指定一个密钥来配置任务的输出。

1. 选择**下一步，2. 配置作业**。

1. 选择**关联计划**。

1. 选择**创建新计划**。

1. 对于**计划名称**，指定计划的名称。

1. 对于**运行频率**，确保默认选中**重复**。

1. 对于**每 x 小时**，指定作业在一天中运行的每小时频率。有效值为 **1** 和 **23** 范围的整数（含）。

1. 对于**日期**，选择以下选项之一：
   + **每天**
   + **周末**
   + **工作日**
   + **选择日期**

   1. （可选）如果您选择了**选择日期**，请选择在一周中的哪几天运行作业。
**注意**  
计划会每天重置。如果您计划每五小时运行一次作业，则作业将在一天中的以下时间运行：  
00:00
05:00
10:00
15:00
20:00

1. 选择**创建**。

1. （可选）选择**添加其他计划**以按其他计划运行作业。
**注意**  
您最多可以关联两个计划。这些计划是独立的，除非时间重叠，否则不会相互影响。

1. 选择下列选项之一：
   + **计划并立即运行** – Data Wrangler 作业会立即运行，随后按计划运行。
   + **仅限计划** – Data Wrangler 作业仅按您指定的计划运行。

1. 选择**运行**。

------
#### [ Specific time ]

通过以下过程创建在特定时间运行作业的计划。

要使用 CRON 表达式指定计划，请执行以下操作。

1. 打开您的 Data Wrangler 流。

1. 选择**创建作业**。

1. （可选）对于**输出 KMS 密** AWS KMS 钥，请指定一个密钥来配置任务的输出。

1. 选择**下一步，2. 配置作业**。

1. 选择**关联计划**。

1. 选择**创建新计划**。

1. 对于**计划名称**，指定计划的名称。

1. 选择**创建**。

1. （可选）选择**添加其他计划**以按其他计划运行作业。
**注意**  
您最多可以关联两个计划。这些计划是独立的，除非时间重叠，否则不会相互影响。

1. 选择下列选项之一：
   + **计划并立即运行** – Data Wrangler 作业会立即运行，随后按计划运行。
   + **仅限计划** – Data Wrangler 作业仅按您指定的计划运行。

1. 选择**运行**。

------

您可以使用 Amazon SageMaker Studio Classic 查看计划运行的作业。处理作业在 Pipelines 中运行。每个处理作业都有各自的管道。作业作为管道中的一个处理步骤运行。您可以查看已在管道中创建的计划。有关查看管道的信息，请参阅 [查看管道详情](pipelines-studio-list.md)。

通过以下过程查看您已计划的作业。

要查看您已计划的作业，请执行以下操作。

1. 打开 Amazon SageMaker Studio 经典版。

1. 打开 Pipelines

1. 查看用于您已创建的作业的管道。

   运行作业的管道使用作业名称作为前缀。例如，如果您创建了一个名为 `housing-data-feature-enginnering` 的作业，则管道的名称为 `data-wrangler-housing-data-feature-engineering`。

1. 选择包含您的作业的管道。

1. 查看管道的状态。管道**状态**为**成功**时表示已成功运行处理作业。

要停止运行处理作业，请执行以下操作：

要停止运行处理作业，请删除指定计划的事件规则。删除事件规则时，会使与该计划关联的所有作业停止运行。有关删除规则的信息，请参阅[禁用或删除 Amazon EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-delete-rule.html)。

您还可以停止和删除与计划关联的管道。有关停止管道的信息，请参见[StopPipelineExecution](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopPipelineExecution.html)。有关删除管道的信息，请参阅[DeletePipeline](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeletePipeline.html#API_DeletePipeline_RequestSyntax)。

# 使用 Amazon SageMaker Studio 经典笔记本中的交互式数据准备小工具获取数据见解
<a name="data-wrangler-interactively-prepare-data-notebook"></a>

可使用 Data Wrangler 数据准备小部件与数据进行交互、获取可视化效果、探索切实可行的见解并修复数据质量问题。

您可以通过 Amazon SageMaker Studio Classic 笔记本访问数据准备小工具。对于每一列，该组件会创建可视化，帮助您更好地了解其分布。如果某列存在数据质量问题，其标题中会显示警告。

要查看数据质量问题，请选择显示警告的列标题。您可以使用从见解和可视化中获得的信息，应用小部件的内置转换来帮助您解决问题。

例如，小部件可能检测到有一列只有一个唯一值，并向您显示警告。警告中提供了从数据集中删除该列的选项。

## 开始运行小部件
<a name="data-wrangler-interactively-prepare-data-notebook-getting-started"></a>

可使用以下信息，帮助您开始运行笔记本。

在 Amazon SageMaker Studio 经典版中打开笔记本电脑。有关打开笔记本的信息，请参阅[创建或打开 Amazon SageMaker Studio 经典笔记本电脑](notebooks-create-open.md)。

**重要**  
要运行小部件，笔记本必须使用以下映像之一：  
Python 3 (Data Science) 及 Python 3.7
Python 3 (Data Science 2.0) 及 Python 3.8
Python 3 (Data Science 3.0) 及 Python 3.10
SparkAnalytics 1.0
SparkAnalytics 2.0
有关映像的更多信息，请参阅[亚马逊 SageMaker 图片可用于 Studio Classic 笔记本电脑](notebooks-available-images.md)。

可使用以下代码导入数据准备小部件和 Pandas。小部件使用 Pandas 数据框分析数据。

```
import pandas as pd
import sagemaker_datawrangler
```

以下示例代码将文件加载到名为 `df` 的数据框中。

```
df = pd.read_csv("example-dataset.csv")
```

您可以使用能以 Pandas 数据框对象形式加载的任何格式的数据集。有关 pandas 格式的更多信息，请参阅 [IO 工具（文本、CSV HDF5、...）。](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html)

以下单元格运行 `df` 变量以启动小部件。

```
df
```

数据框的顶部包含以下选项：
+ **查看 Pandas 表** – 在交互式可视化与 Pandas 表之间切换。
+ **使用数据集中的所有行计算见解。使用整个数据集可能会增加生成见解所需的时间。**– 如果不选择此选项，Data Wrangler 将为数据集的前 10000 行计算见解。

数据框会显示数据集的前 1000 行。每个列标题都包含一个堆叠条形图，显示该列的特征。此图显示了有效值、无效值和缺失值的比例。您可以将鼠标悬停在堆叠条形图的不同部分上，以获得计算出的百分比。

每列的标题中都有可视化。以下显示了列可能具有的可视化类型：
+ 分类 – 条形图
+ 数字 – 直方图
+ 日期时间 – 条形图
+ 文本 – 条形图

对于每种可视化，数据准备小部件都以橙色突出显示异常值。

当您选择一列时，它会打开一个侧面板。侧面板显示了**见解**选项卡。该窗格提供了以下类型值的计数：
+ 无效值 – 类型与列类型不匹配的值。
+ 缺失值 – 缺少的值，如 `NaN` 或 `None`。
+ 有效值 – 既不缺失也非无效的值。

对于数字列，**见解**选项卡显示了以下汇总统计数据：
+ 最小值 – 最小的值。
+ 最大值 – 最大的值。
+ 平均值 – 值的平均值。
+ 众数 – 出现频率最高的值。
+ 标准差 – 值的标准差。

对于分类列，**见解**选项卡显示了以下汇总统计数据：
+ 唯一值 – 列中唯一值的数量。
+ 最高频数 – 出现频率最高的值。

标题中带有警告图标的列存在数据质量问题。选择一列可打开**数据质量**选项卡，您可以使用该选项卡查找转换，以帮助解决问题。警告具有以下严重性级别之一：
+ 低 – 可能不会影响您的分析，但可能有助于修复的问题。
+ 中 – 可能会影响您的分析，但可能不是需要修复的关键问题。
+ 高 – 我们强烈建议修复的严重问题。

**注意**  
小部件对列进行排序，将存在数据质量问题的值显示在数据框顶部。还会突出显示导致问题的值。突出显示的颜色与严重性级别相对应。

在**建议的转换**下，可以选择一种转换来修复数据质量问题。小部件可以提供多种转换以修复问题。它可以为最适合问题的转换提供建议。您可以将光标移到转换上，获取有关转换的更多信息。

要将转换应用于数据集，可选择**应用并导出代码**。转换会修改数据集，并使用修改后的值更新可视化。转换的代码显示在笔记本的下一个单元格中。如果对数据集应用其他转换，小部件会将该转换追加到单元格。您可以使用小部件生成的代码执行以下操作：
+ 进行自定义，以更好地满足您的需求。
+ 用于您自己的工作流中。

您可以通过重新运行笔记本中的所有单元格，重现所做的所有转换。

小部件可以为目标列提供见解和警告。目标列即您尝试预测的列。可使用以下过程获取目标列见解。

要获取目标列见解，请执行以下操作。

1. 选择要用作目标列的列。

1. 选择**选择为目标列**。

1. 选择问题类型。小部件的见解和警告是根据问题类型定制的。以下是问题类型：
   + **分类** – 目标列包含分类数据。
   + **回归** – 目标列包含数字数据。

1. 选择**运行**。

1. （可选）在**目标列见解**下，选择一个建议的转换。

## 小部件中见解和转换的参考
<a name="data-wrangler-notebook-dataprep-assistant-reference"></a>

对于特征列（不是目标列的列），您可以获得以下见解，以警告您数据集存在问题。
+ **缺失值** – 该列包含缺失值，例如 `None`、`NaN`（不是数字）或 `NaT`（不是时间戳）。许多机器学习算法在输入数据中不支持缺失值。因此，填充或删除缺失数据的行是至关重要的数据准备步骤。如果您看到缺失值警告，可以使用以下转换之一来纠正此问题。
  + **删除缺失** – 删除含缺失值的行。如果缺失数据的行比例很小并且不适合填补缺失值，那么我们建议删除这些行。
  + **替换为新值** – 将文本缺失值替换为 `Other`。您可以在输出代码中将 `Other` 更改为其他值。用 0 替换数字缺失值。
  + **替换为平均值** – 用列的平均值替换缺失值。
  + **替换为中位数** – 用列的中位数替换缺失值。
  + **删除列** – 从数据集中删除含缺失值的列。当缺失数据的行比例很高时，我们建议删除整列。
+ **伪装的缺失值** – 该列包含伪装的缺失值。伪装的缺失值是指未明确编码为缺失值的值。例如，值可能为 `Placeholder`，而不是采用 `NaN` 来表示缺失值。您可以使用以下转换之一来处理缺失值：
  + **删除缺失** – 删除含缺失值的行
  + **替换为新值** – 将文本缺失值替换为 `Other`。您可以在输出代码中将 `Other` 更改为其他值。用 0 替换数字缺失值。
+ **常量列** – 该列只有一个值。因此，该列没有预测能力。我们强烈建议使用**删除列**转换，将该列从数据集中删除。
+ **ID 列** – 该列没有重复值。该列中所有的值都是唯一的。它们可能是 IDs 或数据库密钥。如果没有更多信息，该列并没有预测能力。我们强烈建议使用**删除列**转换，将该列从数据集中删除。
+ **高基数** – 该列包含比例很高的唯一值。高基数限制了分类列的预测能力。检查该列在分析中的重要性，并考虑使用**删除列**转换将其删除。

对于目标列，您可以获得以下见解，以警告您数据集存在问题。您可以使用警告中提供的建议转换来纠正问题。
+ **目标中的混合数据类型（回归）**– 目标列中存在某些非数字值。可能存在数据输入错误。对于包含无法转换的值的行，我们建议删除。
+ **频繁标签** – 目标列中某些值的出现频率高于回归环境中的正常值。数据收集或处理中可能存在错误。频繁出现的类别可能表明该值被用作默认值，或者是缺失值的占位符。我们建议使用**替换为新值**转换，将缺失值替换为 `Other`。
+ **每个类的实例太少** – 目标列具有很少出现的类别。有些类别的行数不足以让目标列发挥作用。您可以使用以下转换之一：
  + **删除稀有目标** – 删除观察值少于十个的唯一值。例如，如果 `cat` 在列中出现九次，则将其删除。
  + **替换稀有目标** – 将数据集中很少出现的类别替换为 `Other`。
+ **类别过于不平衡（多类分类）**– 数据集中有些类别的出现频率比其他类别高得多。类别不平衡可能会影响预测精度。为使预测尽可能准确，我们建议使用包含当前出现频率较低的类别的行来更新数据集。
+ ** classes/too 大量的类别** — 目标列中有大量的类。类过多可能会导致训练时间加长或预测质量低下。我们建议执行以下操作之一：
  + 将某些类别分组到自己的类别中。例如，如果六个类别密切相关，我们建议对它们使用单个类别。
  + 使用对多个类别具有弹性的机器学习算法。

# 安全性和权限
<a name="data-wrangler-security"></a>

当您查询来自 Athena 或 Amazon Redshift 的数据时，查询的数据集会自动存储在您使用 Studio Classic 的地区的 SageMaker 默认 AI S3 存储桶中。 AWS *此外，当您从 Amazon Data Wrangler 导出 Jupyter 笔记本并运行它时，您的 SageMaker 数据流或.flow 文件将保存到同一个默认存储桶中，前缀为 data\$1wrangler\$1flows。*

为了满足高级安全需求，您可以配置存储桶策略，限制有权访问此默认 SageMaker AI S3 存储桶的 AWS 角色。可使用以下部分将此策略类型添加到 S3 存储桶。要按照本页上的说明进行操作，请使用 AWS Command Line Interface (AWS CLI)。要了解如何操作，请参阅 IAM 用户指南中的[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

此外，您需要授予每个使用 Data Wrangler 的 IAM 角色，访问所需资源的权限。如果您不需要用于访问 Data Wrangler 的 IAM 角色的精细权限，可以将 IAM 托管式策略 [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess) 添加到用于创建 Studio Classic 用户的 IAM 角色中。此策略授予您使用 Data Wrangler 的完全权限。如果您需要更精细的权限，请参阅以下部分：[授予 IAM 角色使用 Data Wrangler 的权限](#data-wrangler-security-iam-policy)。

## 添加存储桶策略以限制对导入到 Data Wrangler 的数据集的访问
<a name="data-wrangler-security-bucket-policy"></a>

您可以使用 Amazon S3 存储桶策略，向包含 Data Wrangler 资源的 S3 存储桶添加策略。在您使用 Studio Classic 的 AWS 区域中，Data Wrangler 上传到默认 SageMaker AI S3 存储桶的资源包括以下内容：
+ 查询的 Amazon Redshift 结果。这些结果存储在 *redshift/* 前缀下。
+ 查询的 Athena 结果。这些结果存储在 *athena/* 前缀下。
+ 在运行 Data Wrangler 所生成的导出的 Jupyter 笔记本时，上传至 Amazon S3 的 .flow 文件。这些文件存储在 *data\$1wrangler\$1flow/* 前缀下。

可使用以下过程创建 S3 存储桶策略，您可以添加此策略以限制 IAM 角色对该存储桶的访问。要了解如何向 S3 存储桶添加策略，请参阅[如何添加 S3 存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)。

**要对存储 Data Wrangler 资源的 S3 存储桶设置存储桶策略，请执行以下操作：**

1. 配置一个或多个您希望能访问 Data Wrangler 的 IAM 角色。

1. 打开命令提示符或 Shell。对于您创建的每个角色，*role-name*替换为该角色的名称并运行以下命令：

   ```
   $ aws iam get-role --role-name role-name
   ```

   在回复中，您会看到以 `AROA` 开头的 `RoleId` 字符串。复制此字符串。

1. 将以下策略添加到您使用 Data Wrangl AWS er 的地区的 SageMaker AI 默认存储桶。*region*替换为存储桶所在的 AWS 区域和您的 AWS 账户 ID。*account-id*将以开头的 `userId` s 替换为要向其授予使用 Data Wrangler 权限的 AWS 角色。*AROAEXAMPLEID* IDs 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:*",
         "Resource": [
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/*",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena/*",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift",
           "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift/*"
           
         ],
         "Condition": {
           "StringNotLike": {
             "aws:userId": [
               "AROAEXAMPLEID_1:*",
               "AROAEXAMPLEID_2:*"
             ]
           }
         }
       }
     ]
   }
   ```

------

## 为 Data Wrangler 创建允许列表
<a name="data-wrangler-security-allowlist"></a>

每当用户开始从 Amazon SageMaker Studio Classic 用户界面运行 Data Wrangler 时，他们都会调用 SageMaker AI 应用程序编程接口 (API) 来创建数据牧马人应用程序。

默认情况下，您的组织可能不会向用户提供调用这些 API 的权限。要提供权限，必须使用以下策略模板创建策略并附加到用户的 IAM 角色：[Data Wrangler 允许列表示例](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/DataWranglerAllowListExample.txt)。

**注意**  
上述策略示例仅为用户提供访问 Data Wrangler 应用程序的权限。

有关创建策略的信息，请参阅[在 JSON 选项卡中创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)。创建策略时，可将 JSON 策略从 [Data Wrangler 允许列表示例](https://s3.us-west-2.amazonaws.com/amazon-sagemaker-data-wrangler-documentation-artifacts/DataWranglerAllowListExample.txt)中复制并粘贴到 **JSON** 选项卡中。

**重要**  
删除阻止用户运行以下操作的任何 IAM 策略：  
[CreateApp](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateApp.html)
[DescribeApp](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeApp.html)
如果不删除这些政策，用户仍可能受其影响。

使用模板创建策略后，将其附加到用户的 IAM 角色。有关附加策略的信息，请参阅[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

## 授予 IAM 角色使用 Data Wrangler 的权限
<a name="data-wrangler-security-iam-policy"></a>

您可以通过一般 IAM 托管策略 [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)，授予 IAM 角色使用 Data Wrangler 的权限。这是一项通用政策，包括使用所有 SageMaker AI 服务所需的[权限](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol-AmazonSageMakerFullAccess.html)。此策略授予 IAM 角色对 Data Wrangler 的完全访问权限。在使用 `AmazonSageMakerFullAccess` 授予 Data Wrangler 访问权限时，应该知晓以下事项：
+ 如果从 Amazon Redshift 导入数据，**数据库用户**名称必须具有前缀 `sagemaker_access`。
+ 此托管策略仅授予名称中包含以下词组之一的存储桶的访问权限：`SageMaker AI`、`SageMaker AI`、`sagemaker` 或 `aws-glue`。如果要使用 Data Wrangler，从名称中不含以上词组的 S3 存储桶导入，那么请参阅本页最后一部分，了解如何向 IAM 实体授予访问 S3 存储桶的权限。

如果您有高安全性需求，可以将本部分中的策略附加到 IAM 实体，以授予使用 Data Wrangler 所需的权限。

如果 IAM 角色需要从 Data Wrangler 导入 Amazon Redshift 或 Athena 中的数据集，那么必须向该实体添加策略才能访问这些资源。以下策略是可用于授予 IAM 角色从 Amazon Redshift 和 Athena 导入数据的权限最严格的策略。

要了解如何将自定义策略附加到 IAM 角色，请参阅《IAM 用户指南》中的[管理 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html#create-managed-policy-console)。

**授予 Athena 数据集导入访问权限的策略示例**

以下策略假定 IAM 角色有权访问底层 S3 存储桶，数据通过单独的 IAM 策略存储在此存储桶中。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:GetQueryExecution",
                "athena:GetQueryResults",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateTable"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*/sagemaker_tmp_*",
                "arn:aws:glue:*:*:table/sagemaker_featurestore/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:DeleteTable"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*/sagemaker_tmp_*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetTables"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:GetDatabase"
            ],
            "Resource": [
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/sagemaker_featurestore",
                "arn:aws:glue:*:*:database/sagemaker_processing",
                "arn:aws:glue:*:*:database/default",
                "arn:aws:glue:*:*:database/sagemaker_data_wrangler"
            ]
        }
    ]
}
```

------

****授予 Amazon Redshift 数据集导入访问权限的策略示例****

以下策略授予如下权限：使用名称中具有 `sagemaker_access` 前缀的数据库用户，设置 Amazon Redshift 与 Data Wrangler 的连接。要授权使用其他数据库用户进行连接，可在以下策略的 `"Resources"` 下添加其他条目。以下策略假定 IAM 角色有权访问底层 S3 存储桶，数据通过单独的 IAM 策略存储在此存储桶中（如果适用）。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift-data:ExecuteStatement",
                "redshift-data:DescribeStatement",
                "redshift-data:CancelStatement",
                "redshift-data:GetStatementResult",
                "redshift-data:ListSchemas",
                "redshift-data:ListTables"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:*:*:dbuser:*/sagemaker_access*",
                "arn:aws:redshift:*:*:dbname:*"
            ]
        }
    ]
}
```

------

**授予 S3 存储桶访问权限的策略**

如果数据集存储在 Amazon S3 中，那么可以通过类似以下的策略，授予 IAM 角色访问此存储桶的权限。此示例授予对名*test*为的存储桶的编程读写访问权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}
```

------

要从 Athena 和 Amazon Redshift 导入数据，您必须授予 IAM 角色访问正在使用的区域数据管理器 AWS 中默认 Amazon S3 存储桶下的以下前缀的权限：，。`athena/` `redshift/`如果 AWS 该地区尚不存在默认 Amazon S3 存储桶，则您还必须向 IAM 角色授予在此区域创建存储桶的权限。

此外，如果您希望 IAM 角色能够使用 Amazon F SageMaker eature Store、Pipelines 和 Data Wrangler 任务导出选项，则必须向该存储桶`data_wrangler_flows/`中的前缀授予访问权限。

 Data Wrangler 使用 `athena/` 和 `redshift/` 前缀存储预览文件和导入的数据集。要了解更多信息，请参阅[导入的数据存储](data-wrangler-import.md#data-wrangler-import-storage)。

当您运行从 Data Wrangler 导出的 Jupyter 笔记本时，Data Wrangler 使用 `data_wrangler_flows/` 前缀存储 .flow 文件。要了解更多信息，请参阅[导出](data-wrangler-data-export.md)。

可以使用类似以下的策略授予上文中所述的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/data_wrangler_flows/*",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/athena/*",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift",
                "arn:aws:s3:::sagemaker-us-east-1-111122223333/redshift/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::sagemaker-us-east-1-111122223333"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        }
    ]
}
```

------

您还可以通过指定 Amazon S3 存储桶 URI 从其他 AWS 账户访问您的 Amazon S3 存储桶中的数据。为此，授予对另一账户中 Amazon S3 存储桶的访问权限的 IAM 策略，应使用类似以下示例的策略，其中 `BucketFolder` 是用户存储桶 `UserBucket` 中的特定目录。此策略应添加到授权其他用户访问其存储桶的用户。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::UserBucket/BucketFolder/*"
            },
                {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": "arn:aws:s3:::UserBucket",
                "Condition": {
                "StringLike": {
                    "s3:prefix": [
                    "BucketFolder/*"
                    ]
                }
            }
        } 
    ]
}
```

------

访问存储桶的用户（非存储桶所有者）必须向其用户添加类似以下示例的策略。请注意，下面的 `AccountX` 和 `TestUser` 分别代表存储桶所有者和其用户。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/TestUser"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::UserBucket/BucketFolder/*"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/TestUser"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::UserBucket"
            ]
        }
    ]
}
```

------

**授予使用 SageMaker AI Studio 的权限的策略示例**

使用类似下面的策略创建 IAM 执行角色，该角色可用于设置 Studio Classic 实例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:DescribeUserProfile",
                "sagemaker:ListUserProfiles",
                "sagemaker:*App",
                "sagemaker:ListApps"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Snowflake 和 Data Wrangler
<a name="data-wrangler-security-snowflake"></a>

所有 AWS 资源权限均通过附加到 Studio Classic 实例的 IAM 角色进行管理。特定于 Snowflake 的权限将由 Snowflake 管理员管理，因为他们可以向每个 Snowflake 用户授予精细权限/特权。包括数据库、架构、表、仓库和存储集成对象。您必须确保在 Data Wrangler 外部设置了正确的权限。

请注意，默认情况下 Snowflake `COPY INTO Amazon S3` 命令通过公共互联网将数据从 Snowflake 移动到 Amazon S3，但传输中数据使用 SSL 进行保护。Amazon S3 中的静态数据使用默认的 AWS KMS key，用 SSE-KMS 进行加密。

在 Snowflake 凭证存储方面，Data Wrangler 不存储客户凭证。Data Wrangler 使用 Secrets Manager 将凭证存储在密钥中，并将密钥轮换作为最佳实践安全计划的一部分。Snowflake 或 Studio Classic 管理员需要确保授予数据科学家的 Studio Classic 执行角色对存储凭证的密文执行 `GetSecretValue` 的权限。如果已附加到 Studio Classic 执行角色，`AmazonSageMakerFullAccess` 策略就拥有读取 Data Wrangler 创建的密文和按照上述说明中的命名和标记约定创建的密文的必要权限。未遵守约定的密钥必须单独授权。我们建议使用 Secrets Manager 来防止通过不安全的渠道共享凭证；不过，请注意，登录用户可以在 Studio Classic 中启动终端或 Python 笔记本，然后调用 Secrets Manager API 的 API 调用，从而获取明文密码。

## 使用数据加密 AWS KMS
<a name="data-wrangler-security-kms"></a>

在 Data Wrangler 中，您可以对加密的文件进行解密，并将其添加到 Data Wrangler 流中。您也可以使用默认密 AWS KMS 钥或您提供的密钥对转换的输出进行加密。

您可以导入具以下特点的文件：
+ 服务器端加密
+ 采用 SSE-KMS 作为加密类型

要解密文件并导入到 Data Wrangler 流程，您必须添加要用作密钥用户的 SageMaker Studio Classic 用户。

下面的截图显示了作为键用户添加的 Studio Classic 用户角色。请参阅 [IAM 角色](https://console.aws.amazon.com/iam/home#/roles)，访问左侧面板下的用户以进行此更改。

![\[管理控制台中的键用户部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/data-wrangler-kms.png)


### 适用于 Data Wrangler 导入的数据存储的 Amazon S3 客户托管密钥设置
<a name="data-wrangler-s3-cmk-setup"></a>

 默认情况下，Data Wrangler 使用具以下命名约定的 Amazon S3 存储桶：`sagemaker-region-account number`。例如，如果您的帐号是 `111122223333`，并在 us-east-1 中使用 Studio Classic，则导入的数据集将按以下命名约定存储：`sagemaker-us-east-1-111122223333`。

以下说明阐释了如何为默认 Amazon S3 存储桶设置客户托管密钥。

1. 要启用服务器端加密并为默认 S3 存储桶设置客户托管密钥，请参阅[使用 KMS 加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

1. 完成步骤 1 后，导航到 AWS KMS AWS 管理控制台。找到上一步步骤 1 中选择的客户托管式密钥，并将 Studio Classic 角色添加为键用户。为此，请按照[允许密钥用户使用客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)中的说明进行操作。

### 加密导出的数据
<a name="data-wrangler-export-kms"></a>

您可以使用以下方法之一，对导出的数据进行加密：
+ 指定 Amazon S3 存储桶包含使用 SSE-KMS 加密的对象。
+ 指定 AWS KMS 密钥来加密您从 Data Wrangler 导出的数据。

在**导出数据**页面中，为**AWS KMS 密钥 ID 或 ARN** 指定值。

有关使用 AWS KMS 密钥的更多信息，请参阅使用[存储在 AWSAWS Key Management Service (SSE-KMS) 中的 AWS KMS 密钥的服务器端加密保护数据](https://docs.aws.amazon.com//AmazonS3/latest/userguide/UsingKMSEncryption.html)。

## 亚马逊 AppFlow 权限
<a name="data-wrangler-appflow-permissions"></a>

执行传输时，必须指定有权执行传输的 IAM 角色。您可以使用有权使用 Data Wrangler 的同一 IAM 角色。默认情况下，用于访问 Data Wrangler 的 IAM 角色是 `SageMakerExecutionRole`。

IAM 角色必须具有以下权限：
+ 对 Amazon 的权限 AppFlow
+ 对 AWS Glue 数据目录的权限
+ 发现可用数据源的权限 AWS Glue 

当您进行传输时，Amazon 会将传输的元数据 AppFlow 存储在 AWS Glue 数据目录中。Data Wrangler 使用目录中的元数据来确定是否可供您查询和导入。

要向 Amazon 添加权限 AppFlow，请向 IAM 角色添加`AmazonAppFlowFullAccess` AWS 托管策略。有关添加策略的更多信息，请参阅[添加或删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

如果要将数据传输到 Amazon S3，那么还必须附加以下策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketTagging",
        "s3:ListBucketVersions",
        "s3:CreateBucket",
        "s3:ListBucket",
        "s3:GetBucketPolicy",
        "s3:PutEncryptionConfiguration",
        "s3:GetEncryptionConfiguration",
        "s3:PutBucketTagging",
        "s3:GetObjectTagging",
        "s3:GetBucketOwnershipControls",
        "s3:PutObjectTagging",
        "s3:DeleteObject",
        "s3:DeleteBucket",
        "s3:DeleteObjectTagging",
        "s3:GetBucketPublicAccessBlock",
        "s3:GetBucketPolicyStatus",
        "s3:PutBucketPublicAccessBlock",
        "s3:PutAccountPublicAccessBlock",
        "s3:ListAccessPoints",
        "s3:PutBucketOwnershipControls",
        "s3:PutObjectVersionTagging",
        "s3:DeleteObjectVersionTagging",
        "s3:GetBucketVersioning",
        "s3:GetBucketAcl",
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetAccountPublicAccessBlock",
        "s3:ListAllMyBuckets",
        "s3:GetAnalyticsConfiguration",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

要添加 AWS Glue 权限，请将`AWSGlueConsoleFullAccess`托管策略添加到 IAM 角色。有关 Amazon AWS Glue 权限的更多信息 AppFlow，请参阅 [link-to-appflow-page]。

亚马逊 AppFlow 需要访问 AWS Glue 并且 Data Wrangler 才能导入您传输的数据。要授予 Amazon AppFlow 访问权限，请向 IAM 角色添加以下信任策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root",
                "Service": [
                    "appflow.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

要在 Data Wrangler 中显示 Amazon AppFlow 数据，请向 IAM 角色添加以下策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "glue:SearchTables",
            "Resource": [
                "arn:aws:glue:*:*:table/*/*",
                "arn:aws:glue:*:*:database/*",
                "arn:aws:glue:*:*:catalog"
            ]
        }
    ]
}
```

------

## 在 Data Wrangler 中使用生命周期配置
<a name="data-wrangler-lifecycle-configuration"></a>

您可能有一个 Amazon EC2 实例，配置为运行内核网关应用程序，而不是 Data Wrangler 应用程序。Kernel Gateway 应用程序可以访问运行 Studio Classic 笔记本和终端的环境和内核。Data Wrangler 应用程序是运行 Data Wrangler 的用户界面应用程序。非 Data Wrangler 实例的 Amazon EC2 实例，需要修改其生命周期配置才能运行 Data Wrangler。生命周期配置是用于自动自定义 Amazon SageMaker Studio Classic 环境的 shell 脚本。

有关生命周期配置的更多信息，请参阅[使用生命周期配置自定义 Amazon SageMaker Studio 经典版](studio-lcc.md)。

实例的默认生命周期配置不支持使用 Data Wrangler。您可以对默认配置进行以下修改，以便在实例中使用 Data Wrangler。

```
#!/bin/bash
set -eux
STATUS=$(
python3 -c "import sagemaker_dataprep"
echo $?
)
if [ "$STATUS" -eq 0 ]; then
echo 'Instance is of Type Data Wrangler'
else
echo 'Instance is not of Type Data Wrangler'

# Replace this with the URL of your git repository
export REPOSITORY_URL="https://github.com/aws-samples/sagemaker-studio-lifecycle-config-examples.git"

git -C /root clone $REPOSTIORY_URL

fi
```

可以将脚本另存为 `lifecycle_configuration.sh`。

您可以将生命周期配置附加到 Studio Classic 域或用户配置文件。有关创建和附加生命周期配置的更多信息，请参阅[创建生命周期配置并将其与 Amazon SageMaker Studio Classic 关联](studio-lcc-create.md)。

以下说明将向您介绍如何将生命周期配置附加到 Studio Classic 域或用户配置文件。

在创建或附加生命周期配置时，可能会遇到错误。有关生命周期配置错误调试的信息，请参阅[KernelGateway 应用程序失败](studio-lcc-debug.md#studio-lcc-debug-kernel)。

# 发行说明
<a name="data-wrangler-release-notes"></a>

Data Wrangler 会定期更新新功能和错误修复。要升级在 Studio Classic 中使用的 Data Wrangler 版本，请按照 [关闭并更新 Amazon SageMaker Studio 经典版应用程序](studio-tasks-update-apps.md) 中的说明操作。


****  

| 发行说明 | 
| --- | 
|  **8/31/2023** 新功能： 您现在可以针对整个数据集创建“数据质量和见解”报告。有关更多信息，请参阅 [获取有关数据和数据质量的见解](data-wrangler-data-insights.md)。 **2023 年 5 月 20 日** 新功能： 您现在可以从 Salesforce Data Cloud 导入数据。有关更多信息，请参阅 [从 Salesforce Data Cloud 导入数据](data-wrangler-import.md#data-wrangler-import-salesforce-data-cloud)。 **2023 年 4 月 18 日** 新功能： 您现在可以用 Amazon Personalize 能解释的格式获取数据。有关更多信息，请参阅 [为 Amazon Personalize 映射列](data-wrangler-transform.md#data-wrangler-transform-personalize)。 **2023 年 1 月 3 日** 新功能： 您现在可以使用 Hive 从 Amazon EMR 导入数据。有关更多信息，请参阅 [从 Amazon EMR 导入数据](data-wrangler-import.md#data-wrangler-emr)。 **12/10/2022** 新功能： 您现在可以将 Data Wrangler 流导出至推理端点。有关更多信息，请参阅 [导出到推理端点](data-wrangler-data-export.md#data-wrangler-data-export-inference)。 新功能： 您现在可以使用交互式笔记本小部件进行数据准备。有关更多信息，请参阅 [使用 Amazon SageMaker Studio 经典笔记本中的交互式数据准备小工具获取数据见解](data-wrangler-interactively-prepare-data-notebook.md)。 新功能： 您现在可以从 SaaS 平台导入数据。有关更多信息，请参阅 [从软件即服务 (SaaS) 平台导入数据](data-wrangler-import.md#data-wrangler-import-saas)。 **2022 年 12 月 10 日** 新功能： 您现在可以为不同的数据集重用数据流。有关更多信息，请参阅 [针对不同数据集重用数据流](data-wrangler-parameterize.md)。 **2022 年 5 月 10 日** 新功能： 您现在可以使用主成分分析 (PCA) 作为转换。有关更多信息，请参阅 [降低数据集中的维度](data-wrangler-transform.md#data-wrangler-transform-dimensionality-reduction)。 **2022 年 5 月 10 日** 新功能： 您现在可以在 Data Wrangler 流中重新拟合参数。有关更多信息，请参阅 [导出](data-wrangler-data-export.md)。 **10/03/2022** 新功能： 您现在可以从 Data Wrangler 流部署模型。有关更多信息，请参阅 [根据您的数据流自动训练模型](data-wrangler-autopilot.md)。 **2022 年 9 月 20 日** 新功能： 您现在可以在 Athena 中设置数据保留期。有关更多信息，请参阅 [从 Athena 导入数据](data-wrangler-import.md#data-wrangler-import-athena)。 **2022 年 9 月 6 日** 新功能： 现在，您可以使用 Amazon A SageMaker utopilot 直接从 Data Wrangler 流程中训练模型。有关更多信息，请参阅 [根据您的数据流自动训练模型](data-wrangler-autopilot.md)。 **2022 年 6 月 5 日** 新功能： 您现在可以使用更多 m5 和 r5 实例。有关更多信息，请参阅 [实例](data-wrangler-data-flow.md#data-wrangler-data-flow-instances)。 **2022 年 4 月 27 日** 新功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) **2022 年 1 月 4 日** 新功能： 您现在可以使用 Databricks 作为数据源。有关更多信息，请参阅 [从 Databricks (JDBC) 导入数据](data-wrangler-import.md#data-wrangler-databricks)。 **2022 年 2 月 2 日** 新功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) **2021 年 10 月 16 日** 新功能： Data Wrangler 现在支持 Athena 工作组。有关更多信息，请参阅 [从 Athena 导入数据](data-wrangler-import.md#data-wrangler-import-athena)。 **10/6/2021** 新功能： Data Wrangler 现在支持转换时间序列数据。有关更多信息，请参阅 [转换时间序列](data-wrangler-transform.md#data-wrangler-transform-time-series)。 **7/15/2021** 新功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) 增强功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html)  错误修复： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) **2021 年 4 月 26 日**  增强功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) 错误修复： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) **2021 年 8 月 2 日**  新功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) 增强功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html) 错误修复： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-wrangler-release-notes.html)  | 

# 故障排除
<a name="data-wrangler-trouble-shooting"></a>

如果在使用 Amazon SageMaker Data Wrangler 时出现问题，我们建议您执行以下操作：
+ 如果提供了错误消息，请阅读消息并解决它报告的问题（如果可能）。
+ 确保 Studio Classic 用户的 IAM 角色拥有执行该操作所需的权限。有关更多信息，请参阅 [安全性和权限](data-wrangler-security.md)。
+ 如果您尝试从其他 AWS 服务（例如 Amazon Redshift 或 Athena）导入时出现问题，请确保您已配置执行数据导入所需的权限和资源。有关更多信息，请参阅 [导入](data-wrangler-import.md)。
+ 如果问题仍然存在，请选择屏幕右上方的**获取帮助**，联系 Data Wrangler 团队。有关更多信息，请参阅以下图片。  
![\[Data Wrangler 管理控制台中 Data Wrangler 帮助表格的位置。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/get-help/get-help.png)  
![\[Data Wrangler 管理控制台中的 Data Wrangler 帮助表格。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/get-help/get-help-forms.png)

作为最后的手段，您可以尝试重新启动运行 Data Wrangler 的内核。

1. 保存并退出要重新启动内核的 .flow 文件。

1. 选择****正在运行的终端和内核****图标，如下图所示。  
![\[管理控制台中运行终端和内核图标的位置。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/stop-kernel-option.png)

1. 选择要终止内核的 .flow 文件右侧的**停止**图标，如下图所示。  
![\[管理控制台中停止图标的位置。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/mohave/stop-kernel.png)

1. 刷新浏览器。

1. 重新打开正在处理的 .flow 文件。

## 排除 Amazon EMR 中的问题
<a name="data-wrangler-trouble-shooting-emr"></a>

可使用以下信息，帮助排除您在使用 Amazon EMR 时可能出现的错误。
+ 连接失败 – 如果连接失败并显示以下消息：`The IP address of the EMR cluster isn't private error message`，说明您的 Amazon EMR 集群可能未在专用子网中启动。作为安全最佳实践，Data Wrangler 仅支持连接到专用 Amazon EMR 集群。选择专用 EC2 子网，在其中启动 EMR 集群。
+ 连接挂起和超时 – 问题很可能是网络连接问题造成的。您开始连接到集群后，屏幕不会刷新。大约 2 分钟后，您可能会看到以下错误：`JdbcAddConnectionError: An error occurred when trying to connect to presto: xxx: Connect to xxx failed: Connection timed out (Connection timed out) will display on top of the screen.`。

  此错误可能有两个根本原因：
  + 亚马逊 EMR 和 Amazon SageMaker Studio Classic 有所不同。 VPCs我们建议在同一个 VPC 中同时启动 Amazon EMR 和 Studio Classic。您也可以使用 VPC 对等连接。有关更多信息，请参阅[什么是 VPC 对等连接？](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)
  + Amazon EMR 主安全组在 Presto 使用的端口上缺少 Amazon SageMaker Studio Classic 安全组的入站流量规则。要解决此问题，请允许端口 8889 上的入站流量。
+ 由于连接类型配置错误，连接失败 – 您可能会看到以下错误消息：` Data Wrangler couldn't create a connection to {connection_source} successfully. Try connecting to {connection_source} again. For more information, see Troubleshoot. If you’re still experiencing issues, contact support. `

  请检查身份验证方法。您在 Data Wrangler 中指定的身份验证方法，应该与在集群上使用的身份验证方法相匹配。
+ 您不具备 LDAP 身份验证的 HDFS 权限 – 可使用以下指南解决问题：[使用 Linux 凭证设置 HDFS 权限](https://docs.aws.amazon.com/whitepapers/latest/teaching-big-data-skills-with-amazon-emr/set-up-hdfs-permissions-using-linux-credentials.html)。您可以使用以下命令登录集群：

  ```
  hdfs dfs -mkdir /user/USERNAME
  hdfs dfs -chown USERNAME:USERNAME /user/USERNAME
  ```
+ LDAP 身份验证缺少连接密钥错误 – 您可能会看到以下错误消息：`Data Wrangler couldn't connect to EMR hive successfully. JDBC connection is missing required connection key(s): PWD`。

  对于 LDAP 身份验证，必须指定用户名和密码。存储在 Secrets Manager 中的 JDBC URL 缺少属性 `PWD`。
+ 您在排除 LDAP 配置故障时：我们建议您确保 LDAP 身份验证器（LDAP 服务器）已正确配置，可连接到 Amazon EMR 集群。可使用 `ldapwhoami` 命令帮助解决配置问题。例如，您可以运行以下命令：
  + 对于 LDAPS – `ldapwhoami -x -H ldaps://ldap-server`
  + 对于 LDAP – `ldapwhoami -x -H ldap://ldap-server`

  如果身份验证器配置成功，任一命令都应返回 `Anonymous`。

## Salesforce 故障排除
<a name="data-wrangler-troubleshooting-salesforce-data-cloud"></a>

### 生命周期配置错误
<a name="data-wrangler-troubleshooting-salesforce-lcc-debug-data-cloud"></a>

当用户第一次打开 Studio Classic 时，可能会出现错误，提示生命周期配置有问题。使用 Amazon CloudWatch 访问您的生命周期配置脚本编写的日志。有关生命周期配置调试的更多信息，请参阅[在亚马逊 SageMaker Studio 经典版中调试生命周期配置](studio-lcc-debug.md)。

如果您无法调试错误，可以手动创建配置文件。每次删除或重新启动 Jupyter 服务器时，都必须创建该文件。可按照以下过程手动创建该文件。

**创建配置文件**

1. 导航至 Studio Classic。

1. 依次选择**文件**、**新建**和**终端**。

1. 创建 `.sfgenie_identity_provider_oauth_config`。

1. 在文本编辑器中打开该文件。

1. 将包含 Secrets Manager 密钥的 Amazon 资源名称 (ARN) 的 JSON 对象添加到文件中。您可以使用以下模板创建对象。

   ```
   {
     "secret_arn": "example-secret-ARN"
   }
   ```

1. 保存对文件所做的更改。

### 无法从 Data Wrangler 流访问 Salesforce Data Cloud
<a name="data-wrangler-troubleshooting-salesforce-datacloud-access"></a>

您的用户在从 Data Wrangler 流中选择 **Salesforce Data Cloud** 后，可能会收到一条错误消息，指出设置连接的先决条件尚未满足。这可能是由以下错误引起的：
+ Secrets Manager 中的 Salesforce 密钥尚未创建。
+ Secrets Manager 中的 Salesforce 密钥已创建，但缺少 Salesforce 标签。
+ Secrets Manager 中的 Salesforce 密钥是错误 AWS 区域地创建的。例如，您的用户将无法访问 `ca-central-1` 中的 Salesforce Data Cloud，因为您是在 `us-east-1` 中创建的密钥。您可以将密钥复制到 `ca-central-1` 中，也可以使用相同的凭证在 `ca-central-1` 中创建新密钥。有关复制密钥的信息，请参阅[将 AWS Secrets Manager 密钥复制给其他 AWS 区域](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create-manage-multi-region-secrets.html)人。
+ 您的用户用于访问 Amazon SageMaker Studio Classic 的策略缺少以下权限 AWS Secrets Manager
+ 您在生命周期配置中指定的 JSON 对象的 Secrets Manager ARN 中有打字错误。
+ 包含你的 Salesforce OAuth 配置的 Secrets Manager 密钥里有一个错字

### 显示 `redirect_uri_mismatch` 的空白页面
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-blank-page"></a>

您的用户在选择**保存并连接**后，可能会被重定向到一个显示 `redirect_uri_mismatch` 的页面。您在 Salesforce“连接的应用程序”设置中注册的回调 URI 要么丢失，要么不正确。

使用以下 URL 检查您的 Studio Classic URL 是否已在 Salesforce org 的 Connected App 设置中正确注册：`https://EXAMPLE_SALESFORCE_ORG/lightning/setup/NavigationMenus/home/`。有关使用“连接的应用程序”设置的更多信息，请导航至以下 URL：`https://EXAMPLE_SALESFORCE_ORG/lightning/setup/NavigationMenus/home/`。

**注意**  
在 Salesforce 系统中传播 URI 大约需要十分钟。

### 共享空间
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-shared-spaces"></a>

共享空间目前不适用于 Salesforce Data Cloud 集成。您可以删除您打算使用的 Amazon SageMaker AI 域中的共享空间，也可以使用其他未设置共享空间的域名。

### OAuth 重定向错误
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-error"></a>

您的用户在选择**连接**后，应该能够从 Salesforce Data Cloud 导入数据。如果遇到错误，我们建议要求用户执行以下操作：
+ 告诉他们耐心等待 — 当他们被重定向回 Amazon SageMaker Studio Classic 时，最多可能需要一分钟才能完成身份验证过程。当用户被重定向时，我们建议告知用户应避免与浏览器交互。例如，不应关闭浏览器选项卡、切换到其他选项卡或与 Data Wrangler 流交互。与浏览器交互可能会删除连接到数据云所需的授权码。
+ 让用户重新连接到数据云 – 一些暂时性问题可能会导致与 Salesforce Data Cloud 的连接失败。让用户创建新的 Data Wrangler 流，然后再次尝试连接到 Salesforce Data Cloud。
+ 确保您的用户使用 Amazon SageMaker Studio Classic 关闭所有其他选项卡 — 在多个选项卡中打开 Studio Classic 可能会导致 Salesforce 数据云连接失败。确保用户只打开一个 Studio Classic 标签页。
+ 多个用户同时访问 Studio Classic — 一次只能有一个用户访问一个 SageMaker Amazon AI 域。如果多个用户访问同一个域，用户试图创建到 Salesforce 数据云的连接可能会失败。

更新 Data Wrangler 和 Studio Classic 也可能会修复它们的错误。有关更新 Data Wrangler 的信息，请参阅[更新 Data Wrangler](data-wrangler-update.md)。有关更新 Studio Classic 的信息，请参阅 [关闭并更新 Amazon SageMaker Studio 经典版](studio-tasks-update-studio.md)。

如果前面的故障排除步骤都不起作用，您可能会发现来自 Salesforce 的错误消息，并在 Studio Classic URL 中嵌入了相应的说明。以下是您可能发现的消息示例：`error=invalid_client_id&error_description=client%20identifier%20invalid`。

您可以查看 URL 中的错误消息，并尝试解决存在的问题。如果错误消息或描述不清楚，我们建议您搜索 Salesforce 知识库。如果搜索知识库不起作用，您可以联系 Salesforce 帮助中心以寻求更多帮助。

### Data Wrangler 需要很长时间才能加载
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-long-load-time"></a>

当您的用户从 Salesforce Data Cloud 重定向回 Data Wrangler 时，可能需要很长的加载时间。

如果这是用户首次使用 Data Wrangler，或者用户删除了内核，那么可能需要大约 5 分钟配置新的 Amazon EC2 实例以使用 Data Wrangler。

如果用户并不是第一次使用 Data Wrangler，并且未删除内核，您可以要求用户刷新页面或关闭尽可能多的浏览器选项卡。

如果上述干预措施都不起作用，可以让用户建立与 Salesforce Data Cloud 的新连接。

### 用户导出数据失败且出现 `Invalid batch Id` 错误
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-batch-id"></a>

当你的用户导出他们对自己的 Salesforce 数据所做的转换时，Data Wrangler 在后端使用的 SageMaker 处理任务可能会失败。Salesforce Data Cloud 可能暂时不可用，或者可能存在缓存问题。

为了解决这个问题，我们建议让您的用户回到导入数据并更改正在查询的列顺序的步骤。例如，用户可以将以下查询：

```
SELECT col_A, col_B FROM table                
```

更改为以下查询：

```
SELECT col_B, col_A FROM table                
```

用户在更改了列的顺序，并确保所做的后续转换仍然有效之后，可以再次开始导出数据。

### 用户无法导出非常大的数据集
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-query"></a>

如果您的用户从 Salesforce Data Cloud 导入了一个非常大的数据集，那么可能无法导出所做的转换。大型数据集可能包含太多行，也可能是复杂查询的结果。

我们建议让您的用户执行以下操作：
+ 简化其 SQL 查询
+ 对其数据进行采样

以下是用户可用来简化查询的一些策略：
+ 指定列名，而不是使用 `*` 运算符
+ 查找要导入的数据子集，而不是使用更大的子集
+ 最大限度减少大型数据集之间的连接

用户可以使用采样来减少数据集中的行数。有关采样方法的信息，您的用户可以参阅[采样](data-wrangler-transform.md#data-wrangler-transform-sampling)。

### 由于刷新令牌无效，用户无法导出数据
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-processing-job-fails-invalid-token"></a>

Data Wrangler 使用 JDBC 驱动程序与 Salesforce Data Cloud 集成。身份验证的方法是 OAuth。对于 OAuth，刷新令牌和访问令牌是两个不同的数据，用于授权访问您的 Salesforce Data Cloud 中的资源。

访问令牌或核心令牌允许通过 Data Wrangler，直接访问 Salesforce 数据并运行查询。其寿命很短，设计为很快过期。为了保持对 Salesforce 数据的访问权限，Data Wrangler 使用刷新令牌，从 Salesforce 获取新的访问令牌。

您可能将刷新的过期设置得太快，无法为用户获取新的访问令牌。您可能需要重访刷新令牌策略，以确保此策略可容纳需要为用户长时间运行的查询。有关配置刷新令牌策略的信息，请参阅 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ConnectedApplication/home/`。

### 查询失败或表未加载
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-table-not-loading"></a>

Salesforce 遇到了服务中断。即使您已正确配置所有设置，您的用户也可能在一段时间内无法导入其数据。

服务中断可能出于维护原因而发生。我们建议您第二天再查看问题是否已解决。

如果您遇到问题的时间超过一天，我们建议您联系 Salesforce 帮助中心以寻求进一步的帮助。有关联系 Salesforce 的信息，请参阅[您希望如何与 Salesforce 取得联系？](https://www.salesforce.com/company/contact-us/)

### 在 Studio Classic 重定向期间的 `OAUTH_APP_BLOCKED`
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-app-blocked"></a>

当您的用户被重定向回 Amazon SageMaker Studio Classic 时，他们可能会注意到网址`error=OAUTH_APP_BLOCKED`中的查询参数。用户可能是遇到了一个暂时性问题，应该可以在一天之内自行解决。

也有可能是您屏蔽了用户对连接的应用程序的访问。有关解决此问题的信息，请参阅 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ConnectedApplication/home/`。

### 在 Studio Classic 重定向期间的 `OAUTH_APP_DENIED`
<a name="data-wrangler-troubleshooting-salesforce-data-cloud-oauth-app-access-denied"></a>

当您的用户被重定向回 Amazon SageMaker Studio Classic 时，他们可能会注意到网址`error=OAUTH_APP_ACCESS_DENIED`中的查询参数。您尚未向其配置文件类型授予访问与 Data Wrangler 关联的 `Connected App` 的权限。

要解决用户的访问问题，请导航至 `https://EXAMPLE_SALESFORCE_ORG_URL/lightning/setup/ManageUsers/home/`，并检查是否为用户分配了正确的配置文件。

# 提高 Amazon EC2 实例限制
<a name="data-wrangler-increase-instance-limit"></a>

在使用 Data Wrangler 时，您可能会看到以下错误消息：`The following instance type is not available: ml.m5.4xlarge. Try selecting a different instance below.`

此消息可能表明您需要选择不同的实例类型，但也可能表明您没有足够的 Amazon EC2 实例，无法在工作流中成功运行 Data Wrangler。您可以使用以下过程增加实例数量。

要增加实例数量，请执行以下操作。

1. 打开 AWS 管理控制台.

1. 在搜索栏中指定 **Services Quotas**。

1. 选择**服务限额**。

1. 选择 **AWS 服务**。

1. 在搜索栏中指定 **Amazon SageMaker AI**。

1. 选择 **Amazon SageMaker AI**。

1. 在**服务限额**下，指定 **Studio KernelGateway Apps running on *ml.m5.4xlarge* instance**。
**注意**  
ml.m5.4xlarge 是 Data Wrangler 的默认实例类型。您可以使用其他实例类型，并请求增加其限额。有关更多信息，请参阅 [实例](data-wrangler-data-flow.md#data-wrangler-data-flow-instances)。

1. 选择**在*ml.m5.4xlarge*实例上运行的 Studio KernelGateway 应用程序**。

1. 选择**请求增加限额**。

1. 对于**更改限额值**，指定一个大于**应用的限额值**的值。

1. 选择**请求**。

如果您的请求获得批准，则会向与您的账户关联的电子邮件地址 AWS 发送通知。您也可以通过在**服务限额**页面上选择**限额请求历史记录**，查看请求的状态。已处理的请求的**状态**为**已关闭**。

# 更新 Data Wrangler
<a name="data-wrangler-update"></a>

要将 Data Wrangler 更新到最新版本，请先从 Amazon SageMaker Studio Classic 控制面板中关闭相应的 KernelGateway应用程序。 KernelGateway 应用程序关闭后，通过在 Studio Classic 中打开新的或现有的 Data Wrangler 流程来重启应用程序。在打开新的或现有的 Data Wrangler 流时，启动的内核包含最新版本的 Data Wrangler。

**更新您的 Studio Classic 和 Data Wrangler 实例**

1. 导航到你的 [SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker)。

1. 选择 SageMaker AI，然后选择 Studio 经典版。

1. 选择您的用户名。

1. 在**应用程序**下，在显示**应用程序名称**的行中，为以开头的`sagemaker-data-wrang`应用程序和应用程序选择**删除** JupyterServer应用程序。

1. 选择**是，删除应用程序**。

1. 在确认框中键入 `delete`。

1. 选择**删除**。

1. 重新打开 Studio Classic 实例。当您开始创建 Data Wrangler 流时，您的实例现在将使用最新版本的 Data Wrangler。

另外，如果您使用的 Data Wrangler 应用程序版本不是最新版本，并且打开了现有的 Data Wrangler 流程，Studio Classic 用户界面会提示您更新 Data Wrangler 应用程序版本。以下屏幕截图显示了此提示。

**重要**  
这只会更新 Data Wrangler 内核网关应用程序。您仍然需要在用户帐户中关闭该 JupyterServer 应用程序。为此，请按照前面的步骤操作。

![\[Data Wrangler 管理控制台中的更新 Data Wrangler 部分。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/data-wrangler-1click-restart.png)


您也可以选择**稍后提醒我**，此情况下屏幕右上角将显示**更新**按钮。

![\[Data Wrangler 管理控制台中更新的位置。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/data-wrangler-1click-restart-update.png)


# 关闭 Data Wrangler
<a name="data-wrangler-shut-down"></a>

当您不使用 Data Wrangler 时，请务必关闭它运行的实例，以免产生额外的费用。

为避免丢失工作，请在关闭 Data Wrangler 之前保存数据流。要在 Studio Classic 中保存数据流，请选择**文件**，然后选择**保存 Data Wrangler Flow**。Data Wrangler 每 60 秒自动保存一次数据流。

**关闭 Studio Classic 中的 Data Wrangler 实例**

1. 在 Studio Classic 中，选择**运行实例和内核**图标 (![\[Icon of a gear or cog symbol representing settings or configuration options.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/icons/studio_classic_dw_instances.png))。

1. 在 “**运行应用程序**” 下方是 **sagemaker-data-wrangler-1.0** 应用程序。选择该应用程序旁边的关闭图标 (![\[Power button icon with a circular shape and vertical line symbol.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/icons/Shutdown_light.png))。

   Data Wrangler 运行于 ml.m5.4xlarge 实例上。当您关闭 Data Wrangler 应用程序后，此实例将从**正在运行的实例**中消失。

**重要**  
如果您再次打开 Data Wrangler，Amazon EC2 实例将开始运行应用程序，并向您收取计算费用。除了计算，您还需要支付使用存储的费用。例如，您使用 Data Wrangler 的任何 Amazon S3 存储桶都要付费。  
如果您发现关闭应用程序后，Data Wrangler 仍在向您收费，您可以使用一个 Jupyter 扩展来自动关闭空闲会话。有关扩展的信息，请参阅 [SageMaker-Studio-Autoshutdown-E](https://github.com/aws-samples/sagemaker-studio-auto-shutdown-extension) xtension。

关闭 Data Wrangler 应用程序后，下次您打开 Data Wrangler 流文件时，它必须重新启动。这可能需要几分钟的时间。