men*_*ole 0 amazon-s3 amazon-athena
是否有任何数量的分区我们期望这个命令
MSCK REPAIR TABLE tablename;
Run Code Online (Sandbox Code Playgroud)
失败?
我有一个目前有超过 27k 个分区的系统,我们删除了 Athena 表的架构更改,重新创建表,说新列添加到末尾,然后运行
MSCK REPAIR TABLE tablename;
Run Code Online (Sandbox Code Playgroud)
在我们让它运行 5 小时后,我们对这个命令做任何工作都没有运气。没有添加一个分区。想知道是否有人有关于我们可能已达到但无法在任何地方找到记录的分区限制的信息。
MSCK REPAIR TABLE是一个极其低效的命令。我真的希望文档不鼓励人们使用它。
相反,该做什么取决于您的情况所特有的许多事情。
在一般情况下,我会建议编写一个脚本来执行 S3 列表并构建一个分区列表及其位置,并使用 Glue APIBatchCreatePartition将分区添加到您的表中。
当您的 S3 位置包含大量文件时,就像您的声音一样,我会使用S3 Inventory来避免列出所有内容,或者列出带有分隔符的对象,/以便我可以仅列出存储桶的目录/分区结构部分并跳过列出所有文件。如果您避免列出所有内容,则可以相当快地列出 27K 分区。
GlueBatchCreatePartitions使用起来有点烦人,因为您必须为每个分区指定所有列、serde 和所有内容,但它比运行ALTER TABLE … ADD PARTION …和等待查询执行完成要快——而且比MSCK REPAIR TABLE ….
在向现有表添加新分区时,您也不应该使用MSCK REPAIR TABLE,原因大致相同。几乎总是在向表中添加新分区时,您知道新分区的位置,ALTER TABLE … ADD PARTION …或者BatchCreatePartitions可以直接使用Glue ,无需编写脚本。
如果添加新数据的过程与添加新分区的过程是分开的,我建议将 S3 通知设置到 SQS 队列并定期读取消息、聚合新文件的位置并从中构建新分区列表。
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |