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)