크로스 데이터베이스 매크로

크로스 데이터베이스 매크로 (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 메커니즘을 통해 현재 어댑터에 맞는 구현을 선택해요. 새 어댑터에서도 동일한 인터페이스로 동작하도록 설계되어 있어요.

더 알아보기 (Learn more)

  • 매크로가 어댑터별 구현을 찾는 방식은 dispatch를 참조하세요.
  • 크로스 DB 유틸리티 패키지로는 dbt-utils가 있어요.