AWS Athena:msck修复表会产生成本吗?

时间:2017-03-16 21:21:30

标签: hive emr amazon-emr amazon-athena

我在S3中有ORC数据,如下所示:

s3://bucket/orc/clientId=client-1/year=2017/month=3/day=16/hour=20/
s3://bucket/orc/clientId=client-2/year=2017/month=3/day=16/hour=21/
s3://bucket/orc/clientId=client-3/year=2017/month=3/day=16/hour=22/

每小时我运行一个EMR作业,将S3中的原始JSON转换为ORC,并使用路径分区约定(上面)将其写入以供Athena摄取。在EMR作业完成后,我运行msck repair table,以便Athena可以获取新分区。

我有3个相关问题:

  1. 在这种情况下运行msck repair table会花费我的资金吗?
  2. AWS Docs say msck repair table可能会超时。有没有办法我可以在数据管道中继续运行此命令,直到它成功完成?
  3. 我更愿意手动将分区添加到Athena(因为我知道我正在处理的年,月,日,小时)。但是我不知道clientId,因为可能有1-X,我不知道在运行EMR时存在哪些。有没有最佳实践方法来解决这个问题(使用Hive或其他东西)?我可以进行s3 api调用以获取s3://bucket/org/列表并编写代码以迭代列表并手动添加。我希望有一种更简单的方式......
  4. 注意:当我说“手动添加分区”时,我的意思是这样做:

    ALTER TABLE <athena table> 
    ADD PARTITION (clientId='client-1',year=2017,month=3,day=16,hour=20) 
    location 's3://bucket/orc/clientId=client-1/year=2017/month=3/day=16/hour=20/';
    

2 个答案:

答案 0 :(得分:2)

AWS says

  

DDL查询或分区检测不收费。

AWS says

  

S3 GET费用确实适用。

我还不知道如何自动msck repair table以确保完成。

答案 1 :(得分:1)

不幸的是,我没有足够的声誉来评论@rynop的响应,但是我想补充一点,Athena API提供了一个请求GetQueryExecution,可以对其进行轮询以确定任何查询执行的结果。来自StartQueryExecution的响应提供了QueryExecutionId。