MSCK REPAIR TABLE - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

MSCK REPAIR TABLE

使用MSCK REPAIR TABLE命令可在添加与 Hive 兼容的分区后更新目录中的元数据。

这些区域有:MSCK REPAIR TABLE命令将扫描文件系统(例如)以查找在创建表后添加到文件系统中的与 Hive 兼容的分区。MSCK REPAIR TABLE将比较表元数据中的分区和 S3 中的分区。如果您在创建表时指定的 S3 位置中存在新分区,则会将这些分区添加到元数据和 Athena 表中。

在添加物理分区时,目录中的元数据将变得与文件系统中的数据布局不一致,并需要将有关新分区的信息添加到目录中。要更新元数据,请运行MSCK REPAIR TABLE以便您可以从 Athena 查询新分区中的数据。

注意

MSCK REPAIR TABLE仅向元数据添加分区;它不会删除它们。要在 Amazon S3 中手动删除分区后从元数据中删除分区,请运行命令ALTER TABLE table-name DROP PARTITION。有关更多信息,请参阅ALTER TABLE DROP PARTITION

注意事项和限制

在使用 MSCK REPAIR TABLE 时,请记住以下几点:

  • 添加所有分区可能需要一些时间。如果此操作超时,它将处于不完整的状态,其中只有少数分区会被添加到目录中。应在同一个表上运行 MSCK REPAIR TABLE 语句,直到添加所有分区。有关更多信息,请参阅分区数据

  • 对于不兼容 Hive 的分区,请使用ALTER TABLE ADD PARTITION加载分区,以便您可以查询数据。

  • 要与 Athena 结合使用的分区位置必须使用s3协议(例如,s3://bucket/folder/)。在 Athena 中,使用其他协议的位置(例如s3a://bucket/folder/)将导致查询失败MSCK REPAIR TABLE查询在包含的表上运行。

  • 由于MSCK REPAIR TABLE扫描文件夹的子文件夹以查找匹配的分区方案,请确保在单独的文件夹层次结构中保留单独表的数据。例如,假设您有中的表 A 的数据s3://table-a-data和表 B 的数据s3://table-a-data/table-b-data。如果两个表都按字符串进行分区,MSCK REPAIR TABLE将表 B 的分区添加到表 A 为了避免这种情况,请使用单独的文件夹结构,如s3://table-a-datas3://table-b-data相反。请注意,此行为与亚马逊 EMR 和 Apache 配置单元一致。

  • 因为该命令遍历运行 Amazon S3 的文件系统HeadObjectGetObject命令时,如果您的文件系统很大或包含大量数据,则扫描的字节开销可能会很高。要估计成本,请参阅Amazon S3 定价Amazon Pricing Calculator

Synopsis

MSCK REPAIR TABLE table_name

Examples

MSCK REPAIR TABLE orders;

Troubleshooting

运行后MSCK REPAIR TABLE,如果 Athena 未将分区添加到Amazon Glue Data Catalog,请检查以下事项:

  • 确保Amazon Identity and Access Management(IAM) 用户或角色具有允许glue:BatchCreatePartitionaction.

  • 确保 IAM 用户或角色具有访问 Amazon S3 的足够权限的策略,包括s3:DescribeJobaction. 有关示例,了解允许哪些 Amazon S3 操作,请参阅Athena 中对 Amazon S3 存储桶的跨账户访问

  • 确保 Amazon S3 路径为小写而不是驼峰式大小写(例如,useridINSTEAD OFuserId)。

  • 查询超时MSCK REPAIR TABLE最适用于首次创建表或在数据和分区元数据之间存在奇偶校验的不确定性时。如果您将MSCK REPAIR TABLE以频繁添加新分区(例如,每天)并遇到查询超时,请考虑使用ALTER TABLE ADD PARTITION

  • 文件系统中缺少分区— 如果您在 Amazon S3 中手动删除分区,然后运行MSCK REPAIR TABLE,您可能会收到错误消息文件系统中缺少分区。这是因为MSCK REPAIR TABLE不会从表元数据中删除过时的分区。要从表元数据中删除已删除的分区,请运行ALTER TABLE DROP PARTITION相反。请注意,显示分区类似地仅列出元数据中的分区,而不是文件系统中的分区。

以下各节提供了一些更多信息。

允许粘合:IAM 策略中的批创建分区

审核附加到您用于运行的用户或角色的 IAM 策略MSCK REPAIR TABLE。当您 时请使用Amazon Glue Data Catalog与 Athena,IAM 策略必须允许glue:BatchCreatePartitionaction. 有关 IAM 策略的示例,允许glue:BatchCreatePartition操作,请参阅Amazon托管策略:AmazonAthenaFullAccess

将 Amazon S3 路径更改为小写

Amazon S3 路径必须为小写。如果 S3 路径为驼峰式大小写,则 MSCK REPAIR TABLE 不会将分区添加到 Amazon Glue Data Catalog。例如,如果您的 S3 路径为 userId,则不会将以下分区添加到 Amazon Glue Data Catalog:

s3://bucket/path/userId=1/ s3://bucket/path/userId=2/ s3://bucket/path/userId=3/

要解决此问题,请使用全大写或全小写而不是驼峰式大小写:

s3://bucket/path/userid=1/ s3://bucket/path/userid=2/ s3://bucket/path/userid=3/