Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 对于小数据集,AWS Athena MSCK修复表花费的时间太长_Amazon Web Services_Amazon S3_Hive_Amazon Athena - Fatal编程技术网

Amazon web services 对于小数据集,AWS Athena MSCK修复表花费的时间太长

Amazon web services 对于小数据集,AWS Athena MSCK修复表花费的时间太长,amazon-web-services,amazon-s3,hive,amazon-athena,Amazon Web Services,Amazon S3,Hive,Amazon Athena,我对amazon athena有问题,我有一个小bucket(36430个对象,9.7MB),有4个分区级别(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv),但是当我运行命令时 MSCK修复表db.TABLE 需要25分钟,我计划在雅典娜上公布结核病严重程度的数据,如果这个问题仍然存在,我不会这么做 有人知道为什么花的时间太长吗 提前感谢可能是一个代价高昂的操作,因为它需要扫描文件系统(S3存储桶)中表的子树。由于需要遍历额外的子目录,多层分区可能会使其成本

我对amazon athena有问题,我有一个小bucket(36430个对象,9.7MB),有4个分区级别(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv),但是当我运行命令时

MSCK修复表db.TABLE

需要25分钟,我计划在雅典娜上公布结核病严重程度的数据,如果这个问题仍然存在,我不会这么做

有人知道为什么花的时间太长吗

提前感谢

可能是一个代价高昂的操作,因为它需要扫描文件系统(S3存储桶)中表的子树。由于需要遍历额外的子目录,多层分区可能会使其成本更高。假设所有可能的分区值组合都出现在数据集中,这可能会导致组合爆炸

如果要向现有表中添加新分区,则可能会发现为单个新分区运行命令更有效。这避免了扫描文件系统中表的整个子树的需要。它不如简单地运行
MSCK REPAIR TABLE
方便,但有时优化是值得的。一个可行的策略通常是使用
MSCK REPAIR TABLE
进行初始导入,然后在新数据添加到表中时使用
ALTER TABLE ADD PARTITION
进行持续维护


如果使用
altertableaddpartition
直接管理分区确实不可行,那么执行时间可能是不可避免的。减少分区的数量可能会减少执行时间,因为它不需要遍历文件系统中那么多的目录。当然,分区是不同的,这可能会影响查询执行时间,因此这是一种折衷。

虽然标记的答案在技术上是正确的,但它并不能解决您的真正问题,即您有太多的文件

我有一个小水桶(36430个对象,9.7MB),有4个级别的 分区(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv)

对于这样一个小的表,36430个文件在S3上产生了巨大的开销,并且具有4个级别的分区是非常过分的。分区阻碍了查询性能,而不是优化它。MSCK很慢,因为它正在等待S3上市

如果雅典娜把整个9.7MB的表放在一个文件中,那么它的读取速度会比列出那个庞大的目录结构的速度快

我建议完全删除分区,或者如果确实必须删除分区,则删除p2、p3和p4级别。也可以考虑将它处理到另一个表中,以将文件压缩为更大的文件。 一些人建议最佳文件大小在64MB到4GB之间,这与S3上的本机块大小有关。拥有集群中多个工作者的文件也很有帮助,尽管雅典娜不知道这一点。您的数据小于该范围,因此最多1个或8个文件是合适的

一些参考资料:


用于
更改表添加分区的新链接。