【发布时间】:2019-05-09 02:36:07
【问题描述】:
我知道MSCK REPAIR TABLE 使用外部表的当前分区更新元存储。
为此,您只需在表的根文件夹上执行ls(假设该表仅按一列分区),并获取其所有分区,显然是
但在实践中,该操作可能需要非常长时间来执行(甚至timeout if ran on AWS Athena)。
所以我的问题是,MSCK REPAIR TABLE 实际上在幕后做了什么,为什么?
MSCK REPAIR TABLE 如何找到分区?
相关的附加数据:
我们的数据都在 S3 上,在 EMR (Hive) 或 Athena (Presto) 上运行时都很慢,表中有大约 450 个分区,每个分区平均有 90 个文件,总共 3 GB一个分区,文件是 Apache parquet 格式
【问题讨论】:
-
cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL 提到了
ALTER TABLE RECOVER PARTITIONS。它只是MSCK的别名还是做的工作更少? -
@PiotrFindeisen 似乎只是 EMR 的等效命令。
-
据我所知,它列出了所有分区文件并收集了一些关于它们的元数据。如果您有 450 个分区和每个分区 90 个文件,它可能会对 s3 进行 40500 次调用以分别获取每个文件大小。我不确定它是否不止于此,但如果确实如此,它可能还会对文件进行一些统计分析。如果是这种情况,您可以尝试使用此选项:SET hive.stats.autogather=false;具体需要多长时间?我们谈论的是几分钟还是几个小时?几分钟不会让我震惊。
标签: amazon-web-services hive hdfs parquet presto