Cloudera Impala 설정
Cloudera Impala 설정
dbt-impala 플러그인에서 표준 모델 설정에 더해 테이블을 구성할 때 쓸 수 있는 옵션들을 소개해요. 파티셔닝, 정렬, 저장 포맷, 캐싱, 외부 테이블 여부 등 Impala 특유의 설정과 incremental 모델 지원 방식을 정리해요.
출처: dbt 공식 문서
본문
테이블 구성하기
모델을 table로 materialize할 때 표준 모델 설정에 더해 dbt-impala 플러그인만의 추가 옵션을 몇 가지 쓸 수 있어요.
| 옵션 | 설명 | 필수? | 예시 |
|---|---|---|---|
| partition_by | 컬럼 기준으로 파티션을 나눠요. 보통 파티션마다 디렉터리가 하나씩 생겨요 | 아니요 | partition_by=['name'] |
| sort_by | 컬럼 기준으로 정렬해요 | 아니요 | sort_by=['age'] |
| row_format | 개별 행을 저장할 때 사용할 포맷 | 아니요 | row_format='delimited' |
| stored_as | 테이블의 기본 저장 포맷 | 아니요 | stored_as='PARQUET' |
| location | 저장 위치. 보통 hdfs 경로 | 아니요 | LOCATION='/user/etl/destination' |
| comment | 테이블에 대한 설명 | 아니요 | comment='this is the cleanest model' |
| serde_properties | 테이블의 SerDes(직렬화/역직렬화) 프로퍼티 | 아니요 | serde_properties="('quoteChar'=''', 'escapeChar'='\')" |
| tbl_properties | 테이블과 함께 키/값 쌍으로 저장할 수 있는 메타데이터 | 아니요 | tbl_properties="('dbt_test'='1')" |
| is_cached | 이 테이블이 캐시되는지 여부 - true 또는 false | 아니요 | is_cached=false (기본값) |
| cache_pool | is_cached가 true일 때 사용할 캐시 풀 이름 | 아니요 | |
| replication_factor | is_cached가 true일 때 사용할 캐시 복제 팩터 | 아니요 | |
| external | 외부 테이블인지 여부 - true / false | 아니요 | external=true |
| table_type | 테이블의 유형 - iceberg / kudu | 아니요 | table_type="iceberg" |
위 파라미터에 대한 Cloudera 특유의 옵션은 CREATE TABLE 문서(https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_create_table.html)를 참고해요.
Incremental 모델
Incremental 모델에서 지원하는 모드는 다음과 같아요.
append(기본값): 기존 데이터를 업데이트하거나 덮어쓰지 않고 새 레코드만 삽입해요.insert_overwrite: 새 레코드는 데이터를 삽입해요. partition 절과 함께 쓰면 변경된 레코드는 데이터를 업데이트하고 새 레코드는 삽입해요.
지원하지 않는 모드도 있어요.
unique_key: dbt-impala에서 incremental 모델에 지원되지 않는 옵션이에요.merge: 기본 웨어하우스가 merge를 지원하지 않아 dbt-impala에서도 지원되지 않아요.
예시: partition_by 설정 사용하기
impala_partition_by.sql
{{
config(
materialized='table',
unique_key='id',
partition_by=['city'],
)
}}
with source_data as (
select 1 as id, "Name 1" as name, "City 1" as city,
union all
select 2 as id, "Name 2" as name, "City 2" as city,
union all
select 3 as id, "Name 3" as name, "City 2" as city,
union all
select 4 as id, "Name 4" as name, "City 1" as city,
)
select * from source_data
위 예시에서 partition_by와 그 외 설정을 가진 샘플 테이블을 만들었어요. partition_by 옵션을 쓸 때 한 가지 주의할 점은, 위 쿼리의 city 컬럼처럼 select 쿼리에서 partition_by 옵션에 쓴 컬럼 이름이 항상 마지막에 와야 한다는 거예요. partition_by 절이 select 문의 마지막 컬럼과 같지 않으면 Impala는 모델을 만들려고 할 때 오류를 표시해요.
더 알아보기 (Learn more)
- 모델 설정 (model configs) — 모든 어댑터에 공통으로 적용되는 표준 설정
- Impala CREATE TABLE 문서 — Cloudera 특유의 테이블 옵션