Impala 나 Kudu 클라이언트로 수행한 INSERT · UPDATE · DELETE 는 커밋 개념 없이 곧바로 반영된다. 스냅샷도 없고 ROLLBACK 도 없다. 잘못 실행한 DML 을 되돌리려면 미리 준비해 둔 것이 있어야 한다.
Kudu 1.15 부터 여러 행에 걸친 트랜잭션이 들어갔지만 INSERT 계열 연산에 한정된 실험적 기능이며, Impala 를 통한 일반 DML 에는 적용되지 않는다. 운영에서는 "롤백이 없다" 를 전제로 설계한다.
위험한 DML 을 돌리기 전에 대상 범위를 복사해 둔다.
CREATE TABLE db.tbl_bak_20260920
PRIMARY KEY (id)
PARTITION BY HASH (id) PARTITIONS 8
STORED AS KUDU
AS SELECT * FROM db.tbl WHERE part_dt = '2026-09-20';
Kudu 테이블을 CTAS 로 만들 때는 PRIMARY KEY 와 PARTITION BY 를 명시해야 한다. 원본 스키마를 그대로 쓰고 싶으면 CREATE TABLE ... LIKE 로 껍데기를 만든 뒤 INSERT 한다.
복구는 지운 범위만 되돌린다.
DELETE FROM db.tbl WHERE part_dt = '2026-09-20';
INSERT INTO db.tbl SELECT * FROM db.tbl_bak_20260920;
백업을 Kudu 밖에 두고 싶으면 Parquet 테이블로 내려 둔다. 용량과 조회 비용이 적고, 보관 기간을 길게 가져갈 수 있다.
CREATE TABLE db.tbl_bak_parquet STORED AS PARQUET
AS SELECT * FROM db.tbl WHERE part_dt = '2026-09-20';
되돌릴 일이 잦은 테이블이면 물리 삭제를 하지 않는 설계로 바꾼다. is_deleted 나 valid_to 컬럼을 두고 UPDATE 로 표시한 뒤, 조회는 뷰로 감싼다.
CREATE VIEW db.v_tbl AS
SELECT * FROM db.tbl WHERE is_deleted = FALSE;
되돌리기는 플래그를 원복하는 UPDATE 하나로 끝난다. 다만 삭제된 행이 계속 남으므로 보관 정책과 주기적 정리가 필요하다.
컬럼 추가·삭제는 ALTER TABLE 로 가능하지만, 지운 컬럼의 데이터는 되돌아오지 않는다.
ALTER TABLE db.tbl ADD COLUMNS (new_col INT NULL);
ALTER TABLE db.tbl DROP COLUMN old_col;
기본 키 구성·타입, 파티션 스키마(레인지 파티션의 경계 추가·삭제는 제외)는 바꿀 수 없다. 이런 변경은 새 테이블을 만들어 옮긴 뒤 이름을 바꾸는 방식으로 처리한다.
DROP TABLE 한 Kudu 테이블은 복구할 수 없다. 휴지통 개념이 없다.