[BigQuery] 테이블 스키마 열 유형 변경하기

가을·2026년 3월 22일

BigQuery를 사용하다 보면 초기에 설정한 컬럼 유형을 나중에 변경해야 하는 상황이 발생하기도 한다
하지만 빅쿼리는 ALTER COLUMN을 통한 직접적인 타입 변환에 제한이 많음

특히 다른 테이블이나 뷰에서 해당 테이블을 참조하고 있는 경우, 테이블을 삭제하고 재생성하는 방식은 위험!
따라서 테이블을 삭제하고 재생성하는 방법 대신 원하는 유형의 새 컬럼을 추가한 후 기존 컬럼을 삭제하는 방법을 정리함

이 페이지에서는 INTEGER 유형의 etl_lod_dt 컬럼을 TIMESTAMP 유형으로 변환하는 방법에 대해 다룸

컬럼 유형 변경하는 방법

STEP 1. 데이터 형태 확인

(기존 컬럼) 20260211175819 (YYYYMMDDHHMMSS)

STEP 2. 새로운 TIMESTAMP 컬럼 추가

타임스탬프 값을 담을 빈 컬럼을 먼저 생성
테이블 자체를 건드리지 않으므로 참조 오류가 발생하지 않음

ALTER TABLE `프로젝트.데이터셋.테이블`
ADD COLUMN new_timestamp_col TIMESTAMP;

STEP 3. 데이터 변환 및 업데이트

숫자형 데이터를 문자열로 바꾼 뒤, 포맷에 맞춰 타임스탬프로 파싱하여 새 컬럼에 채움

UPDATE `프로젝트.데이터셋.테이블`
SET new_timestamp_col = PARSE_TIMESTAMP('%Y%m%d%H%M%S', CAST(기존_컬럼 AS STRING))
WHERE 기존_컬럼 IS NOT NULL;

형식에 맞지 않는 데이터를 NULL 처리하려면 SAFE.PARSE_TIMESTAMP 사용

STEP 3. 기존 컬럼 정리 및 이름 변경

데이터가 정상적으로 들어갔는지 SELECT문으로 확인한 후, 기존 컬럼을 삭제하고 새 컬럼의 이름을 원래대로 되돌림

-- 1. 기존 INTEGER 컬럼 삭제
ALTER TABLE `프로젝트.데이터셋.테이블` 
DROP COLUMN 기존_컬럼;

-- 2. 새 TIMESTAMP 컬럼의 이름을 기존 이름으로 변경
ALTER TABLE `프로젝트.데이터셋.테이블` 
RENAME COLUMN new_timestamp_col TO 기존_컬럼;

정리

장점

참조 무결성 유지
CREATE OR REPLACE 방식은 테이블 삭제하므로 이를 참조하는 뷰가 깨질 수 있기 때문에 원래 테이블에 새로운 열을 추가해 대체하는 방법을 사용

데이터 검증 가능
기존 컬럼을 삭제하기 전까지 두 컬럼을 동시에 보며 데이터가 정확히 변환되었는지 검증 가능

서비스 중단 최소화
컬럼 추가 및 업데이트는 실시간 서비스 중인 테이블에서도 비교적 안전하게 수행됨

단점

비용
UPDATE 문은 전체 테이블을 스캔하기 때문에 데이터 용량이 매우 클 경우 비용이 발생

파티션
만약 기존 테이블이 시간 단위 파티션 테이블이라면 컬럼 삭제/추가 시 파티션 설정이 유지되는지 사전에 확인 필요

0개의 댓글