Dev

빅쿼리 테이블 컬럼 삭제하기

June 30, 2018

빅쿼리 테이블 컬럼 삭제하기

빅쿼리를 사용하다 보면 불필요해진 컬럼이 있어서 삭제하고 싶은 경우가 있습니다. 컬럼을 삭제하지 않고 그냥 둬도 되겠지만 보기에 별로고 데이터 저장비용도 많이 들어갈테니 깔끔하게 삭제하는것이 좋습니다.

빅쿼리에서 테이블 컬럼을 삭제하는 2가지 방법이 있습니다.

  • 1번 : SQL 쿼리를 이용해서 삭제하고자 하는 컬럼을 제외한 모든 데이터를 조회하고 결과를 기존 테이블에 덮어쓰기
  • 2번 : 데이터를 Export 해서 클라우드 스토리지에 저장하고 데이터에서 컬럼을 삭제후 Load job 이용해서 기존 테이블에 덮어쓰기

기존 테이블에 덮어쓰기를 한다는 점에서는 어차피 둘다 동일한 방식입니다.

1번 방법은 데이터 조회에 따른 데이터 스캔 비용이 발생합니다. 2번 방법은 Export, Load job에 대해 비용은 없지만 스토리지 비용이 조금 발생합니다.

현재 저장된 데이터의 크기에 따라 적절한 방법을 선택하면 되겠습니다. 비용을 지불하더라도 편한 방법을 선택하고자 하면 1번을 데이터가 많아서 비용이 부담스럽다면 2번 방법을 선택하면 되겠습니다.

이 글에서는 1번 방법을 이용한 컬럼 삭제를 소개하겠습니다.

#standardSQL
SELECT
 * EXCEPT(top_results)
FROM
 테이블 이름
  1. 위의 쿼리를 입력후 ‘Show Options’ 를 클릭하고 ‘Destination Table’에 덮어쓰기할 테이블을 선택합니다.
  2. ‘Write Preference’는 ‘Overwrite table’을 선택합니다.

이렇게 선택한후 ‘Run Query’ 버튼을 클릭하면 작업이 시작되고 완료되면 기존 테이블에서 컬럼이 삭제됩니다. 이 작업은 데이터 크기에 따라 시간이 오래 걸릴수 있습니다.

생각보다 쉽죠? 하지만 결정적인 단점이 있습니다.

테이블을 생성할때 ‘Partitioning Type’을 지정해서 사용하는 경우 _PARTITIONTIME 필드가 모두 현재시점으로 변경되어 버립니다. 이렇게되면 데이터 스캔 비용 절약을 위해 _PARTITIONTIME를 사용하는 쿼리들에서 잘못된 결과가 나올수 있습니다. 테이블 데이터 크기가 큰경우 _PARTITIONTIME이 한날짜로 리셋되버리는것은 향후 쿼리 비용에 있어 많은 비용을 감당해야되는 상황이 발생할 수 있습니다.

기존 테이블을 계속 유지하고 새로운 테이블에서는 컬럼을 삭제한 상태로 새롭게 데이터를 쌓아가는것도 방법이 될수 있겠습니다.

참고문서

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^