在 Amazon Glue 控制台上处理表 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon Glue 控制台上处理表

Amazon Glue Data Catalog中的表是表示数据存储中的数据的元数据定义。您可以在运行爬网程序时创建表,也可以在 Amazon Glue 控制台中手动创建表。Amazon Glue 控制台中的 Tables (表) 列表显示表的元数据值。您可以在创建 ETL (提取、转换和加载) 作业时使用表定义来指定源和目标。

注意

随着最近对 Amazon 管理控制台的更改,您可能需要修改现有的 IAM 角色才能获得 SearchTables 权限。对于创建新角色,已将 SearchTables API 权限添加为默认。

要查看现有任务,请登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon Glue 控制台:https://console.aws.amazon.com/glue/。选择 Tables (表) 选项卡,然后使用 Add tables (添加表) 按钮来通过爬网程序或通过手动键入属性来创建表。

在控制台上添加表

要使用爬网程序添加表,请依次选择 Add tables (添加表) 和 Add tables using a crawler (使用爬网程序添加表)。然后按照 Add crawler (添加爬网程序) 向导中的说明操作。当爬网程序运行时,会将表添加到 Amazon Glue Data Catalog。有关更多信息,请参阅 在 Amazon Glue 中定义爬网程序

如果您知道在数据目录中创建 Amazon Simple Storage Service(Amazon S3)表定义所需的属性,则可以使用表向导创建它。请依次选择 Add tables (添加表) 和 Add table manually (手动添加表),然后按照 Add tables (添加表) 向导中的说明操作。

在通过控制台手动添加表时,请考虑以下各项:

  • 如果您计划从 Amazon Athena 访问表,请提供只包含字母数字和下划线字符的名称。有关更多信息,请参阅 Athena 名称

  • 源数据的位置必须是 Amazon S3 路径。

  • 数据的数据格式必须与向导中列出的格式之一匹配。将基于所选的格式自动填充相应的分类、SerDe 和其他表属性。您可以使用以下格式定义表:

    Avro

    Apache Avro JSON 二进制格式。

    CSV

    字符分隔值。您还可以指定逗号、竖线、分号、制表符或 Ctrl-A 等分隔符。

    JSON

    JavaScript 对象表示法。

    XML

    可扩展标记语言格式。指定定义数据中的行的 XML 标签。在行标签中定义列。

    Parquet

    Apache Parquet 列式存储。

    ORC

    优化的行列式(ORC)格式。一种旨在高效存储 Hive 数据的格式。

  • 您可以为表定义分区键。

  • 目前,使用控制台创建的分区表不能用于 ETL 作业。

表属性

以下是表的一些重要属性:

名称

在创建表时确定名称,并且您无法更改它。您在许多 Amazon Glue 操作中引用表名称。

数据库

表所在的容器对象。此对象包含 Amazon Glue Data Catalog中存在的表组织,并且可能与您的数据存储中的组织不同。当您删除数据库时,也会从数据目录中删除数据库中包含的所有表。

描述

表的描述。您可以编写描述以帮助您了解表的内容。

表格式

指定创建标准 Amazon Glue 表或 Apache Iceberg 格式的表。

启用压缩

选择启用压缩,将表中的小 Amazon S3 对象压缩成较大的对象。

IAM 角色

为了运行压缩,该服务会代表您代入一个 IAM 角色。您可以使用下拉列表选择一个 IAM 角色。确保该角色具有启用压缩所需的权限。

要了解该 IAM 角色所需的权限,请参阅 表优化的先决条件

位置

指向此表定义表示的数据存储中的数据位置的指针。

分类

在创建表时提供的分类值。通常,在爬网程序运行并指定源数据格式时写入它。

上次更新

在数据目录中更新此表的日期和时间(UTC)。

日期已添加

此表添加到数据目录中的日期和时间(UTC)。

已弃用

如果 Amazon Glue 发现数据目录中的表不再存在于其原始数据存储中,则会在数据目录中将此表标记为已淘汰。如果您运行的作业引用已淘汰的表,则此作业可能会失败。编辑引用已淘汰的表的作业,以从源和目标中删除这些表。我们建议您删除不再需要的已淘汰的表。

Connection

如果 Amazon Glue 需要连接到您的数据存储,则连接的名称与表相关联。

查看和编辑表详细信息

要查看现有表的详细信息,请在列表中选择表名称,然后选择 Action, View details (操作 -> 查看详细信息)。

表详细信息包括表的属性和架构。此视图显示表的架构,包括按为表定义的顺序排列的列名称、数据类型和分区的键列。如果列是复杂类型,您可以选择 View properties (查看属性) 来显示该字段的结构的详细信息,如以下示例所示:

{ "StorageDescriptor": { "cols": { "FieldSchema": [ { "name": "primary-1", "type": "CHAR", "comment": "" }, { "name": "second ", "type": "STRING", "comment": "" } ] }, "location": "s3://aws-logs-111122223333-us-east-1", "inputFormat": "", "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "compressed": "false", "numBuckets": "0", "SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "|" } }, "bucketCols": [], "sortCols": [], "parameters": {}, "SkewedInfo": {}, "storedAsSubDirectories": "false" }, "parameters": { "classification": "csv" } }

有关表的属性的更多信息,如 StorageDescriptor,请参阅 StorageDescriptor 结构

要更改表的架构,请选择 Edit schema (编辑架构) 来添加和删除列、更改列名称以及更改数据类型。

要比较不同版本的表,包括其架构,请选择 Compare versions (比较版本) 来查看表架构的两个版本之间的逐项对照比较。有关更多信息,请参阅 比较表架构版本

要显示组成 Amazon S3 分区的文件,请选择 View partition (查看分区)。对于 Amazon S3 表,Key (键) 列显示用于对源数据存储中的表进行分区的分区键。分区是根据键列 (如日期、位置或部门) 的值将一个表划分为多个相关部分的方法。有关分区的更多信息,请在 Internet 上搜索有关“hive 分区”的信息。

注意

要获取查看表详细信息的分步指导,请参阅控制台中的 Explore table (浏览表) 教程。

比较表架构版本

比较两个版本的表架构时,可以通过展开和折叠嵌套行来比较嵌套行更改,并排比较两个版本的架构,并排查看表属性。

要比较版本,请执行以下操作。

  1. 在 Amazon Glue 控制台中选择,然后选择操作,再选择比较版本

    屏幕截图显示选中时的“操作”按钮。下拉菜单显示比较版本选项。
  2. 通过选择版本下拉菜单来选择要比较的版本。比较架构时,架构选项卡突出显示为橙色。

  3. 比较两个版本之间的表时,将在屏幕的左侧和右侧分别显示表架构。便于您通过并排比较列名称、数据类型、键和注释字段来直观地确定更改。对于有更改的地方,彩色图标会显示所做更改的类型。

    • 已删除:红色图标表示该列已从先前版本的表架构中删除。

    • 已编辑或移动:蓝色图标表示在较新版本的表架构中被修改或移动的列。

    • 已添加:绿色图标表示被添加到新版表架构中的列。

    • 嵌套更改:黄色图标表示包含更改的嵌套列。选择要展开的列并查看已删除、编辑、移动或添加的列。

    屏幕截图显示了两个版本之间的表架构比较。左侧是旧版本。右侧是较新的版本。删除图标位于从旧版本中删除的列旁边,该列已不在较新版本中。
  4. 使用筛选字段搜索栏根据您在此处输入的字符显示字段。如果您在任一表版本中输入列名,筛选后的字段将显示在两个表版本中,以显示发生更改的位置。

  5. 要比较属性,请选择属性选项卡。

  6. 要停止比较版本,请选择停止比较返回表列表。

优化 Iceberg 表

使用 Apache Iceberg 等开放表格式的 Amazon S3 数据湖会将数据存储为 Amazon S3 对象。如果数据湖表中包含成千上万个小 Amazon S3 对象,则会增加 Iceberg 表的元数据开销并影响读取性能。为提高 Amazon 分析服务(例如 Amazon Athena 和 Amazon EMR)和 Amazon Glue ETL 作业的读取性能,Amazon Glue Data Catalog 为数据目录中的 Iceberg 表提供了托管式压缩功能(一种将小 Amazon S3 对象压缩成较大对象的进程)。您可以使用 Amazon Glue 控制台、Lake Formation 控制台、Amazon CLI 或 Amazon API 为数据目录中的单个 Iceberg 表启用或禁用压缩。

表优化器会持续监控表分区,并在超过文件数量和文件大小阈值时启动压缩进程。在数据目录中,启动压缩的默认阈值设置为 384MB,而在 Iceberg 库中,压缩阈值约为目标文件大小的 75%。数据目录会在不干扰并发查询的情况下执行压缩。数据目录仅支持对 Parquet 格式的表进行数据压缩。

表优化的先决条件

表优化器会代入您在为表启用压缩时指定的 Amazon Identity and Access Management (IAM) 角色的权限。该 IAM 角色必须具有读取数据和更新数据目录中元数据的权限。您可以创建一个 IAM 角色并附加以下内联策略:

  • 添加以下内联策略,以向 Amazon S3 授予对未注册到 Lake Formation 的数据位置的读/写权限。此策略还包括更新数据目录中表的权限,以及允许 Amazon Glue 在 Amazon CloudWatch 日志中添加日志并发布指标的权限。对于 Amazon S3 中未注册到 Lake Formation 的源数据,访问权限由 Amazon S3 和 Amazon Glue 操作的 IAM 权限策略决定。

    请将以下内联策略中的 bucket-name 替换为您的 Amazon S3 存储桶名称,请将 aws-account-idregion 替换为有效的 Amazon 账户和数据目录所在的区域,将 database_name 替换为数据库的名称,并将 table_name 替换为表的名称。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<bucket-name>" ] }, { "Effect": "Allow", "Action": [ "glue:UpdateTable", "glue:GetTable" ], "Resource": [ "arn:aws:glue:<region>:<aws-account-id>:table/<database-name>/<table-name>", "arn:aws:glue:<region>:<aws-account-id>:database/<database-name>", "arn:aws:glue:<region>:<aws-account-id>:catalog" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<aws-account-id>:log-group:/aws-glue/iceberg-compaction/logs:*" } ] }
  • 使用以下策略为注册到 Lake Formation 的数据启用压缩功能。

    有关将 Amazon S3 存储桶注册到 Lake Formation 的更多信息,请参阅 Requirements for roles used to register locations

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "glue:UpdateTable", "glue:GetTable" ], "Resource": [ "arn:aws:glue:<region>:<aws-account-id>:table/<databaseName>/<tableName>", "arn:aws:glue:<region>:<aws-account-id>:database/<database-name>", "arn:aws:glue:<region>:<aws-account-id>:catalog" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<aws-account-id>:log-group:/aws-glue/iceberg-compaction/logs:*" } ] }

    如果该压缩角色不具有对表的 IAM_ALLOWED_PRINCIPALS 组权限,则该角色需要具有对该表的 Lake Formation ALTER、DESCRIBE、INSERT 和 DELETE 权限。

  • (可选)如果要压缩的 Iceberg 表包含使用服务器端加密进行加密的 Amazon S3 存储桶中数据,该压缩角色需要具有解密 Amazon S3 对象并生成新数据密钥以将对象写入加密存储桶的权限。将以下策略添加到需要的 Amazon KMS 密钥。我们仅支持在存储桶级加密。

    { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<aws-account-id>:role/<compaction-role-name>" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
  • (可选)对于注册到 Lake Formation 的数据位置,用于注册该位置的角色需要具有解密 Amazon S3 对象并生成新数据密钥以将对象写入加密存储桶的权限。有关更多信息,请参阅 Registering an encrypted Amazon S3 location

  • (可选)如果 Amazon KMS 密钥存储在其他 Amazon 账户中,则需要为该压缩角色添加以下权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": ["arn:aws:kms:<REGION>:<KEY_OWNER_ACCOUNT_ID>:key/<KEY_ID>"] } ] }
  • 用于运行压缩的角色必须拥有该角色的 iam:PassRole 权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/<compaction-role-name>" ] } ] }
  • 将以下信任策略添加到该角色,以便 Amazon Glue 服务代入该 IAM 角色来运行压缩进程。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

启用压缩

您可以使用 Amazon Glue 控制台、Lake Formation 控制台、Amazon CLI 或 Amazon API 为数据目录中的 Apache Iceberg 表启用压缩。对于新表,您可以在创建表时选择 Apache Iceberg 表格式并启用压缩。新表会默认禁用压缩。

Console
启用压缩
  1. 打开 Amazon Glue 控制台(https://console.aws.amazon.com/glue/),然后以数据湖管理员、表创建者或已被授予表的 glue:UpdateTablelakeformation:GetDataAccess 权限的用户身份登录。

  2. 在导航窗格的数据目录下,请选择

  3. 页面上,选择要启用压缩的开放表格式的表,然后在操作菜单下,选择启用压缩

  4. 您也可以通过选中该表并打开表详细信息页面来启用压缩。选择页面下半部的表优化选项卡,然后选择启用压缩

  5. 然后从下拉列表中选择一个具有 表优化的先决条件 部分所示权限的现有 IAM 角色。

    选择创建新的 IAM 角色选项后,服务会创建一个具有运行压缩所需权限的自定义角色。

    按照以下步骤更新一个现有的 IAM 角色:

    1. 要更新 IAM 角色的权限策略,请在 IAM 控制台中转到用于运行压缩的 IAM 角色。

    2. 添加权限部分中,选择创建策略。在新打开的浏览器窗口中,创建将用于您的角色的新策略。

    3. 创建策略页面上,选择 JSON 选项卡。将 表优化的先决条件 部分中显示的 JSON 代码复制到策略编辑器字段中。

Amazon CLI

以下示例演示了如何启用压缩功能。将账户 ID 替换为有效 Amazon 账户 ID。将数据库名和表名替换为实际的 Iceberg 表名和数据库名。将 roleArn 替换为 IAM 角色的 Amazon 资源名称(ARN)以及具有运行压缩所需权限的 IAM 角色的名称。

aws glue create-table-optimizer \ --catalog-id 123456789012 \ --database-name iceberg_db \ --table-name iceberg_table \ --table-optimizer-configuration '{"roleArn":"arn:aws:iam::<123456789012>:role/<compaction_role>", "enabled":'true'}' \ --type compaction
Amazon API

调用 CreateTableOptimizer 操作为表启用压缩。

启用压缩后,表优化选项卡会显示以下压缩详细信息(大约 15–20 分钟后):

  • 开始时间 – 在 Lake Formation 中启动压缩进程的时间。该值是一个采用 UTC 时间格式的时间戳。

  • 结束时间 – 在 Lake Formation 中结束压缩进程的时间。该值是一个采用 UTC 时间格式的时间戳。

  • 状态 – 压缩运行的状态。值为成功或失败。

  • 已压缩文件数 – 已压缩的文件总数。

  • 已压缩字节数 – 已压缩的字节总数。

禁用压缩

您可以使用 Amazon Glue 控制台或 Amazon CLI 来为特定 Apache Iceberg 表禁用自动压缩。

Console
  1. 选择数据目录,然后选择。从表列表中,选择要禁用压缩的开放表格式的表。

  2. 您可以选择一个 Iceberg 表,然后在操作下选择禁用压缩

    您也可以选择表详细信息页面下半部分的禁用压缩,从而为表禁用压缩。

  3. 在确认消息页面选择禁用压缩。您可以在以后重新启用压缩。

    确认后,压缩将被禁用,并且表的压缩状态将恢复为 Off

Amazon CLI

将以下示例中的账户 ID 替换为有效的 Amazon 账户 ID。将数据库名称和表名称替换为实际的 Iceberg 表名称和数据库名称。将 roleArn 替换为 IAM 角色的 Amazon 资源名称(ARN)以及具有运行压缩所需权限的 IAM 角色的实际名称。

aws glue update-table-optimizer \ --catalog-id 123456789012 \ --database-name iceberg_db \ --table-name iceberg_table \ --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/compaction_role", "enabled":'false'}'\ --type compaction
Amazon API

调用 UpdateTableOptimizer 操作以为特定的表禁用压缩。

查看压缩详细信息

您可以使用 Amazon Glue 控制台、Amazon CLI 或 Amazon API 操作来查看 Apache Iceberg 的压缩状态。

Console
查看 Iceberg 表的压缩状态
  • 您可以在 Amazon Glue 控制台中选择 Data Catalog 下的 ,从而查看 Iceberg 表的压缩状态。压缩状态字段将显示压缩运行的状态。您可以使用表首选项来显示表的格式和压缩状态。

  • 要查看特定表的压缩运行历史记录,请选择 Amazon Glue Data Catalog 下的,然后选择一个表来查看该表的详细信息。表优化选项卡将显示表的压缩历史记录。

Amazon CLI

您可以使用 Amazon CLI 查看压缩详细信息。

请将以下示例中的账户 ID 替换为有效的 Amazon 账户 ID,将数据库名称和表名称替换为实际的 Iceberg 表名称。

  • 获取表的上次压缩详细信息

    aws get-table-optimizer \ --catalog-id 123456789012 \ --database-name iceberg_db \ --table-name iceberg_table \ --type compaction
  • 使用以下示例来检索特定表的优化器历史记录。

    aws list-table-optimizer-runs \ --catalog-id 123456789012 \ --database-name iceberg_db \ --table-name iceberg_table \ --type compaction
  • 以下示例演示了如何检索多个优化器的压缩运行和配置详细信息。您最多可以指定 20 个优化器。

    aws glue batch-get-table-optimizer \ --entries '[{"catalogId":"123456789012", "databaseName":"iceberg_db", "tableName":"iceberg_table", "type":"compaction"}]'
Amazon API
  • 使用 GetTableOptimizer 操作检索优化器的上次运行详细信息。

  • 使用 ListTableOptimizerRuns 操作检索特定表上给定优化器的历史记录。您可以在单个 API 调用中指定 20 个优化器。

  • 使用 BatchGetTableOptimizer 操作检索您账户中多个优化器的配置详细信息。此操作不支持跨账户调用。

查看 Amazon CloudWatch 指标

成功运行压缩后,服务会创建有关压缩作业性能的 Amazon CloudWatch 指标。您可以前往 CloudWatch 控制台并选择指标所有指标。您可以按特定命名空间(例如 Amazon Glue)、表名或数据库名称筛选指标。

有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的查看可用的指标

  • 已压缩的字节数

  • 已压缩的文件数

  • 分配给作业的 DPU 数

  • 作业持续时间(小时)

删除优化器

您可以使用 Amazon CLI 或 Amazon API 操作来删除表的优化器和关联的元数据。

运行以下 Amazon CLI 命令删除表的压缩历史记录。

aws glue delete-table-optimizer \ --catalog-id 123456789012 \ --database-name iceberg_db \ --table-name iceberg_table \ --type compaction

使用 DeleteTableOptimizer 操作删除表的优化器。

注意事项和限制

数据压缩支持:

  • 数据类型:布尔值、整型、长整型、浮点数、双精度、字符串、十进制、日期、时间、时间戳、字符串、UUID、二进制

  • 压缩:zstd、gzip、snappy、未压缩

  • 加密:数据压缩仅支持默认的 Amazon S3 加密 (SSE-S3) 和服务器端 KMS 加密 (SSE-KMS)。

  • 资源装箱压缩

  • 架构演变

  • 目标文件大小(Iceberg 配置中的 write.target-file-size-bytes 属性)在 128MB(含)到 512MB(含)之间的表。

  • 区域

    • 亚太地区(东京)

    • 亚太地区(首尔)

    • 亚太地区(孟买)

    • 欧洲地区(爱尔兰)

    • 欧洲地区(法兰克福)

    • 美国东部(弗吉尼亚州北部)

    • 美国东部(俄亥俄州)

    • 美国西部(北加利福尼亚)

  • 当存储基础数据的 Amazon S3 存储桶位于另一个账户中时,您可以从数据目录所在的账户运行压缩。要实现此目的,压缩角色需要具有访问 Amazon S3 存储桶的权限。

数据压缩目前不支持:

  • 数据类型:固定

  • 压缩:brotli、lz4

  • 随分区规格的演变压缩文件。

  • 常规排序或 Z-Order 排序

  • 合并或删除文件:压缩进程会跳过拥有与之关联的删除文件的数据文件。

  • 对跨账户表进行压缩:您无法对跨账户表进行压缩。

  • 对跨区域表进行压缩:您无法对跨区域表进行压缩。

  • 针对资源链接启用压缩

  • Amazon S3 存储桶的 VPC 端点