4

我在 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在 AWS 中花费我的钱?
  2. AWS Docs 说 msck repair table可以超时。有没有办法我可以在数据管道中迈出一步来继续运行这个命令,直到它成功完成?
  3. 我更愿意手动将分区添加到 Athena(因为我知道我正在处理的年、月、日、小时)。但是我不知道,clientId因为可能有 1-X 个,而且我不知道在运行 EMR 时存在哪些。是否有解决此问题的最佳实践方法(使用 Hive 或其他方法)?我可以进行 s3 api 调用来获取列表s3://bucket/org/并编写代码来迭代列表并手动添加。我希望有一个更简单的方法...

注意:当我说“手动添加分区”时,我的意思是做这样的事情:

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/';
4

1 回答 1

5

AWS 说

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

AWS 说

S3 GET 费用确实适用。

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

于 2017-03-16T21:31:14.677 回答