

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

 现在，您可以使用 Amazon Q 数据集成中基于查询的上下文感知和 PySpark DataFrame 代码生成更高效地创建数据处理作业。例如，您可以使用此提示生成 PySpark 代码：“创建一个作业，使用连接‘erp\_conn’从 Redshift 表‘analytics.salesorder’加载销售数据，筛选低于 50 美元的 order\_amount，并以 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 笔记本中提供。