Yellowbrick configurations
Yellowbrick configurations
dbt-yellowbrick 어댑터에서 모델을 구성하는 방법을 다루는 페이지예요. incremental 전략과 Yellowbrick 전용 성능 최적화(분산·정렬·클러스터 컬럼)를 설정할 수 있어요.
출처: 문서
본문
Incremental materialization strategies
dbt-yellowbrick 어댑터는 다음 incremental materialization 전략을 지원해요.
append(unique_key가 정의되지 않았을 때 기본값)delete+insert(unique_key가 정의됐을 때 기본값)
이 전략들은 모두 dbt-postgres 어댑터에서 상속받은 거예요.
Performance optimizations
쿼리 성능을 높이기 위해 Yellowbrick Data의 테이블은 dbt에서 모델 레벨 구성으로 정의할 수 있는 여러 최적화를 지원해요. 이들은 컴파일·실행 시 생성되는 CREATE TABLE DDL 문에 적용돼요. 이 설정은 view나 ephemeral로 설정된 모델에는 효과가 없다는 점에 주의하세요.
dbt-yellowbrick은 테이블을 정의할 때 다음 Yellowbrick 전용 기능을 지원해요.
dist— 단일 컬럼 분산(distribution) 키를 적용하거나, 분산을RANDOM또는REPLICATE로 설정sort_col— 데이터가 미디어에 저장되기 전에 정렬할 단일 컬럼을 지정하는SORT ON (column)절 적용cluster_cols— 데이터 저장 전에 클러스터링할 최대 네 개의 컬럼을 지정하는CLUSTER ON (column, column, ...)절 적용
정렬되거나 클러스터링된 컬럼이 있는 테이블은 쿼리에 제한(restriction)이 적용될 때 블록 스킵을 용이하게 해줘요. 자세한 내용은 Yellowbrick Data Warehouse 문서에서 찾을 수 있어요.
모델 구성 예시
SORT컬럼과 함께DISTRIBUTE REPLICATE...
{{
config(
materialized = "table",
dist = "replicate",
sort_col = "stadium_capacity"
)
}}
select
hash(stg.name) as team_key
, stg.name as team_name
, stg.nickname as team_nickname
, stg.city as home_city
, stg.stadium as stadium_name
, stg.capacity as stadium_capacity
, stg.avg_att as average_game_attendance
, current_timestamp as md_create_timestamp
from
{{ source('premdb_public','team') }} stg
where
stg.name is not null
다음 모델 출력을 줍니다:
create table if not exists marts.dim_team as (
select
hash(stg.name) as team_key
, stg.name as team_name
, stg.nickname as team_nickname
, stg.city as home_city
, stg.stadium as stadium_name
, stg.capacity as stadium_capacity
, stg.avg_att as average_game_attendance
, current_timestamp as md_create_timestamp
from
premdb.public.team stg
where
stg.name is not null
)
distribute REPLICATE
sort on (stadium_capacity);
- 단일 컬럼에
DISTRIBUTE하고 최대 네 개의CLUSTER컬럼 정의...
{{
config(
materialized = 'table',
dist = 'match_key',
cluster_cols = ['season_key', 'match_date_key', 'home_team_key', 'away_team_key']
)
}}
select
hash(concat_ws('||',
lower(trim(s.season_name)),
translate(left(m.match_ts,10), '-', ''),
lower(trim(h."name")),
lower(trim(a."name")))) as match_key
, hash(lower(trim(s.season_name))) as season_key
, cast(translate(left(m.match_ts,10), '-', '') as integer) as match_date_key
, hash(lower(trim(h."name"))) as home_team_key
, hash(lower(trim(a."name"))) as away_team_key
, m.htscore
, split_part(m.htscore, '-', 1) as home_team_goals_half_time
, split_part(m.htscore , '-', 2) as away_team_goals_half_time
, m.ftscore
, split_part(m.ftscore, '-', 1) as home_team_goals_full_time
, split_part(m.ftscore, '-', 2) as away_team_goals_full_time
from
{{ source('premdb_public','match') }} m
inner join {{ source('premdb_public','team') }} h on (m.htid = h.htid)
inner join {{ source('premdb_public','team') }} a on (m.atid = a.atid)
inner join {{ source('premdb_public','season') }} s on (m.seasonid = s.seasonid)
다음 모델 출력을 줍니다:
create table if not exists marts.fact_match as (
select
hash(concat_ws('||',
lower(trim(s.season_name)),
translate(left(m.match_ts,10), '-', ''),
lower(trim(h."name")),
lower(trim(a."name")))) as match_key
, hash(lower(trim(s.season_name))) as season_key
, cast(translate(left(m.match_ts,10), '-', '') as integer) as match_date_key
, hash(lower(trim(h."name"))) as home_team_key
, hash(lower(trim(a."name"))) as away_team_key
, m.htscore
, split_part(m.htscore, '-', 1) as home_team_goals_half_time
, split_part(m.htscore , '-', 2) as away_team_goals_half_time
, m.ftscore
, split_part(m.ftscore, '-', 1) as home_team_goals_full_time
, split_part(m.ftscore, '-', 2) as away_team_goals_full_time
from
premdb.public.match m
inner join premdb.public.team h on (m.htid = h.htid)
inner join premdb.public.team a on (m.atid = a.atid)
inner join premdb.public.season s on (m.seasonid = s.seasonid)
)
distribute on (match_key)
cluster on (season_key, match_date_key, home_team_key, away_team_key);
Cross-database materializations
Yellowbrick은 크로스 데이터베이스 쿼리를 지원하고, dbt-yellowbrick 어댑터는 같은 어플라이언스 인스턴스의 특정 대상을 크로스 데이터베이스 읽기할 수 있게 허용해요.
Limitations
Yellowbrick Data Warehouse용 dbt 어댑터의 이 초기 구현은 일부 사용 사례를 지원하지 않을 수 있어요. 어댑터 출력으로 나온 모든 레코드나 변환을 검증하는 것을 강력히 권장해요.
더 알아보기 (Learn more)
- Yellowbrick 설정 — 어댑터 연결.
- Incremental strategies — incremental 전략 개요.