【发布时间】:2020-08-03 17:28:31
【问题描述】:
我在 S3 中有一些巨大的数据文件,我正在尝试使用 Athena 运行它们。现在查询大约需要一分钟,但扫描的数据以 TB 为单位。
有什么方法可以减少要扫描的数据。
我们尝试了什么:我们已经在尝试使用 parquet 格式压缩 S3 中的底层文件以节省成本。
我们只选择我们需要的列。有什么可以在查询级别完成的吗?
查询:
SELECT *
FROM
(SELECT
A.roll_no, A.name,
C.desc,
B.grade_number,
D.hobbies
SUM(A.total_marks) AS total_marks
FROM A
LEFT OUTER JOIN B ON B.roll_no = A.roll_no
LEFT OUTER JOIN C ON C.roll_no = A.roll_no
LEFT JOIN
(SELECT distinct roll_no, hobbies
FROM D1) AS D ON A.roll_no = D.roll_no
AND A.enrolldate = D.enrolldate
WHERE B.class = '10'
AND B.subject IN ('0001','0002')
AND B.category = 'STATE'
GROUP BY A.roll_no, A.name, C.desc, B.grade_number, D.hobbies
ORDER BY A.class_date DESC)
WHERE
A.country_code = 3
AND C.state_code = 12
AND B.class_code = 12
ORDER BY
A.class_date DESC;
where 子句中的某些条件是否可以在 join 之前推送,或者是否还有其他方法可以优化此查询?
【问题讨论】:
-
请发布 DDL 和解释 - 没有这些,我们只是在猜测......
-
将
LEFT JOINs 更改为INNER JOINs。无论如何,您的WHERE子句正在撤消它。
标签: sql amazon-web-services amazon-s3 amazon-athena