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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

MSCK REPAIR TABLE

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

MSCK REPAIR TABLE 命令将扫描文件系统(例如 Amazon S3)以查找在创建表后添加到文件系统或从文件系统中删除的与 Hive 兼容的分区。该命令将更新目录中有关分区的元数据以及与之关联的数据。

在添加或删除分区时,目录中的元数据将变得与文件系统中的数据布局不一致。例如,在创建带分区的表后,需要将有关新分区的信息添加到目录中。要更新元数据,请在表上运行 MSCK REPAIR TABLE。这使您能够从 Athena 查询新分区中的数据。

注意事项和限制

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

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

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

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

Synopsis

MSCK REPAIR TABLE table_name

Examples

MSCK REPAIR TABLE orders;

Troubleshooting

运行 MSCK REPAIR TABLE 后,如果 Athena 未将分区添加到 AWS Glue 数据目录 中的表,请检查以下内容:

  • 确保 AWS Identity and Access Management (IAM) 用户或角色具有允许执行 glue:BatchCreatePartition 操作的策略。

  • 确保 IAM 用户或角色具有具有足够权限访问 Amazon S3,包括 s3:DescribeJob 行动。例如, Amazon S3 允许的操作,请参阅 Athena 中对 Amazon S3 存储桶的跨账户访问.

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

以下章节提供了一些其他详细信息。

在 IAM 策略中允许 glue:BatchCreatePartition

查看 IAM 附加至用户或您用于运行的角色的策略 MSCK REPAIR TABLE。当你 使用Athena的AWiseData目录, IAM 政策必须允许 glue:BatchCreatePartition 行动。有关允许 glue:BatchCreatePartition 操作的 IAM 策略的示例,请参阅 AmazonAthenaFullAccess 托管策略

将 Amazon S3 路径更改为小写

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

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/