하이브 3.0에서 제공하는 구체화 뷰(Materialized Views)에 대해서 알아보겠습니다.
뷰(View)는 논리적인 테이블입니다. 데이터 검색을 위한 구조는 가지고 있지만 실제 데이터는 가지고 있지 않습니다. 구체화 뷰(M-View)는 물리적인 테이블입니다. 구체화 뷰를 생성할 때 데이터를 별도의 저장공간에 저장하여 뷰를 사용할 때 속도를 높일 수 있습니다. 보통 데이터웨어 하우스에서 쿼리의 속도를 높이는데 많이 사용됩니다.
하이브에서 규체화 뷰는 LLAP, Calcite(CBO) 기능과 협력하여 쿼리의 속도를 높이는 데 사용됩니다.
구체화 뷰 생성
구체화 뷰는 생성되는 시점에 테이블의 데이터를 취합하여 데이터를 저장합니다. 이 과정에서 맵리듀스 작업이 발생합니다. 구체화 뷰를 저장하는 기본 서데(SerDe)와 파일 포맷은 사용자가 지정할 수도 있습니다.
- 데이터 저장위치는 기본적으로 HDFS이며 사용자가 설정할 수 있음
- 데이터 저장 포맷도 사용자가 지정할 수 있음
- 드루이드(Druid) 핸들러를 이용하여 드루이드에 데이터를 저장하여 처리 속도를 높일 수 있음
- 구체화 뷰는 원천 테이블의 정보가 재작성되면 해당 정보가 자동으로 반영되지 않음
rebuild
명령을 주기적으로 처리해 주는 것이 좋음
-- 구체화 뷰생성
CREATE MATERIALIZED VIEW mvew
AS
SELECT col1, col2
FROM tbl;
-- 구체화 뷰 포맷 확인
DESC FORMATTED mview;
구체화 뷰기반 쿼리 작성
쿼리에 구체화 뷰를 이용하며 옵티마이저가 쿼리를 자동으로 재작성하게 할 수 있습니다. hive.materializedview.rewriting
설정을 이용하여 기본으로 재작성 기능을 설정할 수 있고, ALTER 명령으로 기능을 동작 여부를 지정할 수 있습니다. 쿼리를 분석하는 시점에 구체화 뷰의 정보를 이용하여 최적화를 진행합니다.
ALTER M VIEW mv_code ENABLE|DISABLE REWRITE;
AWS EMR의 구체화 뷰
EMR의 AMI 5.24에서 지원하는 구체화 뷰는 아직 ALTER 명령과 REBUILD명령을 지원하지 않습니다. 따라서 고정된 데이터의 특정 칼럼을 이용할 때만 이용하는 것이 좋습니다.
https://cwiki.apache.org/confluence/display/Hive/Materialized+views
'빅데이터 > hive' 카테고리의 다른 글
[hive] 하이브 매크로(macro) (0) | 2020.04.22 |
---|---|
[hive] This command is not allowed on an ACID table default.table_name with a non-ACID transaction manager 오류 해결 방법 (0) | 2020.03.17 |
[hive] UDF에서 발생하는 argument type mismatch 오류 수정 (0) | 2020.01.14 |
[hive] 벡터화(vectorized) 처리 (0) | 2020.01.07 |
[hive] 하이브의 조인방식(hive join) (0) | 2020.01.06 |