AWS Athena MSCK REPAIR TABLE 表名命令

AWS Athena MSCK REPAIR TABLE tablename command

是否有我们期望此命令的分区数量

MSCK REPAIR TABLE tablename;

失败?

我有一个系统,目前有超过 27k 个分区,Athena table 的模式发生变化,我们删除 table,重新创建 table,比如新列) 固定到最后然后 运行

MSCK REPAIR TABLE tablename;

在我们让它 运行 5 小时后,我们没有运气让这个命令做任何工作。没有添加一个分区。想知道是否有人知道我们可能已经达到但无法在任何地方找到记录的分区限制的信息。

MSCK REPAIR TABLE 是一个非常低效的命令。我真的希望文档没有鼓励人们使用它。

该怎么做取决于您的情况所特有的许多事情。

在一般情况下,我建议编写一个脚本来执行 S3 列表并构建分区及其位置列表,并使用 Glue API BatchCreatePartition 将分区添加到您的 table.

当您的 S3 位置包含很多文件时,就像听起来您的一样,我会使用 S3 Inventory 来避免列出所有内容,或者使用 / 分隔符列出对象,以便我可以仅列出存储桶的 directory/partition 结构部分并跳过列出所有文件。如果您避免列出所有内容,则可以很快列出 27K 个分区。

Glue 的 BatchCreatePartitions 使用起来有点烦人,因为您必须为每个分区指定所有列、serde 和所有内容,但它比 运行 ALTER TABLE … ADD PARTION … 和等待要快查询执行完成——而且比 MSCK REPAIR TABLE ….

快得离谱

在向现有 table 添加新分区时,您也不应使用 MSCK REPAIR TABLE,原因大致相同。几乎总是在向 table 添加新分区时,您知道新分区的位置,并且可以直接使用 ALTER TABLE … ADD PARTION … 或 Glue 的 BatchCreatePartitions,无需编写脚本。

如果添加新数据的过程与添加新分区的过程是分开的,我建议将 S3 通知设置到 SQS 队列并定期读取消息、聚合新文件的位置并构建列表新分区。