本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MSCK REPAIR TABLE
在添加 Hive 兼容分区后,使用 MSCK REPAIR TABLE
命令可更新目录中的元数据。
命令扫描文件系统(例如 MSCK REPAIR TABLE
)以查找在创建表后添加到文件系统的与 Hive 兼容的分区。Amazon S3MSCK REPAIR TABLE
比较表元数据中的分区和 S3 中的分区。如果新分区存在于您在创建表时指定的 S3 位置,则会将这些分区添加到元数据和 Athena 表中。
添加物理分区时,目录中的元数据将变得与文件系统中的数据布局不一致,并且需要将有关新分区的信息添加到目录中。要更新元数据,请运行 MSCK REPAIR TABLE
,以便您可以从 Athena 查询新分区中的数据。
MSCK REPAIR TABLE
仅将分区添加到元数据中;不会删除分区。要在 Amazon S3 中手动删除分区后从元数据中删除分区,请运行命令 ALTER TABLE
。 有关更多信息,请参阅ALTER TABLE DROP PARTITION。
table-name
DROP
PARTITION
注意事项和限制
在使用 MSCK REPAIR TABLE
时,请记住以下几点:
-
添加所有分区可能需要一些时间。如果此操作超时,它将处于不完整的状态,其中只有少数分区会被添加到目录中。应在同一个表上运行
MSCK REPAIR TABLE
语句,直到添加所有分区。有关更多信息,请参阅分区数据. -
对于不兼容 Hive 的分区,请使用ALTER TABLE ADD PARTITION加载分区,以便您可以查询数据。
-
要与 Athena 结合使用的分区位置必须使用
s3
协议(例如,s3://
). 在 Athena 中,当对包含的表运行bucket
/folder
/s3a://
查询时,使用其他协议的位置(例如,bucket
/folder
/MSCK REPAIR TABLE
)将导致查询失败。 -
由于
MSCK REPAIR TABLE
会同时扫描文件夹的子文件夹以查找匹配的分区方案,因此,请确保将不同表的数据保存在单独的文件夹层次结构中。例如,假设您在s3://table-a-data
中有表 A 的数据,在s3://table-a-data/table-b-data
中有表 B 的数据。 如果两个表按字符串分区,MSCK REPAIR TABLE
会将表 B 的分区添加到表 A。为避免这种情况,请改用单独的文件夹结构,如s3://table-a-data
和s3://table-b-data
。请注意,此行为与 Amazon EMR 和 Apache Hive 一致。 -
由于该命令遍历运行 Amazon S3 HeadObject 和 GetObject 命令的文件系统,因此,如果您的文件系统很大或包含大量数据,扫描的字节成本可能会很大。要估算成本,请参阅 Amazon S3 Amazon S3 和
AWS 定价计算器。
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
). -
查询超时 首次创建表时,或者数据与分区元数据之间的奇偶校验不确定时,最好使用 –
MSCK REPAIR TABLE
。如果您使用MSCK REPAIR TABLE
频繁添加新分区(例如,每天)并遇到查询超时,请考虑使用 ALTER TABLE ADD PARTITION。 -
文件系统中缺少的分区 – 如果在 Amazon S3 中手动删除分区,然后运行
MSCK REPAIR TABLE
,您可能会收到错误消息Partitions missing from filesystem
, 出现这种情况的原因是MSCK REPAIR TABLE
不会从表元数据中删除过时的分区。要从表元数据中删除已删除的分区,请运行 ALTER TABLE DROP PARTITION。请注意,SHOW PARTITIONS 类似地仅列出元数据中的分区,而不是文件系统中的分区。
以下部分提供了一些其他详细信息。
在 IAM 策略中允许 glue:BatchCreatePartition
查看附加到您用于运行 IAM 的用户或角色的 MSCK REPAIR TABLE
策略。 当您将 AWS Glue 数据目录与 Athena 一起使用时,IAM 策略必须允许 glue:BatchCreatePartition
操作。有关允许 IAM 操作的 glue:BatchCreatePartition
策略的示例,请参阅 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/