如何使 Athena SQL 查询更快

0 string datetime query-optimization where-clause presto

我在基于 PrestoDB 的 AWS Athena 上运行它。我原本的计划是查询3个月前的数据来分析这些数据。然而,即使是过去2个小时的查询时间也需要超过30分钟,此时查询就会超时。有没有更有效的方法来执行查询?

SELECT column1, dt, column 2
FROM database1
WHERE date_parse(dt, '%Y%m%d%H%i%s') > CAST(now() - interval '1' hour AS timestamp)
Run Code Online (Sandbox Code Playgroud)

日期列以字符串形式记录YYYYmmddhhmmss

GMB*_*GMB 5

问题很可能是查询对正在过滤的列应用了函数。这是低效的,因为数据库需要转换整个列才能过滤它。有人说这个谓词是non-SARGable 的

您的主要工作应该是修复数据模型并将日期存储为dates 而不是字符串。

也就是说,您用来表示日期的字符串格式仍然可以使用直接过滤。这个想法是将过滤器值转换为目标字符串格式(而不是将列值转换为日期):

where dt > date_format(now() - interval '1' hour, '%Y%m%d%H%i%s')
Run Code Online (Sandbox Code Playgroud)