

# AWS Glue：工作原理
<a name="how-it-works"></a>

AWS Glue 使用其他 AWS 服务以协调您的 ETL（提取、转换和加载）任务来构建数据仓库或数据湖，并生成输出流。AWS Glue 调用 API 操作来转换您的数据、创建运行时日志、存储您的任务逻辑，以及创建通知来帮助您监控任务运行。AWS Glue 控制台将这些服务连接到托管应用程序，因此您可以专注于创建和监控您的 ETL 工作。控制台代表您执行管理和作业开发操作。您可以向 AWS Glue 提供凭证和其他属性，以访问您的数据源并将内容写入数据目标。

AWS Glue 将负责预置和管理运行您的工作负载所需的资源。您不需要为 ETL 工具创建基础设施，因为 AWS Glue 为您提供了它。当需要资源时，为了减少启动时间，AWS Glue 会使用其热实例池中的实例来运行您的工作负载。

借助 AWS Glue，您可以使用数据目录中的表定义创建任务。作业由包含执行所需数据转换任务的指令的脚本组成。您可以使用触发器按计划或作为指定事件的结果启动作业。您可以确定目标数据驻留的位置以及哪些源数据填充目标。根据您的输入，AWS Glue 会将数据从源格式转换为目标格式。或者，您也可以在 AWS Glue 控制台或 API 中提供自定义脚本，以便根据您的特定要求处理数据。

**数据来源和目标**  
AWS Glue for Spark 允许您从多个系统和数据库读取和写入数据，包括：
+ Amazon S3
+ Amazon DynamoDB
+ Amazon Redshift
+ Amazon Relational Database Service (Amazon RDS)
+ 第三方 JDBC 可访问的数据库
+ MongoDB 和 Amazon DocumentDB (with MongoDB compatibility)
+ 其他市场连接器和 Apache Spark 插件

**数据流**  
AWS Glue for Spark 可以流式传输来自以下系统的数据：
+ Amazon Kinesis Data Streams
+ Apache Kafka

AWS Glue 可在多个 AWS 区域中使用。有关更多信息，请参阅 [AWS](https://docs.aws.amazon.com/general/latest/gr/rande.html) 中的 Amazon Web Services 一般参考 区域和终端节点。

**Topics**
+ [无服务器 ETL 作业在隔离环境中运行](#how-it-works-isolation)
+ [AWS Glue概念](components-key-concepts.md)
+ [AWS Glue 组件](components-overview.md)
+ [AWS Glue for Spark 和 AWS Glue for Ray](how-it-works-engines.md)
+ [借助 AWS Glue 将半结构化架构转换为关系架构](schema-relationalize.md)
+ [AWS Glue 类型系统](glue-types.md)

## 无服务器 ETL 作业在隔离环境中运行
<a name="how-it-works-isolation"></a>

AWS Glue 在您选择的引擎 Spark 或 Ray 中在无服务器环境中运行 ETL 作业。AWS Glue 在用其自己的服务账户预置和管理的虚拟资源上运行这些作业。

AWS Glue 专用于执行以下操作：
+ 隔离客户数据。
+ 保护传输中的和静态的客户数据。
+ 仅在响应客户请求过程中需要时，才使用临时的、限定范围的凭证或客户对其账户中的 IAM 角色的同意来访问客户数据。

在 ETL 作业的预置过程中，您可以在 Virtual Private Cloud（VPC）中提供输入数据源和输出数据目标。此外，您还提供访问数据源和目标所需的 IAM 角色、VPC ID、子网 ID 和安全组。对于每个元组（客户账户 ID、IAM 角色、子网 ID 和安全组），AWS Glue 会创建一个新环境，此环境在网络和管理级别上与您 AWS Glue 服务账户内的所有其他环境隔离。

 您可以在 AWS 账户中创建和配置 AWS Glue 资源，例如数据目录、作业和爬网程序。然后，这些资源将与您在创建过程中指定的 IAM 角色和网络设置（子网和安全组）相关联。

AWS Glue 使用私有 IP 地址在子网中创建弹性网络接口。作业使用这些弹性网络接口来访问数据来源和数据目标。进出和位于作业运行环境中的流量是由您的 VPC 和网络策略控制的，但有一个例外：对 AWS Glue 库的调用可以通过 AWS Glue VPC 将流量委托给 AWS Glue API 操作。所有 AWS Glue API 调用都被记录下来，因此，数据所有者可以通过启用将审核日志提供给您账户的 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) 来审核 API 访问权限。

运行 ETL 任务的 AWS Glue 托管环境受到与其他 AWS 服务遵循的相同安全做法的保护。有关实践和安全责任共担的概述，请参阅 [AWS 安全流程简介](https://docs.aws.amazon.com/whitepapers/latest/introduction-aws-security/welcome.html)白皮书。

# AWS Glue概念
<a name="components-key-concepts"></a>

 AWS Glue 是一项完全托管式的 ETL（提取、转换、加载）服务，让您能够在不同的数据来源和目标之间轻松移动数据。关键组件包括：
+  **Data Catalog**：一种元数据存储，其中包含 ETL 工作流的表定义、作业定义和其他控制信息。
+  **爬网程序**：连接到数据来源、推断数据架构以及在 Data Catalog 中创建元数据表定义的程序。
+  **ETL 作业**：从源中提取数据、使用 Apache Spark 脚本进行转换并将其加载到目标中的业务逻辑。
+  **触发器**：基于计划或事件启动作业运行的机制。

 典型的工作流涉及：

1.  在 Data Catalog 中定义数据来源和目标。

1.  通过爬网程序以使用来自数据来源的表元数据填充 Data Catalog。

1.  使用转换脚本定义 ETL 作业，以移动和处理数据。

1.  按需运行作业或基于触发器运行作业。

1.  使用控制面板监控作业性能。

 下图表明了 AWS Glue 环境的架构。

![\[在 AWS Glue 中填充您的数据目录和处理 ETL 数据流的基本概念。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/HowItWorks-overview.png)


您可以在 * 中定义*作业AWS Glue来完成从数据源提取、转换和加载 (ETL) 数据到数据目标所需的工作。您通常会执行以下操作：
+ 对于数据存储源，您定义*爬网程序* 以使用元数据表定义填充 AWS Glue Data Catalog。您将爬网程序指向数据存储，并且爬网程序在数据目录中创建表定义。对于流式处理源，您可以手动定义数据目录表并指定数据流属性。

  除了表定义，AWS Glue Data Catalog 还包含定义其他 ETL 作业所需的其他元数据。在定义作业以转换数据时，您可以使用此元数据。
+ AWS Glue 可以生成用于转换数据的脚本。或者，您可以在 AWS Glue 控制台或 API 中提供脚本。
+ 您可以按需运行任务，也可以将其设置为在指定的*触发器*发生时启动。触发器可以是基于时间的计划或事件。

  当您的任务运行时，脚本从数据源中提取数据，转换数据，并将其加载到数据目标。该脚本在 AWS Glue 中的 Apache Spark 环境内运行。

**重要**  
AWS Glue 中的表和数据库是 AWS Glue Data Catalog 中的对象。它们包含元数据；它们不包含数据存储中的数据。


|  | 
| --- |
|  **基于文本的数据（如 CSV）必须采用 `UTF-8` 进行编码，以便 AWS Glue 成功处理该数据。有关更多信息，请参阅 Wikipedia 中的 [UTF-8](https://en.wikipedia.org/wiki/UTF-8)。**  | 

## AWS Glue 术语
<a name="components-major"></a>

AWS Glue 依赖于多个组件之间的交互来创建和管理您的提取、转换、加载（ETL）工作流程。

### AWS Glue Data Catalog
<a name="components-data-catalog"></a>

AWS Glue 中的持久元数据存储。它包含表定义、作业定义以及其他用于管理您的 AWS Glue 环境的控制信息。每个 AWS 账户在每个区域有一个 AWS Glue Data Catalog。

### 分类器
<a name="components-classifier"></a>

确定您的数据的架构。AWS Glue 提供常见文件类型的分类器，如 CSV、JSON、Avro、XML 等。此外，它还使用 JDBC 连接为常用关系数据库管理系统提供分类器。您可以使用 grok 模式或在 XML 文档中指定行标记来编写自己的分类器。

### Connection
<a name="components-connection"></a>

数据目录对象，其中包含了连接到特定数据存储所需的属性。

### 爬网程序
<a name="components-crawler"></a>

该程序连接到数据存储（源或目标），通过分类器的优先级列表不断更新以确定您的数据架构，然后在 AWS Glue Data Catalog 中创建元数据表。

### 数据库
<a name="components-database"></a>

一组关联的数据目录表定义，这些定义组织到一个逻辑组内。

### 数据存储、数据源、数据目标
<a name="components-data-store"></a>

*数据存储*是持久存储数据的存储库。示例包括 Amazon S3 存储桶和关系数据库。*数据源*是用作进程或转换输入的数据存储。*数据目标*是进程或转换写入的数据存储。

### 开发终端节点
<a name="components-development-endpoint"></a>

一种可以用来开发和测试 AWS Glue ETL 脚本的环境。

### 动态帧
<a name="components-dynamic-frame"></a>

支持嵌套数据（如结构和数组）的分布式表。每条记录都是自我描述，旨在使用半结构化数据实现架构灵活性。每条记录都包含数据和描述该数据的架构。您可以在 ETL 脚本中同时使用动态帧和 Apache Spark DataFrames，并在它们之间进行转换。动态帧为数据清理和 ETL 提供了一系列转换。

### 作业
<a name="components-job"></a>

执行 ETL 工作所需的业务逻辑。它由转换脚本、数据源和数据目标组成。作业运行通过可由事件计划或触发的触发器启动。

### 任务性能控制面板
<a name="features-job-monitoring"></a>

AWS Glue 为您的 ETL 任务提供一个全面的运行控制面板。控制面板显示特定时间范围内运行的任务的相关信息。

### 笔记本界面
<a name="components-notebook-server"></a>

通过一键式设置增强了笔记本体验，便于作业创作和数据探索。笔记本和连接都将自动为您配置。您可以使用基于 Jupyter Notebook 的笔记本界面，使用 AWS Glue 无服务器 Apache Spark ETL 基础设施以交互方式开发、调试和部署脚本和工作流。您还可以在笔记本环境中执行临时查询、数据分析和可视化（例如，表格和图表）。

### Script
<a name="components-script"></a>

从源中提取数据、转换并将其加载到目标中的代码。AWS Glue 会生成 PySpark 或 Scala 脚本。

### 表
<a name="components-table"></a>

表示您的数据的元数据定义。无论您的数据是位于 Amazon Simple Storage Service（Amazon S3）文件、Amazon Relational Database Service（Amazon RDS）表还是其他数据集中，表都定义了数据的架构。AWS Glue Data Catalog 中的表包含列的名称、数据类型定义、分区信息以及有关基本数据集的其他元数据。数据的架构在您的 AWS Glue 表定义中表示。实际数据留存在原始数据存储中，无论是在文件中还是关系数据库表中。AWS Glue 在 AWS Glue Data Catalog 中编录您的文件和关系数据库表。在您创建 ETL 任务时，它们用作源和目标。

### 转换
<a name="components-transform"></a>

用于将数据处理为其他格式的代码逻辑。

### 触发器
<a name="components-trigger"></a>

启动 ETL 任务。可以根据计划时间或事件来定义触发器。

### 可视化任务编辑器
<a name="features-visual-editor"></a>

 可视化作业编辑器是一个图形界面，可以方便地在 AWS Glue 中创建、运行和监控提取、转换和加载（ETL）任务。您可以直观地编写数据转换工作流，并在 AWS Glue 的基于 Apache Spark 的无服务器 ETL 引擎上顺畅运行，检查作业的每个步骤中的模式和数据结果。

### 工作线程
<a name="components-worker"></a>

借助 AWS Glue，您只需按 ETL 任务运行所需时间付费。没有要管理的资源，无预付费用，您无需为启动或关闭时间付费。您将根据用于运行 ETL 任务的**数据处理单元**（缩写为 DPU）的数量按小时费率支付费用。单个数据处理单元（DPU）也称为一个 *Worker*。AWS Glue 附带多种 Worker 类型，可帮助您选择符合作业延迟和成本要求的配置。Worker 提供标准、G.1X、G.2X、G.4X、G.8X、G.12X、G.16X、G.025XX 以及内存优化型 R.1X、R.2X、R.4X、R.8X 配置。

# AWS Glue 组件
<a name="components-overview"></a>

AWS Glue 提供控制台和 API 操作来设置和管理您的提取、转换和加载 (ETL) 工作负载。您可以通过多个特定于语言的开发工具包和 AWS Command Line Interface (AWS CLI) 来使用 API 操作。有关使用 AWS CLI 的信息，请参阅 [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)。

AWS Glue 使用 AWS Glue Data Catalog来存储有关数据源、转换和目标的元数据。数据目录是 Apache Hive 元存储的简易替代。AWS Glue Jobs system提供用于为您的数据定义、安排和运行 ETL 操作的托管基础设施。有关 AWS Glue API 的更多信息，请参阅[AWS Glue API](aws-glue-api.md)。

## AWS Glue 管理控制台
<a name="console-intro"></a>

您可以使用 AWS Glue 控制台来定义和协调您的 ETL 工作流程。该控制台在 AWS Glue Data Catalog和 AWS Glue Jobs system中调用多个 API 操作以执行以下任务：
+ 定义 AWS Glue 对象，如作业、表、爬网程序和连接。
+ 安排爬网程序的运行时间。
+ 为作业触发器定义事件或计划。
+ 搜索和筛选 AWS Glue 对象的列表。
+ Edit 转换脚本。

## AWS Glue Data Catalog
<a name="data-catalog-intro"></a>

 AWS Glue Data Catalog 是您在 AWS 云中的持久性技术元数据存储。

每个 AWS 账户在每个 AWS 区域有一个 AWS Glue Data Catalog。每个数据目录都是组织成数据库的高度可扩展的表集合。表是存储在 Amazon RDS、Apache Hadoop Distributed File System、Amazon OpenSearch Service 等源中的结构化或半结构化数据集合的元数据表示形式。AWS Glue Data Catalog 提供了一个统一的存储库，不同的系统可以在其中存储和查找元数据来跟踪数据孤岛中的数据。然后，您可以使用元数据在各种应用程序中以统一的方式查询和转换该数据。

 您将数据目录与 AWS Identity and Access Management 策略和 Lake Formation 一同使用，从而控制对表和数据库的访问。通过这样做，您可以允许企业中的不同组将数据安全地发布到更广泛的组织，同时以高度精细的方式保护敏感信息。

数据目录以及 CloudTrail 和 Lake Formation 还提供全面的审计和监管功能，其中有架构更改跟踪和数据访问控制。这有助于确保数据不会被不当修改或无意中共享。

 有关保护及审计 AWS Glue Data Catalog 的信息，请参阅：
+  **AWS Lake Formation** – 有关更多信息，请参阅《AWS Lake Formation 开发人员指南》**中的 [什么是 AWS Lake Formation？](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) 
+  **CloudTrail** – 有关更多信息，请参阅 *AWS CloudTrail 用户指南*中的[什么是 CloudTrail？](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 

以下是其他 AWS 服务和使用 AWS Glue Data Catalog 的开源项目：
+ **Amazon Athena** – 有关更多信息，请参阅《Amazon Athena 用户指南》**中的 [了解表、数据库和数据目录](https://docs.aws.amazon.com/athena/latest/ug/understanding-tables-databases-and-the-data-catalog.html)。
+ **Amazon Redshift Spectrum** – 有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [使用 Amazon Redshift Spectrum 查询外部数据](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html)。
+ **Amazon EMR** – 有关更多信息，请参阅《Amazon EMR 管理指南》**中的 [使用基于资源的策略实现 Amazon EMR 对 AWS Glue Data Catalog 的访问](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html)。
+ **Apache Hive 元存储的 AWS Glue Data Catalog 客户端** – 有关此 GitHub 项目的更多信息，请参阅 [Apache Hive 元存储的 AWS Glue Data Catalog 客户端](https://github.com/awslabs/aws-glue-data-catalog-client-for-apache-hive-metastore)。



## AWS Glue 爬网程序和分类器
<a name="crawling-intro"></a>

AWS Glue 还能让您设置爬网程序，它可以扫描所有类型的存储库中的数据，对其进行分类，从中提取架构信息，并自动在 AWS Glue Data Catalog中存储元数据。然后 AWS Glue Data Catalog 可用于指导 ETL 操作。

有关如何设置爬网程序和分类器的信息，请参阅[使用爬网程序填充 Data Catalog](add-crawler.md)。有关如何使用 AWS Glue API 编程爬网程序和分类器的信息，请参阅[爬网程序和分类器 API](aws-glue-api-crawler.md)。

## AWS Glue ETL 操作
<a name="etl-script-intro"></a>

通过使用数据目录中的元数据，AWS Glue 可以自动生成具有 AWS Glue 扩展的 Scala 或 PySpark（用于 Apache Spark 的 Python API）脚本，您可以使用和修改它来执行各种 ETL 操作。例如，您可以提取、清除和转换原始数据，然后将结果存储在不同的存储库中，以便可以对其进行查询和分析。此类脚本可能会将 CSV 文件转换为关系形式并将其保存到 Amazon Redshift 中。

有关如何使用 AWS Glue ETL 功能的更多信息，请参阅[Spark 脚本编程](aws-glue-programming.md)。

## AWS Glue 中的流式处理 ETL
<a name="streaming-etl-intro"></a>

通过 AWS Glue，您能够使用连续运行的任务对流数据执行 ETL 操作。AWS Glue 流式处理 ETL 基于 Apache Spark Structured Streaming 引擎而构建，可以从 Amazon Kinesis Data Streams、Apache Kafka 和 Amazon Managed Streaming for Apache Kafka（Amazon MSK）提取流。流式处理 ETL 可以清理和转换流数据，并将其加载到 Amazon S3 或 JDBC 数据存储中。在 AWS Glue 中使用流式处理 ETL 可以处理 IoT 流、点击流和网络日志等事件数据。

如果您知道流数据源的架构，则可以在数据目录表中指定该架构。如果没有，则可以在流式 ETL 任务中启用架构检测。然后，任务会根据传入的数据自动确定架构。

流式处理 ETL 任务可以同时使用 AWS Glue 内置转换和 Apache Spark Structured Streaming 的原生转换。有关更多信息，请参阅 Apache Spark 网站上的[流式处理 DataFrame/数据集的操作](https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#operations-on-streaming-dataframesdatasets)。

有关更多信息，请参阅 [在 AWS Glue 中流式处理 ETL 作业](add-job-streaming.md)。

## AWS Glue 作业系统
<a name="job-orchestration-intro"></a>

AWS Glue Jobs system提供托管基础设施以协调 ETL 工作流程。您可以在 AWS Glue 中创建作业，用于自动处理您用于提取、转换数据并将数据传输到不同位置的脚本。作业可以安排和串联，也可以由诸如新数据到达之类的事件触发。

有关如何使用 AWS Glue Jobs system的更多信息，请参阅[监控 AWS Glue](monitor-glue.md)。有关使用 AWS Glue Jobs system API 编程的信息，请参阅[作业 API](aws-glue-api-jobs.md)。

## Visual ETL 组件
<a name="glue-studio-ui-components"></a>

 使用 AWS Glue 可以通过可操作的可视画布创建 ETL 作业。

![\[屏幕截图显示资源面板已关闭。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/glue-studio-canvas.png)


### ETL 作业菜单
<a name="glue-studio-ui-components-menu"></a>

 使用画布顶部的菜单选项可以访问有关作业的各种视图和配置详细信息。
+  **可视化** — 可视化任务编辑器画布。您可以在此处添加节点以创建任务。
+  **脚本** – ETL 作业的脚本表示形式。AWSGlue 基于作业的可视化表示形式来生成脚本。您也可以编辑脚本或下载脚本。
**注意**  
 如果您选择编辑脚本，则作业创作体验将永久转换为纯脚本模式。之后，您将无法再使用可视化编辑器来编辑作业。在选择编辑脚本之前，您应该添加所有作业源、转换和目标，并使用可视化编辑器进行所需的所有更改。
+  **作业详细信息** —“作业详细信息”选项卡允许您通过设置作业属性来配置作业。有多个基本属性，例如您的作业名称和描述、IAM 角色、作业类型、AWS Glue 版本、语言、工作线程类型、工作线程数量、作业书签、弹性执行、重试次数和作业超时等，还有多个高级属性，例如连接、库、作业参数和标签等。
+  **运行** — 作业运行后，可以访问此选项卡以查看您过去的作业运行情况。
+  **数据质量** — 数据质量评估和监控数据资产的质量。您可以在此选项卡上详细了解如何使用数据质量，并在作业中添加数据质量转换。
+  **计划** — 您已计划的作业显示在此选项卡中。如果此作业没有附加计划，则无法访问此选项卡。
+  **版本控制** — 您可以将作业配置到 Git 存储库，从而将 Git 用于您的作业。

### Visual ETL 面板
<a name="glue-studio-ui-components-panels"></a>

 当您在画布中工作时，有几个面板可以帮助您配置节点，或者帮助您预览数据和查看输出架构。
+  **属性** — 当您在画布上选择节点时，将出现“属性”面板。
+  **数据预览** —“数据预览”面板提供数据输出的预览，这样您就可以在运行作业和检查输出之前做出决策。
+  **输出架构** —“输出架构”选项卡允许您查看和编辑转换节点的架构。

 **调整面板大小** 

 您可以调整屏幕右侧的“属性”面板以及包含“数据预览”和“输出架构”选项卡的底部面板的大小，方法是单击面板边缘并向左和向右或向上和向下拖动。
+  **属性面板** — 通过单击并拖动屏幕右侧画布边缘来调整属性面板的大小，然后向左拖动以扩大其宽度。默认情况下，面板处于折叠状态，当选择节点时，属性面板会以其默认大小打开。
+  **数据预览和输出架构面板** — 通过单击并拖动屏幕底部画布的底部边缘来调整底部面板的大小，然后向上拖动以扩大其高度。默认情况下，面板处于折叠状态，当选择节点时，底部面板会以其默认大小打开。

### 作业画布
<a name="glue-studio-ui-components-canvas"></a>

 您可以直接在 Visual ETL 画布上添加、移除和移动/重新排序节点。可以把它想象成您的工作空间，用来创建一个功能齐全的 ETL 作业，该作业从数据来源开始，可以以数据目标结尾。

 当您在画布上处理节点时，您可以使用一个工具栏帮助您放大和缩小、移除节点、建立或编辑节点之间的连接、更改作业流方向以及撤销或重做操作。

![\[屏幕截图显示资源面板已关闭。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/glue-studio-canvas-toolbar.png)


 浮动工具栏固定在画布的右上角大小，其中包含几张执行操作的图像：
+  **布局图标** — 工具栏中的第一个图标是布局图标。默认情况下，视觉作业的方向是从上到下。它通过从左到右水平排列节点来重新排列可视化作业的方向。再次单击布局图标将方向更改为从上到下。
+  **重新居中图标** — 重新居中图标通过居中来更改画布视图。您可以用它来处理大型作业，回到中心位置。
+  **放大图标** — 放大图标可放大画布上节点的大小。
+  **缩小图标** — 缩小图标可缩小画布上节点的大小。
+  **垃圾桶图标** — 垃圾桶图标将节点从可视化作业中移除。必须先选择一个节点。
+  **撤销图标** — 撤销图标会撤销上次对可视化作业执行的操作。
+  **重做图标** — 重做图标会重复对可视化作业执行的上一个操作。

 **使用迷你地图** 

![\[屏幕截图显示了迷你地图的特写镜头。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/glue-studio-canvas-minimap.png)


### 资源面板
<a name="glue-studio-ui-components-canvas-resource-panel"></a>

 资源面板包含所有可用的数据来源、转换操作和连接。单击“\$1”图标在画布上打开资源面板。这将打开资源面板。

 要关闭资源面板，请单击资源面板右上角的 **X**。这将隐藏面板，直到您准备好再次打开它为止。

![\[屏幕截图显示资源面板已打开。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/resource-panel-open.png)


#### 常用转换和数据
<a name="glue-studio-ui-components-popular-transforms"></a>

 面板顶部是**常用转换和数据**的集合。这些节点在 AWS Glue 中很常用。选择一个将其添加到画布中。也可以通过单击**常用转换和数据**标题旁边的三角形来隐藏**常用转换和数据**。

 在**常用转换和数据**部分下方，您可以搜索转换和数据来源节点。在您键入时会显示结果。您在搜索查询中添加的字母越多，结果列表就会越小。搜索结果是根据节点名称和/或描述填充的。选择一个节点将其添加到画布中。

#### 转换和数据
<a name="glue-studio-ui-components-transforms-and-data"></a>

 有两个选项卡可将节点组织为**转换**和**数据**。

 **转换** — 选择**转换**选项卡时，可以选择所有可用的转换。选择一个转换将其添加到画布中。您也可以选择转换列表底部的**添加转换**，这将打开一个用于创建[自定义视觉转换](https://docs.aws.amazon.com/glue/latest/ug/custom-visual-transform.html)的文档的新页面。按照这些步骤操作可以创建您自己的转换。然后，您的转换将出现在可用转换列表中。

 **数据** — 数据选项卡包含**来源**和**目标**的所有节点。您可以通过单击“来源”或“目标”标题旁边的三角形来隐藏“来源”和“目标”。您可以通过再次单击三角形来取消隐藏来源和目标。选择来源节点或目标节点将其添加到画布中。您也可以选择**管理连接**来添加新连接。这将在控制台中打开“连接”页面。

# AWS Glue for Spark 和 AWS Glue for Ray
<a name="how-it-works-engines"></a>

在 AWS Glue on Apache Spark（AWS Glue ETL），您可以使用 PySpark 编写 Python 代码来大规模处理数据。Spark 是解决这个问题的熟悉解决方案，但是具有以 Python 为中心背景的数据工程师可能会发现这种过渡并不直观。Spark DataFrame 模型不是无缝的“Pythonic”，它反映了它所构建的 Scala 语言和 Java 运行时。

在 AWS Glue 中，您可以使用 Python shell 作业来运行原生 Python 数据集成。这些作业在单个 Amazon EC2 实例上运行，并且受到该实例容量的限制。这限制了您可以处理的数据的吞吐量，并且在处理大数据时维护成本会很高。

AWS Glue for Ray 允许您纵向扩展 Python 工作负载，而无需在学习 Spark 上投入大量资金。您可以利用 Ray 表现某些更好的场景。通过为您提供选择，您可以利用 Spark 和 Ray 的优势。

AWS Glue ETL 和 AWS Glue for Ray 在底层是不同的，因此它们支持不同的功能。请查看文档以了解支持的功能。

## AWS Glue for Ray 有什么用？
<a name="how-it-works-ray"></a>

Ray 是一个开源分布式计算框架，您可以使用它来扩展工作负载，重点是 Python。有关 Ray 的更多信息，请参阅 [Ray 网站](https://www.ray.io/)。AWS GlueRay 作业和交互式会话允许您在 AWS Glue 中使用 Ray。

您可以使用 AWS Glue for Ray 为计算编写 Python 脚本，这些脚本将在多台机器上并行运行。在 Ray 作业和交互式会话中，您可以使用熟悉的 Python 库 （例如，pandas），使您的工作流程易于编写和运行。有关 Ray 数据集的更多信息，请参阅 Ray 文档中的 [Ray 数据集](https://docs.ray.io/en/latest/data/dataset.html)。有关 pandas 的更多信息，请参阅 [Pandas 网站](https://pandas.pydata.org/)。

使用 AWS Glue for Ray 时，只需几行代码，即可针对企业级的大数据运行 pandas 工作流程。可从 AWS Glue 控制台或 AWS 开发工具包创建 Ray 作业。您也可以打开 AWS Glue 交互式会话，在无服务器 Ray 环境中运行您的代码。AWS Glue Studio 中尚不支持可视化作业。

AWS Glue for Ray 作业允许您按计划运行脚本或响应来自 Amazon EventBridge 的事件。作业将日志信息和监控统计信息存储在 CloudWatch 中，使您能够了解脚本的运行状况和可靠性。有关 AWS Glue 作业系统的更多信息，请参阅 [在 AWS Glue 中处理 Ray 作业](ray-jobs-section.md)。

Ray 可自动扩展 Python 代码的工作，方法是将处理分布在一组机器上，然后根据负载对其进行实时重新配置。这可以提高某些工作负载的每美元性能。借助 Ray 作业，我们在 AWS Glue 作业模型中原生内置了自动扩缩功能，因此您可以充分利用此功能。Ray 任务在 AWS Graviton 上运行，从而提高了整体性价比。

除了节省成本外，您还可以使用原生自动扩缩来运行 Ray 工作负载，而无需花时间进行集群维护、调整和管理。您可以开箱即用熟悉的开源库，比如 pandas 和适用于 Panda 的 AWS 开发工具包。这些可以提高您在 AWS Glue for Ray 上开发时的迭代速度。使用 AWS Glue for Ray 时，您将能够快速开发和运行具有成本效益的数据集成工作负载。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/OJ3ZngYTyNE/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/OJ3ZngYTyNE)


# 借助 AWS Glue 将半结构化架构转换为关系架构
<a name="schema-relationalize"></a>

通常会想将半结构化数据转换为关系表。从概念上说，您是将分层架构展平成关系架构。AWS Glue 可以即时为您执行此转换。

半结构化数据通常包含标记以标识数据中的实体。它可以具有不带固定架构的嵌套数据结构。有关半结构化数据的更多信息，请参阅维基百科中的[半结构化数据](https://en.wikipedia.org/wiki/Semi-structured_data)。

关系数据由包含行和列的表表示。表之间的关系可以由主键 (PK) 与外键 (FK) 关系表示。有关更多信息，请参阅维基百科中的[关系数据库](https://en.wikipedia.org/wiki/Relational_database)。

AWS Glue 使用爬网程序来推断半结构化数据的架构。然后，它使用 ETL (提取、转换和加载) 作业将数据转换为关系架构。例如，您可能想要将 Amazon Simple Storage Service（Amazon S3）源文件中的 JSON 数据解析为 Amazon Relational Database Service（Amazon RDS）表。了解 AWS Glue 如何处理架构之间的差异可以帮助您了解转换过程。

此图显示了 AWS Glue 如何将半结构化架构转换为关系架构。

![\[显示从半结构化架构转换为关系架构的流。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/HowItWorks-schemaconversion.png)


下图说明了以下内容：
+ 单值 `A` 直接转换为关系列。
+ 值对 `B1` 和 `B2` 转换为两个关系列。
+ 结构 `C` 以及子结构 `X` 和 `Y` 转换为两个关系列。
+ 数组 `D[]` 转换为具有指向另一个关系表的外键 (FK) 的关系列。除了主键 (PK)，第二个关系表还具有包含数组中项的偏移和值的列。

# AWS Glue 类型系统
<a name="glue-types"></a>

 AWS Glue 使用多类型系统为数据系统提供多功能接口，这些数据系统以截然不同的方式存储数据。本文档消除了 AWS Glue 类型系统和数据标准的歧义。

## AWS Glue Data Catalog 类型
<a name="glue-types-catalog"></a>

Data Catalog 是存储在各种数据系统中的表和字段的注册表，即元存储。当 AWS Glue 组件（例如 AWS Glue 爬网程序和使用 Spark 作业的 AWS Glue）写入 Data Catalog 时，它们会使用内部类型系统来跟踪字段类型。这些值显示在 AWS Glue 控制台中表架构的**数据类型**列中。这种类型系统基于 Apache Hive 的类型系统。有关 Apache Hive 类型系统的更多信息，请参阅 Apache Hive 维基中的[类型](https://cwiki.apache.org/confluence/display/hive/languagemanual+types)。有关特定类型和支持的更多信息，作为 Schema Builder 的一部分，AWS Glue 控制台中提供了示例。

### 验证、兼容性和其他使用
<a name="w2aac11c31b5b5"></a>

Data Catalog 不验证写入类型字段的类型。当 AWS Glue 组件读取和写入 Data Catalog 时，它们将相互兼容。AWSGlue 组件还旨在保持与 Hive 类型的高度兼容性。但是，AWS Glue 组件不能保证与所有 Hive 类型兼容。这允许在处理 Data Catalog 中的表时与 Athena DDL 等工具进行互操作。

由于 Data Catalog 不验证类型，其他服务可能会使用数据目录来跟踪使用严格符合 Hive 类型系统的系统或任何其他系统的类型。

## 使用 Spark 脚本的 AWS Glue 中的类型
<a name="glue-types-spark"></a>

当使用 Spark 脚本的 AWS Glue 解释或转换数据集时，我们会提供 `DynamicFrame`，脚本中使用的数据集的内存表示形式。`DynamicFrame` 的目标与 Spark `DataFrame` 的目标类似：它会为数据集建模，这样 Spark 就可以对数据进行调度和执行转换。我们通过提供 `toDF` 和 `fromDF` 方法来保证 `DynamicFrame` 的类型表示形式与 `DataFrame` 相互兼容。

如果可以推断出类型信息或将其提供给 `DataFrame`，则可以推断出类型信息或将其提供给 `DynamicFrame`，除非另有记录。当我们为特定数据格式提供优化的读取器或写入器时，如果 Spark 可以读取或写入您的数据，我们提供的读取器和写入器也可以，会受记录限制。有关读取器和写入器的更多信息，请参阅 [AWS Glue for Spark 中的输入和输出的数据格式选项](aws-glue-programming-etl-format.md)。

### 选择类型
<a name="w2aac11c31b7b7"></a>

`DynamicFrames` 提供在数据集中为字段建模的机制，这些字段的值在磁盘上的不同行中可能具有不一致的类型。例如，一个字段可以在某些行中将数字存储为字符串，在其他行中则存储为整数。此机制是一种名为 `Choice` 的内存中类型。我们提供转换（如 `ResolveChoice` 方法），以便将 Choice 列解析为具体类型。AWSGlue ETL 不会在正常操作过程中将选择类型写入 Data Catalog；选择类型仅存在于数据集的 DynamicFrame 内存模型的上下文中。有关选择类型的使用示例，请参阅 [代码示例：使用 ResolveChoice、Lambda 和 ApplyMapping 进行数据准备](aws-glue-programming-python-samples-medicaid.md)。

## AWS Glue 爬网程序类型
<a name="glue-types-crawler"></a>

爬网程序旨在为您的数据集生成一致、可用的架构，然后将其存储在 Data Catalog 中供其他 AWS Glue 组件和 Athena 使用。爬网程序处理 Data Catalog 上一节中描述的类型，[AWS Glue Data Catalog 类型](#glue-types-catalog)。为了在“选择”类型场景（其中一列包含两种或更多种类型的值）中生成可用类型，爬网程序将创建一种为潜在类型建模的 `struct` 类型。