排除 Amazon S3 存储类 - AWS Glue

排除 Amazon S3 存储类

如果您要运行从 Amazon Simple Storage Service(Amazon S3)读取文件或分区的 AWS Glue ETL 任务,则可以排除某些 Amazon S3 存储类类型。

Amazon S3 中提供以下存储类:

  • STANDARD – 用于频繁访问数据的通用存储。

  • INTELLIGENT_TIERING – 用于具有未知或访问模式不断变化的数据。

  • STANDARD_IAONEZONE_IA – 用于长期存在但不常访问的数据。

  • GLACIERDEEP_ARCHIVEREDUCED_REDUNDANCY – 用于长期归档和数字化保存。

有关更多信息,请参阅《Amazon S3 开发人员指南》中的 Amazon S3 存储类

本节中的示例向您展示了如何排除 GLACIERDEEP_ARCHIVE 存储类。这些类允许您列出文件,但除非文件已还原,否则它们不会让您读取文件。(有关更多信息,请参阅《Amazon S3 开发人员指南》中的还原存档对象

通过使用存储类排除,您可以确保您的 AWS Glue 作业可以在具有跨这些存储类层的分区的表上工作。如果没有排除,则从这些层读取数据的作业将失败,并显示以下错误:AmazonS3Exception:操作对于此对象的存储类无效。

有多种不同的方法可供您在 AWS Glue 中筛选 Amazon S3 存储类。

创建动态帧时排除 Amazon S3 存储类

要在创建动态帧时排除 Amazon S3 存储类,请使用 additionalOptions 中的 excludeStorageClasses。 AWS Glue 会自动使用自己的 Amazon S3 Lister 实施列出和排除与指定存储类对应的文件。

以下 Python 和 Scala 示例显示了在创建动态帧时如何排除 GLACIERDEEP_ARCHIVE 存储类。

Python 示例:

glueContext.create_dynamic_frame.from_catalog( database = "my_database", tableName = "my_table_name", redshift_tmp_dir = "", transformation_ctx = "my_transformation_context", additional_options = { "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"] } )

Scala 示例:

val* *df = glueContext.getCatalogSource( nameSpace, tableName, "", "my_transformation_context", additionalOptions = JsonOptions( Map("excludeStorageClasses" -> List("GLACIER", "DEEP_ARCHIVE")) ) ).getDynamicFrame()

在数据目录表上排除 Amazon S3 存储类

您可以将 AWS Glue ETL 任务使用的存储类排除指定为 AWS Glue 数据目录中的表参数。您可以使用 AWS Command Line Interface (AWS CLI) 或以编程方式使用 API 在 CreateTable 操作中包含此参数。有关更多信息,请参阅 Table 结构CreateTable

您还可以在 AWS Glue 控制台上指定排除的存储类。

排除 Amazon S3 存储类(控制台)
  1. 登录 AWS Management Console,然后打开 AWS Glue 控制台,网址为:https://console.aws.amazon.com/glue/

  2. 在左侧的导航窗格中,选择 Tables (表)

  3. 选择列表中的表名称,然后选择 Edit table (编辑表)

  4. Table properties (表属性) 中,添加 excludeStorageClasses 作为键,添加 [\"GLACIER\",\"DEEP_ARCHIVE\"] 作为值。

  5. 选择 应用