在 AWS Glue 数据目录中定义表 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 AWS Glue 数据目录中定义表

您可以通过以下方式向数据目录中添加表定义:

当您使用控制台或 API 手动定义表时,您需要指定表架构和分类字段的值(指示数据源中数据的类型和格式)。如果爬网程序创建表,则数据格式和架构由内置分类器或自定义分类器确定。有关使用 AWS Glue 控制台创建表的更多信息,请参阅。在 AWS Glue 控制台上处理表

表分区

Amazon Simple Storage Service (Amazon S3) 文件夹的 AWS Glue 表定义可以描述分区表。例如,要提高查询性能,分区表可以使用月份的名称作为键将每月数据分隔为不同的文件。在 AWS Glue 中,表定义包含表的分区键。当 AWS Glue 评估 Amazon S3 文件夹中的数据以编目表时,它确定是否添加了单个表或分区表。

您可以在表上创建分区索引以获取分区的子集,而不是装载表中的所有分区。有关使用分区索引的信息,请参阅。使用分区索引

AWS Glue 才能为 Amazon S3 文件夹创建分区表,以下所有条件都必须为 true:AWS Glue:

  • 文件的架构类似,由 AWS Glue 确定。

  • 文件的数据格式是相同的。

  • 文件的压缩格式是相同的。

例如,您可能拥有一个名为的 Amazon S3 存储桶。my-app-bucket,在其中您存储了 iOS 和 Android 应用程序销售数据。该数据按年、月和日分区。适用于 iOS 和 Android 销售的数据文件具有相同的架构、数据格式和压缩格式。在 AWS Glue 数据目录中,AWS Glue 爬网程序使用年、月和日的分区键创建一个表定义。

以下 Amazon S3 列表:my-app-bucket显示某些分区。= 符号用于分配分区键值。

my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv ... my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv

数据目录也可以包含资源链路添加到表。表资源链接是指向本地或共享表的链接。目前,您只能在 AWS Lake Formation 中创建资源链路。创建指向表的资源链接后,您可以在使用表名的任何位置使用资源链接名称。与您拥有的表或与您共享的表一起,表资源链接由glue:GetTables()并作为条目显示在页面上的 “AWS Glue” 控制台。

数据目录还可以包含数据库资源链接。

有关资源链路的更多信息,请参阅。创建资源链路中的AWS Lake Formation 开发人员指南

使用爬网程序更新手动创建的数据目录表

您可能需要手动创建 AWS Glue 数据目录表,然后将它们保持为通过 AWS Glue 爬网程序进行更新。按计划运行的爬网程序可以添加新分区,并使用任何架构更改来更新表。这同样适用于从 Apache Hive 元存储中迁移的表。

要执行此操作,当您定义爬网程序时,不是指定一个或多个数据存储作为爬取源,而是指定一个或多个现有数据目录表。然后,爬网程序爬取由目录表指定的数据存储。在这种情况下,不会创建新表;而是更新手动创建的表。

以下是您可能需要手动创建目录表并将目录表指定为爬网程序源的其他原因:

  • 您想要选择目录表名称,但不依赖于目录表命名算法。

  • 在将其格式可能损坏分区检测的文件错误地保存在数据源路径的情况下,您可能希望阻止创建新表。

有关更多信息,请参阅爬网程序源类型