SQL query performance tuning - Athena

Viewed 103

The below SQL query runs for almost 3 mins. All the 3 tables (C_table, E_table, and V_table) are external tables and are partitioned on the basis of C_id, dt. Each CTE returns about 9000 columns and there are about 40 million records in each table. Is there any way I can optimize this query?

I tried changing the order by sequence, but it is still the same.

WITH S AS 
    (SELECT S.C_id AS C_id,
         S.dt AS date,
         S.CR_id AS CR_id,
         sum(AI) AS AI,
         sum(UE) AS UE,
         sum(UW) AS UW,
         cast(sum(VI) AS double) / cast(sum(AI) AS double) AS VR
    FROM "db_name"."C_table" S
    WHERE S.C_id IN (10422,10421,10420,10418,10417,10416,10415,10414)
    AND S.dt
        BETWEEN date '2021-01-1'
            AND date '2021-03-29'
    GROUP BY  S.C_id,S.dt, S.CR_id ) , 
    
    E AS 
    (SELECT E.C_id AS C_id,
         E.dt AS date,
         E.CR_id AS CR_id,
         sum(UIEO) AS UIEO
    FROM "db_name"."E_table" E
    WHERE E.C_id IN (10422,10421,10420,10418,10417,10416,10415,10414)
    AND E.dt
        BETWEEN date '2021-01-1'
            AND date '2021-03-29'
    GROUP BY  E.C_id,E.dt, E.CR_id ) , 
    
    
    V AS 
    (SELECT V.C_id AS C_id,
         V.dt AS date,
         V.CR_id AS CR_id,
         cast(sum(V_cmplt) AS double) / cast(sum(V_strt) AS double) AS VCR
    FROM "db_name"."V_table" V
    WHERE V.C_id IN (10422,10421,10420,10418,10417,10416,10415,10414)
    AND V.dt
        BETWEEN date '2021-01-1'
            AND date '2021-03-29'
    GROUP BY  V.C_id,V.dt, V.CR_id )
    
    
SELECT cp.name AS C_name,
         ct.name AS CR_name,
         S.date,
         S.AI,
         ((cast(S.UE AS double) + cast(E.UIEO AS double)) / cast(S.UW AS double)) AS ER,
         V.VCR,
         S.VR
FROM S
JOIN V
    ON V.C_id = S.C_id
    AND V.date = S.date
    AND V.CR_id = S.CR_id
JOIN E
    ON E.C_id = S.C_id
    AND E.date = S.date
    AND E.CR_id = S.CR_id
JOIN "db_name"."C_lookup" cp
    ON cp.id = S.C_id
JOIN "db_name"."CR_lookup" ct
    ON ct.id = S.CR_id

Any help is appreciated.

0 Answers
Related