我在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个相关问题:
msck repair table
会花费我的资金吗?msck repair table
可能会超时。有没有办法我可以在数据管道中继续运行此命令,直到它成功完成?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/';
答案 0 :(得分:2)
答案 1 :(得分:1)
不幸的是,我没有足够的声誉来评论@rynop的响应,但是我想补充一点,Athena API提供了一个请求GetQueryExecution,可以对其进行轮询以确定任何查询执行的结果。来自StartQueryExecution的响应提供了QueryExecutionId。