从 AWS Lambda 到 Athena 的同步调用

Synchronous call from AWS Lambda to Athena

我希望使用来自我的 AWS Lambda 的 Athena 查询我的 S3 存储桶中的数据。当我查看一些示例时,从 Lambda 到 Athena 的调用似乎是异步的。 Lambda 调用 Athena 并等待 Athena 将结果写入 S3 存储桶。有没有办法直接检索响应而不必将其写入 S3 存储桶?

没有。 Athena 将始终将结果写入 S3(即使使用 JDBC 驱动程序使用的新半私有 "streaming" API)。了解 Athena 查询何时完成的唯一方法是使用 GetQueryExecution API 调用进行轮询。甚至像 JDBC 驱动程序这样看似同步的 API 也在内部使用此方法。

然而,不需要读取来自 S3 的响应,还有 GetQueryResults API 调用 returns 结果以及类型信息。如果响应中的行少于 1000 行或性能不是最优先考虑的,那么检索结果的方法比从 S3 读取 CSV 文件更好。

如果您使用的是 Lambda 的 Athena,我的建议是查看 Step Functions。除非您的 Athena 查询永远不会 运行 超过几秒钟,否则您可以通过构建一个执行查询的简单状态机来节省很多钱。你可以在 job poller sample project.

中找到好的蓝图