sql - Athena:按比例查询耗尽的资源
问题描述
我正在运行如下查询:
SELECT f.*, p.countryName, p.airportName, a.name AS agentName
FROM (
SELECT
f.outboundlegid,
f.inboundlegid,
f.querydatetime,
cast(f.agent as bigint) as agent,
cast(f.querydestinationplace as bigint) as querydestinationplace,
f.queryoutbounddate,
f.queryinbounddate,
f.quoteageinminutes,
f.price
FROM flights f
WHERE querydatetime >= '2018-01-02'
AND querydatetime <= '2019-01-10'
) f
INNER JOIN (
SELECT airportId, airportName, countryName
FROM airports
WHERE countryName IN ('Philippines', 'Indonesia', 'Malaysia', 'Hong Kong', 'Thailand', 'Vietnam')
) p
ON f.querydestinationplace = p.airportId
INNER JOIN agents a
ON f.agent = a.id
ORDER BY f.outboundlegid, f.inboundlegid, f.agent, querydatetime DESC
它出什么问题了?或者我该如何优化它?它给了我
在此比例因子下查询耗尽的资源
我有一个航班表,我想查询特定国家/地区内的航班
解决方案
我从雅典娜开始就一直面临这个问题,问题是ORDER BY
条款。Athena 只是一个安装了 hive 和 prestodb 的 EMR 集群。您面临的问题是:即使您的查询分布在 X 个节点上,排序阶段也必须由单个节点完成,在这种情况下是主节点。因此,最后,您可以订购与内存拥有主节点一样多的数据。
您可以通过减少查询返回的数据量来测试它,可能会减少时间范围。
推荐阅读
- amazon-web-services - 如何在 AWS Fargate 中公开容器的端口
- java - 为什么我的 ArrayList 中对象的属性返回 null?
- asp.net - 如何在 ASP.NET 中将 Google SSO CallbackPath 设置为 HTTPS?
- ruby-on-rails - 如何在 Rails 中通过 OTP 实现电子邮件验证?
- javascript - SendGrid 客户端 TypeScript 错误:HttpMethod
- javascript - 来自映射对象 onClick 的数据 - React
- java - Java create new instance of class based on another class
- c - 是什么让 Printf 打印两次?
- angular - 为什么拖放在此 PrimeNG 树中不起作用?
- python - Python Boto3 使用 NextToken 通过路径从 SSM 获取参数