本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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/
在控制台上添加表
要使用爬网程序添加表,请依次选择 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 (编辑架构) 来添加和删除列、更改列名称以及更改数据类型。
要比较表的不同版本,包括其架构,请选择比较版本以查看表架构的两个版本的 side-by-side 比较。有关更多信息,请参阅 比较表架构版本 。
要显示组成 Amazon S3 分区的文件,请选择 View partition (查看分区)。对于 Amazon S3 表,Key (键) 列显示用于对源数据存储中的表进行分区的分区键。分区是根据键列 (如日期、位置或部门) 的值将一个表划分为多个相关部分的方法。有关分区的更多信息,请在 Internet 上搜索有关“hive 分区”的信息。
注意
要获取有关查看表格详细信息的 step-by-step 指导,请参阅控制台中的 Ex plore 表格教程。
比较表架构版本
比较两个版本的表架构时,可以通过展开和折叠嵌套行来比较嵌套行的变化,比较两个版本 side-by-side的架构以及查看表的属性。 side-by-side
要比较版本,请执行以下操作。
-
在 Amazon Glue 控制台中选择表,然后选择操作,再选择比较版本。
-
通过选择版本下拉菜单来选择要比较的版本。比较架构时,架构选项卡突出显示为橙色。
-
比较两个版本之间的表时,将在屏幕的左侧和右侧分别显示表架构。这使您能够通过比较列名称、数据类型、键和注释字段来直观地确定更改 side-by-side。对于有更改的地方,彩色图标会显示所做更改的类型。
-
已删除:红色图标表示该列已从先前版本的表架构中删除。
-
已编辑或移动:蓝色图标表示在较新版本的表架构中被修改或移动的列。
-
已添加:绿色图标表示被添加到新版表架构中的列。
-
嵌套更改:黄色图标表示包含更改的嵌套列。选择要展开的列并查看已删除、编辑、移动或添加的列。
-
-
使用筛选字段搜索栏根据您在此处输入的字符显示字段。如果您在任一表版本中输入列名,筛选后的字段将显示在两个表版本中,以显示发生更改的位置。
-
要比较属性,请选择属性选项卡。
-
要停止比较版本,请选择停止比较返回表列表。
优化 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-id
和region
替换为有效的 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 表格式并启用压缩。新表会默认禁用压缩。
启用压缩后,表优化选项卡会显示以下压缩详细信息(大约 15–20 分钟后):
-
开始时间 – 在 Lake Formation 中启动压缩进程的时间。该值是一个采用 UTC 时间格式的时间戳。
-
结束时间 – 在 Lake Formation 中结束压缩进程的时间。该值是一个采用 UTC 时间格式的时间戳。
-
状态 – 压缩运行的状态。值为成功或失败。
-
已压缩文件数 – 已压缩的文件总数。
-
已压缩字节数 – 已压缩的字节总数。
禁用压缩
您可以使用 Amazon Glue 控制台或 Amazon CLI 来为特定 Apache Iceberg 表禁用自动压缩。
查看压缩详细信息
您可以使用 Amazon Glue 控制台、Amazon CLI 或 Amazon API 操作来查看 Apache Iceberg 的压缩状态。
查看 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-nameiceberg_db
\ --table-nameiceberg_table
\ --type compaction
使用 DeleteTableOptimizer
操作删除表的优化器。
注意事项和限制
数据压缩支持:
数据类型:布尔值、整型、长整型、浮点数、双精度、字符串、十进制、日期、时间、时间戳、字符串、UUID、二进制
压缩:zstd、gzip、snappy、未压缩
-
加密:数据压缩仅支持默认的 Amazon S3 加密 (SSE-S3) 和服务器端 KMS 加密 (SSE-KMS)。
-
资源装箱压缩
架构演变
具有目标文件大小的表(写入。 target-file-size-bytes 冰山配置中的属性)在 128MB 到 512 MB 的包含范围内。
区域
亚太地区(东京)
亚太地区(首尔)
亚太地区(孟买)
欧洲地区(爱尔兰)
欧洲地区(法兰克福)
美国东部(弗吉尼亚州北部)
美国东部(俄亥俄州)
美国西部(北加利福尼亚)
-
当存储基础数据的 Amazon S3 存储桶位于另一个账户中时,您可以从数据目录所在的账户运行压缩。要实现此目的,压缩角色需要具有访问 Amazon S3 存储桶的权限。
数据压缩目前不支持:
数据类型:固定
压缩:brotli、lz4
随分区规格的演变压缩文件。
常规排序或 Z-Order 排序
合并或删除文件:压缩进程会跳过拥有与之关联的删除文件的数据文件。
-
对跨账户表进行压缩:您无法对跨账户表进行压缩。
-
对跨区域表进行压缩:您无法对跨区域表进行压缩。
针对资源链接启用压缩
Amazon S3 存储桶的 VPC 端点