크로스 데이터베이스 매크로
크로스 데이터베이스 매크로 (Cross-database macros)
크로스 데이터베이스(cross-database) 매크로는 여러 데이터 플랫폼(어댑터)에서 동일한 SQL을 사용할 수 있게 해주는 매크로예요. 데이터 플랫폼마다 구문이 조금씩 달라지는 연산(날짜 계산, 문자열 함수, 해시 등)을 dbt가 어댑터에 맞게 변환해 줘요. 그래서 하나의 모델 SQL을 쓰면 어느 웨어하우스에서도 똑같이 동작해요.
출처: 문서
본문
이들은 dbt 네임스페이스에서 제공되며 {{ dbt.dateadd(...) }}처럼 호출해요. 주요 매크로는 다음과 같아요.
dbt.dateadd(datepart, interval, from_date_or_timestamp)— 특정 날짜/타임스탬프에 간격(interval)을 더해요.dbt.datediff(datepart, start_date, end_date)— 두 날짜 사이의 차이를 특정 단위로 반환해요.dbt.split_part(string_text, delimiter_text, part_number)— 문자열을 구분자로 나누어 특정 위치의 조각을 반환해요.dbt.date_trunc(datepart, date)— 날짜를 특정 단위로 절사(truncate)해요.dbt.current_timestamp()— 현재 타임스탬프를 반환해요.dbt.hash(expression)— 표현식의 해시값을 반환해요.dbt.replace(field, old_chars, new_chars)— 문자열에서 특정 문자들을 다른 문자로 치환해요.dbt.right(string, char_length)— 문자열의 오른쪽에서 N개 문자를 반환해요.dbt.position(substring_text, string_text)— 문자열 안에서 부분 문자열의 위치를 반환해요.dbt.listagg(measure, delimiter_text, order_by_clause, limit_num)— 행의 측정값을 구분자로 묶어 하나의 문자열로 집계해요.
예시
select
dbt.dateadd('day', 1, '2020-01-01') as plus_one_day,
dbt.datediff('day', '2020-01-01', '2020-01-03') as diff_days,
dbt.split_part('a|b|c', '|', 2) as part,
dbt.hash('my_string') as hashed_value
from ...
이 매크로들은 내부적으로 dispatch 메커니즘을 통해 현재 어댑터에 맞는 구현을 선택해요. 새 어댑터에서도 동일한 인터페이스로 동작하도록 설계되어 있어요.