将新分区添加到Athena表时,我们可以使用Glue Crawler或MSCK REPAIR TABLE更新元信息。他们的费用是多少?哪个是首选?
答案 0 :(得分:2)
MSCK REPAIR TABLE
命令要求您的S3键将分区方案包括为documented here。如果您的S3键不包括分区方案,则MSCK REPAIR TABLE
命令将返回丢失的分区,但是您仍然必须将它们添加进去。另外一个区别是,MSCK REPAIR TABLE
命令可能会在超时后超时30分钟(默认的雅典娜查询时间长度),而粘合爬行器则不会。
以下是价格信息:
AWS Glue搜寻器运行时按小时收费,以发现数据并填充AWS Glue数据目录。我们会根据用于运行搜寻器的数据处理单元(或DPU)的数量向您收取每小时的费用。单个数据处理单元(DPU)提供4个vCPU和16 GB的内存。系统会以1秒为单位向您收费,四舍五入到最接近的秒,每次爬网的最短持续时间为10分钟。可以选择使用AWS Glue搜寻器,您可以直接通过API填充AWS Glue数据目录。
定价
对于所有可用AWS Glue的AWS区域: 每DPU小时$ 0.44,按秒计费,每次搜寻器运行至少10分钟
对于数据定义语言(DDL)语句(例如CREATE / ALTER / DROP TABLE,用于管理分区的语句或失败的查询)不收费。
但是,在这两个命令之上,您仍然会产生S3费用。参考:AWS Athena: does `msck repair table` incur costs?
我认为,添加新数据后,如果可以的话,最好自己管理分区。
'ALTER TABLE database.table ADD
PARTITION (partition_name='PartitionValue') location 's3://bucket/path/partition'
如果被迫使用Glue或Athena,我将评估哪种方法更适合您的流程。 MSCK REPAIR TABLE
命令可能更易于管理,但是如果分区中有很多数据或它们未正确分区,则可能会遇到麻烦。另外,您将必须有一种自动运行命令的方法。可以使用触发器配置“胶水爬行器”。
答案 1 :(得分:1)
我同意手动添加分区。您可以按照@KiteCoder的答案,通过Athena查询(ALTER TABLE ... ADD PARTITION () ...
)来执行此操作,也可以直接通过Glue API来执行此操作。
调用Glue API较为冗长,但也更加“结构化”。调用Athena显然是一个SQL查询,我知道有多少人不屑于编写动态生成SQL的代码。
具体操作为CreatePartition
。它确实需要一个名为StorageDescriptor
的对象,该对象定义了该表中的所有列和数据类型,但是对于现有表,您可以从GetTable操作中检索该结构。