

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

# 在 SageMaker AI 中选择正确的数据准备工具的建议
<a name="data-prep"></a>

机器学习中的数据准备是指收集、预处理和组织原始数据，使其适合分析和建模的过程。这一步骤可确保数据格式适合机器学习算法有效学习。数据准备任务可能包括处理缺失值、去除异常值、缩放功能、对分类变量进行编码、评测潜在偏差并采取措施减少偏差、将数据拆分为训练集和测试集、标记以及其他必要的转换，以优化数据的质量和可用性，从而完成后续的机器学习任务。

## 选择功能
<a name="data-prep-choose"></a>

使用 Amazon A SageMaker I *准备数据*有三个主要用例。选择符合您需求的[使用场景](#data-prep-choose-use-cases)，然后参考相应的[推荐功能](#data-prep-choose-recommended)。

### 使用案例
<a name="data-prep-choose-use-cases"></a>

以下是为机器学习进行数据准备时的主要使用场景。
+ **用例 1**：对于那些喜欢可视化界面的用户， SageMaker AI 提供了通过 point-and-click环境探索、准备和设计模型训练功能的方法。
+ **用例 2**：对于熟悉编程、希望提高数据准备灵活性和控制力的用户， SageMaker AI 将工具集成到其编码环境中，用于探索、转换和功能工程。
+ **用例 3**：对于专注于可扩展数据准备的用户， SageMaker AI 提供了无服务器功能，可利用 Hadoop/Spark 生态系统对大数据进行分布式处理。

### 推荐的功能
<a name="data-prep-choose-recommended"></a>

下表概述了与机器学习的每个数据准备用例相关的 SageMaker AI 功能的关键注意事项和权衡取舍。首先，请确定符合您要求的用例，然后导航到其推荐的 SageMaker AI 功能。


| 描述符 | 应用场景 1 | 应用场景 2 | 使用案例 3 | 
| --- | --- | --- | --- | 
| SageMaker 人工智能功能 | 亚马逊 Canva@@ [s 中的 Data Wrangler](canvas-data-prep.md) SageMaker  | [在 Studio 中使用 SQL 准备数据](sagemaker-sql-extension.md) | Studio 中的 [使用 EMR Serverless 准备数据](studio-notebooks-emr-serverless.md) 应用程序 | 
| 说明 | SageMaker Canvas 是一个可视化的低代码环境，用于在 SageMaker AI 中构建、训练和部署机器学习模型。其集成的 Data Wrangler 工具允许用户通过 point-and-click交互合并、转换和清理数据集。 | Studio 中的 SQL 扩展允许用户连接亚马逊 Redshift、Snowflake、Athena 和 Amazon S3，以创作临时 SQL 查询，并在笔记本中预览结果。 JupyterLab可以使用 Python 和 Pandas 对这些查询的输出进行处理，以便进行额外的处理、可视化，并将其转换为机器学习模型开发所需的格式。 | EMR Serverless 和 Amazon SageMaker Studio 之间的集成提供了一个可扩展的无服务器环境，用于使用 Apache Spark 和 Apache Hive 等开源框架为机器学习准备大规模数据。用户可以直接从其 Studio 笔记本访问 EMR Serverless 应用程序和数据，以大规模执行数据准备任务。 | 
| 优化 | 使用可视化界面，您可以：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-prep.html) 针对表格数据任务进行了优化，如处理缺失值、编码分类变量和应用数据转换。  | 适用于数据驻留在 Amazon Redshift、Snowflake、Athena 或 [Amazon S3](studio-sqlexplorer-athena-s3-quickstart.md) 中，并希望将探索式 SQL 和 Python 结合起来进行数据分析和准备，而无需学习 Spark 的用户。 | 适用于更喜欢无服务器体验的用户，这些体验包括自动资源配置和终止来扩展围绕 Apache Spark 的短时运行或间歇性交互式工作负载，同时利用 SageMaker AI 的机器学习功能。 | 
| 注意事项 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-prep.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-prep.html)  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/data-prep.html)  | 
| 建议的环境 | [开始使用 SageMaker 画布](canvas-getting-started.md) | [启动 Studio](studio-updated-launch.md#studio-updated-launch-prereq) | [启动 Studio](studio-updated-launch.md#studio-updated-launch-prereq) | 

### 其他选项
<a name="data-prep-choose-additional"></a>

 SageMaker AI 提供了以下其他选项，用于准备用于机器学习模型的数据。
+ [使用 Amazon EMR 准备数据](studio-notebooks-emr-cluster.md)：对于长时间运行、计算密集型的大规模数据处理任务，可以考虑使用 Studio 的 Amazon EMR 集群。 SageMaker Amazon EMR 集群旨在处理大规模并行化，可扩展至数百或数千个节点，因此非常适合需要 Apache Spark、Hadoop、Hive 和 Presto 等框架的大数据工作负载。Amazon EMR 与 SageMaker Studio 的集成使您可以利用 Amazon EMR 的可扩展性和性能，同时在 Studio 环境中集中和管理完整的机器学习实验、模型训练和部署。 SageMaker 
+ [使用 glue 交互式会话准备数据](studio-notebooks-glue.md)：您可以使用交 AWS Glue 互式会话中基于 Apache Spark 的无服务器引擎在 Studio 中聚合、转换和准备来自多个来源的数据。 SageMaker 
+ 使用 Amazon SageMaker Cl@@ [arify 处理任务识别训练数据中的偏见]()： SageMaker Clarify 会分析您的数据并检测多个方面的潜在偏差。例如，您可以使用 Studio 中的 Clarify API 来检测您的训练数据是否包含不平衡的表示或群体（如性别、种族或年龄）间的标签偏差。Clarify 可以帮助您在训练模型前识别这些偏差，避免将偏差传播到模型的预测中。
+ [创建、存储和共享功能]()：Amazon F SageMaker eature Store 优化了机器学习精选功能的发现和重复使用。它提供了一个集中式存储库，用于存储可搜索和检索的功能数据，以便进行模型训练。以标准化格式存储功能可在多个 ML 项目中重复使用。特征存放区管理功能的整个生命周期，包括任务流水线追踪功能、统计和审计跟踪记录，以实现可扩展和可管理的机器学习特征工程。
+ [使用标记数据 human-in-the-loop](data-label.md)：您可以使用 G SageMaker round Truth 来管理训练数据集的数据标签工作流程。
+ [使用 SageMaker Processing API](processing-job.md)：在执行探索性数据分析并创建数据转换步骤后，您可以使用 [SageMaker AI 处理作业](processing-job.md)生成转换代码，并使用[SageMaker 模型](pipelines.md)构建管道自动执行准备工作流程。

# 在 Studio 中使用 SQL 准备数据
<a name="sagemaker-sql-extension"></a>

Amazon SageMaker Studio 提供了一个内置的 SQL 扩展。此扩展允许数据科学家直接在 JupyterLab 笔记本中执行采样、探索性分析和特征工程等任务。它利用 AWS Glue 连接来维护集中的数据源目录。目录存储各种数据来源的元数据。通过这种 SQL 环境，数据科学家可以浏览数据目录、探索数据、编写复杂的 SQL 查询，并在 Python 中进一步处理结果。

本节将介绍如何在 Studio 中配置 SQL 扩展。它描述了此 SQL 集成所启用的功能，并提供了在 JupyterLab 笔记本中运行 SQL 查询的说明。

要启用 SQL 数据分析，管理员必须首先配置 AWS Glue 与相关数据源的连接。这些连接使数据科学家能够从内部无缝访问授权的数据集 JupyterLab。

除了管理员配置的 AWS Glue 连接外，SQL 扩展还允许个人数据科学家创建自己的数据源连接。这些用户创建的连接可独立管理，并可通过基于标签的访问控制策略限定在用户的配置文件内。这种双级连接模型（同时包含管理员配置的连接和用户创建的连接）为数据科学家提供了更广泛的访问权限，使其能够获取完成分析和建模任务所需的数据。用户可以在 JupyterLab 环境用户界面 (UI) 中为自己的数据源设置必要的连接，而不必完全依赖管理员建立的集中连接。

**重要**  
用户定义的连接创建功能以一组独立库的形式在 PyPI 中提供。要使用此功能，您需要在您的 JupyterLab 环境中安装以下库：  
[amazon-sagemaker-sql-editor](https://pypi.org/project/amazon-sagemaker-sql-editor/)
[amazon-sagemaker-sql-execution](https://pypi.org/project/amazon-sagemaker-sql-execution/)
[amazon-sagemaker-sql-magic](https://pypi.org/project/amazon-sagemaker-sql-magic/)
您可以通过在 JupyterLab终端中运行以下命令来安装这些库：  

```
pip install amazon-sagemaker-sql-editor>=0.1.13
pip install amazon-sagemaker-sql-execution>=0.1.6
pip install amazon-sagemaker-sql-magic>=0.1.3
```
安装库后，您需要重新启动 JupyterLab 服务器才能使更改生效。  

```
restart-jupyter-server
```

设置访问权限后， JupyterLab 用户可以：
+ 查看和浏览预配置数据来源。
+ 搜索、筛选和检查数据库信息元素，如表、模式和列。
+ 自动生成与数据来源的连接参数。
+ 使用扩展 SQL 编辑器的语法高亮、自动完成和 SQL 格式化功能创建复杂的 SQL 查询。
+ 从 JupyterLab 笔记本单元格中运行 SQL 语句。
+ 检索 SQL 查询的结果，pandas DataFrames 以便进一步处理、可视化和其他机器学习任务。

您可以在 Studio 中 JupyterLab 应用程序的左侧导航窗格中选择 SQL 扩展程序图标 (![\[Icon of the SQL extension feature in JupyterLab.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png)) 来访问该扩展程序。将鼠标悬停在图标上会显示 *Data Discovery* 工具提示。

**重要**  
 SageMaker Studio 中的 JupyterLab 镜像默认包含 SQL 扩展，从 [SageMaker AI Distribut](https://github.com/aws/sagemaker-distribution) ion 1.6 开始。该扩展仅适用于 Python 和 SparkMagic 内核。
该扩展程序用于浏览连接和数据的用户界面仅在 Studio JupyterLab 中可用。它与 [Amazon Redshift](https://aws.amazon.com/redshift/)、[Amazon Athena](https://aws.amazon.com/athena/) 和 [Snowflake](https://www.snowflake.com/en/) 兼容。
+ 如果您是一名管理员，希望为 SQL 扩展创建与数据来源的一般连接，请按照以下步骤操作：

  1. 启用 Studio 域与要连接的数据来源之间的网络通信。要了解联网要求，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。

  1. 查看连接属性和说明以便为数据来源创建密钥（见[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)）。

  1. 在中创建与您的数据源的 AWS Glue 连接[创建 AWS Glue 连接（适用于管理员）](sagemaker-sql-extension-datasources-glue-connection.md)。

  1. 在中为您的 SageMaker 域名或用户配置文件的执行角色授予所需的权限[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。
+ 如果您是一名数据科学家，希望为 SQL 扩展创建与数据来源的连接，请按照以下步骤操作：

  1. 让您的管理员执行以下操作：
     + 启用 Studio 域与要连接的数据来源之间的网络通信。要了解联网要求，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。
     + 在中为您的 SageMaker 域名或用户配置文件的执行角色授予所需的权限[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。
**注意**  
管理员可以通过在执行角色中配置[基于标签的访问控制来限制用户对在 JupyterLab 应用程序中创建的连接的访问权限](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions)。

  1. 查看连接属性和说明以便为数据来源创建密钥（见[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)）。

  1. 按照中的说明在 JupyterLab UI 中创建您的连接[创建用户定义的 AWS Glue 连接](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)。
+ 如果您是一名数据科学家，希望使用 SQL 扩展浏览和查询数据来源，请确保您或您的管理员首先已设置与数据来源的连接。然后，按照以下步骤执行操作：

  1. 使用 SageMaker 发行映像版本 1.6 或更高版本创建私有空间，以便在 Studio 中启动您的 JupyterLab 应用程序。

  1. 如果您是 SageMaker 分发映像版本 1.6 的用户，请在 JupyterLab 笔记本单元中运行，将 SQL 扩展程序加载到笔记本`%load_ext amazon_sagemaker_sql_magic`中。

     对于 SageMaker 分发映像版本 1.7 及更高版本的用户，无需执行任何操作，SQL 扩展会自动加载。

  1. 熟悉 SQL 扩展的功能（见 [SQL 扩展功能和使用](sagemaker-sql-extension-features.md)）。

**Topics**
+ [快速入门：在 Amazon S3 中查询数据](studio-sqlexplorer-athena-s3-quickstart.md)
+ [SQL 扩展功能和使用](sagemaker-sql-extension-features.md)
+ [配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)
+ [SQL 扩展数据来源连接](sagemaker-sql-extension-datasources-connection.md)
+ [常见问题](sagemaker-sql-extension-faqs.md)
+ [连接参数](sagemaker-sql-extension-connection-properties.md)

# 快速入门：在 Amazon S3 中查询数据
<a name="studio-sqlexplorer-athena-s3-quickstart"></a>

用户可以使用 SQL 扩展程序从 JupyterLab 笔记本运行 SQL 查询，从而分析存储在 Amazon S3 中的数据。该扩展与 Athena 集成，只需几个额外步骤就能实现 Amazon S3 中数据的功能。

本节将引导您完成将数据从 Amazon S3 加载到 Athena，然后使用 SQL 扩展程序查询这些数据的 JupyterLab 步骤。您将创建 Athena 数据源 AWS Glue 和爬虫来索引您的 Amazon S3 数据，配置适当的 IAM 权限以允许 JupyterLab 访问 Athena，然后连接到 Athena 以查询数据。 JupyterLab 完成这几个步骤后，您将能够使用 JupyterLab 笔记本中的 SQL 扩展来分析 Amazon S3 数据。

**先决条件**  
使用具有管理员权限的 AWS Identity and Access Management (IAM) 用户账户登录 AWS 管理控制台。有关如何注册 AWS 账户并创建具有管理权限的用户的信息，请参阅 [完成 Amazon A SageMaker I 先决条件](gs-set-up.md)。
拥有 A SageMaker I 域和用户个人资料才能访问 SageMaker Studio。有关如何设置 A SageMaker I 环境的信息，请参阅[使用 Amazon A SageMaker I 的快速设置](onboard-quick-start.md)。
使用 Amazon S3 存储桶和文件夹来存储 Athena 查询结果，使用与您的 A AWS I 环境相同的区域和账户。 SageMaker 有关如何在 Amazon S3 中创建存储桶的信息，请参阅 Amazon S3 文档中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。您将把该存储桶和文件夹配置为查询输出位置。

**Topics**
+ [第 1 步：为您的 Amazon S3 数据设置 Athena 数据源 AWS Glue 和爬虫](#studio-sqlexplorer-athena-s3-quickstart-setup)
+ [步骤 2：授予 Studio 访问 Athena 的权限](#studio-sqlexplorer-athena-s3-quickstart-permissions)
+ [步骤 3：在中启用 Athena 默认连接 JupyterLab](#studio-sqlexplorer-athena-s3-quickstart-connect)
+ [步骤 4：使用 SQL 扩展程序从 JupyterLab 笔记本中查询 Amazon S3 中的数据](#studio-sqlexplorer-athena-s3-quickstart-query)

## 第 1 步：为您的 Amazon S3 数据设置 Athena 数据源 AWS Glue 和爬虫
<a name="studio-sqlexplorer-athena-s3-quickstart-setup"></a>

请按照以下步骤为 Amazon S3 中的数据编制索引，并在 Athena 中创建表格。

**注意**  
为避免来自不同 Amazon S3 位置的表名之间发生碰撞，请为每个位置创建单独的数据来源和爬网程序。除非有前缀，否则每个数据来源都会创建一个以包含这些数据来源的文件夹命名的表。

1. 配置查询结果位置

   1. 前往 Athena 控制台:. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 

   1. 从左侧菜单中选择**工作组**。

   1. 按照 `primary` 工作组的链接，选择**编辑**。

   1. 在**查询结果配置**部分，输入输出目录的 Amazon S3 路径，然后选择**保存更改**。

1. 为 Amazon S3 数据创建 Athena 数据来源

   1. 在 Athena 管理控制台的左侧菜单中选择**数据来源**，然后选择**创建数据来源**。

   1. 选择 **S3- AWS Glue 数据目录**，然后选择 “**下一步**”。

   1. 保留默认的 **AWS Glue 此账户中的数据目录**，选择**在 AWS Glue** 中创建爬网程序，然后选择**在 AWS Glue** 中创建。这将打开 AWS Glue 控制台。

1. 用于抓 AWS Glue 取您的数据源

   1. 为新爬网程序输入名称和描述，然后选择**下一步**。

   1. 在**数据来源**下，选择**添加数据来源**。

      1. 如果包含您的数据的 Amazon Amazon S3 存储桶与 AWS 您的 SageMaker AI 环境位于**不同的账户中**，请选择 **S3 数据的位置**。

      1. 输入 Amazon S3 中数据集的路径。例如：

         ```
         s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/
         ```

      1. 保留所有其他默认值，然后选择**添加 Amazon S3 数据来源**。您应该会在数据来源表中看到一个新的 Amazon S3 数据来源。

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

       

   1. 为爬网程序配置 IAM 角色，以便其访问数据。
**注意**  
每个角色的作用域都是您指定的数据来源。重复使用角色时，请编辑 JSON 策略，添加要授予访问权限的任何新资源，或为此数据来源创建新角色。

      1. 选择**创建新的 IAM 角色**。

      1. 输入角色名称，然后选择**下一步**。

1. 为表格创建或选择数据库

   1. 如果 Athena 中没有现有数据库，请选择**添加数据库**，然后选择**创建新数据库**。

   1. 回到之前的爬网程序创建选项卡，在**输出配置**中选择**刷新**按钮。现在您应该能在列表中看到新创建的数据库。

   1. 选择数据库，在**表名前缀**中添加可选前缀，然后选择**下一步**。
**注意**  
在前面的示例中，数据位于 `s3://dsoaws/nyc-taxi-orig-cleaned-split-parquet-per-year-multiple-files/ride-info/year=2019/`，添加前缀 `taxi-ride-` 将创建一个名为 `taxi-ride-year_2019` 的表。当多个数据位置的文件夹名称相同时，添加前缀有助于防止表名碰撞。

1. 选择**创建爬网程序**。

1. 运行爬网程序，编制数据索引。等待爬网程序运行到 `Completed` 状态，这可能需要几分钟时间。

要确保创建了新表，请转至中的左侧菜单， AWS Glue 然后选择**数据库**，然后选择**表**。现在您应该能看到一个包含数据的新表格。

## 步骤 2：授予 Studio 访问 Athena 的权限
<a name="studio-sqlexplorer-athena-s3-quickstart-permissions"></a>

在以下步骤中，您将授予用户配置文件的执行角色访问 Athena 的权限。

1. 读取与用户配置文件相关联的执行角色的 ARN

   1. 前往 A SageMaker I 控制台 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)，在左侧菜单中选择**域名**。

   1. 按照您的域命名。

   1. 在**用户配置文件**列表中，跟随用户配置文件的名称。

   1. 在**用户详情**页面，复制执行角色的 ARN。

1. 更新执行角色的策略

   1. 在 SageMaker AI 控制台的右上角找到您的 AWS 地区和账户 ID。使用这些值和数据库名称，在文本编辑器中更新以下 JSON 策略中的占位符。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "GetS3AndDataSourcesMetadata",
                  "Effect": "Allow",
                  "Action": [
                      "glue:GetDatabases",
                      "glue:GetSchema",
                      "glue:GetTables",
                      "s3:ListBucket",
                      "s3:GetObject",
                      "s3:GetBucketLocation",
                      "glue:GetDatabase",
                      "glue:GetTable",
                      "glue:ListSchemas",
                      "glue:GetPartitions"
                  ],
                  "Resource": [
                      "arn:aws:s3:::*",
                      "arn:aws:glue:us-east-1:111122223333:catalog",
                      "arn:aws:glue:us-east-1:111122223333:database/db-name"
                  ]
              },
              {
                  "Sid": "ExecuteAthenaQueries",
                  "Effect": "Allow",
                  "Action": [
                      "athena:ListDataCatalogs",
                      "athena:ListDatabases",
                      "athena:ListTableMetadata",
                      "athena:StartQueryExecution",
                      "athena:GetQueryExecution",
                      "athena:RunQuery",
                      "athena:StartSession",
                      "athena:GetQueryResults",
                      "athena:ListWorkGroups",
                      "s3:ListMultipartUploadParts",
                      "s3:ListBucket",
                      "s3:GetBucketLocation",
                      "athena:GetDataCatalog",
                      "s3:AbortMultipartUpload",
                      "s3:GetObject",
                      "s3:PutObject",
                      "athena:GetWorkGroup"
                  ],
                  "Resource": [
                      "arn:aws:s3:::*"
                  ]
              },
              {
                  "Sid": "GetGlueConnectionsAndSecrets",
                  "Effect": "Allow",
                  "Action": [
                      "glue:GetConnections",
                      "glue:GetConnection"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```

------

   1. 前往 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)，然后在左侧菜单中选择**角色**。

   1. 按角色名称搜索您的角色。
**注意**  
您可以通过在 `'/'` 上分割 ARN 并提取最后一个元素，从其 Amazon 资源名称（ARN）中检索执行角色名称。例如，在下面的 ARN `arn:aws:iam::112233445566:role/SageMakerStudio-SQLExtension-ExecutionRole` 示例中，执行角色的名称是 `SageMakerStudio-SQLExtension-ExecutionRole`。

   1. 请点击您的角色链接。

   1. 在**权限**选项卡中，选择**添加权限**，然后选择**创建内联策略**。

   1. 在**策略编辑器**部分选择 `JSON` 格式。

   1. 复制上述策略，然后选择**下一步**。确保已将所有 `account-id`、`region-name` 和 `db-name` 替换为其值。

   1. 输入策略名称，然后选择**创建策略**。

## 步骤 3：在中启用 Athena 默认连接 JupyterLab
<a name="studio-sqlexplorer-athena-s3-quickstart-connect"></a>

在以下步骤中，您可以在 JupyterLab 应用程序`default-athena-connection`中启用。默认的 Athena 连接允许直接 JupyterLab从 Athena 中运行 SQL 查询，无需手动创建连接。

启用默认 Athena 连接

1. 前往 SageMaker AI 控制台，[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)然后在左侧菜单中选择 **Studio**。使用域和用户配置文件启动 Studio。

1. 选择 JupyterLab 应用程序。

1. 如果您尚未为 JupyterLab 应用程序创建空间，请选择**创建 JupyterLab 空间**。输入空间名称，将空间保留为**私有**，然后选择**创建空间**。使用最新版本的 SageMaker AI Distribution 映像来管理您的空间。

   否则，请选择在**空间上运行**空间以启动 JupyterLab 应用程序。

1. 启用 Athena 默认连接：

   1. 在 JupyterLab 应用程序中，导航到顶部导航栏的 “**设置**” 菜单，然后打开 **“设置编辑器**” 菜单。

   1. 选择**数据发现**。

   1. 选中**启用默认 Athena 连接**。

   1. 在您的 JupyterLab 应用程序中，选择左侧导航窗格中的 SQL 扩展程序图标 (![\[Purple circular icon with a clock symbol representing time or scheduling.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png)) 以打开 SQL 扩展。

   1.  选择数据发现面板底部的**刷新**按钮。您应该会在连接列表中看到一个 `default-athena-connection`。

## 步骤 4：使用 SQL 扩展程序从 JupyterLab 笔记本中查询 Amazon S3 中的数据
<a name="studio-sqlexplorer-athena-s3-quickstart-query"></a>

您已准备好在 JupyterLab 笔记本中使用 SQL 查询数据。

1. 打开连接`default-athena-connection`，然后**AWS DataCatalog**。

1. 导航至数据库，选择右侧的三点图标 (![\[SQL extension three dots icon.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-3dots-icon.png))。选择**在笔记本中查询**。

   这会自动在笔记本单元格中 JupyterLab 填充相关的`%%sm_sql`魔法命令以连接到数据源。它还添加了一个 SQL 语句示例，帮助您立即开始查询。
**注意**  
确保在运行 SQL 查询之前在顶部单元格中加载扩展名。

   您可以使用扩展的自动完成和高亮功能进一步完善 SQL 查询。有关使用 SQL 扩展 SQL 编辑器的更多信息，请参阅 [SQL 扩展的 JupyterLab SQL 编辑器功能](sagemaker-sql-extension-features-editor.md)。

# SQL 扩展功能和使用
<a name="sagemaker-sql-extension-features"></a>

本节详细介绍了 Studio 中 JupyterLab SQL 扩展的各种功能，并提供了有关如何使用这些功能的说明。管理员必须先配置与您的数据源的连接，然后才能使用 SQL 扩展程序访问和查询 JupyterLab Notebook 中的数据。有关管理员如何创建数据来源连接的信息，请参阅 [SQL 扩展数据来源连接](sagemaker-sql-extension-datasources-connection.md)。

**注意**  
要使用 SQL 扩展，您的 JupyterLab 应用程序必须在 [SageMaker AI 分发](https://github.com/aws/sagemaker-distribution/blob/main/README.md)映像版本 1.6 或更高版本上运行。这些 SageMaker 镜像预先安装了扩展程序。

该扩展提供两个组件，帮助您从预配置的数据来源访问、发现、查询和分析数据。
+ 使用 SQL 扩展的*用户界面*来发现和探索数据来源。用户界面功能可进一步划分为以下子类别。
  + 使用**数据探索** UI 元素，您可以浏览数据来源并探索其表、列和元数据。有关 SQL 扩展的数据探索功能的详细信息，请参阅 [使用 SQL 扩展浏览数据](sagemaker-sql-extension-features-data-discovery.md)。
  + **连接缓存**元素会缓存连接，以便快速访问。有关 SQL 扩展中连接缓存的详细信息，请参阅 [SQL 扩展连接缓存](sagemaker-sql-extension-features-connection-caching.md)。
+ 使用 *SQL Editor and Executor* 针对连接的数据来源编写、编辑和运行 SQL 查询。
  + 使用 **SQL 编辑器**元素，您可以在 Studio JupyterLab 应用程序的笔记本中编写、格式化和验证 SQL 语句。有关 SQL 编辑器功能的详细信息，请参阅 [SQL 扩展的 JupyterLab SQL 编辑器功能](sagemaker-sql-extension-features-editor.md)。
  + 使用 **SQL 执行**元素，您可以在 Studio 中运行您的 SQL 查询并从 JupyterLab应用程序的笔记本中可视化其结果。有关 SQL 执行功能的详细信息，请参阅 [SQL 扩展程序的 JupyterLab SQL 执行功能](sagemaker-sql-extension-features-sql-execution.md)。

# 使用 SQL 扩展浏览数据
<a name="sagemaker-sql-extension-features-data-discovery"></a>

要打开 SQL 扩展用户界面 (UI)，请在 Studio 中 JupyterLab 应用程序的导航窗格中选择 SQL 扩展程序图标 (![\[Purple circular icon with a clock symbol representing time or scheduling.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-icon.png))。左侧面板的数据发现视图会展开并显示与 Amazon Athena、Amazon Redshift 和 Snowflake 的所有预配置数据存储连接。

从这里，您可以：
+ 展开特定连接，查看其数据库、模式、表或视图以及列。
+ 使用 SQL 扩展用户界面中的搜索框搜索特定连接。搜索会返回与您输入的字符串部分匹配的任何数据库、模式、表或视图。

**注意**  
如果 AWS 您的账户中已经设置了 Athena，则可以在应用程序中启用`default-athena-connection`。 JupyterLab 这样就可以运行 Athena 查询，而无需手动创建连接。启用默认 Athena 连接：  
请向管理员核实您的执行角色是否具有访问 Athena 和目录所需的权限。 AWS Glue 有关所需权限的详细信息，请参阅 [为 Ath AWS Glue ena 配置连接](sagemaker-sql-extension-datasources-glue-connection.md#sagemaker-sql-extension-athena-glue-connection-config)
在 JupyterLab 应用程序中，导航到顶部导航栏的 “**设置**” 菜单，然后打开 **“设置编辑器**” 菜单。
选择**数据发现**。
选中**启用默认 Athena 连接**。
`primary` WorkGroup 如果需要，您可以更新默认值。

要从 SQL 扩展窗格中的给定连接查询 JupyterLab 笔记本中的数据库、架构或表，请执行以下操作：
+ 选择任何数据库、模式或表右侧的三点图标 (![\[SQL extension three dots icon.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-3dots-icon.png))。
+ 从菜单中选择**在笔记本中查询**。

  这会自动在笔记本单元格中 JupyterLab 填充相关的`%%sm_sql`魔法命令以连接到数据源。它还添加了一个 SQL 语句示例，帮助您立即开始查询。您可以使用扩展的自动完成和高亮功能进一步完善 SQL 查询。有关使用 SQL 扩展 SQL 编辑器的更多信息，请参阅 [SQL 扩展的 JupyterLab SQL 编辑器功能](sagemaker-sql-extension-features-editor.md)。

在表一级，三点图标提供了额外选项，可选择**预览**表的元数据。

下面的 JupyterLab 笔记本单元格内容显示了一个示例，说明在 SQL 扩展窗格**中的`redshift-connection`数据源上选择 “在笔记本中查询**” 菜单时会自动生成的内容。

```
%%sm_sql --metastore-id redshift-connection --metastore-type GLUE_CONNECTION

-- Query to list tables from schema 'dev.public'
SHOW TABLES
FROM
  SCHEMA "dev"."public"
```

使用 SQL 扩展窗格顶部的*小于*符号 (![\[Icon to clear the SQL extension search box.\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/sqlexplorer/sqlexplorer-search-clear.png)) 清除搜索框或返回连接列表。

**注意**  
该扩展可缓存搜索结果，以便快速访问。如果缓存结果已过期或列表中缺少某个连接，可以选择 SQL 扩展面板底部的**刷新**按钮手动刷新缓存。有关连接缓存的更多信息，请参阅 [SQL 扩展连接缓存](sagemaker-sql-extension-features-connection-caching.md)。

# SQL 扩展的 JupyterLab SQL 编辑器功能
<a name="sagemaker-sql-extension-features-editor"></a>

SQL 扩展提供了神奇的命令，可在 JupyterLab 笔记本单元格中启用 SQL 编辑器功能。

如果您是 SageMaker 发行版映像版本 1.6 的用户，则必须通过在 JupyterLab 笔记本`%load_ext amazon_sagemaker_sql_magic`中运行来加载 SQL 扩展魔法库。这将打开 SQL 编辑功能。

对于 SageMaker 分发映像版本 1.7 及更高版本的用户，无需执行任何操作，SQL 扩展会自动加载。

加载扩展后，在单元格开头添加 `%%sm_sql` 神奇命令，即可激活 SQL 编辑器的以下功能。
+ **连接-选择下拉菜单**：在单元格中添加 `%%sm_sql` 神奇命令后，单元格顶部会出现一个下拉菜单，显示可用的数据来源连接。选择一个连接，即可自动填写查询该数据来源所需的参数。下面是选择名为 `connection-name` 的连接后生成的 `%%sm_sql` 神奇命令字符串示例。

  ```
  %%sm_sql --metastore-type GLUE_CONNECTION --metastore-id connection-name
  ```

  使用下面 SQL 编辑器的功能建立 SQL 查询，然后通过运行单元格来运行查询。有关 SQL 执行功能的更多信息，请参阅 [SQL 扩展程序的 JupyterLab SQL 执行功能](sagemaker-sql-extension-features-sql-execution.md)。
+ **查询结果下拉菜单**：您可以从连接选择下拉菜单旁边的下拉菜单中选择结果类型，从而指定如何呈现查询结果。从以下两个备选方案中选择一个：
  + **单元格输出**：（默认）该选项在笔记本单元格输出区域显示查询结果。
  + **Pandas DataFrame**：此选项使用查询结果填充熊猫 DataFrame 。 DataFrame 当你选择此选项时，可以用一个额外的输入框来命名。
+ **SQL 语法高亮**：该单元格通过颜色和样式自动直观区域分 SQL 关键字、子句、运算符等。这使得 SQL 代码更易于阅读和理解。`SELECT`、`FROM`、`WHERE` 等关键词，`SUM`、`COUNT` 等内置函数，或 `GROUP BY` 等分句会以不同颜色和粗体样式突出显示。
+ **SQL 格式化**：您可以通过以下方式之一，应用一致的缩进、大小写、间距和换行来分组或分隔 SQL 语句和子句。这使得 SQL 代码更易于阅读和理解。
  + 右键单击 SQL 单元格，选择 **Format SQL**。
  + 当 SQL 单元格处于焦点位置时，在 Windows 系统中使用 *ALT \$1 F* 快捷键，在 MacOS 系统中使用 *Option \$1 F*。
+ **SQL 自动填充**：该扩展可在输入时自动建议和完成 SQL 关键字、函数、表名、列名等内容。当您开始键入一个 SQL 关键字（如 `SELECT` 或 `WHERE`）时，扩展程序会弹出一个提示，建议您自动完成单词的其余部分。例如，在键入表或列名时，它会建议匹配数据库模式中定义的表和列名。
**重要**  
要在 JupyterLab 笔记本中启用 SQL 自动完成功能， SageMaker AI 分发映像版本 1.6 的用户必须在终端中运行以下`npm install -g vscode-jsonrpc sql-language-server`命令。安装完成后，通过运行重新启动 JupyterLab 服务器`restart-jupyter-server`。  
对于 SageMaker 分发映像版本 1.7 及更高版本的用户，无需执行任何操作。

  单元格提供了两种自动完成已识别 SQL 关键字的方法：
  + 明确调用（推荐）：选择 **Tab** 键启动上下文感知建议菜单，然后选择 **Enter** 接受建议项目。
  + 连续提示：在您输入时，单元格会自动提示补全。
**注意**  
只有当 SQL 关键字为大写字母时，才会触发自动完成功能。例如，输入 `SELECT` 会提示输入 `SEL`，但输入 `sel` 则不会。
首次连接数据来源时，SQL 自动完成会对数据来源的元数据进行索引。索引编制过程可能需要一些时间才能完成，具体取决于数据库的大小。

# SQL 扩展程序的 JupyterLab SQL 执行功能
<a name="sagemaker-sql-extension-features-sql-execution"></a>

您可以在的 SQL 扩展中对连接的数据源执行 SQL 查询 JupyterLab。以下各节说明了在 JupyterLab 笔记本中运行 SQL 查询的最常见参数：
+ 在 [创建简单的神奇命令连接字符串](sagemaker-sql-extension-features-sql-execution-create-connection.md) 中创建一个简单连接。
+ 将您的查询结果保存在熊猫 DataFrame 中。[将 SQL 查询结果保存在熊猫中 DataFrame](sagemaker-sql-extension-features-sql-execution-save-dataframe.md)
+ 覆盖或添加到管理员在 [覆盖连接属性](sagemaker-sql-extension-features-sql-execution-override-connection.md) 中定义的连接属性。
+ [使用查询参数在 SQL 查询中提供动态值](sagemaker-sql-extension-features-sql-execution-query-parameters.md).

使用 `%%sm_sql` 神奇命令运行单元格时，SQL 扩展引擎会根据神奇命令参数中指定的数据来源执行单元格中的 SQL 查询。

要查看神奇命令参数和支持格式的详细信息，请运行 `%%sm_sql?`。

**重要**  
要使用 Snowflake， SageMaker 发行映像版本 1.6 的用户必须通过在其应用程序的终端中运行`micromamba install snowflake-connector-python -c conda-forge`以下命令来安装 Snowflake Python 依赖项。 JupyterLab 安装完成后，通过`restart-jupyter-server`在终端中运行来重新启动 JupyterLab 服务器。  
对于 1.7 及更高版本的 SageMaker 分发映像，已预先安装了 Snowflake 依赖关系。无需任何操作。

# 创建简单的神奇命令连接字符串
<a name="sagemaker-sql-extension-features-sql-execution-create-connection"></a>

如果管理员已经配置了数据来源的连接，请按照以下步骤在笔记本单元格中轻松创建连接字符串：

1. 打开使用 `%%sm_sql` 的笔记本单元格。

1. 从单元格上方的连接下拉菜单中选择与所需数据来源的预配置连接。

1. 这将自动填充查询该数据来源所需的参数。

或者，您也可以在单元格内指定连接属性。

从下拉菜单中选择连接后，会在默认的神奇命令字符串中插入以下两个参数。参数包含管理员配置的连接信息。
+ `--metastore-id`：保存连接参数的连接对象名称。
+ `--metastore-type`：`--metastore-id` 对应的元存储类型。SQL 扩展使用 AWS Glue 连接作为连接元存储。该值会自动设置为 `GLUE_CONNECTION`。

例如，预配置的 Amazon Athena 数据存储的连接字符串如下：

```
%%sm_sql --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION 
```

# 将 SQL 查询结果保存在熊猫中 DataFrame
<a name="sagemaker-sql-extension-features-sql-execution-save-dataframe"></a>

您可以将 SQL 查询的结果存储在熊猫 DataFrame中。将查询结果输出到 a 的最简单方法 DataFrame 是使用[SQL 扩展的 JupyterLab SQL 编辑器功能](sagemaker-sql-extension-features-editor.md)查询结果下拉列表并选择 **Pandas d** ataFrame 选项。

或者，也可以在连接字符串中添加参数 `--output '{"format": "DATAFRAME", "dataframe_name": "dataframe_name"}'`。

例如，以下查询使用 pandas 和 SQL 从 Snowflake `TPCH_SF1` 数据库的 `Customer` 表中提取余额最高的客户的详细信息：
+ 在此示例中，我们从 customer 表中提取所有数据，然后将其保存在 DataFrame 名字中`all_customer_data`。

  ```
  %%sm_sql --output '{"format": "DATAFRAME", "dataframe_name": "all_customer_data"}' --metastore-id snowflake-connection-name --metastore-type GLUE_CONNECTION
  SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
  ```

  ```
  Saved results to all_customer_data
  ```
+ 接下来，我们从中提取最高账户余额的详细信息 DataFrame。

  ```
  all_customer_data.loc[all_customer_data['C_ACCTBAL'].idxmax()].values
  ```

  ```
  array([61453, 'Customer#000061453', 'RxNgWcyl5RZD4qOYnyT3', 15,
  '25-819-925-1077', Decimal('9999.99'), 'BUILDING','es. carefully regular requests among the blithely pending requests boost slyly alo'],
  dtype=object)
  ```

# 覆盖连接属性
<a name="sagemaker-sql-extension-features-sql-execution-override-connection"></a>

管理员的预定义连接定义可能不具备连接到特定数据存储所需的确切参数。您可以使用 `--connection-properties` 参数在连接字符串中添加或覆盖参数。

参数按以下优先顺序应用：

1. 作为内联参数提供的重载连接属性。

1. 连接属性存在于 AWS Secrets Manager。

1. 连接中的 AWS Glue 连接属性。

如果三者（命令行参数、Secrets Manager 和连接）中都存在相同的连接属性，则以命令行参数中提供的值为准。

有关每个数据来源可用连接属性的更多信息，请参阅 [连接参数](sagemaker-sql-extension-connection-properties.md)。

下面的示例说明了设置 Amazon Athena 模式名称的连接属性参数。

```
%%sm_sql --connection-properties '{"schema_name": "athena-db-name"}' --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION
```

# 使用查询参数在 SQL 查询中提供动态值
<a name="sagemaker-sql-extension-features-sql-execution-query-parameters"></a>

查询参数可用于在 SQL 查询中提供动态值。

在下面的示例中，我们将一个查询参数传递给查询的 `WHERE` 子句。

```
# How to use '--query-parameters' with ATHENA as a data store
%%sm_sql --metastore-id athena-connection-name --metastore-type GLUE_CONNECTION --query-parameters '{"parameters":{"name_var": "John Smith"}}'
SELECT * FROM my_db.my_schema.my_table WHERE name = (%(name_var)s);
```

# SQL 扩展连接缓存
<a name="sagemaker-sql-extension-features-connection-caching"></a>

SQL 扩展默认为缓存连接，以防止为同一组连接属性创建多个连接。缓存连接可使用 `%sm_sql_manage` 神奇命令进行管理。

以下主题介绍了如何管理缓存连接。

**Topics**
+ [创建缓存连接](sagemaker-sql-extension-features-create-cached-connection.md)
+ [列出缓存连接](sagemaker-sql-extension-features-list-cached-connection.md)
+ [清除缓存连接](sagemaker-sql-extension-features-clear-cached-connection.md)
+ [禁用缓存连接](sagemaker-sql-extension-features-disable-cached-connection.md)

# 创建缓存连接
<a name="sagemaker-sql-extension-features-create-cached-connection"></a>

通过在连接字符串的 `--connection-name` 参数中指定连接名称，可以创建缓存连接。当针对特定使用场景重载多个连接属性，并且需要重复使用相同属性而无需重复输入时，这一点尤其有用。

例如，下面的代码使用名称 `--connection-name my_athena_conn_with_schema` 保存了一个带有重载模式连接属性的 Athena 连接，然后在另一个单元格中重复使用：

```
%%sm_sql --connection-name my_athena_conn_with_schema --connection-properties '{"schema_name": "sm-sql-private-beta-db"}' --metastore-id sm-sql-private-beta-athena-connection --metastore-type GLUE_CONNECTION 
SELECT * FROM "covid_table" LIMIT 2
```

```
%%sm_sql --connection-name my_athena_conn_with_schema
SELECT * FROM "covid_table" LIMIT 2
```

# 列出缓存连接
<a name="sagemaker-sql-extension-features-list-cached-connection"></a>

运行以下命令即可列出缓存连接：

```
%sm_sql_manage --list-cached-connections
```

# 清除缓存连接
<a name="sagemaker-sql-extension-features-clear-cached-connection"></a>

要清除所有缓存连接，请运行以下命令：

```
%sm_sql_manage --clear-cached-connections
```

# 禁用缓存连接
<a name="sagemaker-sql-extension-features-disable-cached-connection"></a>

要禁用连接缓存，请运行以下命令：

```
%sm_sql_manage --set-connection-reuse False
```

# 配置 Studio 和数据来源之间的网络访问（供管理员使用）
<a name="sagemaker-sql-extension-networking"></a>

本节提供有关管理员如何配置网络以实现亚马逊 SageMaker Studio 与 Amazon [Redshift 或 Amazon](https://aws.amazon.com/redshift/) A [thena 之间在私有亚马逊](https://aws.amazon.com/athena/) VPC 内或通过互联网进行通信的信息。根据 Studio 域和数据存储是部署在私有 [Amazon 虚拟私有云](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)（VPC）内还是通过互联网通信，联网指令也会有所不同。

默认情况下，Studio 在可[访问互联网](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-default)的 AWS 托管 VPC 中运行。使用互联网连接时，Studio 会通过互联网访问 AWS 资源，例如 Amazon S3 存储桶。但是，如果您有控制数据和作业容器访问权限的安全要求，我们建议您配置 Studio 和数据存储（Amazon Redshift 或 Athena），使您的数据和容器无法通过互联网访问。要控制对资源的访问或在没有公共互联网访问的情况下运行 Studio，您可以在加入 [Amazon A SageMaker I 域](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)时指定`VPC only`网络访问类型。在这种情况下，Studio 会通过私有 [VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)与其他 AWS 服务建立连接。有关在 `VPC only` 模式下配置 Studio 的信息，请参阅[将 Studio 连接到 VPC 中的外部资源](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-vpc-only)。

**注意**  
要连接到 Snowflake，Studio 域的 VPC 必须能访问互联网。

前两节介绍如何在 VPCs 没有公共互联网访问的情况下确保您的 Studio 域和数据存储之间的通信。最后一节介绍如何确保 Studio 与数据存储之间使用互联网连接进行通信。在没有互联网访问权限的情况下连接 Studio 和您的数据存储之前，请务必为亚马逊简单存储服务、Amazon Redshift 或 Athena SageMaker 、Amazon 和（记录和监控）建立终端节点。 CloudWatch AWS CloudTrail 
+ 如果 Studio 和数据存储位于不同的帐户中 VPCs，要么位于同一个 AWS 帐户中，要么位于不同的帐户中，请参阅[Studio 和数据存储是分开部署的 VPCs](#sagemaker-sql-extension-networking-cross-vpc)。
+ 如果 Studio 和数据存储在同一个 VPC 中，请参阅 [Studio 和数据存储部署在同一个 VPC 中](#sagemaker-sql-extension-networking-same-vpc)。
+ 如果您选择通过公共内联网连接 Studio 和数据存储，请参阅 [Studio 和数据存储库通过公共互联网进行通信](#sagemaker-sql-extension-networking-internet)。

## Studio 和数据存储是分开部署的 VPCs
<a name="sagemaker-sql-extension-networking-cross-vpc"></a>

要允许 Studio 与部署在不同位置的数据存储之间进行通信，请执行 VPCs以下操作：

1. 首先 VPCs 通过 VPC 对等连接进行连接。

1. 更新每个 VPC 的路由表，允许 Studio 子网和数据存储子网之间的双向网络流量。

1. 配置安全组以允许入站和出站流量。

无论将 Studio 和数据存储部署在单个 AWS 账户中还是在不同的 AWS 账户中部署，配置步骤都是一样的。

1. 

**VPC 对等连接**

   创建 [VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)以促进两者 VPCs（Studio 和数据存储）之间的联网。

   1. 从 Studio 帐户，在 VPC 面板上选择**对等连接**，然后选择**创建对等连接**。

   1. 创建请求，将 Studio VPC 与数据存储 VPC 对等。在其他 AWS 账户中请求对等时，请在选择要**与之建立对等关系的另一个 VPC 中选择另一个****账户**。

      对于跨账户对等互联，管理员必须接受来自 SQL 引擎账户的请求。

      与私有子网建立对等连接时，您应在 VPC 对等连接级别启用私有 IP DNS 解析。

1. 

**路由表**

   配置路由，允许 Studio 和数据存储 VPC 子网之间的双向网络流量。

   建立对等连接后，管理员（每个账户都允许跨账户访问）可以向私有子网路由表添加路由，以路由 Studio 和数据存储 VPCs子网之间的流量。您可以在 VPC 控制面板中，转到每个 VPC 的**路由表**部分来定义这些路由。

1. 

**安全组**

   最后，Studio 的域 VPC 安全组必须允许出站流量，数据存储的 VPC 安全组必须允许从 Studio 的 VPC 安全组进入数据存储端口的入站流量。

## Studio 和数据存储部署在同一个 VPC 中
<a name="sagemaker-sql-extension-networking-same-vpc"></a>

 如果 Studio 和数据存储位于同一 VPC 的不同专用子网中，请在每个专用子网的路由表中添加路由。路由应允许流量在 Studio 子网和数据存储子网之间流动。您可以在 VPC 控制面板中，转到每个 VPC 的**路由表**部分来定义这些路由。如果在同一 VPC 和同一子网中部署了 Studio 和数据存储，则无需对流量进行路由。

无论路由表是否更新，Studio 的域 VPC 安全组必须允许出站流量，数据存储的 VPC 安全组必须允许从 Studio 的 VPC 安全组的端口入站流量。

## Studio 和数据存储库通过公共互联网进行通信
<a name="sagemaker-sql-extension-networking-internet"></a>

默认情况下，Studio 提供一个网络接口，允许通过与 Studio 域相关联的 VPC 中的互联网网关与互联网通信。如果您选择通过公共互联网连接到您的数据存储，您的数据存储需要在其端口上接受入站流量。

必须使用 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with)来允许多个 VPCs 私有子网中的实例在访问互联网时共享[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)提供的单个公有 IP 地址。

**注意**  
为入站流量开放的每个端口都代表着潜在的安全风险。请仔细检查自定义安全组，以确保您最大限度地减少漏洞。

# SQL 扩展数据来源连接
<a name="sagemaker-sql-extension-datasources-connection"></a>

在 JupyterLab 笔记本中使用 SQL 扩展之前，管理员或用户必须创建 AWS Glue 与其数据源的连接。SQL 扩展允许连接到 Amazon Redshift、Amazon Athena 或 Snowflake 等数据来源。

要设置连接，管理员必须先确保其网络配置支持 Studio 和数据来源之间的通信，然后授予必要的 IAM 权限以允许 Studio 访问数据来源。有关管理员如何设置联网的信息，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。有关必须设置的策略的信息，请参阅[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。建立连接后，数据科学家可以在 JupyterLab 笔记本中使用 SQL 扩展来浏览和查询连接的数据源。

**注意**  
我们建议将数据库访问凭证作为密钥存储在 Secrets Manager 中。要了解如何创建用于存储 Amazon Redshift 或 Snowflake 访问凭证的密钥，请参阅[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)。

本节介绍如何设置 AWS Glue 连接，并列出了 Studio JupyterLab 应用程序通过连接访问数据所需的 IAM 权限。

**注意**  
[亚马逊 SageMaker 资产](sm-assets.md)将[亚马逊 DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html)与 Studio 集成。它包括一个 SageMaker 人工智能蓝图，供管理员在亚马逊 DataZone 域内通过亚马逊 DataZone 项目创建 Studio 环境。  
从使用蓝图创建的 Studio 域启动的 JupyterLab 应用程序的用户在使用 SQL 扩展程序时，可以自动访问与其 Amazon DataZone 目录中数据资产的 AWS Glue 连接。这样就可以查询这些数据来源，而无需手动设置连接。

**Topics**
+ [在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)
+ [创建 AWS Glue 连接（适用于管理员）](sagemaker-sql-extension-datasources-glue-connection.md)
+ [创建用户定义的 AWS Glue 连接](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)
+ [设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)

# 在 Secrets Manager 中为数据库访问凭证创建密钥
<a name="sagemaker-sql-extension-glue-connection-secrets"></a>

在创建连接之前，我们建议您将数据库访问凭证作为密钥存储在中 AWS Secrets Manager。或者，您可以根据通过 AWS Identity and Access Management (IAM) 权限策略授予的权限生成临时数据库证书，以管理您的用户对您的数据库的访问权限。有关更多信息，请参阅[使用 IAM 身份验证生成数据库用户凭证](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)

## 为 Amazon Redshift 访问凭证创建密文
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 Secrets Manager 中 AWS 存储亚马逊 Redshift 信息**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

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

1. 在**密文类型**下，选择 **Amazon Redshift 的凭证**。

1. 输入启动 Amazon Redshift 集群时配置的管理员用户名和密码。

1. 选择与机密相关的 Amazon Redshift 集群。

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

## 为 Amazon Redshift Serverless 访问凭证创建密钥
<a name="sagemaker-sql-extension-redshift-serverless-secret"></a>

**如果您需要连接到 Amazon Redshift Serverless，请按照以下步骤操作**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

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

1. 在**密文类型**下，选择**其他密文类型**。

1. 在**键值对**中，选择**明文**，然后复制以下 JSON 内容。将用户和密码替换为其实际值：

   ```
   {
     "user": "redshift_user",
     "password": "redshift_password"
   }
   ```

1. 创建密钥并检索其 ARN。

1. 在中的 SQL 扩展中创建新连接时 JupyterLab，请根据需要提供所有其他 Amazon Redshift 连接参数。

## 为 Snowflake 访问凭证创建密文
<a name="sagemaker-sql-extension-snowflake-secret"></a>

本节将详细介绍 JSON 定义文件中专门针对 Snowflake 的密文和连接属性。在创建连接之前，我们建议将您的 Snowflake 访问凭证作为密钥存储在 Secrets Manager 中。

**在 Secrets Manager 中存储 Amazon Redshift 信息**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

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

1. 在**密文类型**下，选择**其他密文类型**。

1. 在键值对中，选择 **Plaintext**，然后复制以下 JSON 内容。用它们的值替换 `user`、`password` 和 `account`。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

# 创建 AWS Glue 连接（适用于管理员）
<a name="sagemaker-sql-extension-datasources-glue-connection"></a>

要使用带有 SQL 扩展模块的数据源，管理员可以为每个数据源设置 AWS Glue 连接。这些连接存储了访问数据来源并与之交互所需的配置详细信息。创建连接并授予[相应权限](sagemaker-sql-extension-datasources-connection-permissions.md)后，所有共享同一执行角色的 [亚马逊 SageMaker Studio 空间](studio-updated-spaces.md)用户都能看到这些连接。

建立这些联系：
+ 首先，创建一个 JSON 文件，定义每个数据来源的连接属性。JSON 文件包含诸如数据源标识符、访问凭证和其他通过 AWS Glue 连接访问数据源的相关配置参数之类的详细信息。
+ 然后使用 AWS Command Line Interface (AWS CLI) 创建 AWS Glue 连接，将 JSON 文件作为参数传递。该 AWS CLI 命令从 JSON 文件中读取连接详细信息并建立相应的连接。
**注意**  
SQL 扩展只支持使用 AWS CLI 创建连接。

在创建 AWS Glue 连接之前，请确保完成以下步骤：
+ 安装并配置 AWS Command Line Interface (AWS CLI)。有关如何安装和配置的更多信息 AWS CLI，请参阅[关于 AWS CLI 版本 2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。确保用于配置的 IAM 用户或角色的访问密钥和令牌 AWS CLI 具有创建 AWS Glue 连接所需的权限。添加允许 `glue:CreateConnection` 操作的策略。
+ 了解如何使用 AWS Secrets Manager。我们建议您使用 Secrets Manager 为数据存储提供连接凭证和任何其他敏感信息。有关使用 Secrets Manager 存储凭据的更多信息，请参阅在 S [AWS ecrets Manager 中存储连接凭证](https://docs.aws.amazon.com/glue/latest/dg/connection-properties-secrets-manager.html)。

## 创建连接定义 JSON 文件
<a name="sagemaker-sql-extension-glue-connection-config"></a>

要创建 AWS Glue 连接定义文件，请创建一个 JSON 文件来定义安装和配置的计算机上的连接详细信息 AWS CLI。在本例中，将文件命名为 `sagemaker-sql-connection.json`。

连接定义文件应遵循以下一般格式：
+ **Name** 是连接名称。
+ **Description** 是连接的文字描述。
+ **ConnectionType**是连接的类型。选择 `REDSHIFT`、 `ATHENA` 或 `SNOWFLAKE`。
+ **ConnectionProperties**是连接属性的键值对映射，例如您的 AWS 密钥的 ARN 或数据库的名称。

```
{
    "ConnectionInput": {
        "Name": <GLUE_CONNECTION_NAME>,
        "Description": <GLUE_CONNECTION_DESCRIPTION>,
        "ConnectionType": "REDSHIFT | ATHENA | SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties": "{\"aws_secret_arn\": <SECRET_ARN>, \"database\": <...>}"
        }
    }
}
```

**注意**  
`ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
Secrets Manager 中的所有属性也可通过 `PythonProperties` 直接提供。但是，不建议在 `PythonProperties` 中包含密码等敏感字段。取而代之的是使用 Secrets Manager。

针对不同数据存储的连接定义文件可在以下章节中找到。

每个数据来源的连接定义文件都包含从 SQL 扩展连接到这些数据存储所需的特定属性和配置。有关定义与该信号源连接的详情，请参阅相应章节。
+ 要为 Amazon Redshift 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Amazon Redshift 配置 AWS Glue 连接](#sagemaker-sql-extension-redshift-glue-connection-config)
+ 要为 Amazon Athena 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Ath AWS Glue ena 配置连接](#sagemaker-sql-extension-athena-glue-connection-config)
+ 要为 Snowflake 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Snowflake 配置 AWS Glue 连接](#sagemaker-sql-extension-snowflake-glue-connection-config)

### 为 Amazon Redshift 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-redshift-glue-connection-config"></a>

本节详细介绍 JSON 定义文件中 Amazon Redshift 特有的密文和连接属性。在创建连接配置文件之前，我们建议在 Secrets Manager 中将 Amazon Redshift 访问凭证存储为机密。或者，您可以根据通过 AWS Identity and Access Management (IAM) 权限策略授予的权限生成临时数据库证书，以管理您的用户对您的 Amazon Redshift 数据库的访问权限。有关更多信息，请参阅[使用 IAM 身份验证生成数据库用户凭证](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)。

#### 为 Amazon Redshift 访问凭证创建密文
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 Secrets Manager 中 AWS 存储亚马逊 Redshift 信息**

1. 从 AWS 控制台导航到 Secrets Manager。

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

1. 在**密文类型**下，选择 **Amazon Redshift 的凭证**。

1. 输入启动 Amazon Redshift 集群时配置的管理员用户名和密码。

1. 选择与机密相关的 Amazon Redshift 集群。

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

#### 为 Amazon Redshift 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-redshift-glue-connection-creation"></a>

SQL 扩展模块使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是用于 AWS Glue 连接亚马逊 Redshift 的连接定义示例。

在创建新连接之前，请牢记以下建议：
+ `PythonProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中输入连接名称和说明，用之前创建的密文的 ARN 替换 `aws_secret_arn` 中密文的 ARN。
+ 确保上述连接定义中按名称声明的数据库与集群数据库一致。您可以访问 [Amazon Redshift 管理控制台](https://console.aws.amazon.com/redshiftv2/)上的集群详细信息页面上，并在**属性**部分的 **数据库配置**下验证数据库名称。
+ 有关其他参数，请参阅 [Amazon Redshift 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-redshift) 中的 Amazon Redshift 支持的连接属性列表。
**注意**  
默认情况下，Python 的 SQL 扩展连接器在事务中运行所有查询，除非连接属性中的 `auto_commit` 设置为 `true`。
您可以将包括 `database` 名称在内的所有连接参数添加到密文中。

```
{
  "ConnectionInput": {
      "Name": "Redshift connection name",
      "Description": "Redshift connection description",
      "ConnectionType": "REDSHIFT",
      "ConnectionProperties": {
          "PythonProperties":"{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"database\":\"database_name\", \"database_metadata_current_db_only\": false}"
      }
  }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

### 为 Ath AWS Glue ena 配置连接
<a name="sagemaker-sql-extension-athena-glue-connection-config"></a>

本节将详细介绍 JSON 定义文件中 Athena 特有的连接属性。

#### 为 Ath AWS Glue ena 配置连接
<a name="sagemaker-sql-extension-athena-glue-connection-creation"></a>

SQL 扩展模块使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是 AWS Glue 连接到 Athena 的示例连接定义。

在创建新连接之前，请牢记以下建议：
+ `ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中，输入连接的名称和描述，用目录名称替换 `catalog_name`，用 Amazon S3 存储桶中输出目录的 Amazon S3 URI（统一资源标识符）替换 `s3_staging_dir`，用 Amazon S3 存储桶的区域替换 `region_name`。
+ 有关其他参数，请参阅 [Athena 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-athena) 中 Athena 支持的连接属性列表。
**注意**  
您可以将所有连接参数，包括 `catalog_name` 或 `s3_staging_dir` 添加到密文中。
如果指定了 `workgroup`，则无需指定 `s3_staging_dir`。

```
{
    "ConnectionInput": {
        "Name": "Athena connection name",
        "Description": "Athena connection description",
        "ConnectionType": "ATHENA",
        "ConnectionProperties": {
            "PythonProperties": "{\"catalog_name\": \"catalog_name\",\"s3_staging_dir\": \"s3://amzn-s3-demo-bucket_in_same_region/output_query_results_dir/\", \"region_name\": \"region\"}"
        }
    }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

### 为 Snowflake 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-snowflake-glue-connection-config"></a>

本节将详细介绍 JSON 定义文件中专门针对 Snowflake 的密文和连接属性。在创建连接配置文件之前，我们建议将您的 Snowflake 访问凭证作为机密存储在 Secrets Manager 中。

#### 为 Snowflake 访问凭证创建密文
<a name="sagemaker-sql-extension-snowflake-secret"></a>

**在 Secrets Manager 中存储 Amazon Redshift 信息**

1. 在 AWS 控制台中，导航到 AWS Secrets Manager。

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

1. 在**密文类型**下，选择**其他密文类型**。

1. 在键值对中，选择 **Plaintext**，然后复制以下 JSON 内容。用它们的值替换 `user`、`password` 和 `account`。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

#### 为 Snowflake 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-snowflake-glue-connection-creation"></a>

SQL 扩展模块使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是 AWS Glue 连接到 Snowflake 的示例连接定义。

在创建新连接之前，请牢记以下建议：
+ `ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中输入连接的名称和描述，然后用之前创建的密文的 ARN 替换 `aws_secret_arn` 中的密文 ARN，并替换 `account` 中的账户 ID。
+ 有关其他参数，请参阅 [Snowflake 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-snowflake) 中的 Snowflake 支持的连接属性列表。
**注意**  
您可以将包括 `account` 在内的所有连接参数添加到密文中。

```
{
    "ConnectionInput": {
        "Name": "Snowflake connection name",
        "Description": "Snowflake connection description",
        "ConnectionType": "SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties":  "{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"account\":\"account_id\"}"}"
        }
    }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

## 创建 AWS Glue 连接
<a name="sagemaker-sql-extension-datasources-glue-connection-creation"></a>

要通过创建 AWS Glue 连接 AWS CLI，请使用您的连接定义文件并运行此 AWS CLI 命令。用您的 AWS 区域名称替换`region`占位符，并提供定义文件的本地路径。

**注意**  
配置定义文件的路径前必须有 `file://`。

```
aws --region region glue create-connection --cli-input-json file://path_to_file/sagemaker-sql-connection.json
```

通过运行以下命令验证 AWS Glue 连接是否已创建，并检查您的连接名称。

```
aws --region region glue get-connections
```

或者，您可以按如下方式更新现有 AWS Glue 连接：
+ 根据需要修改 AWS Glue 连接定义文件。
+ 运行以下命令更新连接。

  ```
  aws --region region glue update-connection --name glue_connection_name --cli-input-json file://path_to_file/sagemaker-sql-connection.json
  ```

# 创建用户定义的 AWS Glue 连接
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined"></a>

**注意**  
用户通过 SQL 扩展 UI 创建的所有 AWS Glue 连接都会自动使用以下内容进行标记：  
`UserProfile: user-profile-name`
`AppType: "JL"`
应用于通过 SQL 扩展 UI 创建的 AWS Glue 连接的标签有两个用途。该`"UserProfile": user-profile-name`标签允许识别创建 AWS Glue 连接的特定用户配置文件，从而可以看到负责连接的用户。该`"AppType": "JL"`标签对连接的来源进行分类，将其与应用程序相关联。 JupyterLab 这使得这些连接能够与通过其他方式（例如 AWS CLI）创建的连接区分开来。

## 先决条件
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-prerequisites"></a>

在使用 SQL 扩展 UI 创建 AWS Glue 连接之前，请确保您已完成以下任务：
+ 让您的管理员执行以下操作：
  + 启用 Studio 域与要连接的数据来源之间的网络通信。要了解联网要求，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。
  + 请确保已设置管理 AWS Glue 连接及访问 Secrets Manager 所需的 IAM 权限。要了解所需的权限，请参阅[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。
**注意**  
管理员可以将用户访问权限限制为只能访问由用户在 JupyterLab 应用程序中创建的连接。这可以通过配置限定在用户配置文件范围内的[基于标签的访问控制](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-sql-extension-datasources-connection-permissions.html#user-defined-connections-permissions)来实现。
+ 查看连接属性和说明以便为数据来源创建密钥（见[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)）。

## 用户工作流
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-steps"></a>

可执行以下步骤来完成创建用户连接时的工作流：

1. **选择数据来源类型**：选择*添加新连接*图标后，将打开一个表单，提示用户选择要连接到的数据来源的类型，例如 Amazon Redshift、Athena 或 Snowflake。

1. **提供连接属性**：根据所选数据来源，动态加载相关的连接属性。该表单会标明，对于所选数据来源而言，哪些字段是必填字段，哪些字段是可选字段。要了解数据来源的可用属性，请参阅[连接参数](sagemaker-sql-extension-connection-properties.md)。

1. **选择你的 AWS Secrets Manager ARN**：对于 Amazon Redshift 和 Snowflake 数据源，系统会提示用户选择存储用户名和密码等敏感信息的 S AWS ecrets Manager ARN。要了解如何为数据来源创建密钥，请参阅[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)。

1. **保存您的连接详细信息**：单击**创建**后，提供的连接属性将另存为 AWS Glue 连接。

1. **测试您的连接**：如果连接成功，则关联的数据库和表将在资源管理器中显示。如果连接失败，则会显示一条错误消息，提示用户查看连接详细信息并予以纠正。

1. **熟悉 SQL 扩展功能**：要了解扩展的功能，请参阅 [SQL 扩展功能和使用](sagemaker-sql-extension-features.md)。

1. **（可选）更新或删除用户创建的连接**：只要用户获得必要的权限，就可以更新或删除他们创建的连接。要了解有关所需权限的更多信息，请参阅[用户定义的连接需要 IAM 权限](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions)。

# 设置访问数据来源所需的 IAM 权限（适用于管理员）
<a name="sagemaker-sql-extension-datasources-connection-permissions"></a>

管理员应确保 JupyterLab 应用程序使用的执行角色具有通过配置的 AWS Glue 连接访问数据所必需的 AWS IAM 权限。
+ **管理员使用以下方式创建的** AWS Glue 连接 AWS CLI：要查看[管理员创建的](sagemaker-sql-extension-datasources-glue-connection.md)连接并访问其数据，用户需要让其管理员为其 JupyterLab应用程序在 Studio 中使用的 SageMaker AI 执行角色附加特定权限。这包括访问权限 AWS Glue、Secrets Manager 和特定于数据库的权限。管理员创建的连接对共享执行角色的所有应用程序可见，该执行角色获得了查看特定 AWS Glue 目录或数据库的权限。要了解每种数据来源的所需权限列表，请参阅[管理员定义的连接需要 IAM 权限](#admin-defined-connections-permissions)中管理员定义的连接权限。
+ **用户使用 SQL 扩展 UI** [创建的连接也将列出 JupyterLab：由共享相同执行角色的用户配置文件](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)创建的连接，除非其连接的可见性范围仅限于用户创建的连接。用户创建的连接通过用于创建该连接的用户配置文件进行标记。要将查看、更新或删除这些用户创建的连接的权限仅授予创建这些连接的用户，管理员可以向执行角色 IAM 权限添加其他基于标签的访问控制限制。要了解所需的其他基于标签的访问控制，请参阅[用户定义的连接需要 IAM 权限](#user-defined-connections-permissions)。

## 管理员定义的连接需要 IAM 权限
<a name="admin-defined-connections-permissions"></a>

要向 Studio 中的 JupyterLab 应用程序使用的 SageMaker AI 执行角色授予通过 AWS Glue 连接访问数据源的权限，请将以下内联策略附加到该角色。

要查看每个数据来源或身份验证方法的特定权限和策略详细信息，请在下面选择相关的连接类型。

**注意**  
我们建议将策略的权限限制在所需的资源和操作范围内。  
要缩小策略范围并授予最低权限访问权限，请将策略`"Resource": ["*"]`中的通配符替换 ARNs 为特定于需要访问的资源。有关如何控制资源访问权限的更多信息，请参阅 [使用精细的 ARN 权限微调 AWS 资源访问权限](#resource-access-control)。

### 所有连接类型
<a name="datasources-connection-permissions-all"></a>

**注意**  
我们强烈建议将该策略的范围缩小到只需采取的行动和所需的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:glue:us-east-1:111122223333:catalog",
    "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-1:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name"
            ]
        }
    ]
}
```

------

### Athena
<a name="datasources-connection-permissions-athena"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

更多信息，请参阅 [Athena 文档](https://docs.aws.amazon.com/athena/latest/ug/federated-query-iam-access.html)中的 *IAM 权限策略示例*。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",                
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteAthenaQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-2:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"       
            ]
        }
    ]
}
```

------

### Amazon Redshift 和 Amazon Redshift Serverless（用户名和密码验证）/ Snowflake
<a name="datasources-connection-permissions-snowflake-redshift-user-password"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"            
            ]
        }
    ]
}
```

------

### Amazon Redshift（IAM 授权）
<a name="datasources-connection-permissions-redshift-iam"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*",
                "arn:aws:glue:us-east-1:111122223333:connection/connection-name"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name",
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-with-suffix"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name",
                "arn:aws:redshift:us-east-1:111122223333:dbuser:cluster-name/db-user-name"
            ]
        }
    ]
}
```

------

### Amazon Redshift Serverless（IAM 授权）
<a name="datasources-connection-permissions-redshift-serverless-iam"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"         
            ]
        },
        {
            "Sid": "GetRedshiftServerlessCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetCredentials"
            ],
            "Resource": [
                "arn:aws:redshift-serverless:us-east-2:111122223333:namespace/namespace-id"           
            ]
        }
    ]
}
```

------

## 用户定义的连接需要 IAM 权限
<a name="user-defined-connections-permissions"></a>

用户的 IAM 策略权限可以说明 AWS Glue 连接资源上是否存在`UserProfile`标签。
+ **要查看 AWS Glue 连接，请执行**以下操作：
  + 用户可以查看所有带 `UserProfile` 标签的连接（由管理员创建）。
  + 用户可以查看带 `UserProfile` 标签且标签值与其用户配置文件名称相同的连接。
  + 用户无法查看带 `UserProfile` 标签且标签值与其用户配置文件名称不同的连接。
+ **要更新或删除 AWS Glue 连接**，请执行以下操作：
  + 用户可以更新或删除带 `UserProfile` 标签且标签值与其用户配置文件名称相同的连接。
  + 用户无法更新或删除带 `UserProfile` 标签且标签值与其用户配置文件名称不同的连接。
  + 用户无法更新或删除不带 `UserProfile` 标签的连接。

为此，管理员必须向用户配置文件 JupyterLab 应用程序使用的执行角色授予其现有[管理员定义的连接](#admin-defined-connections-permissions)权限之外的额外权限。具体而言，除了访问管理员定义的 AWS Glue 连接所需的权限外，还必须向用户的执行角色授予以下两项额外的 IAM 权限：
+ 允许创建 AWS Glue 连接并将`UserProfile`标签与用户个人资料名称的值关联起来。
+ 允许查看、更新和删除`UserProfile`标签与用户个人资料名称相匹配的 AWS Glue 连接。

此权限根据特定的用户配置文件标签值限制对 AWS Glue 连接的访问。使用要定位的用户的配置文件名称更新 `UserProfile` 标签值。

```
"Action": [
    "glue:GetConnection",
    "glue:GetConnections"    
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEqualsIfExists": {
        "aws:ResourceTag/UserProfile": "user_profile_name"
    }
}
```

此权限仅允许将创建、更新和删除用户创建的连接的功能用于由带指定 `UserProfile` 标签值的用户配置文件创建的连接。

```
"Action": [
    "glue:DeleteConnection",
    "glue:UpdateConnection",
    "glue:CreateConnection",
    "glue:TagResource"
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEquals": {
        "aws:ResourceTag/UserProfile": "user_profile"
    }
}
```

## 使用精细的 ARN 权限微调 AWS 资源访问权限
<a name="resource-access-control"></a>

为了更精细地控制对 AWS 资源的访问权限，请将策略`"Resource": ["*"]`中的通配符资源替换为仅包含需要访问的资源的特定 Amazon 资源名称 (ARNs)。使用精确 ARNs字符而不是通配符会限制对预期资源的访问。
+ **使用特定的亚马逊 S3 存储桶 ARNs**

  例如，`"arn:aws:s3:::bucket-name"` 或 ` "arn:aws:s3:::bucket-name/*"` 表示存储桶级或对象级操作。

  有关 Amazon S3 中所有资源类型的信息，请参阅[由 Amazon S3 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)。
+ **使用特定的 AWS Glue 数据库 ARNs**

  例如，` "arn:aws:glue:region:account-id:catalog"` 或 ` "arn:aws:glue:region:account-id:database/db-name"`。有关中所有资源类型的信息 AWS Glue，请参阅[由定义的资源类型 AWS Glue](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。
+ **使用特定的 Athena 工作组 ARNs**

  例如 `"arn:aws:athena:region:account-id:workgroup/workgroup-name"`。有关 Athena 中所有资源类型的信息，请参阅[由 Athena 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html#amazonathena-resources-for-iam-policies)。
+ **使用特定的 S AWS ecrets Manager 密钥 ARNs**

  例如 `"arn:aws:secretsmanager:region:account-id:secret:secret-name"`。有关 Secrets Manager 中所有资源类型的信息，请参阅 S AWS ecr [AWS ets Manager 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecretsmanager.html#awssecretsmanager-resources-for-iam-policies)
+ **使用特定的亚马逊 Redshift 集群 ARNs**

  例如 `"arn:aws:redshift:region:account-id:cluster:cluster-name"`。有关 Amazon Redshift 中资源类型的信息，请参阅[由 Amazon Redshift 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-resources-for-iam-policies)。有关 Redshift Serverless 中所有资源类型的信息，请参阅[由 Redshift Serverless 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html#amazonredshiftserverless-resources-for-iam-policies)。

# 常见问题
<a name="sagemaker-sql-extension-faqs"></a>

以下内容 FAQs 回答了中 SQL 扩展的常见一般问题 JupyterLab。

## 问：在哪里可以找到 SQL 扩展的日志？
<a name="sagemaker-sql-extension-faqs-0"></a>

答：SQL 扩展程序将其日志写入 Studio 中 JupyterLab应用程序的常规日志文件中。您可以在 `/var/log/apps/app_container.log` 找到这些日志。

## 问：我收到一个错误：“UsageError：找不到 Cell magic `%sm\$1sql`。”
<a name="sagemaker-sql-extension-faqs-1"></a>

答：创建一个新单元格，然后使用 `%load_ext amazon_sagemaker_sql_magic` 重新加载扩展名。

## 问：如何列出 `%%sm_sql` 命令的各种参数？
<a name="sagemaker-sql-extension-faqs-2"></a>

答：使用 `%%sm_sql?` 获取命令的帮助内容。

## 问：我看不到右侧面板上的数据发现视图。
<a name="sagemaker-sql-extension-faqs-3"></a>

答：确保您的空间使用 SageMaker 分发映像版本 1.6 或更高版本。这些 SageMaker 映像已预先安装了扩展程序。

如果您在 Studio 中更新了 JupyterLab 应用程序空间的图像，请刷新浏览器。

## 问：右侧面板无法准确反映所配置的 AWS Glue 连接。
<a name="sagemaker-sql-extension-faqs-4"></a>

答：尝试使用笔记本中 SQL 扩展用户界面右下角的**刷新**按钮刷新右侧面板。

## 问：SQL 语句不能按预期运行或运行不正确。
<a name="sagemaker-sql-extension-faqs-5"></a>

答：运行以下神奇命令 `%sm_sql_manage --clear-cached-connections` 尝试清除缓存连接。

## 问：我收到一个错误：“实际语句数 2 与期望语句数 1 不匹配”。
<a name="sagemaker-sql-extension-faqs-6"></a>

答：SQL 扩展只支持一次运行一个 SQL 查询。

## 雪花 FAQs
<a name="sagemaker-sql-extension-faqs-snowflake"></a>

以下内容 FAQs 回答了使用 Snowflake 作为数据源的 SQL 扩展用户常见的一般问题。

### 问：我遇到一个错误：“当前会话中未选择活动存储库。” 使用“使用存储库”命令选择一个活动存储库。
<a name="sagemaker-sql-extension-faqs-snowflake-1"></a>

答：如果未选择用户的默认存储库，就会出现这种情况。为每个会话运行命令 `USE WAREHOUSE warehouse_name`。

### 问：我收到一个错误：“对象' *foo* '不存在或未获得授权。”
<a name="sagemaker-sql-extension-faqs-snowflake-2"></a>

答：确保您的 Snowflake 用户有访问给定对象的权限。

# 连接参数
<a name="sagemaker-sql-extension-connection-properties"></a>

下表详细说明了每个数据存储的 AWS Glue 连接所支持的 Python 属性。

## Amazon Redshift 连接参数
<a name="sagemaker-sql-extension-connection-properties-redshift"></a>

与亚马逊 Redshift 的连接支持以下 Python AWS Glue 连接参数。


| Key | Type | 说明 | 约束 | 必需 | 
| --- | --- | --- | --- | --- | 
| auto\$1create | 类型：boolean | 表示如果用户不存在，是否应创建该用户。默认值为 false。 | true, false | 否 | 
| aws\$1secret\$1arn | 类型：string | 用于检索连接附加参数的密文 ARN。 | 有效 ARN | 否 | 
| cluster\$1identifier | 类型：string - maxLength: 63 | Amazon Redshift 集群的集群标识符。 | ^(?\$1.\$1—)[a-z][a-z0-9-]\$10,61\$1[a-z0-9]\$1 | 否 | 
| database | 类型：string - maxLength: 127 | 要连接的数据库的名称。 |  | 否 | 
| database\$1metadata\$1current\$1db\$1only | 类型：boolean | 表示应用程序是否支持多数据库数据共享目录。默认为 true，表示应用程序不支持多数据库数据共享目录，以实现向后兼容。 | true, false | 否 | 
| db\$1groups | 类型：string | 以逗号分隔的列表，包含 db\$1user 在当前会话中加入的现有数据库组名称。 |  | 否 | 
| db\$1user | 类型：string | 用于 Amazon Redshift 的用户 ID。 |  | 否 | 
| host | 类型：string - maxLength: 256 | Amazon Redshift 集群的主机名。 |  | 否 | 
| iam | 类型：boolean | 用于启用或禁用连接的基于 IAM 的身份验证的标志。默认值为 false。 | true, false | 否 | 
| iam\$1disable\$1cache | 类型：boolean | 此选项指定是否缓存 IAM 凭证。默认值为 true。当对 API 网关的请求受到限制时，这样可以提高性能。 | true, false | 否 | 
| max\$1prepared\$1statements | 类型：integer | 可同时打开的已准备报表的最大数量。 |  | 否 | 
| numeric\$1to\$1float | 小数到浮点数 | 指定是否将 NUMERIC 数据类型值转换为十进制。默认情况下，NUMERIC 值以 decimal.Decimal Python 对象的形式接收。由于结果可能被四舍五入，因此不建议偏好高精度的使用场景启用此选项。在启用此选项之前，请参考有关 [https://docs.python.org/3/library/decimal.html#decimal-objects](https://docs.python.org/3/library/decimal.html#decimal-objects) 的 Python 文档，以了解 decimal.Decimal 和 float 之间的权衡。默认值为 false。 | true, false | 否 | 
| port | 类型：integer | Amazon Redshift 集群的端口号。 | 范围 1150-65535 | 否 | 
| profile | 类型：string - maxLength: 256 | 包含 AWS CLI使用的凭证和设置的配置文件名称。 |  | 否 | 
| region | 类型：string | 集群所在的 AWS 区域。 | 有效 AWS 区域 | 否 | 
| serverless\$1acct\$1id | 类型：string - maxLength: 256 | 与 Amazon Redshift 无服务器资源关联的 AWS 账户 ID。 |  | 否 | 
| serverless\$1work\$1group | 类型：string - maxLength: 256 | Amazon Redshift Serverless 端点工作组的名称。 |  | 否 | 
| ssl | 类型：boolean | true（如果已启用 SSL）。 | true, false | 否 | 
| ssl\$1mode | 类型：枚举[verify-ca, verify-full, null]) | 连接到 Amazon Redshift 的安全性。verify-ca（必须使用 SSL 并验证服务器证书）和 verify-full（必须使用 SSL。必须验证服务器证书，服务器主机名必须与证书上的主机名属性一致）。有关更多信息，请参阅 Amazon Redshift 文档中的[为连接配置安全选项](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-ssl-support.html)。默认值为 verify-ca。 | verify-ca, verify-full | 否 | 
| timeout | 类型：integer | 连接服务器时发生超时前等待的秒数。 | 0 | 否 | 

## Athena 连接参数
<a name="sagemaker-sql-extension-connection-properties-athena"></a>

与 Athena 的连接支持以下 Python AWS Glue 连接参数。


| Key | Type | 说明 | 约束 | 必需 | 
| --- | --- | --- | --- | --- | 
| aws\$1access\$1key\$1id | 类型：string - maxLength: 256 | 指定与 IAM 账户关联的 AWS 访问密钥。我们建议将此信息存储在 aws\$1secret 中。 | 长度 16-128 | 否 | 
| aws\$1secret\$1access\$1key | 类型：string - maxLength: 256 |  AWS 访问密钥的秘密部分。我们建议将此信息存储在 aws\$1secret 中。 |  | 否 | 
| aws\$1secret\$1arn | 类型：string | 用于检索连接附加参数的密文 ARN。 | 有效 ARN | 否 | 
| catalog\$1name | 类型：string - maxLength: 256 | 目录，其中包含使用驱动程序访问的数据库和表。有关目录的信息，请参见[DataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html)。 |  | 否 | 
| duration\$1seconds | 类型：number | 角色会话的持续时间（以秒为单位）。该设置可以具有 1 小时到 12 小时之间的值。默认情况下，持续时间设置为 3600 秒（1 小时）。 | 范围从 900 秒（15 分钟）到角色的最大会话持续时间设置 | 否 | 
| encryption\$1option | 类型：枚举[SSE\$1S3, SSE\$1KMS, CSE\$1KMS, null]) | Amazon S3 的静态加密。请参阅 [Athena 指南](https://docs.aws.amazon.com/athena/latest/ug/encryption.html)中的静态加密部分。 | SSE\$1S3, SSE\$1KMS, CSE\$1KMS | 否 | 
| kms\$1key | 类型：string - maxLength: 256 | AWS KMS 如果CSE\$1KMS在中使用，则按键encrytion\$1option。 |  | 否 | 
| poll\$1interval | 类型：number | 在 Athena 中轮询查询结果状态的间隔时间（秒）。 |  | 否 | 
| profile\$1name | 类型：string - maxLength: 256 | 应使用其凭据对向 Athena 发出的请求进行身份验证的 AWS 配置文件的名称。 |  | 否 | 
| region\$1name | 类型：string | 运行查询的 AWS 区域。 | 有效 AWS 区域 | 否 | 
| result\$1reuse\$1enable | 类型：boolean | 启用重复使用以前的查询结果。 | true, false | 否 | 
| result\$1reuse\$1minutes | 类型：integer | 以分钟为单位指定 Athena 应考虑的先前查询结果的重用最长使用期限。默认值为 60。 | >=1 | 否 | 
| role\$1arn | 类型：string | 用于运行查询的角色。 | 有效 ARN | 否 | 
| schema\$1name | 类型：string - maxLength: 256 | 数据库使用的默认模式名称。 |  | 否 | 
| s3\$1staging\$1dir | 类型：string - maxLength: 1024 | Amazon S3 中存储查询结果的位置。 |  | 必须使用 s3\$1staging\$1dir 或 work\$1group | 
| work\$1group | 类型：string | 将运行查询的工作组。有关工作组的信息，请参阅[WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)。 | ^[a-zA-Z0-9.\$1-]\$11,128\$1\$1 | 必须使用 s3\$1staging\$1dir 或 work\$1group | 

## Snowflake 连接参数
<a name="sagemaker-sql-extension-connection-properties-snowflake"></a>

与 Snowflake 的连接支持以下 Python AWS Glue 连接参数。

Snowflake 连接参数


| Key | Type | 说明 | 约束 | 必需 | 
| --- | --- | --- | --- | --- | 
| account | 类型：string - maxLength: 256 | Snowflake 账户标识符。账户标识符不包括 snowflakecomputing.com 后缀。 |  | 是 | 
| arrow\$1number\$1to\$1decimal | 类型：boolean | 默认为 False，这意味着 NUMBER 列的值将以双精度浮点数 (float64) 的形式返回。设置为 True 时，在调用 fetch\$1pandas\$1all() 和 fetch\$1pandas\$1batches() 方法时，将 DECIMAL 列值返回为十进制数 (decimal.Decimal)。 | true, false | 否 | 
| autocommit | 类型：boolean | 默认为 false，这与 Snowflake 参数 AUTOCOMMIT 一致。设置为 true 或 false，可分别启用或禁用会话中的 autocommit 模式。 | true, false | 否 | 
| aws\$1secret\$1arn | 类型：string | 用于检索连接附加参数的密文 ARN。 | 有效 ARN | 否 | 
| client\$1prefetch\$1threads | 类型：integer | 用于下载结果集的线程数（默认为 4）。增大该值可提高提取性能，但需要更多内存。 |  | 否 | 
| database | 类型：string - maxLength: 256 | 要使用的默认数据库名称。 |  | 否 | 
| login\$1timeout | 类型：integer | 登录请求的超时（秒）。默认为 60 秒。如果 HTTP 响应不是 success，则登录请求会在超时后终止。 |  | 否 | 
| network\$1timeout | 类型：integer | 所有其他操作的超时（秒）。默认为 none（无限）。如果 HTTP 响应不是 success，一般请求就会在超时长度后放弃。 |  | 否 | 
| paramstyle | 类型：string - maxLength: 256 | 从 Python 代码执行 SQL 查询时用于参数替换的占位符语法。客户端绑定默认为 pyformat。指定 qmark 或 numeric 可更改服务器端绑定的绑定变量格式。 |  | 否 | 
| role | 类型：string - maxLength: 256 | 要使用的默认角色名称。 |  | 否 | 
| schema | 类型：string - maxLength: 256 | 数据库使用的默认模式名称。 |  | 否 | 
| timezone | 类型：string - maxLength: 128 | 默认为“无”，这与 Snowflake 参数 TIMEZONE 一致。设置为有效时区（如 America/Los\$1Angeles）以设置会话时区。 | 时区，格式类似 America/Los\$1Angeles | 否 | 
| validate\$1default\$1parameters | 类型：boolean | 设为 true，当指定的数据库、模式或存储库不存在时会引发异常。默认值为 false。 |  | 否 | 
| warehouse | 类型：string - maxLength: 256 | 要使用的默认存储库名称。 |  | 否 | 

# 在 Studio 中使用 Amazon EMR Serverless 应用程序或 Amazon EMR 集群进行大规模数据准备
<a name="studio-emr-data-preparation"></a>

Amazon SageMaker Studio 及其旧版本 Studio Classic 为数据科学家和机器学习 (ML) 工程师提供了大规模执行数据分析和数据准备的工具。分析、转换和准备大量数据是任何数据科学和 ML 工作流的基础步骤。Studio 和 Studio Classic 都内置了与 Amazon EMR 的集成，允许用户在笔记本电脑中管理大规模的交互式数据准备和机器学习工作流程。 JupyterLab 

[Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) [是一个托管的大数据平台，其资源可帮助您使用 Ap [ache Spark、Apache](https://aws.amazon.com/emr/features/spark)[Hiv](https://aws.amazon.com/emr/features/hive) e、Presto 和 Flink AWS 等开源分析框架运行 PB 级分布式数据处理作业。](https://aws.amazon.com/emr/features/presto) HBase通过将 Studio 和 Studio Classic 与 Amazon EMR 集成，您无需离开 JupyterLab 或 Studio Classic 笔记本电脑即可创建、浏览、发现和连接亚马逊 EMR 集群。此外，您还可以直接从笔记本一键访问 Spark UI，从而监控和调试 Spark 工作负载。

如果您有大规模、长期运行或复杂的数据处理需求，涉及海量数据，需要广泛的自定义和与其他服务集成，需要运行自定义应用程序，或计划运行 Apache Spark 以外的各种分布式数据处理框架，则应考虑将 Amazon EMR 集群用于数据准备工作负载。

使用[SageMaker 分发映像](sagemaker-distribution.md)`1.10`或更高版本，您也可以直接从 AI Studio 中的 JupyterLab SageMaker 笔记本电脑连接到交互式 [EMR Serverles](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html) s 应用程序。Studio 与 EMR Serverless 的集成使您可以运行开源大数据分析框架，如 [Apache Spark](https://aws.amazon.com/emr/features/spark) 和 [Apache Hive](https://aws.amazon.com/emr/features/hive)，而无需配置、管理或扩展 Amazon EMR 集群。EMR Serverless 可根据您的 EMR Serverless 应用程序的需求自动配置和管理基础计算和内存资源。它可以动态地向上和向下扩展资源，根据应用程序消耗的 vCPU、内存和存储资源的数量收取费用。这种无服务器方法允许您在 JupyterLab 笔记本电脑上[运行交互式数据准备工作负载](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/interactive-workloads.html)，而不必担心集群管理，同时实现高实例利用率和成本效益。

如果您的工作负载是短期或间歇性的，不需要持久集群；您更喜欢自动资源预配置和终止的无服务器体验，从而避免了管理基础设施的开销；或者您的交互式数据准备任务主要围绕 Apache Spark 进行，那么您应该考虑使用 EMR Serverless 来处理交互式数据准备工作负载。

**Topics**
+ [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md)
+ [使用 EMR Serverless 准备数据](studio-notebooks-emr-serverless.md)
+ [使用 Amazon EMR 准备数据](studio-notebooks-emr-cluster.md)

# 为 Amazon EMR 集群配置网络访问权限
<a name="studio-notebooks-emr-networking"></a>

在开始使用 Amazon EMR 或 EMR Serverless 执行 Studio 中的数据准备任务之前，请确保您或您的管理员已对网络进行了配置，以允许 Studio 和 Amazon EMR 之间进行通信。启用此通信后，您可以选择：
+ [使用 EMR Serverless 准备数据](studio-notebooks-emr-serverless.md)
+ [使用 Amazon EMR 准备数据](studio-notebooks-emr-cluster.md)

**注意**  
对于 EMR Serverless 用户来说，最简单的设置是在 Studio UI 中创建应用程序，无需修改**虚拟私有云（VPC）**选项的默认设置。这种方法允许在您 SageMaker 域的 VPC 中创建应用程序，无需进行额外的网络配置。如果您选择此选项，则可以跳过下面的网络设置部分。

根据 Studio 和 Amazon EMR 是部署在私有 [Amazon 虚拟私有云（VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)内还是通过互联网通信，联网说明也会有所不同。

默认情况下，Studio 或 Studio Classic 在[可访问互联网](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-default)的 AWS 托管 VPC 中运行。使用互联网连接时，Studio 和 Studio Classic 会通过互联网访问 AWS 资源，例如 Amazon S3 存储桶。但是，如果您有控制数据和作业容器访问的安全要求，我们建议您对 Studio 或 Studio Classic 和 Amazon EMR 进行配置，以便无法通过互联网访问您的数据和容器。要控制对资源的访问或在没有公共互联网访问的情况下运行 Studio 或 Studio Classic，您可以在加入 [Amazon A SageMaker I 域](gs-studio-onboard.md)时指定`VPC only`网络访问类型。在这种情况下，Studio 和 Studio Classic 都通过私有 [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)与其他 AWS 服务建立连接。有关在`VPC only`模式下配置 Studio 或 Studio Classic 的信息，请参阅[将 VPC 中的 SageMaker Studio 或 Studio Classic 笔记本电脑连接到外部资源。](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#studio-notebooks-and-internet-access-vpc-only) 。

前两节介绍如何在 VPCs 没有公共互联网接入的情况下确保 Studio 或 Studio Classic 与 Amazon EMR 之间的通信。最后一节介绍如何使用互联网连接确保 Studio 或 Studio Classic 与 Amazon EMR 之间的通信。在没有互联网访问权限的情况下连接 Studio 或 Studio Classic 和亚马逊 EMR 之前，请务必为亚马逊简单存储服务（数据存储）、亚马逊（记录和监控）和亚马逊 SageMaker 运行时 CloudWatch（基于角色的细粒度访问控制 (RBAC)）建立终端节点。

连接 Studio 或 Studio Classic 和 Amazon EMR：
+ 如果 Studio 或 Studio Classic 和 Amazon EMR 分开存放 VPCs，无论是在同一个 AWS 账户中还是在不同的账户中，请参阅。[Studio 和 Amazon EMR 是分开的 VPCs](#studio-notebooks-emr-networking-requirements-cross-vpc)
+ 如果 Studio 或 Studio Classic 与 Amazon EMR 位于同一 VPC 中，请参阅 [Studio 和 Amazon EMR 位于同一 VPC 中](#studio-notebooks-emr-networking-requirements-same-vpc)。
+ 如果您选择通过公共互联网连接 Studio 或 Studio Classic 和 Amazon EMR，请参阅 [Studio 和 Amazon EMR 通过公共互联网进行通信](#studio-notebooks-emr-networking-requirements-internet)。

## Studio 和 Amazon EMR 是分开的 VPCs
<a name="studio-notebooks-emr-networking-requirements-cross-vpc"></a>

要允许 Studio 或 Studio Classic 与 Amazon EMR 在单独部署时进行通信，请执行以下操作： VPCs

1. 首先 VPCs 通过 VPC 对等连接进行连接。

1. 更新每个 VPC 中的路由表，在 Studio 或 Studio Classic 子网与 Amazon EMR 子网之间双向路由网络流量。

1. 配置安全组以允许入站和出站流量。

无论资源部署在单个 AWS 账户（单账户用例）中，还是跨多个 AWS 账户（跨账户用例）部署，连接 Studio 或 Studio Classic 和 Amazon EMR 的步骤都是一样的。

1. 

**VPC 对等连接**

   创建 [VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)以促进两者 VPCs （Studio 或 Studio Classic 和 Amazon EMR）之间的联网。

   1. 从您的 Studio 或 Studio Classic 账户，在 VPC 面板上选择 **对等连接**，然后选择**创建对等连接**。

   1. 创建请求，将 Studio 或 Studio Classic VPC 与 Amazon EMR VPC 对等。在其他 AWS 账户中请求对等时，请在选择要**与之建立对等关系的另一个 VPC 中选择另一个****账户**。

      对于跨账户对等互联，管理员必须接受来自 Amazon EMR 账户的请求。

      与私有子网建立对等连接时，您应在 VPC 对等连接级别启用私有 IP DNS 解析。

1. 

**路由表**

   在 Studio 或 Studio Classic 子网与 Amazon EMR 子网之间双向发送网络流量。

   建立对等连接后，管理员（在跨账户访问的每个账户上）可以将路由添加到私有子网路由表中，以路由 Studio 或 Studio Classic 与 Amazon EMR 子网之间的流量。您可以在 VPC 控制面板中，转到每个 VPC 的**路由表**部分来定义这些路由。

   下面的 Studio VPC 子网路由表示例显示了通过对等连接从 Studio 账户到 Amazon EMR VPC IP 范围（此处为 `2.0.1.0/24`）的出站路由。  
![\[Studio VPC 子网的路由表演示了通过对等连接，从 Studio 账户到 Amazon EMR VPC IP 范围（此处为 2.0.1.0/24）的出站路由。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-return-route.png)

   下图中 Amazon EMR VPC 子网的路由表演示了通过对等连接，从 Amazon EMR VPC 账户到 Studio VPC IP 范围（此处为 `10.0.20.0/24`）的返回路由示例。  
![\[Amazon EMR VPC 子网的路由表，显示通过对等连接从 Amazon EMR 账户到 Studio VPC IP 范围（此处为 10.0.20.0/24）的返回路由\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-outbound-route.png)

1. 

**安全组**

   最后，Studio 或 Studio Classic 域的安全组必须允许出站流量，Amazon EMR 主节点的安全组必须允许 *Apache Livy*、*Hive* 或 *Presto* 的入站流量。TCP 端口（分别为 `8998`、`10000` 和 `8889`）的入站流量。[Apache Livy](https://livy.apache.org/) 是一项可通过 REST 接口与 Amazon EMR 交互的服务。

下图显示了 Amazon VPC 设置的示例，该设置允许 JupyterLab或 Studio Classic 笔记本电脑通过服务目录中的 CloudFormation 模板预配置 Amazon EMR 集群，然后连接到同一账户中的亚马逊 EMR 集群。 AWS 该图进一步说明了在无法访问互联网时直接连接到各种 AWS 服务（例如 Amazon S3 或 Amazon CloudWatch）所需的终端节点。 VPCs 或者，必须使用 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with)来允许多个 VPCs 私有子网中的实例在访问互联网时共享[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)提供的单个公有 IP 地址。

![\[架构图展示了一个简单 Amazon VPC 设置的示例，该设置允许 Studio 或 Studio Classic 笔记本电脑通过服务目录 CloudFormation 中的模板预配置 Amazon EMR 集群，然后连接到同一个账户中的亚马逊 EMR 集群。 AWS 该图进一步说明了在无法访问互联网时直接连接到各种 AWS 服务（例如 Amazon S3 或 Amazon CloudWatch）所需的终端节点。 VPCs 或者，必须使用 NAT 网关来允许多个 VPCs 私有子网中的实例在访问互联网时共享互联网网关提供的单个公有 IP 地址。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-architecture-singleaccount-vpcendpoints.png)


## Studio 和 Amazon EMR 位于同一 VPC 中
<a name="studio-notebooks-emr-networking-requirements-same-vpc"></a>

如果 Studio 或 Studio Classic 和 Amazon EMR 位于不同的子网中，请在每个专用子网路由表中添加路由，以路由 Studio 或 Studio Classic 和 Amazon EMR 子网之间的流量。您可以在 VPC 控制面板中，转到每个 VPC 的**路由表**部分来定义这些路由。如果在同一 VPC 和同一子网中部署了 Studio 或 Studio Classic 和 Amazon EMR，则无需在 Studio 和 Amazon EMR 之间路由流量。

无论您是否需要更新路由表，Studio 或 Studio Classic 域的安全组都必须允许出站流量，而 Amazon EMR 主节点的安全组必须允许来自 Studio 或 Studio Classic 实例安全组的 *Apache Livy*、*Hive* 或 *Presto* TCP 端口（分别为 `8998`、`10000` 和 `8889`）的入站流量。[Apache Livy](https://livy.apache.org/) 是一项可通过 REST 接口与 Amazon EMR 交互的服务。

## Studio 和 Amazon EMR 通过公共互联网进行通信
<a name="studio-notebooks-emr-networking-requirements-internet"></a>

默认情况下，Studio 和 Studio Classic 提供网络接口，允许通过与 SageMaker 域关联的 VPC 中的互联网网关与互联网进行通信。如果您选择通过公共互联网连接 Amazon EMR，则 Amazon EMR 需要接受来自其互联网网关的 *Apache Livy*、*Hive* 或 *Presto* TCP 端口（分别为 `8998`、`10000` 和 `8889`）的入站流量。[Apache Livy](https://livy.apache.org/) 是一项可通过 REST 接口与 Amazon EMR 交互的服务。

请记住，您允许入站流量通过的任何端口，都代表着潜在的安全漏洞。请仔细检查自定义安全组，以确保您最大限度地减少漏洞。有关更多信息，请参阅[使用安全组控制网络流量](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-security-groups.html)。

或者，有关如何[在 Amazon EMR 上启用 Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)、在私有子网中设置集群并使用[网络负载均衡器 (NLB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 仅公开特定端口来访问集群（通过安全组进行访问控制）的演练，请参阅[博客和白皮书](studio-notebooks-emr-resources.md)。

**注意**  
通过公共互联网连接到 Apache Livy 端点时，我们建议您使用 TLS 确保 Studio 或 Studio Classic 与 Amazon EMR 集群之间的通信安全。  
有关使用 Apache Livy 设置 HTTPS 的信息，请参阅[使用 Apache Livy 启用 HTTPS](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)。有关设置启用传输加密的 Amazon EMR 集群的信息，请参阅[为通过 Amazon EMR 加密来加密传输中数据提供证书](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-encryption-certificates)。此外，您还需要配置 Studio 或 Studio Classic 以访问 [通过 HTTPS 连接到 Amazon EMR 集群。](connect-emr-clusters.md#connect-emr-clusters-ssl) 中指定的证书键。

# 使用 EMR Serverless 准备数据
<a name="studio-notebooks-emr-serverless"></a>

从[SageMaker 分发映像](sagemaker-distribution.md)版本开始`1.10`，Amazon SageMaker Studio 与 EMR Serverless 集成。在 SageMaker Studio 的 JupyterLab 笔记本电脑中，数据科学家和数据工程师可以发现并连接 EMR Serverless 应用程序，然后以交互方式探索、可视化和准备大规模 Apache Spark 或 Apache Hive 工作负载。通过这种集成，可以大规模执行交互式数据预处理，为 ML 模型训练和部署做好准备。

具体而言，[SageMaker 人工智能分发](https://github.com/aws/sagemaker-distribution/tree/main/build_artifacts/v1)映像版本的更新版本`1.10`利用了 Apache Livy 和 EMR Serverless 之间的集成，允许通过笔记本连接到 Apache Livy 端点。[https://pypi.org/project/sagemaker-studio-analytics-extension/](https://pypi.org/project/sagemaker-studio-analytics-extension/) JupyterLab 本节假定事先了解 [EMR Serverless 交互式应用程序](https://docs.aws.amazon.com/EMR-Serverless-UserGuide/interactive-workloads.html)。

**重要**  
使用 Studio 时，对于从私有空间启动的应用程序，您只能发现并连接到 EMR Serverless JupyterLab 应用程序。确保 EMR 无服务器应用程序与您的 Studio 环境位于同一 AWS 区域。

## 先决条件
<a name="studio-set-up-emr-serverless-prerequisites"></a>

在开始在 JupyterLab 笔记本电脑上使用 EMR Serverless 运行交互式工作负载之前，请确保满足以下先决条件：

1. 您的 JupyterLab 空间必须使用 SageMaker 分发图片版本`1.10`或更高版本。

1. 使用 Amazon EMR 版本 `6.14.0` 或更高版本创建 EMR Serverless 交互式应用程序。您可以按照 [从 Studio 创建 EMR Serverless 应用程序](create-emr-serverless-application.md) 中的步骤，从 Studio 用户界面创建 EMR Serverless 应用程序。
**注意**  
对于最简单的设置，您可以在 Studio UI 中创建 EMR Serverless 应用程序，无需更改 **虚拟私有云（VPC）**选项的任何默认设置。这样就可以在域 VPC 中创建应用程序，而无需任何网络配置。在这种情况下，您可以跳过下面的网络设置步骤。

1. 查看 [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md) 中的联网和安全要求。具体来说，请确保您：
   + 在 Studio 账户和 EMR Serverless 账户之间建立 VPC 对等连接。
   + 在两个账户的专用子网路由表中添加路由。
   + 设置连接到 Studio 域的安全组，以允许出站流量，并配置计划运行 EMR Serverless 应用程序的 VPC 的安全组，以允许来自 Studio 实例安全组的入站 TCP 流量。

1. 要在 EMR Serverless 上访问您的交互式应用程序并在 SageMaker Studio 中运行从 JupyterLab 笔记本提交的工作负载，您必须分配特定的权限和角色。有关必要角色和权限的详细信息，请参阅 [设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker](studio-emr-serverless-permissions.md) 部分。

**Topics**
+ [先决条件](#studio-set-up-emr-serverless-prerequisites)
+ [设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker](studio-emr-serverless-permissions.md)
+ [从 Studio 创建 EMR Serverless 应用程序](create-emr-serverless-application.md)
+ [从 Studio 连接到 EMR Serverless 应用程序](connect-emr-serverless-application.md)
+ [从 Studio UI 停止或删除 EMR Serverless 应用程序](terminate-emr-serverless-application.md)

# 设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker
<a name="studio-emr-serverless-permissions"></a>

在本节中，我们将详细介绍从 SageMaker Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限，同时考虑了 Studio 和 EMR Serverless 应用程序部署在同一个 AWS 账户中或跨不同账户的情况。

必须向其添加必要权限的角色取决于 Studio 和您的 EMR Serverless 应用程序是位于同一个 AWS 账户（*单一账户*）还是位于不同的账户（*跨*账户）中。其中涉及两类角色：
+ 执行角色：
  + EMR Serverless 使用的@@ [运行时执行角色](https://docs.aws.amazon.com/http://emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults-executionRoleArn)（基于角色的访问控制角色）：这些是 EMR Serverless 任务执行环境使用的 IAM 角色，用于访问运行时所需的 AWS 其他服务和资源，例如 Amazon S3，用于访问数据、记录 CloudWatch 、访问数据目录或其他基于您的工作负载要求的服务。 AWS Glue 我们建议在运行 EMR Serverless 应用程序的账户中创建这些角色。

    要了解有关运行时角色的更多信息，请参阅《EMR Serverless 用户指南》**中的[作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。
**注意**  
您可以为 EMR Serverless 应用程序定义多个 RBAC 角色。这些角色可以根据组织内不同用户或组别所需的职责和访问级别来确定。有关 RBAC 权限的更多信息，请参阅 [Amazon EMR Serverless 的安全最佳实践](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-best-practices.html#security-practice-rbac)。
  + SageMaker AI 执行角色：该执行角色允许 SageMaker AI 执行某些任务，例如从 Amazon S3 存储桶读取数据 CloudWatch、向其中写入日志以及访问您的工作流程可能需要的其他 AWS 服务。 SageMaker AI 执行角色还具有名为的特殊权限`iam:PassRole`，允许 SageMaker AI 将临时运行时执行角色传递给 EMR Serverless 应用程序。这些角色为 EMR Serverless 应用程序提供了在运行时与其他 AWS 资源进行交互所需的权限。
+ 可假设角色（也称为*服务访问角色*）：
  + 这些是 A SageMaker I 的执行角色可以代入的 IAM 角色，用于执行与管理 EMR 无服务器应用程序相关的操作。这些角色定义了列出、连接或管理 EMR Serverless 应用程序时所需的权限和访问策略。它们通常用于跨账户场景，其中 EMR Serverless 应用程序位于与 AI 域 AWS 不同的 SageMaker 账户中。为您的 EMR Serverless 应用程序设置专用 IAM 角色有助于遵循最低权限原则，并确保 Amazon EMR 仅拥有运行任务所需的权限，同时保护您账户中的其他资源。 AWS 

通过正确理解和配置这些角色，您可以确保 SageMaker Studio 拥有与 EMR Serverless 应用程序进行交互的必要权限，无论这些应用程序是在同一个账户中部署还是部署在不同的账户中。

## 单一账户
<a name="studio-set-up-emr-serverless-permissions-singleaccount"></a>

下图说明了当 Studio 和应用程序部署在同一个账户中时，从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS 

![\[该图显示了当 Studio 和应用程序位于同一个账户中时，从 Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限。 AWS\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-singleaccount.png)


如果您的 Amazon EMR 应用程序和 Studio 部署在同一个 AWS 账户中，请按照以下步骤操作：

1. **步骤 1**：在 [Amazon S3 管理控制台](https://console.aws.amazon.com/S3)中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。

   要了解如何通过名称查找存储桶，请参阅[访问并列出 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。有关如何创建 Amazon S3 存储桶的信息，请参阅[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. **步骤 2**：在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色（上文*单一账户*使用场景图中的 `EMRServerlessRuntimeExecutionRoleA`）。选择**自定义信任策略**作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限，以及对 AWS Glue 数据目录的创建和读取权限。

   有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明，请按照以下步骤操作：

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

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 添加运行时角色所需的权限，命名策略，然后选择 **创建策略**。

      您可以参考 [EMR Serverless 的作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)查找 EMR Serverless 运行时角色的运行时策略示例。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 在**添加权限**页面上，添加创建的策略，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `EMRServerlessAppRuntimeRoleA`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有了这些角色，您和您的队友就可以连接到同一个应用程序，每个人都可以使用一个运行时角色，该角色的权限与您访问数据的个人级别相匹配。
**注意**  
Spark 会话的运作方式不同。Spark 会话根据 Studio 使用的执行角色进行隔离，因此不同执行角色的用户将拥有单独、隔离的 Spark 会话。此外，如果启用了域的源身份，还可以进一步隔离不同源身份的 Spark 会话。

1. **步骤 3**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)
**注意**  
 或者，不熟悉 SageMaker AI 的用户可以通过自动创建具有适当权限的新 A SageMaker I 执行角色来简化设置过程。在这种情况下，跳过步骤 3 和 4。相反，用户可以：  
在 [ SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker)左侧导航栏的 “域” 菜单中创建新**域**时，选择 “为**组织设置**” 选项。
从管理控制台的**角色管理器**菜单创建新的执行角色，然后将该角色附加到现有的域或用户配置文件。
创建角色时，在**用户将执行哪些 ML 活动？**中选择**运行 Studio EMR Serverless Applications** 选项。然后，提供 Amazon S3 存储桶的名称，以及您希望 EMR Serverless 应用程序使用的作业运行时执行角色（步骤 2）。  
 SageMaker 角色管理器会自动将运行和连接 EMR Serverless 应用程序所需的权限添加到新的执行角色中。使用[SageMaker 角色管理器]()，您只能为 EMR Serverless 应用程序分配一个运行时角色，并且该应用程序必须使用在部署 Studio 的同一帐户中运行，使用在同一帐户中创建的运行时角色。

1. **步骤 4**：将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。

   1. 使用 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 打开 IAM 控制台。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 标签中，添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 策略*。用实际值替换 *region*、*accountID* 和通过的 *EMRServerlessAppRuntimeRole* ，然后将语句列表复制到角色的内联策略中。
**注意**  
您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串，并用逗号分隔。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 重复**创建内联策略**步骤，添加另一个内联策略，授予角色更新域、用户配置文件和空间的权限。有关 `SageMakerUpdateResourcesPolicy` 策略文档的详情，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 *region* 和 *accountID*，然后将语句列表复制到角色的内联策略中。

1. **步骤 5**：

   将运行时角色列表与您的用户个人资料或域相关联，这样您就可以直观地浏览角色列表并选择在[连接到 EMR Serverless 应用程序时要](connect-emr-serverless-application.md)使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后，从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
**重要**  
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。

------
#### [ SageMaker AI console ]

   要使用 SageMaker AI 控制台将运行时角色与您的用户个人资料或域关联起来，请执行以下操作：

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

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将运行时角色添加到您的域中：在**域名详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的运行时角色添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 “**编辑”**，然后添加您的 ARNs EMR Serverless 运行时执行角色。

   1. 选择**提交**。

   下次通过连接到 EMR Serverless 应用程序时 JupyterLab，运行时角色应出现在下拉菜单中供选择。

------
#### [ Python script ]

   在使用已更新权限的 SageMaker AI 执行角色从私有空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`studio-accountID` 和 `EMRServerlessRuntimeExecutionRole`。此代码片段更新特定用户配置文件 (`client.update_user_profile`) 的用户配置文件设置或域设置 (`client.update_domain`)，特别是关联您之前创建的 EMR Serverless 运行时执行角色。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'ExecutionRoleArns': ["arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleAA"]
           }
           
       }
   })
   resp = client.describe_domain(DomainId="domainID")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

## 跨账户
<a name="studio-set-up-emr-serverless-permissions-crossaccount"></a>

下图说明了当 Studio 和应用程序部署在不同的账户中时，从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS 

![\[该图显示了当 Studio 和应用程序属于不同账户时，从 Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限。 AWS\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-crossaccount.png)


有关在 AWS 账户上创建角色的更多信息，请参阅[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)创建 IAM 角色（控制台）。

在您开始使用之前：
+ 检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)
+ 在 [Amazon S3 管理控制台](https://console.aws.amazon.com/S3)中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。

  有关如何创建 Amazon S3 存储桶的信息，请参阅[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。要了解如何通过名称查找存储桶，请参阅[访问并列出 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。

如果 EMR Serverless 应用程序和 Studio 分别部署在不同的 AWS 账户中，则需要对这两个账户的权限进行配置。

### 在 EMR Serverless 账户上
<a name="studio-set-up-emr-serverless-permissions-crossaccount-emraccount"></a>

请按照以下步骤在运行 EMR Serverless 应用程序的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色（上文*跨账户*图中的 `EMRServerlessRuntimeExecutionRoleB`）。选择**自定义信任策略**作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限，以及对 AWS Glue 数据目录的创建和读取权限。

   有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明，请按照以下步骤操作：

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

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 添加运行时角色所需的权限，命名策略，然后选择**创建策略**。

      有关 EMR Serverless 运行时角色的运行时策略示例，请参阅 [Amazon EMR Serverless 的作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 在**添加权限**页面上，添加创建的策略，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `EMRServerlessAppRuntimeRoleB`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有了这些角色，您和您的队友就可以连接到同一个应用程序，每个人都可以使用一个运行时角色，该角色的权限与您访问数据的个人级别相匹配。
**注意**  
Spark 会话根据 Studio 中使用的执行角色进行隔离，因此不同执行角色的用户将拥有独立、隔离的 Spark 会话。此外，如果启用了域的源身份，还可以进一步隔离不同源身份的 Spark 会话。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限（Amazon EMR Serverless 策略），以允许访问 EMR Serverless 资源。该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，允许需要访问的 Studio 帐户承担执行角色（跨帐户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 可以临时访问 EMR Serverless 账户所需的权限。

   有关如何在 EMR Serverless 账户`AssumableRole`中创建新 AWS 账户的详细说明，请按照以下步骤操作：

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

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 标签中，添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 策略*。用实际值替换 `region`、`accountID` 和通过的 `EMRServerlessAppRuntimeRole` ，然后将语句列表复制到角色的内联策略中。
**注意**  
这里的 `EMRServerlessAppRuntimeRole` 是在步骤 1 中创建的作业运行时执行角色（即上文*跨账户*图中的 `EMRServerlessAppRuntimeRoleB`）。您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串，并用逗号分隔。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab 空间使用的执行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 在**添加权限**页面中，添加在步骤 2 中创建的权限 `EMRServerlessAppRuntimeRoleB`，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

### Studio 账户
<a name="studio-set-up-emr-serverless-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的账户（也称为*可信账户*）上，更新访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。

   1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关 `SageMakerUpdateResourcesPolicy` 策略文档的详情，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。

      将 `emr-account` 替换为 Amazon EMR Serverless 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR Serverless 帐户中创建的可承担角色的名称。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": {
              "Sid": "AllowSTSToAssumeAssumableRole",
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Resource": "arn:aws:iam::111122223333:role/AssumableRole"
          }
      }
      ```

------

1. **步骤 3**：

   将运行时角色列表与您的域或用户配置文件相关联，这样您就可以直观地浏览角色列表并选择在[连接到 EMR Serverless 应用程序时要](connect-emr-serverless-application.md)使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后，从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
**重要**  
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。

------
#### [ SageMaker AI console ]

   要使用 SageMaker AI 控制台将运行时角色与您的用户个人资料或域关联起来，请执行以下操作：

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

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将运行时角色添加到您的域中：在**域名详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的运行时角色添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**，然后添加您的假设角色和 EMR Serverless 运行时执行 ARNs角色。

   1. 选择**提交**。

   下次通过连接到 EMR Serverless 应用程序时 JupyterLab，运行时角色应出现在下拉菜单中供选择。

------
#### [ Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从私有空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`studio-accountID` 和 `EMRServerlessRuntimeExecutionRole`。此代码段更新了 SageMaker AI 域中特定用户配置文件 (`client.update_user_profile`) 或网域设置 (`client.update_domain`) 的用户配置文件设置。具体来说，它会为您之前创建的 Amazon EMR Serverless 设置运行时执行角色。它还允许 JupyterLab 应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在 Amazon EMR 账户中运行 EMR 无服务器应用程序。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::emr-accountID:role/AnotherRuntimeExecutionRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

## 参考策略
<a name="studio-set-up-emr-serverless-permissions-reference"></a>
+ **EMR Serverless 策略**：此策略允许管理 EMR Serverless 应用程序，包括列出、创建（使用所需的 SageMaker AI 标签）、启动、停止、获取详细信息、删除、访问 Livy 端点和获取任务运行仪表板。它还允许将所需的 EMR Serverless 应用程序运行时角色传递给服务。
  + `EMRServerlessListApplications`：允许对指定区域和账户中的所有 EMR Serverless 资源执行 ListApplications 操作。 AWS 
  + `EMRServerlessPassRole`：允许在提供的 AWS 账户中传递指定的运行时角色，但仅当角色被传递给时`emr-serverless.amazonaws.com service`。
  + `EMRServerlessCreateApplicationAction`：允许对指定区域和账户中的 EMR Serverless 资源 TagResource 执行 CreateApplication 和操作。 AWS 不过，它要求创建或标记的资源必须具有非空值的特定标签密钥（`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`）。
  + `EMRServerlessDenyTaggingAction`：如果资源未设置任何指定的标签键（`sagemaker:domain-arn`、和），则对指定区域和 AWS 账户中的 EMR Serverless 资源执行和`sagemaker:space-arn`操作。 TagResource UntagResource `sagemaker:user-profile-arn`
  + `EMRServerlessActions`：允许对 EMR Serverless 资源执行各种操作（`StartApplication`、`StopApplication`、`GetApplication`、`DeleteApplication`、`AccessLivyEndpoints` 和 `GetDashboardForJobRun`），但前提是资源的指定标签密钥（`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`）设置为非空值。

  提供的 JSON 文档中定义的 IAM 策略授予了这些权限，但限制了对 EMR 无服务器应用程序上存在的特定 SageMaker AI 标签的访问权限，以确保只能管理与特定 A SageMaker I 域、用户个人资料和空间关联的 Amazon EMR 无服务器资源。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "EMRServerlessListApplications",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:ListApplications"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*"
          },
          {
              "Sid": "EMRServerlessPassRole",
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/EMRServerlessAppRuntimeRole",
              "Condition": {
                  "StringLike": {
                      "iam:PassedToService": "emr-serverless.amazonaws.com"
                  }
              }
          },
          {
              "Sid": "EMRServerlessCreateApplicationAction",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:CreateApplication",
                  "emr-serverless:TagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "ForAllValues:StringEquals": {
                      "aws:TagKeys": [
                          "sagemaker:domain-arn",
                          "sagemaker:user-profile-arn",
                          "sagemaker:space-arn"
                      ]
                  },
                  "Null": {
                      "aws:RequestTag/sagemaker:domain-arn": "false",
                      "aws:RequestTag/sagemaker:user-profile-arn": "false",
                      "aws:RequestTag/sagemaker:space-arn": "false"
                  }
              }
          },
          {
              "Sid": "EMRServerlessDenyTaggingAction",
              "Effect": "Deny",
              "Action": [
                  "emr-serverless:TagResource",
                  "emr-serverless:UntagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "true",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "true",
                      "aws:ResourceTag/sagemaker:space-arn": "true"
                  }
              }
          },
          {
              "Sid": "EMRServerlessActions",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:StartApplication",
                  "emr-serverless:StopApplication",
                  "emr-serverless:GetApplication",
                  "emr-serverless:DeleteApplication",
                  "emr-serverless:AccessLivyEndpoints",
                  "emr-serverless:GetDashboardForJobRun"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "false",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "false",
                      "aws:ResourceTag/sagemaker:space-arn": "false"
                  }
              }
          }
      ]
  }
  ```

------
+ **域、用户配置文件和空间更新操作策略**：以下策略授予在指定区域和 AWS 账户内更新 SageMaker AI 域、用户配置文件和空间的权限。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# 从 Studio 创建 EMR Serverless 应用程序
<a name="create-emr-serverless-application"></a>

数据科学家和数据工程师可以直接从 Studio 用户界面创建 EMR Serverless 应用程序。开始之前，请确保已按照 [设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker](studio-emr-serverless-permissions.md) 部分所述配置了必要的权限。这些权限赋予 Studio 创建、启动、查看、访问和终止应用程序的能力。

从 Studio 创建 EMR Serverless 应用程序

1. 在 Studio UI 中，导航至左侧面板，然后选择左侧导航菜单中的**数据**节点。然后，滚动并选择 **Amazon EMR 应用程序和集群**选项。这会打开一个页面上，在**无服务器应用程序**选项卡下显示您可以在 Studio 环境中访问的 Amazon EMR 应用程序。

1. 选择右上角的**创建无服务器应用程序**按钮。这会打开一个**创建应用程序**页面上，该页面与在**应用程序设置选项**中选择**使用自定义设置**时在 [EMR Serverless 管理控制台](https://console.aws.amazon.com/emrserverless)中看到的视图相似。

1. 为应用程序提供必要的详细信息，包括名称和希望设置的任何特定可配置参数，然后选择**创建应用程序**。  
![\[从 Studio 创建 EMR Serverless 应用程序的形式。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-create-app.png)

   所有配置设置都有默认值，可自行修改。有关每个可用参数的详细信息，请参阅 EMR Serverless 用户指南中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/application-capacity.html)。
**注意**  
在 Studio UI 中创建应用程序的过程中，您可以选择**创建应用程序**或**创建并启动应用程序**。根据您的选择，应用程序将分别进入 `Creating` 或 `Starting` 状态。  
如果选择创建应用程序而不立即启动，请确保**提交任务时自动启动应用程序**选项保持选中状态。这将确保以后提交作业在应用程序上运行时，应用程序会自动过渡到 `Starting` 状态。
对于最简单的设置，我们建议将**网络连接**部分下的**虚拟私有云（VPC）**选项设置为默认值**与 VPC 中的资源无网络连接**。这样就可以在域 VPC 中创建应用程序，而不需要任何额外的网络配置。  
 在任何其他情况下，请确保执行以下步骤：  
与你同行 VPCs。
在专用子网路由表中添加路由。
按照 [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md) 中的详细说明配置安全组。
除了默认的**无网络连接**选项外，这还能确保为应用程序进行正确的网络设置。
对于从 Studio Classic UI 创建的应用程序，会自动应用以下配置：  
已启用的 Apache Livy 端点。
应用程序的标记如下：  
sagemaker：user-profile-arn
sagemaker:domain-arn
sagemaker:space-arn
如果您在 Studio 之外创建应用程序，请确保手动启用 Apache Livy 端点，并将同一组标签应用于应用程序。

创建应用程序后，Studio Classic UI 会显示*应用程序已成功创建*消息，新应用程序会出现在**无服务器应用程序**列表中。

要连接到 EMR Serverless 应用程序，请参阅 [从 Studio 连接到 EMR Serverless 应用程序](connect-emr-serverless-application.md)

# 从 Studio 连接到 EMR Serverless 应用程序
<a name="connect-emr-serverless-application"></a>

数据科学家和数据工程师可以直接从 Studio 用户界面发现并连接到 EMR Serverless 应用程序。在开始之前，请确保已按照 [从 Studio 创建 EMR Serverless 应用程序](create-emr-serverless-application.md) 中的说明创建了 EMR Serverless 应用程序。

您可以直接从 Studio 用户界面将 EMR Serverless 应用程序连接到新的 JupyterLab 笔记本电脑，也可以选择在正在运行的应用程序的笔记本中启动连接。 JupyterLab 

**重要**  
使用 Studio 时，对于从私有空间启动的应用程序，您只能发现并连接到 EMR Serverless JupyterLab 应用程序。确保 EMR 无服务器应用程序与您的 Studio 环境位于同一 AWS 区域。您的 JupyterLab 空间必须使用 SageMaker 分发图片版本`1.10`或更高版本。

**要从 Studio 用户界面将 EMR 无服务器应用程序连接到新 JupyterLab 笔记本电脑，请执行以下操作：**

1. 在 Studio UI 中，导航至左侧面板，然后选择左侧导航菜单中的**数据**节点。然后，滚动并选择 **Amazon EMR 应用程序和集群**选项。这会打开一个页面上，在**无服务器应用程序**选项卡下显示您可以在 Studio 环境中访问的 Amazon EMR 应用程序。
**注意**  
如果您或您的管理员配置了允许跨账户访问 EMR Serverless 应用程序的权限，您就可以查看已授权访问 Studio 的所有账户的应用程序综合列表。

1. 选择要连接到新笔记本的 EMR Serverless 应用程序，然后选择**附加到笔记本**。这将打开一个显示 JupyterLab 空间列表的模态窗口。

1. 
   + 选择要从中启动 JupyterLab应用程序的专用空间，然后选择 “**打开笔记本**”。这将从您选择的空间启动 JupyterLab 应用程序并打开一个新的笔记本。
   + 或者，您也可以选择模式窗口顶部的**创建新空间**按钮，创建一个新的专用空间。输入空间名称，然后选择**创建空间并打开笔记本**。这将创建一个具有默认实例类型和最新 SageMaker 发行映像的私有空间，启动 JupyterLab 应用程序并打开新的笔记本。

1. 选择 EMR Serverless 应用程序在运行作业时可以承担的 IAM 运行时执行角色的名称。选择后，连接命令会弹出笔记本的第一个单元格，并启动与 EMR Serverless 应用程序的连接。
**重要**  
要成功将 JupyterLab 笔记本连接到 EMR Serverless 应用程序，必须先将运行时角色列表与您的域或用户配置文件相关联，如中所述。[设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker](studio-emr-serverless-permissions.md)未完成此步骤将无法建立连接。

   连接成功后，会有一条消息确认连接，启动 EMR Serverless 应用程序，并启动 Spark 会话。
**注意**  
连接到 EMR Serverless 应用程序时，其状态会从 `Stopped` 或 `Created` 过渡到 `Started`。

**或者，您可以从 JupyterLab 笔记本连接到集群。**

1. 选择笔记本右上方的**集群**按钮。这会打开一个模式窗口，列出您可以访问的 EMR Serverless 应用程序。您可以在**无服务器应用程序**选项卡中看到这些应用程序。

1. 选择要连接的应用程序，然后选择**连接**。

1. EMR Serverless 支持运行时 IAM 角色，这些角色在设置 [设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker](studio-emr-serverless-permissions.md) 中概述的所需权限时已预先加载。未完成此步骤将无法建立连接。

   您可以从 **Amazon EMR 执行角色**下拉菜单中选择您的角色。连接到 EMR Serverless 时，Studio 会在笔记本的活动单元格中添加一个代码块，以建立连接。

1. 活动单元填充并运行。该单元包含连接神奇命令，用于将笔记本连接到应用程序。

   连接成功后会显示一条消息，确认连接以及 Spark 应用程序的启动。您可以开始向 EMR Serverless 应用程序提交数据处理作业。

# 从 Studio UI 停止或删除 EMR Serverless 应用程序
<a name="terminate-emr-serverless-application"></a>

您可以从 Studio UI 的应用程序列表中停止（过渡到 `Stopped` 状态）或删除（过渡到 `Deleted` 状态）EMR Serverless 应用程序。

**要停止或删除应用程序，请导航至可用的 EMR Serverless 应用程序列表。**

1. 在 Studio UI 中，导航至左侧面板，然后选择左侧导航菜单中的**数据**节点。然后，滚动并选择 **Amazon EMR 应用程序和集群**选项。这会打开一个页面上，在**无服务器应用程序**选项卡下显示您可以在 Studio 环境中访问的 Amazon EMR 应用程序。

1. 选择要停止或删除的应用程序名称，然后选择相应的**停止**或**删除**按钮。

1. 确认信息会通知您，任何待处理的任务都将永久丢失。

# 使用 Amazon EMR 准备数据
<a name="studio-notebooks-emr-cluster"></a>

**重要**  
Amazon SageMaker Studio 和 Amazon SageMaker Studio Classic 是你可以用来与 SageMaker AI 交互的两个机器学习环境。  
如果您的域是在 2023 年 11 月 30 日之后创建的，Studio 就是您的默认体验。  
如果您的域名是在 2023 年 11 月 30 日之前创建的，那么亚马逊 SageMaker Studio 经典版是您的默认体验。如果您的默认体验是亚马逊 SageMaker Studio 经典版，则要使用 Studio，请参阅[从亚马逊 SageMaker Studio 经典版迁移](studio-updated-migrate.md)。  
当您从 Amazon SageMaker Studio Classic 迁移到 Amazon SageMaker Studio 时，功能可用性不会受到任何损失。Studio Classic 还作为应用程序存在于 Amazon SageMaker Studio 中，可帮助您运行传统的机器学习工作流程。

Amazon SageMaker Studio 和 Studio Classic 内置了与[亚马逊 EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 的集成。[https://aws.amazon.com/emr/features/hive](https://aws.amazon.com/emr/features/hive)只需点击一下，他们就可以访问 Spark UI，监控 Spark 作业的状态和指标，而无需离开笔记本。

管理员可以创建 [CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)来定义 Amazon EMR 集群。然后，他们就可以在 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/userguide/end-user-console.html) 中提供这些集群模板，供 Studio 和 Studio Classic 用户启动。然后，数据科学家可以选择一个预定义模板，直接从他们的 Studio 环境中自行配置 Amazon EMR 集群。管理员可以进一步对模板进行参数化，让用户在预定义值范围内选择集群的各个方面。例如，用户可能希望指定核心节点的数量，或从下拉菜单中选择节点的实例类型。

管理员可以使用来 CloudFormation控制 Amazon EMR 集群的组织、安全和联网设置。然后，数据科学家和数据工程师可以根据自己的工作负载定制这些模板，直接从 Studio 和 Studio Classic 创建按需 Amazon EMR 集群，而无需设置复杂的配置。用户可以在使用后终止 Amazon EMR 集群。
+ **如果您是管理员**：

  确保已启用 Studio 或 Studio Classic 与 Amazon EMR 集群之间的通信。有关说明，请参阅[为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md)部分。启用此通信后，您可以：
  + [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)
  + [配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)
+ **如果您是数据科学家或数据工程师**，您就可以：
  + [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md)
  + [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)
  + [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)
  + [从 Studio 或 Studio Classic 终止 Amazon EMR 集群](terminate-emr-clusters.md)
  + [从 Studio 或 Studio Classic 访问 Spark UI](studio-notebooks-access-spark-ui.md)

**Topics**
+ [快速入门：创建 A SageMaker I 沙盒域以在 Studio 中启动 Amazon EMR 集群](studio-notebooks-emr-cluster-quickstart.md)
+ [管理员指南](studio-emr-admin-guide.md)
+ [用户指南](studio-emr-user-guide.md)
+ [博客和白皮书](studio-notebooks-emr-resources.md)
+ [问题排查](studio-notebooks-emr-troubleshooting.md)

# 快速入门：创建 A SageMaker I 沙盒域以在 Studio 中启动 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart"></a>

本节将引导您完成在 Amazon SageMaker Studio 中快速设置完整测试环境的过程。您将创建一个新的 Studio 域，让用户可以直接从 Studio 启动新的 Amazon EMR 集群。该步骤提供了一个笔记本示例，您可以连接到 Amazon EMR 集群，开始运行 Spark 工作负载。使用此笔记本，您将使用 Amazon EMR Spark 分布式处理 OpenSearch 和矢量数据库构建检索增强生成系统 (RAG)。

**注意**  
要开始使用，请使用具有管理员权限的 AWS Identity and Access Management (IAM) 用户账户登录 AWS 管理控制台。有关如何注册 AWS 账户并创建具有管理权限的用户的信息，请参阅 [完成 Amazon A SageMaker I 先决条件](gs-set-up.md)。

**设置 Studio 测试环境并开始运行 Spark 作业：**
+ [第 1 步：创建用于在 Studio 中启动亚马逊 EMR 集群的 A SageMaker I 域](#studio-notebooks-emr-cluster-quickstart-setup)
+ [步骤 2：从 Studio UI 启动新的 Amazon EMR 集群](#studio-notebooks-emr-cluster-quickstart-launch)
+ [步骤 3：将 JupyterLab 笔记本电脑连接到 Amazon EMR 集群](#studio-notebooks-emr-cluster-quickstart-connect)
+ [第 4 步：清理 CloudFormation 堆栈](#studio-notebooks-emr-cluster-quickstart-clean-stack)

## 第 1 步：创建用于在 Studio 中启动亚马逊 EMR 集群的 A SageMaker I 域
<a name="studio-notebooks-emr-cluster-quickstart-setup"></a>

在以下步骤中，您将应用 CloudFormation 堆栈来自动创建新的 SageMaker AI 域。堆栈还会创建用户配置文件，并配置所需的环境和权限。 SageMaker AI 域配置为允许您直接从 Studio 启动亚马逊 EMR 集群。在本示例中，Amazon EMR 集群是在与 A SageMaker I 相同的 AWS 账户中创建的，无需身份验证。[你可以在 getting\$1start CloudFormation ing\$1started 存储库中找到支持各种身份验证方法的其他堆栈，比如 Kerberos。](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub 

**注意**  
SageMaker 默认情况下，AI 允许每个 AWS 账户使用 5 个 Studio 域名。 AWS 区域 在创建堆栈之前，请确保您的账户在您所在区域的域数不超过 4 个。

**按照以下步骤设置用于从 Studio 启动亚马逊 EMR 集群的 Amazon EMR 集群的 A SageMaker I 域。**

1. 从`sagemaker-studio-emr` GitHub存储库下载此[CloudFormation 模板](https://github.com/aws-samples/sagemaker-studio-foundation-models/blob/main/workshop-artifacts/cfn/workshop-cfn.yaml)的原始文件。

1. 进入 CloudFormation 控制台：[https://console.aws.amazon.com/](https://console.aws.amazon.com/cloudformation/)cloudformation

1. 选择**创建堆栈**，并从下拉菜单中选择**使用新资源（标准）**。

1. 在**步骤 1** 中：

   1. 在**准备模板**部分，选择**选择现有模板**。

   1. 在**指定模板**部分，选择**上传模板文件**。

   1. 上传下载的 CloudFormation 模板并选择 “**下一步**”。

1. 在**步骤 2** 中，输入**堆栈名称**，**SageMakerDomainName**然后选择 Ne **xt**。

1. 在**步骤 3** 中，保留所有默认值并选择**下一步**。

1. 在**步骤 4** 中，选中确认资源创建的复选框，然后选择**创建堆栈**。这将在您的账户和区域中创建一个 Studio 域。

## 步骤 2：从 Studio UI 启动新的 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart-launch"></a>

在以下步骤中，您将从 Studio UI 创建一个新的 Amazon EMR 集群。

1. 前往 A SageMaker I 控制台 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)，在左侧菜单中选择**域名**。

1. 点击您的域名**生成器AIDomain**以打开**域名详情**页面。

1. 从用户配置文件 `genai-user` 启动 Studio。

1. 在左侧导航窗格中，转到**数据**然后转到 **Amazon EMR 集群**。

1. 在 Amazon EMR 集群页面上，选择**创建**。**选择堆栈创建的 **SageMaker Studio Domain No Auth EMR** 模板 CloudFormation ，然后选择 “下一步”。**

1. 输入新 Amazon EMR 集群的名称。可选择更新其他参数，如核心节点和主节点的实例类型、空闲超时或核心节点数量。

1. 选择**创建资源**，启动新的 Amazon EMR 集群。

   创建 Amazon EMR 集群后，请查看 **EMR 集群**页面上的状态。当状态更改为 `Running/Waiting` 时，您的 Amazon EMR 集群就可以在 Studio 中使用了。

## 步骤 3：将 JupyterLab 笔记本电脑连接到 Amazon EMR 集群
<a name="studio-notebooks-emr-cluster-quickstart-connect"></a>

在以下步骤中 JupyterLab ，您将笔记本连接到正在运行的 Amazon EMR 集群。在本示例中，您导入了一个笔记本，允许您使用 Amazon EMR Spark 分布式处理 OpenSearch 和矢量数据库构建检索增强生成 (RAG) 系统。

1. 

**启动 JupyterLab**

   在 Studio 中，启动 JupyterLab 应用程序。

1. 

**创建专用空间**

   如果您尚未为 JupyterLab 应用程序创建空间，请选择**创建 JupyterLab 空间**。输入空间名称，并将空间保留为**专用**。将所有其他设置保留为默认值，然后选择**创建空间**。

   否则，请运行您的 JupyterLab 空间来启动 JupyterLab应用程序。

1. 

**部署 LLM 和嵌入模型进行推理**
   + 从顶部菜单中选择**文件**、**新建**，然后选择** 终端**。
   + 在终端运行以下命令。

     ```
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb
     mkdir AWSGuides
     cd AWSGuides
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/AmazonSageMakerDeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/EC2DeveloperGuide.pdf
     wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/AWSGuides/S3DeveloperGuide.pdf
     ```

     这会将 `Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb` 笔记本检索到本地目录，并将三个 PDF 文件下载到本地 `AWSGuides` 文件夹。
   + 打开 `lab-00-setup/Lab_0_Warm_Up_Deploy_EmbeddingModel_Llama2_on_Nvidia.ipynb`，保留 `Python 3 (ipykernel)` 内核，运行每个单元。
**警告**  
在 **Llama 2 权限协议**部分，确保在继续之前接受 Llama2 EULA。  
笔记本在 `ml.g5.2xlarge` 上部署了两个模型 `Llama 2` 和 `all-MiniLM-L6-v2 Models` 进行推理。

     部署模型和创建端点可能需要一些时间。

1. 

**打开主笔记本**

   在中 JupyterLab，打开终端并运行以下命令。

   ```
   cd ..
   wget --no-check-certificate https://raw.githubusercontent.com/aws-samples/sagemaker-studio-foundation-models/main/lab-03-rag/Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb
   ```

   您应该会在的左侧面板中看到额外的`Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb`笔记本电脑 JupyterLab。

1. 

**选择一个 `PySpark` 内核**

   打开 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 笔记本，确保正在使用 `SparkMagic PySpark` 内核。您可以在笔记本右上角切换内核。选择当前内核名称，打开内核选择模式，然后选择 `SparkMagic PySpark`。

1. 

**将笔记本连接到集群**

   1. 在笔记本右上方，选择**集群**。此操作将打开一个模式窗口，列出您有权访问的所有正在运行的集群。

   1. 选择集群，然后选择**连接**。打开一个新的凭证类型选择模式窗口。

   1. 选择**无凭证**，然后选择**连接**。  
![\[该模式显示了为笔记本电脑选择的 Amazon EMR 凭证。 JupyterLab\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-credential-selection.png)

   1. 笔记本单元自动填充并运行。笔记本单元会加载 `sagemaker_studio_analytics_extension.magics` 扩展，提供连接 Amazon EMR 集群的功能。然后，它会使用 `%sm_analytics` 神奇命令启动与 Amazon EMR 集群和 Spark 应用程序的连接。
**注意**  
确保与 Amazon EMR 集群的连接字符串的身份验证类型设置为 `None`。下面示例中的 `--auth-type None` 值就说明了这一点。如有必要，您可以修改该字段。  

      ```
      %load_ext sagemaker_studio_analytics_extension.magics
      %sm_analytics emr connect --verify-certificate False --cluster-id your-cluster-id --auth-type None --language python
      ```

   1. 成功建立连接后，连接单元格输出信息将显示 `SparkSession` 详细信息，包括集群 ID、`YARN` 应用程序 ID 以及指向监控您的 Spark 作业的 Spark UI 的链接。

您可以使用 `Lab_3_RAG_on_SageMaker_Studio_using_EMR.ipynb` 笔记本了。此示例笔记本运行分布式 PySpark 工作负载，用于使用 LangChain 和 OpenSearch构建 RAG 系统。

## 第 4 步：清理 CloudFormation 堆栈
<a name="studio-notebooks-emr-cluster-quickstart-clean-stack"></a>

完成后，确保终止两个端点并删除 CloudFormation 栈，以防继续收费。删除堆栈会清除堆栈供应的所有资源。

**使用完 CloudFormation 堆栈后将其删除**

1. 进入 CloudFormation 控制台：[https://console.aws.amazon.com/](https://console.aws.amazon.com/cloudformation/)cloudformation

1. 选择要删除的堆栈。您可以按名称搜索，或在堆栈列表中查找。

1. 单击**删除**按钮最终删除堆栈，然后再次单击**删除**确认将删除堆栈创建的所有资源。

   等待堆栈删除完成。这可能需要几分钟时间。 CloudFormation 会自动清理堆栈模板中定义的所有资源。

1. 确认堆栈创建的所有资源都已被删除。例如，检查是否有剩余的 Amazon EMR 集群。

**要移除模型的 API 端点**

1. 前往 A SageMaker I 控制台:[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. 在左侧导航窗格中，选择**推理**，然后选择**端点**。

1. 选择端点 `hf-allminil6v2-embedding-ep`，然后在**操作**下拉列表中选择**删除**。对端点 `meta-llama2-7b-chat-tg-ep` 重复上述步骤。

# 管理员指南
<a name="studio-emr-admin-guide"></a>

本节提供了允许 Studio 或 Studio Classic 与 Amazon EMR 集群之间进行通信的前提条件和联网说明。它涵盖了不同的部署场景——当 Studio 和 Amazon EMR 是在 VPCs没有公共互联网访问的私有亚马逊中配置的，以及它们需要通过互联网进行通信时。

它介绍了管理员如何使用 AWS Service Catalog 将 CloudFormation 模板提供给 Studio，从而允许数据科学家直接从 Studio 中发现和自行配置 Amazon EMR 集群。这包括创建服务目录组合、授予必要的权限、引用 Amazon EMR 模板以及设置参数，以便在集群创建过程中进行自定义。

最后，它提供了从 Studio 和 Studio Classic 配置现有运行的 Amazon EMR 集群的可发现性的指导，涵盖单一账户和跨账户访问场景以及必要的 IAM 权限。

**Topics**
+ [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)
+ [配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)
+ [参考策略](studio-set-up-emr-permissions-reference.md)

# 在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板
<a name="studio-notebooks-set-up-emr-templates"></a>

本主题假设管理员熟悉[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) AWS Service Catalog、[中的产品组合和产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)以及 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。

为了简化从 Studio 创建 Amazon EMR 集群的过程，管理员可以将亚马逊 [EMR CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)注册为产品组合中的产品。[AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)要将模板提供给数据科学家，他们必须将产品组合与 Studio 或 Studio Classic 中使用的 SageMaker AI 执行角色相关联。最后，要允许用户从 Studio 或 Studio Classic 发现模板、配置集群并连接到 Amazon EMR 集群，管理员需要设置适当的访问权限。

Amazon EMR CloudFormation 模板允许最终用户自定义集群的各个方面。例如，管理员可以定义已批准的实例类型列表，供用户在创建集群时选择。

以下说明使用 end-to-end[CloudFormation 堆栈](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)来设置 Studio 或 Studio Classic 域名、用户个人资料、Service Catalog 产品组合，以及填充 Amazon EMR 启动模板。以下步骤重点介绍了管理员必须在其 end-to-end堆栈中应用的特定设置，才能让 Studio 或 Studio Classic 访问服务目录产品和配置 Amazon EMR 集群。

**注意**  
 GitHub 存储库 [aws-samples/ sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 包含示例 end-to-end CloudFormation堆栈，用于部署必要的 IAM 角色、网络、 SageMaker 域、用户个人资料、Service Catalog 产品组合，并添加亚马逊 EMR 启动模板。 CloudFormation 这些模板在 Studio 或 Studio Classic 与 Amazon EMR 集群之间提供不同的身份验证选项。在这些示例模板中，父 CloudFormation 堆栈将 SageMaker AI VPC、安全组和子网参数传递给 Amazon EMR 集群模板。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates 存储库包含各种亚马逊 CloudFormation EMR 启动模板](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates)示例，包括用于单账户和跨账户部署的选项。  
有关可用于连接 Amazon EMR 集群的身份验证方法的详细信息，请参阅 [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

要让数据科学家从 Studio 或 Studio Classic 中发现 Amazon EMR CloudFormation 模板并配置集群，请按照以下步骤操作。

## 第 0 步：检查您的网络并准备 CloudFormation 堆栈
<a name="studio-set-up-emr-prereq"></a>

开始之前：
+ 确保已查看 [为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md) 中的联网和安全要求。
+ 您必须有一个支持您选择的身份验证方法的现有 end-to-end CloudFormation 堆栈。您可以在 [aws-sam sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub p CloudFormation les/ 存储库中找到此类模板的示例。以下步骤重点介绍了 end-to-end堆栈中的特定配置，以允许在 Studio 或 Studio Classic 中使用 Amazon EMR 模板。

## 步骤 1：将你的 Service Catalog 产品组合与 SageMaker AI 关联起来
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**在您的 Service Catalog** 产品组合中，将您的产品组合 ID 与访问您的集群的 SageMaker AI 执行角色相关联。

为此，请在堆栈中添加以下部分（此处为 YAML 格式）。这授予 SageMaker AI 执行角色访问包含亚马逊 EMR 模板等产品的指定 Service Catalog 产品组合的权限。它允许 SageMaker AI 扮演的角色发布这些产品。

 *SageMakerStudioEMRProductPortfolio.ID*用它们的实际值替换*SageMakerExecutionRole.Arn*和。

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

有关所需的 IAM 权限集的详细信息，请参阅[权限](#studio-emr-permissions)部分。

## 步骤 2：在服务目录产品中引用 Amazon EMR 模板
<a name="studio-set-up-emr-service-catalog-product"></a>

**在产品组合的服务目录产品**中，引用 Amazon EMR 模板资源并确保其在 Studio 或 Studio Classic 中可见。

为此，请在服务目录产品定义中引用 Amazon EMR 模板资源，然后添加以下设置为 `"true"` 值的标签键 `"sagemaker:studio-visibility:emr"`（请参阅 YAML 格式的示例）。

在 Service Catalog 产品定义中，集群的 CloudFormation 模板是通过 URL 引用的。将附加标记设置为 true 可确保 Amazon EMR 模板在 Studio 或 Studio Classic 中的可见性。

**注意**  
示例中提供的 URL 所引用的 Amazon EMR 模板在启动时不会强制执行任何身份验证要求。该选项用于演示和学习。不建议在生产环境中使用。

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 第 3 步：参数化 Amazon EMR 模板 CloudFormation
<a name="studio-set-up-emr-cfn-template"></a>

**用于在 Service Catalog 产品中定义 Amazon EMR 集群的 CloudFormation 模板**允许管理员指定可配置的参数。管理员可在模板的 `Parameters` 部分为这些参数定义 `Default` 值和 `AllowedValues` 范围。在集群启动过程中，数据科学家可以提供自定义输入或从这些预定义选项中进行选择，以自定义其 Amazon EMR 集群的某些方面。

以下示例说明了管理员在创建 Amazon EMR 模板时可以设置的其他输入参数。

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

管理员在 Studio 中提供 Amazon EMR CloudFormation 模板后，数据科学家可以使用这些模板自行配置 Amazon EMR 集群。模板中定义的 `Parameters` 部分将转化为 Studio 或 Studio Classic 中集群创建表单上的输入字段。对于每个参数，数据科学家既可以在输入框中输入自定义值，也可以从下拉菜单中列出的预定义选项中进行选择，这些选项与模板中指定的 `AllowedValues` 相对应。

下图显示了根据 CloudFormation亚马逊 EMR 模板组装而成的动态表单，用于在 Studio 或 Studio Classic 中创建亚马逊 EMR 集群。

![\[从 CloudFormation 亚马逊 EMR 模板组装而成的动态表单的插图，用于从 Studio 或 Studio Classic 创建亚马逊 EMR 集群。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


访问 [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md) 了解如何使用这些 Amazon EMR 模板从 Studio 或 Studio Classic 启动集群。

## 步骤 4：设置权限以启用从 Studio 列出和启动 Amazon EMR 集群
<a name="studio-emr-permissions"></a>

最后，附加所需的 IAM 权限，以启用从 Studio 或 Studio Classic 列出现有正在运行的 Amazon EMR 集群和自配置新集群。

您必须添加这些权限的角色取决于 Studio 或 Studio Classic 和 Amazon EMR 是部署在同一账户（选择*单账户*）还是不同账户（选择*跨账户*）中。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

### 单一账户
<a name="studio-set-up-emr-permissions-singleaccount"></a>

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中，请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

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

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

### 跨账户
<a name="studio-set-up-emr-permissions-crossaccount"></a>

在开始之前，请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在不同的 AWS 账户中，则需要为两个账户配置权限。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

#### 在 Amazon EMR 集群账户上
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

请按照以下步骤在部署 Amazon EMR 的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

   有关如何在您的 Amazon EMR AWS 账户`AssumableRole`中创建新账户的详细说明，请按照以下步骤操作：

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

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab空间使用的执行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      将 `studio-account` 替换为 Studio Classic 帐户 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

#### Studio 账户
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的账户（也称为*可信账户*）上，更新访问集群的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

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

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。将 `emr-account` 替换为 Amazon EMR 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 CloudFormation 模板配置新 Amazon EMR 集群的权限。有关政策文档的详细信息，请参阅中的*创建 Amazon EMRclusters 政策*[参考策略](studio-set-up-emr-permissions-reference.md)。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 3**：将您的假设角色（访问角色）与您的域名或用户个人资料相关联。 JupyterLab Studio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来，请执行以下操作：

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

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将您的假设角色（访问角色）添加到您的域中：在域名**详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的假设角色（访问角色）添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**， ARNs 然后添加您的假设角色（访问角色）。

   1. 选择**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole`（[RBAC 运行时角色]()的 `EMRServiceRole`）。此代码段更新了 SageMaker AI 域中特定用户配置文件（使用`client.update_userprofile`）或网域设置（使用`client.update_domain`）的用户配置文件设置。具体而言，它允许 JupyterLab 应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   为您的 Studio Classic 执行角色提供 `AssumableRole` 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

   您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    在 LCC 运行并且文件写入之后，服务器读取文件 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 并存储跨账户 ARN。

------

# 配置 Amazon EMR 集群列表
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理员可以为 SageMaker Studio 执行角色配置权限，以授予用户查看他们有权访问的 Amazon EMR 集群列表的能力，从而允许他们连接到这些集群。您要访问的集群可以部署在与 Studio 相同的 AWS 账户中（选择*单一账户*），也可以部署在不同的账户中（选择*跨账户*）。下页介绍如何授予从 Studio 或 Studio Classic 查看 Amazon EMR 集群的权限。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

要让数据科学家发现并 EMRclusters 从 Studio 或 Studio Classic 连接到亚马逊，请按照以下步骤操作。

## 单一账户
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中，请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

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

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

## 跨账户
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

在开始之前，请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

如果 Amazon EMR 集群和 Studio 或 Studio Classic 分别部署在不同的 AWS 账户中，则需要在这两个账户上配置权限。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

**在 Amazon EMR 集群账户上**

请按照以下步骤在部署 Amazon EMR 的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

   通过担任该角色，Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

   有关如何在您的 Amazon EMR AWS 账户`AssumableRole`中创建新账户的详细说明，请按照以下步骤操作：

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

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 在**创建角色**页面上，选择**自定义信任策略**作为受信任实体。

   1. 在**自定义信任策略**部分粘贴以下 JSON 文档，然后选择**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      `studio-account`替换为 Studio 帐户 ID 和`AmazonSageMaker-ExecutionRole`您的 JupyterLab空间使用的执行角色。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      将 `studio-account` 替换为 Studio Classic 帐户 ID。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

**Studio 账户**

在部署 Studio 的账户（也称为*可信账户*）上，更新访问集群的 SageMaker AI 执行角色，使其具有访问信任账户中资源所需的权限。

1. **步骤 1**：检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

1. **步骤 2**：将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

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

   1. 选择**角色**，然后在**搜索**字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分，位于最后一个正斜线 (/) 之后。

   1. 点击链接进入您的角色。

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

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

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。将 `emr-account` 替换为 Amazon EMR 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 3**：将您的假设角色（访问角色）与您的域名或用户个人资料相关联。 JupyterLabStudio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来，请执行以下操作：

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

   1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

   1. 
      + 要将您的假设角色（访问角色）添加到您的域中：在域名**详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
      + 要将您的假设角色（访问角色）添加到您的用户配置文件中：在**域详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

   1. 选择 **“编辑”**， ARNs然后添加您的假设角色（访问角色）。

   1. 选择**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole`（[RBAC 运行时角色]()的 `EMRServiceRole`）。此代码段更新了 SageMaker AI 域中特定用户配置文件（使用`client.update_userprofile`）或网域设置（使用`client.update_domain`）的用户配置文件设置。具体而言，它允许 JupyterLab应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   为您的 Studio Classic 执行角色提供 `AssumableRole` 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

   您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    在 LCC 运行并且文件写入之后，服务器读取文件 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 并存储跨账户 ARN。

------

请参阅 [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)，了解如何从 Studio 或 Studio Classic 笔记本发现和连接 Amazon EMR 集群。

# 在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色
<a name="studio-notebooks-emr-cluster-rbac"></a>

当您从 Studio 或 Studio Classic 笔记本连接到 Amazon EMR 集群时，您可以直观地浏览 IAM 角色（称为运行时角色）列表，并即时选择一个角色。随后，从笔记本创建的所有 Apache Spark、Apache Hive 或 Presto 作业只能访问运行时角色所附策略允许的数据和资源。此外，当从使用管理的数据湖访问数据时 AWS Lake Formation，您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。

有了这项功能，您和您的队友就可以连接到同一个集群，每个人都可以使用一个运行时系统角色，该角色的权限与您访问数据的个人级别相匹配。您的会话在共享集群上也是相互隔离的。

要使用 Studio Classic 试[用此功能，请参阅使用精细的数据访问控制和 AWS Lake Formation Amazon Studio Classic 中的 Amazon SageMaker EMR](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)。本博文将有助于您建立一个演示环境，在该环境中，您可以尝试使用预配置的运行时系统角色来连接 Amazon EMR 集群。

## 先决条件
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

在开始之前，请确保您满足以下先决条件：
+ 使用 Amazon EMR 6.9 或更高版本。
+ **对于 Studio Classic 用户**：使用 Studio Classic Jupyter 服务器应用程序配置中的 JupyterLab 版本 3 该版本支持使用运行时角色将 Studio Classic 连接到 Amazon EMR 集群。

  **对于 Studio 用户**：使用[SageMaker 分发映像](sagemaker-distribution.md)版本`1.10`或更高版本。
+ 允许在集群的安全配置中使用运行时角色。有关更多信息，请参阅[用于 Amazon EMR 步骤的运行时系统角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)。
+ 使用[支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)中列出的任何内核创建笔记本。
+ 请务必查看 [设置 Studio 以使用运行时系统 IAM 角色](#studio-notebooks-emr-cluster-iam) 中的说明，以配置运行时角色。

## 跨账户连接方案
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

当数据位于 Studio 账户之外时，运行时系统角色身份验证支持各种跨账户连接方案。下图显示了在 Studio 和数据账户之间分配 Amazon EMR 集群、数据甚至 Amazon EMR 运行时执行角色的三种不同方式：

![\[运行时系统 IAM 角色身份验证支持的跨账户方案。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


在选项 1 中，您的 Amazon EMR 集群和 Amazon EMR 运行时执行角色位于与 Studio 帐户不同的数据帐户中。您可以定义一个单独的 Amazon EMR 访问角色（也称为 `Assumable role`）权限策略，授予 Studio 或 Studio Classic 执行角色承担 Amazon EMR 访问角色的权限。然后，Amazon EMR 访问角色会代表您的 Studio 或 Studio Classic 执行角色调用 Amazon EMR API `GetClusterSessionCredentials`，让您访问集群。

在选项 2 中，您的 Amazon EMR 集群和 Amazon EMR 运行时执行角色都在您的 Studio 账户中。您的 Studio 执行角色拥有使用 Amazon EMR API `GetClusterSessionCredentials` 访问集群的权限。要访问 Amazon S3 存储桶，请授予 Amazon EMR 运行时执行角色跨账户 Amazon S3 存储桶访问权限，您可以在 Amazon S3 存储桶策略中授予这些权限。

在选项 3 中，您的 Amazon EMR 集群位于您的 Studio 账户中，而 Amazon EMR 运行时执行角色位于数据账户中。您的 Studio 或 Studio Classic 执行角色拥有使用 Amazon EMR API `GetClusterSessionCredentials` 访问集群的权限。将 Amazon EMR 运行时执行角色添加到执行角色配置 JSON 中。然后，您可以在选择集群时在用户界面上选择角色。有关如何设置执行角色配置 JSON 文件的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

## 设置 Studio 以使用运行时系统 IAM 角色
<a name="studio-notebooks-emr-cluster-iam"></a>

要为 Amazon EMR 集群建立运行时系统角色身份验证，请配置所需的 IAM 策略、网络和可用性增强功能。如果您的 Amazon EMR 集群、Amazon EMR 运行时执行角色或两者都位于您的 Studio 账户之外，您的设置取决于您是否处理任何跨账户安排。以下部分将指导您安装策略、如何配置网络以允许跨账户之间的流量，以及如何设置本地配置文件以自动连接 Amazon EMR。

### 当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证
<a name="studio-notebooks-emr-cluster-iam-same"></a>

如果您的 Amazon EMR 集群位于您的 Studio 账户中，请完成以下步骤，为您的 Studio 执行策略添加必要的权限：

1. 添加连接 Amazon EMR 集群所需的 IAM 策略。有关详细信息，请参阅[配置 Amazon EMR 集群列表](studio-notebooks-configure-discoverability-emr-cluster.md)。

1. 当您传递策略中指定的一个或多个允许的 Amazon EMR 运行时执行角色时，授予调用 Amazon EMR API `GetClusterSessionCredentials` 的权限。

1. （可选）授予传递遵循任何用户定义命名约定的 IAM 角色的权限。

1. （可选）授予访问使用特定用户定义字符串标记的 Amazon EMR 集群的权限。

1. 预载 IAM 角色，以便在连接 Amazon EMR 集群时选择要使用的角色。有关如何预加载 IAM 角色的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

以下示例策略允许属于建模组和训练组的 Amazon EMR 运行时执行角色调用 `GetClusterSessionCredentials`。此外，策略持有人可以访问使用字符串 `modeling` 或 `training` 标记的 Amazon EMR 集群。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### 当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

如果您的 Amazon EMR 集群不在您的 Studio 账户中，请允许您的 SageMaker AI 执行角色代入跨账户 Amazon EMR 访问角色，这样您就可以连接到集群。完成以下步骤以设置跨账户配置：

1. 创建您的 SageMaker AI 执行角色权限策略，以便执行角色可以担任 Amazon EMR 访问角色。下面是一个示例策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 创建信任策略以指定可信哪个 Studio 账户 IDs 担任 Amazon EMR 访问角色。下面是一个示例策略：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. 创建 Amazon EMR 访问角色权限策略，授予 Amazon EMR 运行时执行角色在集群中执行预期任务所需的权限。配置 Amazon EMR 访问角色，以便使用访问角色权限策略中指定的 Amazon EMR 运行时执行角色调用 API `GetClusterSessionCredentials`。下面是一个示例策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 设置跨账户网络，使流量可以在账户之间来回移动。有关指导说明，请参阅 *[为 Amazon EMR 集群配置网络访问权限](studio-notebooks-emr-networking.md)设置*。本节中的步骤可帮助您完成以下任务：

   1. VPC 对等 Studio 账户和 Amazon EMR 账户以建立连接。

   1. 在两个账户的私有子网路由表中手动添加路由。这允许从 Studio 账户创建 Amazon EMR 集群并将其连接到远程账户的私有子网。

   1. 设置附加到 Studio 域的安全组以允许出站流量，设置 Amazon EMR 主节点的安全组以允许来自 Studio 实例安全组的入站 TCP 流量。

1. 预加载 IAM 运行时角色，以便在连接到 Amazon EMR 集群时选择要使用的角色。有关如何预加载 IAM 角色的详细信息，请参阅[将执行角色预加载到 Studio 或 Studio Classic 中](#studio-notebooks-emr-cluster-iam-preload)。

### 配置 Lake Formation 访问权限
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

当您访问由管理的数据湖中的数据时 AWS Lake Formation，您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。要配置 Lake Formation 访问权限，请参阅[将 Amazon EMR 与 AWS Lake Formation集成](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)。

### 将执行角色预加载到 Studio 或 Studio Classic 中
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

您可以预加载 IAM 运行时角色，以便在连接到 Amazon EMR 集群时选择要使用的角色。Studio JupyterLab 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

------
#### [ Preload runtime roles in JupyterLab using the SageMaker AI console ]

要使用 SageMaker AI 控制台将运行时角色与您的用户个人资料或域关联起来，请执行以下操作：

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

1. 在左侧导航窗格中，选择**域**，然后使用已更新其权限的 SageMaker AI 执行角色选择域。

1. 
   + 要将您的运行时（以及跨账户用例的访问角色）添加到您的域中：在**域名详细信息**页面的**应用程序配置**选项卡中，导航到该**JupyterLab**部分。
   + 要将您的运行时（以及跨账户用例的访问角色）添加到您的用户个人资料中：在**域名详细信息**页面上，选择**用户配置文件**选项卡，使用您更新其权限的 SageMaker AI 执行角色选择用户个人资料。在 “**应用程序配置**” 选项卡中，导航至该**JupyterLab**部分。

1. 选择 **“编辑”**， ARNs 然后添加您的访问角色（假设角色）和 EMR Serverless 运行时执行角色。

1. 选择**提交**。

下次连接 Amazon EMR 服务器时，运行时角色应出现在下拉菜单中供您选择。

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`emr-accountID` 和 `EMRServiceRole`。此代码片段在跨账户用例中更新 A SageMaker I 域内的用户配置文件设置 (`client.update_user_profile`)。具体来说，它为 Amazon EMR 设置了服务角色。它还允许 JupyterLab 应用程序担任特定 IAM 角色（`AssumableRole`或`AccessRole`），以便在亚马逊 EMR 账户中运行 Amazon EMR。

或者，如果您的空间使用域级别设置的执行角色，请使用 `client.update_domain` 更新域设置。

```
import botocore.session
import json
sess = botocore.session.get_session()
client = sess.create_client('sagemaker')

client.update_user_profile(
DomainId="domainID", 
UserProfileName="user-profile-name",
UserSettings={
    'JupyterLabAppSettings': {
        'EmrSettings': {
            'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
            'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                             "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
        }
        
    }
})
resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")

resp['CreationTime'] = str(resp['CreationTime'])
resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
print(json.dumps(resp, indent=2))
```

------
#### [ Preload runtime roles in Studio Classic ]

向你的 A SageMaker I 执行角色提供 `AccessRole` (`AssumableRole`) 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色，以发现并连接到*信任账户*中的 Amazon EMR 集群。

您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息，请参阅[在 Studio Classic 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

以下为示例 LCC 脚本。要修改脚本，请将 `AssumableRole` 和 `emr-account` 替换为各自的值。跨账户的数量限制为五个。

下面的代码段是一个 LCC bash 脚本示例，如果您的 Studio Classic 应用程序和集群在同一个账户中，您就可以使用该脚本：

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

如果 Studio Classic 应用程序和集群位于不同账户中，请指定可以使用集群的 Amazon EMR 访问角色。在以下示例策略中，*123456789012 是*亚马逊 EMR 集群账户 ID，212121212121 **和** 434343434343 是允许的亚马逊 EMR 访问角色的。 ARNs 

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# 参考策略
<a name="studio-set-up-emr-permissions-reference"></a>
+ **列出 Amazon EMR 策略**：此策略允许执行以下操作：
  + `AllowPresignedUrl`允许生成预签名， URLs 以便从 Studio 中访问 Spark 用户界面。
  + `AllowClusterDiscovery` 和 `AllowClusterDetailsDiscovery` 允许列出和描述所提供区域和账户中的 Amazon EMR 集群。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **创建 Amazon EMR 集群策略**：此策略允许执行以下操作：
  + `AllowEMRTemplateDiscovery` 允许在服务目录中搜索 Amazon EMR 模板。Studio 和 Studio Classic 使用此功能显示可用模板。
  + `AllowSagemakerProjectManagement` 可以创建 [什么是 A SageMaker I 项目？](sagemaker-projects-whatis.md)。在 Studio 或 Studio Classic 中 AWS Service Catalog ，访问权限通过管理[什么是 A SageMaker I 项目？](sagemaker-projects-whatis.md)。

  所提供 JSON 中定义的 IAM 策略会授予这些权限。在将声明列表复制到您角色的内联政策之前，请将和替换*region*为您的实际区域和 AWS 账户 ID 值。*accountID*

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **域、用户配置文件和空间更新操作策略**：以下策略授予在指定区域和 AWS 账户内更新 SageMaker AI 域、用户配置文件和空间的权限。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------

# 用户指南
<a name="studio-emr-user-guide"></a>

本节介绍数据科学家和数据工程师如何从 Studio 或 Studio Classic 启动、发现、连接或终止 Amazon EMR 集群。

在用户列出或启动集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许 Amazon EMR 集群的自配置和列表，请参阅 [管理员指南](studio-emr-admin-guide.md)。

**Topics**
+ [支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](#studio-notebooks-emr-cluster-connect-kernels)
+ [自带映像](#studio-notebooks-emr-byoi)
+ [从 Studio 或 Studio Classic 启动 Amazon EMR 集群](studio-notebooks-launch-emr-cluster-from-template.md)
+ [从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)
+ [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)
+ [从 Studio 或 Studio Classic 终止 Amazon EMR 集群](terminate-emr-clusters.md)
+ [从 Studio 或 Studio Classic 访问 Spark UI](studio-notebooks-access-spark-ui.md)

## 支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核
<a name="studio-notebooks-emr-cluster-connect-kernels"></a>

随附以下图像和内核 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)，该 JupyterLab 扩展程序[使用](https://livy.apache.org/) Apache Livy 通过[SparkMagic](https://github.com/jupyter-incubator/sparkmagic)库连接到远程 Spark（Amazon EMR）集群。
+ **对于 Studio 用户：** SageMaker 分发版是用于数据科学的 Docker 环境，用作 JupyterLab笔记本实例的默认映像。所有版本的 [SageMaker AI 发行](https://github.com/aws/sagemaker-distribution)版都`sagemaker-studio-analytics-extension`已预装。
+ **对于 Studio Classic 用户：**以下映像预装了 `sagemaker-studio-analytics-extension`：
  + DataScience — Python 3 内核
  + DataScience 2.0 — Python 3 内核
  + DataScience 3.0 — Python 3 内核
  + SparkAnalytics 1.0 — SparkMagic 还有内 PySpark 核
  + SparkAnalytics 2.0 — SparkMagic 还有内 PySpark 核
  + SparkMagic — SparkMagic 和内 PySpark 核
  + PyTorch 1.8 — Python 3 内核
  + TensorFlow 2.6 — Python 3 内核
  + TensorFlow 2.11 — Python 3 内核

要使用其他内置映像或您自己的映像连接到 Amazon EMR 集群，请按照[自带映像](#studio-notebooks-emr-byoi)中的说明进行操作。

## 自带映像
<a name="studio-notebooks-emr-byoi"></a>

要在 Studio 或 Studio Classic 中使用自己的映像并允许您的笔记本电脑连接到 Amazon EMR 集群，请在内核中安装以下[sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)扩展程序。它支持通过库将 SageMaker Studio 或 Studio Classic 笔记本电脑连接到 Spark（Amazon EMR）集群。[SparkMagic](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html)

```
pip install sparkmagic
pip install sagemaker-studio-sparkmagic-lib
pip install sagemaker-studio-analytics-extension
```

此外，要在连接 Amazon EMR 时使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html) 身份验证，您必须安装 kinit 客户端。根据您的操作系统，安装 kinit 客户端的命令可能会有所不同。要自带 Ubuntu（基于 Debian）映像，请使用 `apt-get install -y -qq krb5-user` 命令。

有关在 SageMaker Studio 或 Studio Classic 中自[带图片的更多信息，请参阅自带 SageMaker 图片](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html)。

# 从 Studio 或 Studio Classic 启动 Amazon EMR 集群
<a name="studio-notebooks-launch-emr-cluster-from-template"></a>

数据科学家和数据工程师可以使用管理员设置的模板从 Studio 或 Studio Class CloudFormation ic 中自行配置 Amazon EMR 集群。在用户启动集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许自配置 Amazon EMR 集群的信息，请参阅 [在 Service Catalog 中配置亚马逊 EMR CloudFormation 模板](studio-notebooks-set-up-emr-templates.md)。

从 Studio 或 Studio Classic 配置新的 Amazon EMR 集群：

1. 在 Studio 或 Studio Classic UI 的左侧面板中，选择左侧导航菜单中的**数据**节点。向下导航至 **Amazon EMR 集群**。这将打开一个页面，列出您可以从 Studio 或 Studio Classic 访问的 Amazon EMR 集群。

1. 选择右上角的**创建**按钮。这会打开一个新的模式，列出可供您使用的集群模板。

1. 选择一个集群模板，方法是选择模板名称，然后选择**下一步**。

1. 输入集群的详细信息，如集群名称和管理员设置的任何特定可配置参数，然后选择**创建集群**。集群的创建可能需要几分钟时间。  
![\[从 Studio 或 Studio Classic 创建 Amazon EMR 集群。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)

集群配置完成后，Studio 或 Studio Classic UI 会显示*集群已成功创建*消息。

要连接到集群，请参阅[从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

# 从 Studio 或 Studio Classic 列出 Amazon EMR 集群
<a name="discover-emr-clusters"></a>

数据科学家和数据工程师可以从 Studio 发现并连接到 Amazon EMR 集群。Amazon EMR 集群可能与 Studio 位于同一个 AWS 账户中，也可能位于不同的 AWS 账户中。

在用户列出或连接到集群之前，管理员必须在 Studio 环境中配置必要的设置。有关管理员如何配置 Studio 环境以允许发现运行 Amazon EMR 集群的信息，请参阅 [管理员指南](studio-emr-admin-guide.md)。如果管理员[配置了跨账户发现 Amazon EMR 集群](studio-notebooks-configure-discoverability-emr-cluster.md)，则可以查看集群的综合列表。该列表包括 Studio 使用的 AWS 账户中的集群，以及来自您已被授予访问权限的远程账户的集群。

从 Studio 查看可用的 Amazon EMR 集群列表：

1. 在 Studio UI 的左侧导航菜单中，向下滚动到 **EMR Clusters**。这将打开一个页面，列出您可以访问的 Amazon EMR 集群。

   列表显示处于以下阶段的集群：**引导**、**启动**、**运行**、**等待**。您可以使用筛选器图标，根据集群的当前状态缩小显示集群的范围。

1. 选择要连接的特定**运行**集群，然后参考 [从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群](connect-emr-clusters.md)。

# 从 Studi SageMaker o 或 Studio Classic 连接到 Amazon EMR 集群
<a name="connect-emr-clusters"></a>

数据科学家和数据工程师可以直接从 Studio 用户界面发现并连接到 Amazon EMR 集群。开始之前，请确保已按照 [步骤 4：设置权限以启用从 Studio 列出和启动 Amazon EMR 集群](studio-notebooks-set-up-emr-templates.md#studio-emr-permissions) 部分所述配置了必要的权限。这些权限赋予 Studio 创建、启动、查看、访问和终止集群的能力。

您可以直接从 Studio 用户界面将 Amazon EMR 集群连接到新的 JupyterLab 笔记本电脑，也可以选择在正在运行 JupyterLab 的应用程序的笔记本中启动连接。

**重要**  
您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。您的 JupyterLab 空间必须使用 SageMaker 分发图片版本`1.10`或更高版本。

## 使用 Studio UI 连接到 Amazon EMR 集群
<a name="connect-emr-clusters-ui-options"></a>

要使用 Studio 或 Studio Classic 用户界面连接到您的集群，您可以从中访问的集群列表中启动连接[从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)，也可以从 SageMaker Studio 或 Studio Classic 中的笔记本启动连接。

**要通过 Studio 用户界面将 Amazon EMR 集群连接到新 JupyterLab 笔记本电脑，请执行以下操作：**

1. 在 Studio UI 的左侧面板中，选择左侧导航菜单中的**数据**节点。向下导航至 **Amazon EMR 应用程序和集群**。这将打开一个页面，列出可以从 Studio 的 **Amazon EMR 集群**标签访问的 Amazon EMR 集群。
**注意**  
如果您或您的管理员配置了允许跨账户访问 Amazon EMR 集群的权限，您就可以查看已授予 Studio 访问权限的所有账户的集群综合列表。

1. 选择要连接到新笔记本的 Amazon EMR 集群，然后选择**附加到笔记本**。这将打开一个显示 JupyterLab 空间列表的模态窗口。

1. 
   + 选择要从中启动 JupyterLab应用程序的空间，然后选择 “**打开笔记本**”。这将从您选择的空间启动 JupyterLab 应用程序并打开一个新的笔记本。
**注意**  
Studio Classic 用户需要选择映像和内核。有关支持的映像列表，请参阅[支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels)或[自带映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi)。
   + 或者，您也可以选择模式窗口顶部的**创建新空间**按钮，创建一个新的专用空间。输入空间名称，然后选择**创建空间并打开笔记本**。这将创建一个具有默认实例类型和最新 SageMaker 发行映像的私有空间，启动 JupyterLab应用程序并打开新的笔记本。

1. 如果您选择的集群不使用 Kerberos、LDAP 或[运行时角色]()身份验证，Studio 会提示您选择凭证类型。从 **Http 基本身份验证**或**没有凭证**中进行选择，然后输入您的凭证（如果适用）。

   如果您选择的集群支持运行时角色，请选择 Amazon EMR 集群在运行作业时可承担的 IAM 角色名称。
**重要**  
要成功将 JupyterLab 笔记本连接到支持运行时角色的 Amazon EMR 集群，您必须先将运行时角色列表与您的域或用户配置文件相关联，如中所述。[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)未完成此步骤将无法建立连接。

   选择后，连接命令会弹出笔记本的第一个单元格，并启动与 Amazon EMR 集群的连接。

   连接成功后会显示一条消息，确认连接以及 Spark 应用程序的启动。

**或者，您可以从 JupyterLab 或 Studio Classic 笔记本电脑连接到集群。**

1. 选择笔记本顶部的**集群**按钮。这会打开一个模式窗口，列出处于 `Running` 状态、可以访问的 Amazon EMR 集群。您可以在 **Amazon EMR 集群**选项卡中的 `Running` Amazon EMR 集群。
**注意**  
对于 Studio Classic 用户来说，只有在使用来自 [支持从 Studio 或 Studio Classic 连接到 Amazon EMR 集群的映像和内核](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 或 [自带映像](studio-emr-user-guide.md#studio-notebooks-emr-byoi) 的内核时，**集群**才会显示。如果您在笔记本顶部未看到**集群**，请确保您的管理员已[配置了集群的可发现性](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-configure-discoverability-emr-cluster.html)并切换到支持的内核。

1. 选择要连接到的集群，然后选择**连接**。

1. 如果您将 Amazon EMR 集群配置为支持[运行时 IAM 角色](studio-notebooks-emr-cluster-rbac.md)，则可以从 **Amazon EMR 执行角色**下拉菜单中选择您的角色。
**重要**  
要成功将 JupyterLab 笔记本连接到支持运行时角色的 Amazon EMR 集群，您必须先将运行时角色列表与您的域或用户配置文件相关联，如中所述。[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)未完成此步骤将无法建立连接。

   否则，如果您选择的集群不使用 Kerberos、LDAP 或运行时角色身份验证，Studio 或 Studio Classic 会提示您选择凭证类型。您可以选择 **HTTP 基本身份验证**或**没有凭证**。

1. Studio 添加并运行代码块到活动单元格以建立连接。该单元包含连接神奇命令，用于根据身份验证类型将笔记本连接到应用程序。

   连接成功后会显示一条消息，确认连接以及 Spark 应用程序的启动。

## 使用连接命令连接到 Amazon EMR 集群
<a name="connect-emr-clusters-manually"></a>

要建立与 Amazon EMR 集群的连接，可以在笔记本单元格中执行连接命令。

建立连接时，可以使用 [Kerberos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)、[Lightweight Directory Access Protocol (LDAP)](https://docs.aws.amazon.com/) 或[运行时 IAM 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-emr-cluster-rbac.html)身份验证。您选择的验证方法取决于集群配置。

您可以参考此示例[在启用 Kerberos 的 Amazon EMR 集群上使用网络负载均衡器访问 Apache Livy](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/) 来设置使用 Kerberos 身份验证的 Amazon EMR 集群。或者，您可以在 [a sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) GitHub ws-samples/ 存储库中使用 Kerberos 或 LDAP 身份验证来浏览 CloudFormation 示例模板。

如果您的管理员启用了跨账户访问权限，则无论您的 Studio Classic 应用程序和集群位于 AWS 同一个账户还是不同的账户中，您都可以从 Studio Classic 笔记本电脑连接到您的 Amazon EMR 集群。

对于以下每种身份验证类型，请使用指定命令从 Studio 或 Studio Classic 笔记本连接到集群。
+ **Kerberos**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Kerberos --language python 
  [--assumable-role-arn EMR_access_role_ARN ] 
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **LDAP**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access --language python 
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **NoAuth**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type None --language python
  [--assumable-role-arn EMR_access_role_ARN ]
  [--verify-certificate /home/user/certificateKey.pem]
  ```
+ **运行时系统 IAM 角色**

  如果您需要跨账户的 Amazon EMR 访问权限，请附加 `--assumable-role-arn` 参数。如果您使用 HTTPS 连接到集群，请附加 `--verify-certificate` 参数。

  有关使用运行时系统 IAM 角色连接到 Amazon EMR 集群的更多信息，请参阅[在 Studio 中为 Amazon EMR 集群访问配置 IAM 运行时角色](studio-notebooks-emr-cluster-rbac.md)。

  ```
  %load_ext sagemaker_studio_analytics_extension.magics
  %sm_analytics emr connect --cluster-id cluster_id \
  --auth-type Basic_Access \
  --emr-execution-role-arn arn:aws:iam::studio_account_id:role/emr-execution-role-name
  [--assumable-role-arn EMR_access_role_ARN]
  [--verify-certificate /home/user/certificateKey.pem]
  ```

## 通过 HTTPS 连接到 Amazon EMR 集群。
<a name="connect-emr-clusters-ssl"></a>

如果您已将 Amazon EMR 集群配置为启用过境加密，并将 Apache Livy 服务器配置为 HTTPS，而且希望 Studio 或 Studio Classic 使用 HTTPS 与 Amazon EMR 通信，则需要配置 Studio 或 Studio Classic 以访问证书键。

对于自签名证书或本地证书颁发机构 (CA) 签名证书，您可以通过两个步骤完成此操作：

1. 使用以下选项之一，将证书的 PEM 文件下载到本地文件系统：
   + Jupyter 的内置文件上传功能。
   + 笔记本单元。
   + (仅限 Studio Classic 用户）生命周期配置 (LCC) 脚本。

     有关如何使用 LCC 脚本的信息，请参阅[使用生命周期配置脚本自定义笔记本实例](https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html)。

1. 在连接命令的 `--verify-certificate` 参数中，通过提供证书的路径来启用证书的验证。

   ```
   %sm_analytics emr connect --cluster-id cluster_id \
   --verify-certificate /home/user/certificateKey.pem ...
   ```

对于公共 CA 颁发的证书，请将 `--verify-certificate` 参数设置为 `true` 来设置证书验证。

或者，您可以通过将 `--verify-certificate` 参数设置为 `false` 来禁用证书验证。

您可以在[使用连接命令连接到 Amazon EMR 集群](#connect-emr-clusters-manually)中找到可用于连接到 Amazon EMR 集群的命令列表。

# 从 Studio 或 Studio Classic 终止 Amazon EMR 集群
<a name="terminate-emr-clusters"></a>

下面的步骤演示了如何从 Studio 或 Studio Classic 笔记本终止 Amazon EMR 集群。

**要终止处于 `Running` 状态的集群，请导航至可用的 Amazon EMR 集群列表。**

1. 在 Studio UI 中，向下滚动到左侧导航菜单中的**数据**节点。

1. 向下导航至 **EMR Clusters** 节点。这将打开一个页面，列出您可以访问的 Amazon EMR 集群。

1. 选择要终止的集群名称，然后选择**终止**。

1. 这将打开一个确认窗口，通知您在终止后，集群上所有待处理的工作或数据将永久丢失。再次选择**终止**进行确认。

# 从 Studio 或 Studio Classic 访问 Spark UI
<a name="studio-notebooks-access-spark-ui"></a>

以下各节提供了从 SageMaker AI Studio 或 Studio Classic 笔记本电脑访问 Spark 用户界面的说明。通过 Spark UI，您可以监控和调试从 Studio 或 Studio Classic 笔记本提交到 Amazon EMR 上运行的 Spark Jobs。SSH 隧道和预签名 URLs 是访问 Spark 用户界面的两种方式。

## 为 Spark UI 访问设置 SSH 隧道
<a name="studio-notebooks-emr-ssh-tunneling"></a>

要设置 SSH 隧道以访问 Spark UI，请按照此部分中的两个选项之一进行操作。

设置 SSH 隧道的选项：
+ [选项 1：使用本地端口转发设置到主节点的 SSH 隧道](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel-local.html)
+ [选项 2，第 1 部分：使用动态端口转发设置到主节点的 SSH 隧道](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-ssh-tunnel.html)

  [选项 2，第 2 部分：配置代理设置以查看主节点上托管的网站。](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-proxy.html)

有关查看托管在 Amazon EMR 上的 Web 界面的更多信息，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)。您也可以访问 Amazon EMR 控制台以访问 Spark UI。

**注意**  
即使您无法使用预签名 URLs ，也可以设置 SSH 隧道。

## 预签名 URLs
<a name="studio-notebooks-emr-spark-ui-presigned-urls"></a>

要创建可以 SageMaker 从 Studio 或 Studio Classic 笔记本电脑访问 Amazon EMR 上的 Spark 用户界面的一键式 URLs 操作，您必须启用以下 IAM 权限。选择适用于您的选项：
+ **对于与 SageMaker Studio 或 Studio Classic 笔记本同一个账户的 Amazon EMR 集群：向 Studio 或 St SageMaker udio Classic IAM 执行角色添加以下权限。**
+ **对于位于不同账户（不是 SageMaker Studio 或 Studio Classic 笔记本电脑）中的 Amazon EMR 集群：将以下权限添加到您为其创建的跨账户角色中。[从 Studio 或 Studio Classic 列出 Amazon EMR 集群](discover-emr-clusters.md)**

**注意**  
在以下区域，您可以通过控制台访问预签名 URLs ：  
美国东部（弗吉尼亚州北部）区域
美国西部（北加利福尼亚）区域
加拿大（中部）区域
欧洲地区（法兰克福）区域
欧洲地区（斯德哥尔摩）区域
欧洲地区（爱尔兰）区域
欧洲地区（伦敦）区域
欧洲地区（巴黎）区域
亚太地区（东京）区域
亚太地区（首尔）区域
亚太地区（悉尼）区域
亚太地区（孟买）区域
亚太地区（新加坡）区域
南美洲（圣保罗）

 以下策略允许访问您的执行角色 URLs 的预签名。

```
{
        "Sid": "AllowPresignedUrl",
        "Effect": "Allow",
        "Action": [
            "elasticmapreduce:DescribeCluster",
            "elasticmapreduce:ListInstanceGroups",
            "elasticmapreduce:CreatePersistentAppUI",
            "elasticmapreduce:DescribePersistentAppUI",
            "elasticmapreduce:GetPersistentAppUIPresignedURL",
            "elasticmapreduce:GetOnClusterAppUIPresignedURL"
        ],
        "Resource": [
            "arn:aws:elasticmapreduce:region:account-id:cluster/*"
        ]
}
```

# 博客和白皮书
<a name="studio-notebooks-emr-resources"></a>

以下博客使用电影评论情绪预测的案例研究，说明执行完整机器学习工作流的过程。这包括数据准备、监控 Spark 作业以及训练和部署 ML 模型，以便直接从 Studio 或 Studio Classic 笔记本中获取预测结果。
+ [从 SageMaker Studio 或 Studio Classic 创建和管理 Amazon EMR 集群，以运行交互式 Spark 和 ML](https://aws.amazon.com/blogs/machine-learning/part-1-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/) 工作负载。
+ 要将用例扩展到跨账户配置，其中 SageMaker Studio 或 Studio Classic 以及您的 Amazon EMR 集群部署在 AWS 不同的账户中，[请参阅 SageMaker 从 Studio 或 Studio Classic 创建和管理 Amazon EMR 集群以运行交互式 Spark 和 ML](https://aws.amazon.com/blogs/machine-learning/part-2-create-and-manage-amazon-emr-clusters-from-sagemaker-studio-to-run-interactive-spark-and-ml-workloads/) 工作负载——第 2 部分。

另请参阅：
+ [在启用了 Kerberos 的 Amazon EMR 集群上使用网络负载均衡器访问 Apache Livy 的](https://aws.amazon.com/blogs/big-data/access-apache-livy-using-a-network-load-balancer-on-a-kerberos-enabled-amazon-emr-cluster/)配置演练。
+ AWS [SageMaker Studio 或 Studio 经典版最佳实践](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/sagemaker-studio-admin-best-practices.html)白皮书。

# 问题排查
<a name="studio-notebooks-emr-troubleshooting"></a>

从 Studio 或 Studio Classic 笔记本使用 Amazon EMR 集群时，您可能会在连接或使用过程中遇到各种潜在问题或挑战。为帮助您排除故障并解决这些错误，本节将就可能出现的常见问题提供指导。

从 Studio 或 Studio Classic 笔记本连接或使用 Amazon EMR 集群时，可能会出现以下常见错误。

## 排除 Livy 连接挂起或失败的问题
<a name="studio-notebooks-emr-troubleshooting.memoryerror"></a>

以下是通过 Studio 或 Studio Classic 笔记本使用 Amazon EMR 集群时可能出现的 Livy 连接问题。
+ **您的 Amazon EMR 集群遇到了错误。 out-of-memory**

  Livy 连接因`sparkmagic`挂起或失败而可能的原因是您的 Amazon EMR 集群遇到了 out-of-memory错误。

  默认情况下，Apache Spark 驱动程序 `spark.driver.defaultJavaOptions` 的 Java 配置参数设置为 `-XX:OnOutOfMemoryError='kill -9 %p'`。这意味着当驱动程序遇到 `OutOfMemoryError` 时，采取的默认操作是通过发送 SIGKILL 信号来终止驱动程序。当 Apache Spark 驱动程序终止时，任何通过依赖于该应用程序的 `sparkmagic` 进行的 Livy 连接都会挂起或失败。这是因为 Spark 驱动程序负责管理 Spark 应用程序的资源，包括任务调度和执行。没有驱动程序时，Spark 应用程序将无法运行，任何与之交互的尝试都会失败。

  如果您怀疑 Spark 集群出现内存问题，可以查看 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) 日志。由于 out-of-memory错误而被杀死的容器通常以代码退出`137`。在这种情况下，您需要重新启动 Spark 应用程序并建立新的 Livy 连接，以恢复与 Spark 集群的交互。

  你可以参考知识库文章[如何解决 Amazon EMR 上的 Spark 上的 “容器因超过内存限制而被 YARN 杀死” 错误](https://repost.aws/knowledge-center/emr-spark-yarn-memory-limit)？ AWS re:Post 继续了解可用于解决 out-of-memory问题的各种策略和参数。

  我们建议您查看《[Amazon EMR 最佳实践指南](https://aws.github.io/aws-emr-best-practices/)》，了解有关在 Amazon EMR 集群上运行 Apache Spark 工作负载的最佳实践和调整指南。
+ **首次连接到 Amazon EMR 集群时，您的 Livy 会话超时。**

  当您最初使用连接到 Amazon EMR 集群时 [sagemaker-studio-analytics-extension](https://pypi.org/project/sagemaker-studio-analytics-extension/)，可能会遇到连接[超时错误，该集群允许使用 Apache Livy](https://livy.apache.org/) 通过[SparkMagic](https://github.com/jupyter-incubator/sparkmagic)库连接到远程 Spark (Amazon EMR) 集群：

  `An error was encountered: Session 0 did not start up in 60 seconds.`

  如果您的 Amazon EMR 集群在建立连接时需要初始化 Spark 应用程序，则遇到连接超时错误的可能性会增加。

  为了减少通过分析扩展程序使用 Livy 连接到 Amazon EMR 集群时出现超时的几率，`sagemaker-studio-analytics-extension` 版本 `0.0.19` 及更高版本会覆盖默认服务器会话超设置，将其改为 `120` 秒而不是 `sparkmagic` 默认的 `60` 秒。

  我们建议您通过运行以下升级命令，将扩展程序升级为 `0.0.18` 或更新版本。

  ```
  pip install --upgrade sagemaker-studio-analytics-extension
  ```

  请注意，在 `sparkmagic` 中提供自定义超时配置时，`sagemaker-studio-analytics-extension` 会遵循此覆盖操作。但是，将会话超时设置为 `60` 秒会自动触发 `sagemaker-studio-analytics-extension` 中的默认服务器会话超时（`120` 秒）。

# 使用 AWS Glue 交互式会话准备数据
<a name="studio-notebooks-glue"></a>

[AWS Glue 交互式会话](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-overview.html)是一种无服务器服务，您可以利用它来收集、转换、清理数据，并为数据湖和数据管道中的数据存储做好准备。 AWS Glue 交互式会话提供了一个按需、无服务器的 Apache Spark 运行时环境，您可以在专用数据处理单元 (DPU) 上几秒钟内完成初始化，而无需配置和管理复杂的计算集群基础设施。初始化后，您可以直接在 Studio 或 Studio Classic 笔记本中浏览 AWS Glue 数据目录 AWS Lake Formation、运行大型查询、访问受控制的数据，以及使用 Spark 以交互方式分析和准备数据。然后，您可以使用 Studi SageMaker o 或 Studio Classic 中专门构建的机器学习工具，使用准备好的数据来训练、调整和部署模型。如果您想要对可配置性和灵活性进行适度控制的无服务器 Spark 服务，则应考虑使用 AWS Glue 交互式会话来处理数据准备工作负载。

您可以通过在 Studio 或 Studio Classic 中启动 JupyterLab 笔记本来启动 AWS Glue 交互式会话。启动笔记本时，请选择内置的 `Glue PySpark and Ray` 或 `Glue Spark` 内核。这将自动启动交互式的无服务器 Spark 会话。您无需预置或管理任何计算集群或基础设施。初始化后，您可以在 Studio 或 Studio Classic 笔记本中探索数据并与之交互。

在 Studio 或 Studio Classic 中开始 AWS Glue 互动会话之前，您需要设置相应的角色和策略。此外，您可能还需要提供对其他资源的访问权限，如 Amazon S3 存储桶。有关所需 IAM 策略的更多信息，请参阅 [Studio 或 Studio 经典版中 AWS Glue 交互式会话](getting-started-glue-sm.md#glue-sm-iam)。

Studio 和 Studio Classic 为您的 AWS Glue 交互式会话提供了默认配置，但是，您可以使用完整 AWS Glue的 Jupyter 魔法命令目录来进一步自定义您的环境。有关可在 AWS Glue 交互式会话中使用的默认和其他 Jupyter 魔法的信息，请参阅。[在 Studio 或 Studio 经典版中配置 AWS Glue 互动会话](getting-started-glue-sm.md#glue-sm-magics)
+ 对于启动 AWS Glue 交互式会话的 Studio Classic 用户，他们可以从以下图像和内核中进行选择：
  + 映像：`SparkAnalytics 1.0`、`SparkAnalytics 2.0`
  + 内核：`Glue Python [PySpark and Ray]` 和 `Glue Spark`
+ 对于 Studio 用户，请使用默认的[SageMaker 发行版映像](https://github.com/aws/sagemaker-distribution)并选择一个`Glue Python [PySpark and Ray]`或一个`Glue Spark`内核。

# 开始使用 AWS Glue 交互式会话
<a name="getting-started-glue-sm"></a>

在本指南中，您将学习如何在 SageMaker AI Studio Classic 中启动 AWS Glue 交互式会话，以及如何使用 Jupyter 魔法管理您的环境。

## Studio 或 Studio 经典版中 AWS Glue 交互式会话
<a name="glue-sm-iam"></a>

本节列出了在 Studio 或 Studio Classic 中运行 AWS Glue 交互式会话所需的策略，并说明了如何设置这些策略。具体而言，它详细介绍了如何：
+ 将`AwsGlueSessionUserRestrictedServiceRole`托管策略附加到您的 SageMaker AI 执行角色。
+ 为您的 SageMaker AI 执行角色创建内联自定义策略。
+ 修改您的 SageMaker AI 执行角色的信任关系。

**将 `AwsGlueSessionUserRestrictedServiceRole` 托管策略附加到执行角色**

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

1. 在左侧面板中选择**角色**。

1. 查找用户配置文件中使用的 Studio Classic 执行角色。有关如何查看用户配置文件的信息，请参阅 [查看域中的用户配置文件](domain-user-profile-view.md)。

1. 选择角色名称，进入角色摘要页面。

1. 在**权限**选项卡下，从**添加权限**下拉菜单中选择**附加策略**。

1. 选中托管策略 `AwsGlueSessionUserRestrictedServiceRole` 旁的复选框。

1. 选择**附加策略**。

   摘要页面显示您新添加的托管策略。

   

**在执行角色上创建内联自定义策略**

1. 在**添加权限**下拉菜单中选择**创建内联策略**。

1. 选择 **JSON** 选项卡。

1. 复制并粘贴以下策略。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "uniqueStatementId",
   
               "Effect": "Allow",
               "Action": [
   	     "iam:GetRole",
                   "iam:PassRole",
                   "sts:GetCallerIdentity"
               ],
               "Resource": "arn:aws:iam::*:role/GlueServiceRole*"
           }
       ]
   }
   ```

------

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

1. 输入**名称**，然后选择**创建策略**。

   摘要页面显示您新添加的自定义策略。

   

**修改该执行角色的信任关系**

1. 选择**信任关系**选项卡。

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

1. 复制并粘贴以下策略。

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Effect": "Allow",
           "Principal": {
               "Service": [
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
               ]
           },
           "Action": "sts:AssumeRole"
       }
   ]
   }
   ```

------

1. 选择**更新策略**。

如果您需要访问其他 AWS 资源，可以添加其他角色和策略。有关您可以包括的其他角色和策略的描述，请参阅 AWS Glue 文档中的[与 IAM 的交互式会话](https://docs.aws.amazon.com/glue/latest/dg/glue-is-security.html)。

## 标签传播
<a name="glue-sm-tag-propagation"></a>

标签通常用于跟踪和分配成本、控制会话访问权限、隔离资源等。要了解如何使用标签向 AWS 资源添加元数据，或者有关常见使用场景的详细信息，请参阅[附加信息](#more-information)。

您可以启用 AWS 标签自动传播到从 Studio 或 Studio Classic 用户界面中创建的新 AWS Glue 交互式会话。从 Studio 或 Studio Classic 创建 AWS Glue 交互式会话时，附加到用户配置文件或共享空间的任何用户[定义标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html)都将转移到新的 AWS Glue 交互式会话中。此外，Studio 和 Studio Classic 会自动将两个 AWS生成的内部标签（（`sagemaker:user-profile-arn`和`sagemaker:domain-arn`）或（`sagemaker:shared-space-arn`和`sagemaker:domain-arn`））添加到通过其用户界面创建的新 AWS Glue 交互式会话中。您可以使用这些标签汇总各个域、用户配置文件或空间的成本。

### 启用标签传播
<a name="enable-propagation"></a>

要启用标签自动传播到新的 AWS Glue 交互式会话，请为您的 A SageMaker I 执行角色和与您的会 AWS Glue 话关联的 IAM 角色设置以下权限：

**注意**  
默认情况下，与 AWS Glue 交互式会话关联的角色与 SageMaker AI 执行角色相同。您可以使用 m `%iam_role` agic 命令为 AWS Glue 交互式会话指定不同的执行角色。有关可用于配置 AWS Glue 交互式会话的 Jupyter magic 命令的信息，请参阅[在 Studio 或 Studio 经典版中配置 AWS Glue 互动会话](#glue-sm-magics)。
+ *在你的 SageMaker AI 执行角色上*：创建新的内联策略，然后粘贴以下 JSON 文件。该策略授予执行角色描述（`DescribeUserProfile`、`DescribeSpace`、`DescribeDomain`）和列出在用户个人资料、共享空间和 SageMaker AI 域上设置的标签 (`ListTag`) 的权限。

  ```
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:ListTags"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:user-profile/*",
          "arn:aws:sagemaker:*:*:space/*"
      ]
  },
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeUserProfile"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:user-profile/*"
      ]
  },
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeSpace"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:space/*"
      ]
  }
  {
      "Effect": "Allow",
      "Action": [
          "sagemaker:DescribeDomain"
      ],
      "Resource": [
          "arn:aws:sagemaker:*:*:domain/*"
      ]
  }
  ```
+ *在您 AWS Glue 会话的 IAM 角色上*：创建新的内联策略，然后粘贴以下 JSON 文件。该策略授予您的角色向会话附加标签 (`TagResource`) 或检索其标签列表 (`GetTags`) 的权限。

  ```
  {
      "Effect": "Allow",
      "Action": [
          "glue:TagResource",
          "glue:GetTags"
      ],
      "Resource": [
          "arn:aws:glue:*:*:session/*"
      ]
  }
  ```

**注意**  
应用这些权限时发生的失败不会阻止 AWS Glue 交互式会话的创建。您可以在 Studio 或 Studio Classic [CloudWatch](https://docs.aws.amazon.com//sagemaker/latest/dg/monitoring-cloudwatch.html)日志中找到有关失败原因的详细信息。
必须重新启动交 AWS Glue 互式会话的内核才能传播标签值的更新。

请务必记住以下几点：
+ 标签附加到会话之后，就无法通过传播将其删除。

  您可以直接通过 AWS CLI、 AWS Glue API 或从 AWS Glue 交互式会话中移除标签[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。例如，使用 AWS CLI，您可以通过提供会话的 ARN 和要移除的标签密钥来移除标签，如下所示：

  ```
  aws glue untag-resource \
  --resource-arn arn:aws:glue:region:account-id:session:session-name \
  --tags-to-remove tag-key1,tag-key2
  ```
+ Studio 和 Studio AWS Classic 向通过其用户界面创建的新 AWS Glue 交互式会话添加两个生成的内部标签（`sagemaker:user-profile-arn``sagemaker:shared-space-arn`和 `sagemaker:domain-arn``sagemaker:domain-arn`）或（和））。这些标签计入所有 AWS 资源上设置的 50 个标签的上限。`sagemaker:user-profile-arn` 和 `sagemaker:shared-space-arn` 都包含它们所属的域 ID。
+ 以`aws:``AWS:`、或任何大小写字母组合作为密钥前缀的标签密钥不会被传播，而是保留供 AWS 使用。

### 附加信息
<a name="more-information"></a>

有关标记更多信息，请参阅以下资源。
+ 要了解如何使用标签向 AWS 资源添加元数据，请参阅为资源添加[标签 AWS](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)。
+ 有关使用标记跟踪成本的信息，请参阅 Studio 管理最佳实践中的[成本分析](https://docs.aws.amazon.com/whitepapers/latest/sagemaker-studio-admin-best-practices/cost-attribution.html)。
+ 有关 AWS Glue 根据标签密钥控制访问权限的信息，请参阅 [ABAC with](glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-tags)。 AWS Glue

## 在 Studio 或 Studio 经典版上启动 AWS Glue 互动会话
<a name="glue-sm-launch"></a>

创建角色、策略和 SageMaker AI 域后，您可以在 Studio 或 Studio Classic 中启动 AWS Glue 交互式会话。

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

1. 从左侧导航窗格中选择 **Studio**。

1. 从 Studio 登录页面，选择启动 Studio 所需的域和用户配置文件。

1. 选择 **Open Studio** 并启动 JupyterLab 或 Studio 经典版应用程序。

1. 在 Jupyter 视图中，依次选择**文件**、**新建**和**笔记本**。

1. 对于 Studio Classic 用户：在**图像**下拉菜单中，选择 **SparkAnalytics 1.0** 或 **SparkAnalytics2.0**。在**内核**下拉菜单中，选择 **Glue Spark** 或 G **lue Python [PySpark 和 Ray]**。选定**选择**。

   对于 Studio 用户，请选择 **Glue Spark** 或 **Glue Python [PySpark 和 Ray]** 内核

1. （可选）使用 Jupyter magic 来自定义环境。有关 Jupyter magic 的更多信息，请参阅[在 Studio 或 Studio 经典版中配置 AWS Glue 互动会话](#glue-sm-magics)。

1. 开始编写 Spark 数据处理脚本。以下[笔记本](https://github.com/aws/amazon-sagemaker-examples/blob/main/use-cases/pyspark_etl_and_training/pyspark-etl-training.ipynb)展示了大型数据集上的 ETL end-to-end 工作流程，包括 AWS Glue 交互式会话、探索性数据分析、数据预处理，最后使用 AI 在处理后的数据上训练模型。 SageMaker 

## 在 Studio 或 Studio 经典版中配置 AWS Glue 互动会话
<a name="glue-sm-magics"></a>

**注意**  
在 AWS Glue 内核的生命周期内，所有神奇的配置都将延续到后续会话中。

你可以在 AWS Glue 交互式会话中使用 Jupyter 魔法来修改会话和配置参数。Magic 是在 Jupyter 单元开头以 `%` 为前缀的简短命令，它提供了一种快速简便的方法来帮助您控制环境。在你的 AWS Glue 互动会话中，默认会为你设置以下魔法：


| Magic | 默认 值 | 
| --- | --- | 
| %glue\$1version |  3.0  | 
| %iam\$1role |  *execution role attached to your SageMaker AI domain*  | 
| %region |  您的区域  | 

您可以使用 magic 来进一步自定义环境。例如，如果您想将分配给作业的工作线程数从默认的 5 更改为 10，则可以指定 `%number_of_workers 10`。如果要将会话配置为在空闲时间 10 分钟后停止，而不是默认的 2880，则可以指定 `%idle_timeout 10`。

目前所有可用的 Jupyter 魔法也在 AWS Glue Studio 或 Studio Classic 中可用。有关可用 AWS Glue 魔法的完整列表，请参阅[为 Jupyter 和 AWS Glue Studio 笔记本电脑配置 AWS Glue 交互式会话](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html)。

# AWS Glue 交互式会话定价
<a name="glue-sm-pricing"></a>

在 Studio 或 Studio Classic 笔记本电脑上使用 AWS Glue 交互式会话时，您需要分别为 AWS Glue 和 Studio 笔记本电脑上的资源使用量付费。

AWS AWS Glue 交互式会话的费用取决于会话处于活动状态的时间和使用的数据处理单元 (DPU) 的数量。您需要为 DPUs 用于运行工作负载的数量按小时费率收费，以一秒为增量计费。 AWS Glue 交互式会话默认分配五个 DPUs ，至少需要两 DPUs个。此外，每个交互式会话的最低计费时间长度为 1 分钟。要查看 AWS Glue 费率和定价示例，或者要使用 AWS 定价计算器估算成本，请参阅[AWS Glue 定价](https://aws.amazon.com/glue/pricing)。

您的 Studio 或 Studio Classic 笔记本在 Amazon EC2 实例上运行，您选择的实例类型将根据使用时间收费。选择 `ml-t3-medium` 映像和相关内核时，Studio Classic 会为您分配一个默认的 EC2 实例类型 `SparkAnalytics`。您可以更改 Studio Classic 笔记本的实例类型，以适应您的工作负载。有关 Studio 和 Studio 经典版定价的信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing)。

# 使用 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. 登录[亚马逊 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. 选择 **Amazon F SageMaker eature Store（通过 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)


运行 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)。 **2021 年 6 月 10 日** 新功能： 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 流文件时，它必须重新启动。这可能需要几分钟的时间。