

# 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` 类型。