Concurrency 如何使Athena同时处理多个查询

Concurrency 如何使Athena同时处理多个查询,concurrency,amazon-athena,Concurrency,Amazon Athena,我正在通过一个Python应用程序向Athena发起几个并发查询 考虑到雅典娜的查询历史,似乎雅典娜确实同时接收并同时处理了多个查询 但是,结果表明,总体查询运行时间与一个接一个地发送查询没有多大区别 示例:按顺序发送三个查询,而不是同时发送: #按顺序 于接收于接收于完成 查询1 22:01:14 6s 22:01:20 查询2 22:01:20 6s 22:01:27 查询_3 22:01:27 5s 22:01:25 #同时 于接收于接收于完成 查询_1 22:02:25 17s 22:0

我正在通过一个Python应用程序向Athena发起几个并发查询

考虑到雅典娜的查询历史,似乎雅典娜确实同时接收并同时处理了多个查询

但是,结果表明,总体查询运行时间与一个接一个地发送查询没有多大区别

示例:按顺序发送三个查询,而不是同时发送:

#按顺序
于接收于接收于完成
查询1 22:01:14 6s 22:01:20
查询2 22:01:20 6s 22:01:27
查询_3 22:01:27 5s 22:01:25
#同时
于接收于接收于完成
查询_1 22:02:25 17s 22:02:42
查询2 22:02:25 17s 22:02:42
查询_3 22:02:25 17s 22:02:42
根据这些结果,在第二种情况下,雅典娜虽然假装同时处理查询,但似乎以顺序的方式有效地处理了它们

是否有一些配置我不知道,使雅典娜有效地同时处理多个查询?理想情况下,在本例中,并发处理的三个查询需要6秒的全局运行时间(三个单独查询中最长的时间)


注意:这是三个针对相同数据库/表的查询,由S3中相同(单个)拼花文件支持。这个拼花文件大约70Mb大,有2.5M行和半打列。

一般来说,在Athena中运行并发查询的方法是根据需要运行任意多个
StartQueryExecution
调用,收集查询执行ID,然后使用
GetQueryExecution
轮询每个待完成的查询。Athena独立、并发和异步地运行每个查询

根据轮询每个查询执行ID之间的等待时间,查询可能需要不同的时间。您可以使用
GetQueryExecution
响应的
Statistics.EngineeExecutionTimeInMillis
属性查看查询在Athena中执行的时间,以及
Status.SubmissionDateTime
Status.CompletionDateTime
属性之间的差异,以查看雅典娜收到查询和响应可用之间的总时间。通常这两个数字非常接近,如果有差异,您的查询将在Athena内部排队

你问题中的数字看起来不太可能。他们在跑了17秒后就在同一秒结束了比赛,这看起来很可疑。你做了多少次实验?如果查看统计信息。EngineeExecutionTimeinMillis它们的毫秒数是否不同,或者所有的数字都相同?您是否设置了
ClientRequestToken
,如果设置了,那么这三个查询的值是否相同(在这种情况下,您实际上只运行了一个查询)


“并发”是什么意思?是从不同的线程启动并轮询,还是在单个循环中轮询?您在每次轮询调用之间等待了多长时间?

Athena将同时运行查询,您看到的数字不太可能是由于Athena造成的。为了弄清楚它是什么,你必须给我们更多的上下文,例如,你用来产生测量值的代码。您是如何等待查询完成的?@Theo感谢您的评论-这些数字直接来自雅典娜的查询历史记录,而不是我的系统。向我们展示启动查询的代码以及从查询历史中提取数字的代码。当我们谈论17秒运行时,三个查询不太可能有确切的开始和结束持续时间。我们运行了数百个并发查询,但没有看到这种行为。