ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Amazon Redshift]DELETE vs TRUNCATE
    데이터 2024. 11. 24. 21:43

    할 일들이 좀 몰려서 밀리다 결국 간신히 이번 글을 쓰게 되었네요. 어떤 내용을 쓰면 좋을까하며 일할 때 작성해둔 메모 및 정리글들을 좀 훑어보다가 DB에서 한 번씩은 꼭 언급된다는 DELETE와 TRUNCATE가 Amazon Redshift에서는 어떻게 다른지!에 대한 글을 작성해보려합니다.(딱 한 줄짜리 내용이지만 쓰고싶은 내용이 있어서요👀) +사용 예시(구문 예시)는 누군가에겐 그렇게까지?할 수 있겠지만 익숙하게 사용하던 명칭 습관과 같은 종류로 보안 이슈를 일으킬까봐 혹시몰라 Amazon Redshift 공식문서 예시로만 작성합니다. 

     

    DELETE

    테이블의 데이터를 삭제하는 구문입니다. 테이블 전체 삭제를 할 수도 있고, 특정 조건 하의 데이터만 삭제하는 것도 가능합니다

     

    사용 예시

    1) 테이블 전체 삭제

    DELETE category;

    category 테이블의 데이터를 모두 삭제합니다.

     

    2) 특정 조건에 맞는 데이터만 삭제

    DELETE FROM category
    WHERE catid BETWEEN 0 AND 9;

    해당 쿼리의 경우 WHERE 조건절에 해당하는 category 테이블의 catid 가 0 에서 9 사이인 행만 삭제하게 됩니다.

     

    3) 다른 테이블과 결합하여(JOIN) 해당 조건 데이터 삭제

    #USING 활용
    DELETE FROM category
    USING event
    WHERE event.catid=category.catid AND category.catid=9;
    
    #WHERE절 서브쿼리 활용
    DELETE FROM category
    WHERE catid IN
    (SELECT category.catid FROM category, event
    WHERE category.catid=event.catid AND category.catid=9);

    두 쿼리 모두 evnet 테이블에과 join되는 catid 중 그 값이 9인 데이터만 삭제하게 됩니다. 두 쿼리의 결과는 동일합니다. 다만, USING으로 테이블 조인을 활용해서 사용할 수도 있고, WHERE 구문에서 서브쿼리를 활용할 수도 있어 두 가지 예시 모두 가져와봤습니다. 

     

    TRUCNCATE

    DELETE처럼 데이터를 삭제하는 구문입니다. 하지만 둘 사이에 차이는 꽤 큰데 TRUNCATE의 경우 테이블 스캔없이 테이블 전체를 비우는 명령어입니다. 테이블 전체 데이터 삭제해야할 경우, TRUNCATE가 DELETE보다 속도가 빠를 수 있습니다.

     

    다만, TRUNCATE의 경우 autocommit 되므로 롤백이 불가하니 사용할 때 주의해서 사용하셔야합니다.(돌이킬 수 없는 강을 건너게 되실 수도 있습니다...) 추가로 Amazon Redshift 에서 TRUNCATE는 기본적으로는 테이블의 오너(생성계정) 혹은 superuser 일 때 실행할 수 있습니다. 만약 테이블을 생성하는 계정과 배치 작업을 진행하는 실행 계정이 분리가 되어있다면, 실행 계정에 TRUNCATE 에 대한 권한을 따로 부여해주어야합니다.

     

    사용 예시

    TRUNCATE category;

    마찬가지로 category 테이블의 전체 데이터를 삭제합니다.

    BEGIN;
    
    TRUNCATE date;
    
    ROLLBACK;
    
    SELECT COUNT(*) FROM date;
    
    count
    -------
    0
    (1 row)

    요것은 위에서 언급한 autocommit과 관련된 내용입니다. ROLLBACK을 진행했으나 date 테이블에 데이터는 남아있지 않은 것을 확인할 수 있습니다. TRUNCATE를 실행할 경우 날려도 괜찮은지를 꼭 한 번은 생각해보시기를..보통 백업도 함께 하시겠지만 조심하는 것은 나쁘지않다고 봅니다!

     

    Comment

    부지런히 써보겠다 했는데 어째 제목만 미리 작성하고 지난 기수보다 더 미뤄서 쓰는 것 같은 느낌이네요. 회사에서 Redshift를 처음 접했을 때, 자료를 이것저것 되게 많이 찾아보면서 기억해두거나 다시 찾아볼 내용들을 정리해놓았는데요. 오랜만에 그 메모들을 뒤적뒤적 보니 의외로 알찬(?) 내용들이 많았습니다. 누군가에겐 되게 당연한 내용이었을 수 있겠지만요!ㅎㅎ

Designed by Tistory.