AWS更新Athena元数据: Glue爬虫 vs MSCK修复表

7

当Athena表格添加新的分区时,我们可以使用Glue Crawler或MSCK REPAIR TABLE来更新元信息。它们的成本是什么?哪一个更受欢迎?

2个回答

9
MSCK REPAIR TABLE命令要求您的S3键包含分区方案,如此处记录的文档。如果您的S3键不包含分区方案,则MSCK REPAIR TABLE命令将返回缺少的分区,但您仍然需要添加它们。另一个区别是,MSCK REPAIR TABLE命令可以在30分钟后超时(默认Athena查询时长),而Glue爬虫则不会。
以下是定价信息: Glue Crawler
有一个按小时计费的AWS Glue爬虫运行时间来发现数据并填充AWS Glue数据目录。您根据用于运行爬虫的Data Processing Units(或DPUs)数量付费每小时费率。单个Data Processing Unit(DPU)提供4 vCPU和16 GB的内存。您按秒计费,舍入到最近的秒数,并且每次爬网站必须持续10分钟以上。使用AWS Glue爬网站是可选的,您可以直接通过API填充AWS Glue数据目录。
定价:
对于AWS Glue可用的所有AWS区域:
每DPU小时$0.44,按秒计费,每次爬网站运行的最低时间为10分钟。 Athena
没有数据定义语言(DDL)语句的费用,例如CREATE / ALTER / DROP TABLE,管理分区的语句或失败的查询。
但是,在这两个命令之上,您仍将产生S3成本。参考:AWS Athena:`msck repair table`是否会产生成本? 我的意见是,如果您能够在添加新数据后自己管理分区,则最好自己管理分区。
'ALTER TABLE database.table ADD
PARTITION (partition_name='PartitionValue') location 's3://bucket/path/partition'

如果必须使用Glue或Athena,我会评估哪种方式更适合您的流程。 MSCK REPAIR TABLE 命令可能更易于管理,但如果您的分区数据很多或者它们没有正确地分区,则可能会遇到问题。此外,您将需要一种自动运行该命令的方法。 Glue Crawlers 可以配置触发器。


感谢您提供的出色答案。对于MSCK REPAIR TABLE,AWS SDK提供了Athena API(com.amazonaws.services.athena)以进行直接SQL访问,其中包括MSCK REPAIR TABLE。示例可以在这里找到。 - Fang Zhang
2
避免使用Glue和MSCK REPAIR TABLE,它们在你只想添加新分区时都非常低效。如果您无法在上传新数据时添加分区,请考虑编写一个Lambda函数,以响应S3通知添加分区。 - Theo

2
我同意手动添加分区的做法。你可以通过 Athena 查询 (ALTER TABLE ... ADD PARTITION () ...) 来完成,就像 @KiteCoder 的回答一样,或者你也可以直接通过 Glue API 来完成。
调用 Glue API 更加详细,但也更加“结构化”。调用 Athena 显然是一个 SQL 查询,我知道有多少人不喜欢编写动态生成 SQL 代码。
具体操作是 CreatePartition。它需要一个名为 StorageDescriptor 的对象,该对象定义了表中的所有列和数据类型,但对于现有表,可以从 GetTable 操作中检索到该结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接