Impala 에서 만든 Kudu 테이블은 이름이 두 개다. 하나는 Hive Metastore 에 등록된 db.table 이고, 다른 하나는 Kudu 마스터가 갖는 실제 테이블 이름이다. Impala 테이블의 kudu.table_name 속성이 둘을 잇는다.
DESCRIBE FORMATTED db.tbl;
출력의 kudu.table_name 값이 Kudu 쪽 이름이다. HMS 통합을 켠 클러스터에서는 Kudu 이름이 db.tbl 형식으로 맞춰지고, 켜지 않은 클러스터에서는 impala::db.tbl 형식이 쓰인다.
데이터 복사 없이 다른 데이터베이스에서 같은 Kudu 테이블을 보려면 외부 테이블로 다시 매핑한다.
CREATE EXTERNAL TABLE schema_new.tbl1
STORED AS KUDU
TBLPROPERTIES ('kudu.table_name' = '<원래 Kudu 테이블 이름>');
외부 테이블이므로 DROP TABLE 을 해도 Kudu 쪽 데이터는 지워지지 않는다. 새 매핑이 정상 조회되는 것을 확인한 뒤 옛 매핑을 정리한다. 관리형 테이블을 그대로 두고 외부 매핑을 추가하면 같은 데이터를 두 이름으로 보게 되므로, 어느 쪽이 정본인지 정해 두어야 한다.
ALTER TABLE db_a.t RENAME TO db_b.t 가 Kudu 테이블에서 동작하는지는 배포판과 버전에 따라 다르다. (확인 필요 — 적용 전에 개발 환경에서 먼저 확인한다.) 실패하는 경우 위 외부 테이블 매핑으로 우회한다.
Kudu 쪽 이름만 바꾸는 명령도 있다.
kudu table rename_table <master-addresses> <old_name> <new_name>
이 명령은 Kudu 마스터의 이름만 바꾸므로, HMS 통합을 쓰지 않는 클러스터에서는 Impala 테이블의 kudu.table_name 을 함께 갱신해야 연결이 유지된다.
AnalysisException: TRUNCATE TABLE not supported for Kudu table ...
TRUNCATE TABLE 은 HDFS 기반 테이블에서 디렉터리를 비우는 연산이라 Kudu 에는 대응하는 동작이 없다. 대안은 둘이다.
전체 삭제가 소량이면 DELETE 를 쓴다.
DELETE FROM db.tbl;
행 단위로 삭제 마커를 남기므로 대용량에서는 느리고, 컴팩션이 끝날 때까지 디스크도 줄지 않는다.
대용량이면 테이블을 다시 만드는 편이 훨씬 빠르다.
DROP TABLE db.tbl;
CREATE TABLE db.tbl (...) PARTITION BY ... STORED AS KUDU;
다시 만들면 권한(Ranger 정책은 이름 기준이라 유지되지만 소유자는 바뀐다)과 통계, Impala 메타데이터를 다시 맞춰야 한다.
레인지 파티션으로 기간을 나눈 테이블이면 파티션 단위로 떼어 내는 것이 가장 싸다.
ALTER TABLE db.tbl DROP RANGE PARTITION '2026-01-01' <= VALUES < '2026-02-01';
DROP TABLE 후 같은 이름으로 만들면 이미 존재한다는 오류가 나는 경우가 있다. Kudu 마스터와 HMS 중 한쪽에만 지워져 메타데이터가 어긋난 상태다.
INVALIDATE METADATA db.tbl;
kudu table list <master-addresses> | grep tbl
Impala 쪽 캐시 문제면 INVALIDATE METADATA 로 풀리고, Kudu 에 테이블이 남아 있으면 Kudu CLI 로 직접 지워야 한다. 권한 부족으로 한쪽 삭제만 실패하는 경우가 흔하므로, 삭제를 수행한 사용자의 권한도 함께 본다.
DROP TABLE 한 Kudu 테이블은 복구할 수 없다.PutKudu 설정·Spark 작업의 테이블 이름을 모두 확인한다.