

# AWS Glue 中的 Amazon Q 数据集成
<a name="q"></a>

AWS Glue 中的 Amazon Q 数据集成是 AWS Glue 的一项新的生成式人工智能功能，它使数据工程师和 ETL 开发人员能够使用自然语言构建数据集成作业。工程师和开发人员可以请求 Amazon Q 编写作业、解决问题并回答有关 AWS Glue 和数据集成的问题。

## 什么是 Amazon Q？
<a name="q-what-is-amazon-q"></a>

**注意**  
由 Amazon Bedrock 提供支持：AWS 实施[自动化滥用检测](https://docs.aws.amazon.com/bedrock/latest/userguide/abuse-detection.html)。由于 Amazon Q 数据集成功能基于 Amazon Bedrock 构建，因此用户可以充分利用 Amazon Bedrock 中实施的控制措施，以便安全、负责任地使用人工智能（AI）。

Amazon Q 是一款由生成式人工智能（AI）提供支持的对话助手，可以帮助您理解、构建、扩展和操作 AWS 应用程序。为 Amazon Q 提供支持的模型辅以高质量的 AWS 内容，可为您提供更全面、更具可操作性和参考性的答案，让您可以更快在 AWS 上构建。有关更多信息，请参阅[什么是 Amazon Q？](https://docs.aws.amazon.com/amazonq/latest/aws-builder-use-ug/what-is.html)

## 什么是 AWS Glue 中的 Amazon Q 数据集成？
<a name="q-key-features"></a>

AWS Glue 中的 Amazon Q 数据集成包括以下功能：
+ **聊天** – AWS Glue 中的 Amazon Q 数据集成可以用英语回答有关 AWS Glue 和数据集成的自然语言问题，例如 AWS Glue 源和目标连接器、AWS Glue ETL 作业、数据目录、爬网程序和 AWS Lake Formation，以及其他功能文档和最佳实践。AWS Glue 中的 Amazon Q 数据集成以分步说明作为回复，并包括对其信息源的引用。
+ **数据集成代码生成** – AWS Glue 中的 Amazon Q 数据集成可以回答有关 AWS Glue ETL 脚本的问题，并根据以英语提出的自然语言问题生成新代码。
+ **疑难解答** – AWS Glue 中的 Amazon Q 数据集成旨在帮助您了解 AWS Glue 作业中的错误，并提供分步说明，以从根本上解决问题。

**注意**  
AWS Glue 中的 Amazon Q 数据集成不会使用您的对话情境为对话期间的未来回复提供信息。与 AWS Glue 中的 Amazon Q 数据集成的每次对话都与之前或将来的对话无关。

## 使用 AWS Glue 中的 Amazon Q 数据集成？
<a name="q-working-with"></a>

在 Amazon Q 面板中，您可以请求 Amazon Q 为 AWS Glue ETL 脚本生成代码，回答有关 AWS Glue 功能的问题，或对错误进行问题排查。响应将是 PySpark 中的 ETL 脚本，其中包含自定义脚本、查看和执行脚本的分步说明。对于问题，将根据数据集成知识库生成回复，并含有摘要和来源 URL 供参考。

例如，您可以向 Amazon Q 提出以下要求：“*请编写一个 Glue 脚本，以从 Snowflake 读取数据、重命名字段，然后写入 Redshift*”，在响应中，AWS Glue 中的 Amazon Q 数据集成将返回一个可以执行所请求操作的 AWS Glue 作业脚本。您可以查看生成的代码，确保其满足请求的意图。如果满意，可以将其部署为生产环境中的 AWS Glue 作业。您可以要求集成说明错误和故障，并提出解决方案，从而对作业进行故障排除。Amazon Q 可以回答有关 AWS Glue 或数据集成最佳实践的问题。

![\[在 AWS Glue 中使用 Amazon Q 数据集成的示例。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/q-chat-experience-1.gif)


以下是示例问题，演示了 AWS Glue 中的 Amazon Q 数据集成如何帮助您基于 AWS Glue 构建：

AWS Glue ETL 代码生成：
+ 编写一个从 S3 读取 JSON、使用应用映射转换字段并写入 Amazon Redshift 的 AWS Glue 脚本
+ 如何编写 AWS Glue 脚本，用于从 DynamoDB 读取、应用 DropNullFields 转换并作为 Parquet 写入 S3？
+ 给我一个 AWS Glue 脚本，该脚本可以从 MySQL 读取，根据我的业务逻辑删除一些字段，然后写入 Snowflake
+ 编写一个 AWS Glue 作业，从 DynamoDB 读取然后以 JSON 的形式写入 S3
+ 帮我开发一个 S3 AWS Glue 数据目录的 AWS Glue 脚本
+ 编写一个 AWS Glue 作业，从 S3 读取 JSON，删除空值然后写入 Redshift

AWS Glue 功能说明：
+ 如何使用 AWS Glue 数据质量自动监测功能？
+ 如何使用 AWS Glue 作业书签？
+ 如何启用 AWS Glue 自动扩缩功能？
+ AWS Glue 动态帧与 Spark 数据帧有什么区别？
+ AWS Glue 支持哪些不同类型的连接？

AWS Glue 故障排除：
+ 如何解决 AWS Glue 作业中的内存不足（OOM）错误？
+ 在设置 AWS Glue 数据质量自动监测功能时，您可能会看到哪些错误消息？如何进行修复？
+ 如何修复出现 Amazon S3 访问被拒绝错误的 AWS Glue 作业？
+ 如何解决 AWS Glue 作业中的数据随机排序？

## 与 Amazon Q 数据集成进行交互的最佳实践
<a name="q-best-practices"></a>

以下是与 Amazon Q 数据集成进行交互的最佳实践：
+ 在与 Amazon Q 数据集成进行交互时，请提出具体问题，在有复杂请求时进行迭代，并验证答案的准确性。
+ 在以自然语言提供数据集成提示时，请尽可能具体，以便助手准确了解您的需求。不要简单地要求“从 S3 中提取数据”，而应提供更多详细信息，例如“编写从 S3 中提取 JSON 文件的 AWS Glue 脚本”。
+ 在运行生成的脚本之前，请对其进行检查，以确保准确性。如果生成的脚本存在错误或与您的意图不符，请向助手提供有关如何更正查询的指示。
+ 生成式人工智能技术是一项全新的技术，其回复中可能会出现错误，有时将这种错误称为幻觉。在您的环境或工作负载中使用代码之前，请对所有代码进行测试并检查是否存在错误和漏洞。

## 改进 AWS Glue 服务中的 Amazon Q 数据集成
<a name="q-service-improvement"></a>

为了帮助 AWS Glue 中的 Amazon Q 数据集成提供最相关的 AWS 服务信息，我们可能会使用 Amazon Q 中的某些内容，例如您向 Amazon Q 提出的问题及其回复，以改进服务。

有关我们使用哪些内容以及如何选择退出的信息，请参阅 *Amazon Q 开发者版用户指南*中的 [Amazon Q 开发者版服务改进](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/service-improvement.html)。

## 注意事项
<a name="q-considerations"></a>

在 AWS Glue 中使用 Amazon Q 数据集成之前，请考虑以下各项：
+ 目前，代码生成仅支持 PySpark 内核。生成的代码适用于基于 Python Spark 的 AWS Glue 作业。
+ 有关 AWS Glue 中支持的 Amazon Q 数据集成代码生成功能组合的信息，请参阅[支持的代码生成功能](q-supported-actions.md)。

# 在 AWS Glue 中设置 Amazon Q 数据集成
<a name="q-setting-up"></a>

以下各节提供在 AWS Glue 中设置 Amazon Q 数据集成的信息。

**Topics**
+ [配置 IAM 权限](q-setting-up-permissions.md)

# 配置 IAM 权限
<a name="q-setting-up-permissions"></a>

本主题介绍您为 Amazon Q 聊天体验和 AWS Glue Studio 笔记本体验配置的 IAM 权限。

**Topics**
+ [配置 Amazon Q 聊天的 IAM 权限](#q-setting-up-permissions-amazon-q-chat)
+ [配置 AWS Glue Studio 笔记本电脑实例的 IAM 权限](#q-setting-up-permissions-notebooks)

## 配置 Amazon Q 聊天的 IAM 权限
<a name="q-setting-up-permissions-amazon-q-chat"></a>

要在 AWS Glue 授予对 Amazon Q 数据集成所用 API 的权限，需要相应的 AWS Identity and Access Management（IAM）权限。您可以通过将以下自定义 AWS 策略附加到您的 IAM 身份（例如用户、角色或组）来获取权限：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:StartCompletion",
        "glue:GetCompletion"
      ],
      "Resource": [
        "arn:aws:glue:*:*:completion/*"
      ]
    }
  ]
}
```

------

## 配置 AWS Glue Studio 笔记本电脑实例的 IAM 权限
<a name="q-setting-up-permissions-notebooks"></a>

要在 AWS Glue Studio 笔记本电脑实例中启用 Amazon Q 数据集成，请确保将以下权限附加到笔记本 IAM 角色：

**注意**  
`codewhisperer` 前缀是与 Amazon Q Developer 合并前的服务的旧名称。有关更多信息，请参阅 [Amazon Q Developer rename - Summary of changes](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/service-rename.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:StartCompletion",
        "glue:GetCompletion"
      ],
      "Resource": [
        "arn:aws:glue:*:*:completion/*"
      ]
    },
    {
      "Sid": "AmazonQDeveloperPermissions",
      "Effect": "Allow",
      "Action": [
        "codewhisperer:GenerateRecommendations"
      ],
      "Resource": "*"
    }
  ]
}
```

------

**注意**  
AWS Glue 中的 Amazon Q 数据集成中没有通过可供您以编程方式使用的 AWS 软件开发工具包提供的 API。IAM 策略中使用了以下两个 API，用于通过 Amazon Q 聊天面板或 AWS Glue Studio 笔记本实现这种体验：`StartCompletion` 和 `GetCompletion`。

### 分配权限
<a name="q-assigning-permissions"></a>

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和组：创建权限集。按照《AWS IAM Identity Center 用户指南》中 [Create a permission set](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html)** 部分的说明进行操作。
+ 通过身份提供商在 IAM 中管理的用户：创建身份联合验证角色。按照《IAM 用户指南**》中[为第三方身份提供商创建角色（联合身份验证）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南**》中[为 IAM 用户创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 支持的代码生成功能
<a name="q-supported-actions"></a>

 以下是 Amazon Q 数据集成的代码生成功能的组合。


| 源和目标 | Transformation | 
| --- | --- | 
| 具有以下格式类型的 S3：json、csv、parquet、hudi、delta | Drop | 
| AWS Glue Data Catalog | 聚合 | 
| Redlake | DropDuplicates | 
| Amazon DynamoDB | 联接 | 
| MySQL | 筛选条件 | 
| Oracle | RenameColumns | 
| PostgresSQL | FillNull | 
| Microsoft SQL Server | DropNull | 
| Amazon DocumentDB/MongoDB | WithColumns | 
| Snowflake | SQL 查询 | 
| Google BigQuery | Union | 
| Teradata | Select | 
| Amazon OpenSearch Service |  | 
| Vertica |  | 
| SAP HANA |  | 
| Amazon Redshift |  | 

# 示例交互
<a name="q-using-example-interactions"></a>

借助 AWS Glue 中的 Amazon Q 数据集成，您可以在 Amazon Q 面板中输入问题。您可以输入有关 AWS Glue 所提供数据集成功能的问题。系统将返回详细答案以及参考文档。

另一个用例是生成 AWS Glue ETL 作业脚本。您可以询问有关如何执行数据提取、转换、加载作业的问题。系统将返回生成的 PySpark 脚本。

**Topics**
+ [Amazon Q 聊天互动](#q-using-example-interactions)
+ [AWS Glue Studio 笔记本交互](#q-using-example-interactions-notebooks)

## Amazon Q 聊天互动
<a name="q-using-example-interactions"></a>

在 AWS Glue 控制台上，开始编写一个新作业，并询问 Amazon Q：*“创建一个 Glue ETL 流，连接到我的数据库 glue\$1db 中的两个 Glue 目录表 venue 和 event，将结果联接到 venue 的 venueid 和 event 的 e\$1venueid，然后根据 venuestate=='DC' 条件筛选 venue 状态，并以 CSV 格式写入 s3://amzn-s3-demo-bucket/codegen/BDB-9999/output/。”*

![\[向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本的示例。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/Q-SIDEPANEL-GS.gif)


 您会注意到代码已生成。通过此回复，您可以学习和理解如何为自己的目的编写 AWS Glue 代码。您可以将生成的代码复制/粘贴到脚本编辑器中并配置占位符。在作业上配置 IAM 角色和 AWS Glue 连接后，保存并运行该作业。当作业完成后，您可以验证摘要数据是否按预期保存到 Amazon S3 并可供您的下游工作负载使用。

## AWS Glue Studio 笔记本交互
<a name="q-using-example-interactions-notebooks"></a>

**注意**  
 AWS Glue Studio 笔记本中的 Amazon Q 数据集成体验仍然侧重于基于 DynamicFrame 的数据集成流。

添加一个新单元格并输入您的评论以描述您想要实现的目标。按下 **Tab** 键和 **Enter** 键后，系统将显示建议的代码。

第一个意图是提取数据：*“请提供用于读取 Glue Data Catalog 表的代码”*，接着是*“请提供用于应用筛选转换的代码，筛选条件为 star\$1rating>3”*，以及*“请提供将数据帧写入 S3 并保存为 Parquet 格式的代码”*。

![\[示例：使用 AWS Glue Studio 笔记本向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/q-notebook-experience-1.gif)


![\[示例：使用 AWS Glue Studio 笔记本向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/q-notebook-experience-2.gif)


![\[示例：使用 AWS Glue Studio 笔记本向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/q-notebook-experience-3.gif)


与 Amazon Q 聊天体验类似，系统会提供建议的代码。按 **Tab** 键可选择建议的代码。

您可以通过在生成的代码中填写相应的来源选项来运行每个单元。在运行过程中的任意时刻，您还可以使用 `show()` 方法预览数据集的样本。

 您可以通过编程方式或选择**运行**将笔记本作为作业运行。

### 复杂提示
<a name="q-using-example-interactions-notebooks-complex-prompt"></a>

您可以使用单个复杂提示生成完整的脚本。*“我在 S3 中有 JSON 数据，在 Oracle 中也有数据，需要将两者合并。请提供一个 Glue 脚本，该脚本可以从两个来源读取数据、进行联接，然后将结果写入 Redshift。”*

![\[示例：使用 AWS Glue Studio 笔记本向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/q-notebook-experience-4.gif)


您可能会注意到，在笔记本上，AWS Glue 中的 Amazon Q 数据集成生成的代码片段与 Amazon Q 聊天中生成的代码片段相同。

您可以将笔记本作为作业运行，方法是通过选择**运行**来运行或以编程方式运行。

# 在 AWS Glue 中将上下文感知与 Amazon Q 数据集成配合使用
<a name="q-context-awareness"></a>

 现在，您可以使用 Amazon Q 数据集成中基于查询的上下文感知和 PySpark DataFrame 代码生成更高效地创建数据处理作业。例如，您可以使用此提示生成 PySpark 代码：“创建一个作业，使用连接‘erp\$1conn’从 Redshift 表‘analytics.salesorder’加载销售数据，筛选低于 50 美元的 order\$1amount，并以 parquet 格式保存到 Amazon S3。” 

 Amazon Q 将根据您的提示生成脚本，并使用您的问题中提供的详细信息设置数据集成工作流，例如连接配置、架构详细信息、数据库/表名称以及转换的列规范。连接选项密码等敏感信息将继续加密。

 如果您的提示中没有提供所需信息，则 Amazon Q 将放置占位符，您必须在运行生成的代码之前使用相应的值更新该代码。

 下面是有关如何使用上下文感知的示例。

## 示例：交互
<a name="q-context-awareness-examples"></a>

### 读取 Amazon S3 文件并写入 Amazon S3 存储桶
<a name="q-context-awareness-examples-generated-script-1"></a>

 提示：`Create an AWS Glue spark job that reads a file s3://amzn-s3-demo-bucket-input-bucket-name/input-filename.csv and saves it into the parquet file under directory s3://amzn-s3-demo-bucket-output-bucket-name/output-s3-prefix/`

```
import sys
from awsglue.transforms import *
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext.getOrCreate()
spark = SparkSession.builder.getOrCreate()

# Script generated for node S3DataSource
S3DataSource_dsource1 = spark.read.format("csv").load(
    "s3://amzn-s3-demo-bucket-input-bucket-name/input-filename.csv"
)

# Script generated for node S3DataSink
S3DataSource_dsource1.write.format("parquet").mode("append").save(
    "s3://amzn-s3-demo-bucket-output-bucket-name/output-s3-prefix/"
)
```

![\[向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本的示例。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/context-awareness-lakehouse-example.gif)


### 从 Lakehouse 获取数据并写入数据库
<a name="q-context-awareness-examples-generated-script-2"></a>

 提示：`write an ETL script to read from a Lakehouse table my-table in database my-database and write it to a RDS MySQL table my-target-table`

 对于您未提供信息的字段（例如，必需的 connectionName 用于 MySQL 数据接收器，并且在生成的代码中默认使用占位符 <connection-name>），系统会保留一个占位符，以便您在运行脚本之前填写所需的信息。

 生成的脚本：

```
import sys
from awsglue.transforms import *
from pyspark.context import SparkContext
from pyspark.sql import SparkSession
from connectivity.adapter import CatalogConnectionHelper

sc = SparkContext.getOrCreate()
spark = SparkSession.builder.getOrCreate()

# Script generated for node S3DataSource
S3DataSource_dsource1 = spark.read.format("parquet").load(
    "s3://amzn-lakehouse-demo-bucket/my-database/my-table"
)

# Script generated for node ConnectionV2DataSink
ConnectionV2DataSink_dsink1_additional_options = {"dbtable": "my-target-table"}
CatalogConnectionHelper(spark).write(
    S3DataSource_dsource1,
    "mysql",
    "<connection-name>",
    ConnectionV2DataSink_dsink1_additional_options,
)
```

![\[向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本的示例。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/context-awareness-example-interactions.gif)


### 示例：完整的 ETL 工作流
<a name="q-context-awareness-complex-example"></a>

 以下示例演示如何使用以下提示让 AWS Glue 创建 AWS Glue 脚本以完成完整的 ETL 工作流：`Create a AWS Glue ETL Script read from two AWS Glue Data Catalog tables venue and event in my database glue_db_4fthqih3vvk1if, join the results on the field venueid, filter on venue state with condition as venuestate=='DC' after joining the results and write output to an Amazon S3 S3 location s3://amz-s3-demo-bucket/output/ in CSV format`。

 该工作流包含从不同的数据来源（两个 AWS Glue Data Catalog 表）读取数据，并在读取之后通过联接两个读取的结果进行几次转换，根据某些条件进行筛选，然后以 CSV 格式将转换后的输出写入 Amazon S3 目标。

 生成的作业将使用从用户问题中提取的相应信息，填写数据来源、转换和接收操作的详细信息，如下所示。

```
import sys
from awsglue.transforms import *
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext.getOrCreate()
spark = SparkSession.builder.getOrCreate()

# Script generated for node CatalogDataSource
CatalogDataSource_dsource1 = spark.sql("select * from `glue_db_4fthqih3vvk1if`.`venue`")

# Script generated for node CatalogDataSource
CatalogDataSource_dsource2 = spark.sql("select * from `glue_db_4fthqih3vvk1if`.`event`")

# Script generated for node JoinTransform
JoinTransform_transform1 = CatalogDataSource_dsource1.join(
    CatalogDataSource_dsource2,
    (CatalogDataSource_dsource1["venueid"] == CatalogDataSource_dsource2["venueid"]),
    "inner",
)

# Script generated for node FilterTransform
FilterTransform_transform2 = JoinTransform_transform1.filter("venuestate=='DC'")

# Script generated for node S3DataSink
FilterTransform_transform2.write.format("csv").mode("append").save(
    "s3://amz-s3-demo-bucket/output//output/"
)
```

![\[向 AWS Glue 中的 Amazon Q 数据集成请求生成的 ETL 脚本的示例。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/context-awareness-complex-example.gif)


## 限制
<a name="q-context-awareness-limitations"></a>
+  上下文延续：
  +  上下文感知功能仅延续同一对话中上一次用户查询的上下文。除了最近的上一次查询之外，其不会保留上下文。
+  支持节点配置：
  +  目前，上下文感知仅支持各个节点所需的部分配置。
  +  计划在即将发布的版本中支持可选字段。
+  可用性：
  +  Q Chat 和 SageMaker Unified Studio 笔记本提供上下文感知和 DataFrame 支持。但这些功能尚未在 AWS Glue Studio 笔记本中提供。