如何调优这个已经使用parquet文件的amazonathenasql查询

wswtfjt7  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(245)

我在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子句中的某些条件是否可以在连接之前推送,或者是否还有其他方法可以优化此查询?

p8h8hvxi

p8h8hvxi1#

你可以先把决赛 WHERE 语句,因为这样可以减少访问的行数。实际上,这意味着您可以删除整个 SELECT * 查询的一部分,并使其成为一个没有子选择的单个查询。
为什么会有 ORDER BYLEFT JOIN --似乎不需要。
这个 SELECT DISTINCT 可能成本很高,所以如果可以避免/简化这一点就好了。
检查 EXPLAIN 计划发现查询的最高成本。

相关问题