소유자는 DESCRIBE FORMATTED 출력의 Detailed Table Information 구역에 나온다. SHOW TABLE STATS 에는 없다.
DESCRIBE FORMATTED mydb.sales_data;
# Detailed Table Information
Owner: hadoop
CreateTime: Mon Apr 22 15:35:12 UTC 2024
Location: hdfs://ns1/user/hive/warehouse/mydb.db/sales_data
Metastore 백엔드 DB 를 직접 조회할 수도 있으나 읽기 전용으로만 쓴다.
SELECT d.NAME, t.TBL_NAME, t.OWNER
FROM TBLS t JOIN DBS d ON t.DB_ID = d.DB_ID
WHERE d.NAME = 'mydb';
Impala 는 ALTER TABLE ... SET OWNER USER 를 지원한다. Metastore 의 소유자 필드를 바꾸는 SQL 명령이다.
ALTER TABLE mydb.sales_data SET OWNER USER newowner;
ALTER TABLE mydb.sales_data SET OWNER ROLE analyst_role;
ALTER DATABASE mydb SET OWNER USER newowner;
Ranger 를 쓰는 환경에서 소유자 기반 정책({OWNER})을 적용한다면 이 값이 권한 판단에 쓰인다.
HDFS 파일의 소유자는 별개다. 필요하면 따로 바꾼다.
DESCRIBE FORMATTED mydb.sales_data;
hdfs dfs -chown -R newowner:newgroup /user/hive/warehouse/mydb.db/sales_data
REFRESH mydb.sales_data;
Metastore 백엔드 DB 의 TBLS.OWNER 컬럼을 직접 UPDATE 하는 방식은 권하지 않는다. 캐시와 어긋나고, 배포판에 따라 다른 테이블도 함께 갱신해야 해서 불일치를 만든다.
소유자만 바꿔도 실제 접근 권한이 따라오지 않는 경우가 많다. 권한은 Ranger 정책이나 HDFS ACL 이 결정하므로, 소유자 변경 뒤 실제 접근을 확인한다.