Wednesday, January 18, 2023

Cara Delete table di Redshift

 


    Hallo mabro, kali ini gua pengen catet lagi ini pengetahuan yang baru gua dapetin. Intinya mah ini tu catatan buat gua si, biar gua gak lupa. Tapi mungkin catatan gua bisa bermafaat untuk yang lain, ya jadi gua share saja disini. 
    Okeh,,, karena sebelumnya gua lebih sering buat script SQL dan SQL Server sebagai databasenya. Nah sekarang gua lebih sering menggunakan Redshift untuk databasenya. Sehingga ada beberapa function script yang berbeda dengan SQL Server. Namun secara keseluruhan hampir sama cuma ada beda dibeberapa bagian saja. 
    Jadi saat ini gua mau share terkait logic untuk Delete table berdasarkan table yang lain untuk filternya. Nanti tulils dibawah yang jadi perbedaan nya. : 

SQL Server 

DELETE FROM EDW_FINANCESOD.T_SOD_CONFLICT SOD 
INNER JOIN (
SELECT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,COUNT(*) 'COUNT_BASELINE_DOCUMENT'
FROM (
SELECT  DISTINCT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,BASELINE_DOCUMENT  
FROM EDW_FINANCESOD.T_SOD_CONFLICT WHERE SOD_RULE IN ('R040','R140','R150')
) X
GROUP BY CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT
) DISTINCT_SOD ON SOD.CREATED_BY_NAME = DISTINCT_SOD.CREATED_BY_NAME 
AND SOD.COMPANY_CODE = DISTINCT_SOD.COMPANY_CODE 
AND SOD.PERIOD_OF_BASELINE_DOCUMENT = DISTINCT_SOD.PERIOD_OF_BASELINE_DOCUMENT 
WHERE DISTINCT_SOD.COUNT_BASELINE_DOCUMENT > 1 

Redshift : 
DELETE T_SOD_CONFLICT_STAGING 
FROM 
(
    SELECT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,COUNT(*) AS COUNT_BASELINE_DOCUMENT
    FROM (
        SELECT  DISTINCT CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT,BASELINE_DOCUMENT  FROM T_SOD_CONFLICT_STAGING WHERE SOD_RULE IN ('R040','R140','R150')
        ) X
    GROUP BY CREATED_BY_NAME, COMPANY_CODE, PERIOD_OF_BASELINE_DOCUMENT
) DISTINCT_SOD 
Where 
(
    T_SOD_CONFLICT_STAGING.CREATED_BY_NAME = DISTINCT_SOD.CREATED_BY_NAME 
AND T_SOD_CONFLICT_STAGING.COMPANY_CODE = DISTINCT_SOD.COMPANY_CODE 
AND T_SOD_CONFLICT_STAGING.PERIOD_OF_BASELINE_DOCUMENT = DISTINCT_SOD.PERIOD_OF_BASELINE_DOCUMENT 
and DISTINCT_SOD.COUNT_BASELINE_DOCUMENT = 1
);

Nah,,, tu diatas bedanya. 
Biar gak puyeng gua tandain warna merah di script nya. 
1. Beda di cara delete nya 
2. beda dicara join table utama dengan table lain nya

kalo masih bingung kabarin gua di komen ya ...



Share:

0 comments:

Post a Comment