>  기사  >  백엔드 개발  >  dbt 매크로 가이드 - 목적, 이점 및 사용법

dbt 매크로 가이드 - 목적, 이점 및 사용법

Susan Sarandon
Susan Sarandon원래의
2024-10-19 06:11:02129검색

A Guide to dbt Macros - Purpose, Benefits, and Usage

  • 아파치 아이스버그 101
  • 아파치 아이스버그 체험 소개
  • 무료 아파치 아이스버그 단기집중 강좌
  • Apache Iceberg 무료 사본: 최종 가이드

dbt 작업 시 사용할 수 있는 가장 강력한 기능 중 하나는 매크로입니다. 매크로를 사용하면 dbt 프로젝트 전반에 걸쳐 사용할 수 있는 재사용 가능한 코드를 작성할 수 있으므로 개발을 최적화하고 중복성을 줄이며 공통 패턴을 표준화하는 데 도움이 됩니다. 이 게시물에서는 dbt 매크로의 목적, 데이터 변환 워크플로를 간소화하는 데 어떻게 도움이 되는지, 효과적으로 사용하는 방법을 살펴보겠습니다.

dbt 매크로란 무엇입니까?

큰 수준에서 dbt 매크로는 dbt에 통합된 템플릿 언어인 Jinja로 작성된 재사용 가능한 코드 조각입니다. 매크로는 dbt 프로젝트 내의 다양한 위치(예: 모델, 테스트 및 기타 매크로)에서 호출할 수 있는 함수처럼 작동합니다. 이를 통해 반복 작업을 단순화하고 SQL 변환에 논리를 추가할 수 있습니다.

매크로를 dbt 코드를 DRY(반복하지 마세요)하는 방법으로 생각할 수 있습니다. 이는 유사한 SQL 패턴이 여러 모델에서 반복되는 대규모 프로젝트에 특히 유용합니다.

dbt 매크로가 당신을 돕는 방법

프로젝트에서 dbt 매크로를 사용하면 얻을 수 있는 몇 가지 주요 이점은 다음과 같습니다.

1. 중복성 감소

많은 데이터 변환 워크플로에서 여러 모델에 걸쳐 동일한 SQL 논리를 작성하는 경우가 있습니다. 예를 들어 유효하지 않은 레코드를 필터링하거나 특정 변환을 적용합니다. 매크로를 사용하면 이 논리를 재사용 가능한 함수로 추상화하고 필요할 때마다 호출하여 코드 중복을 줄일 수 있습니다.

2. SQL 로직 표준화

매크로는 프로젝트 전반에 걸쳐 공통 논리(예: 데이터 유효성 검사 또는 사용자 정의 조인)가 일관되게 적용되도록 하는 데 도움이 됩니다. 이러한 표준화를 통해 오류 가능성이 줄어들고 변환이 다양한 모델에서 동일한 규칙을 따르도록 보장됩니다.

3. 복잡한 논리 단순화

매크로를 사용하면 복잡한 로직을 관리 가능하고 재사용 가능한 구성 요소로 나눌 수 있습니다. 이렇게 하면 SQL 모델이 단순화되어 읽기, 유지 관리 및 디버깅이 더 쉬워집니다.

4. SQL을 동적으로 생성

매크로를 사용하면 변수, 구성 설정 또는 입력을 기반으로 다양한 사용 사례에 적응하는 SQL을 작성할 수 있습니다. 이러한 동적 SQL 생성을 통해 코드를 수동으로 변경하지 않고도 다양한 극단적인 경우와 환경을 처리할 수 있습니다.

5. 모델 간 재사용

매크로가 정의되면 여러 모델에서 사용할 수 있으므로 매크로 업데이트가 프로젝트 전체에 반영됩니다. 이를 통해 유지 관리가 더 쉬워지고 업데이트 속도가 빨라집니다.

dbt 매크로 작성 및 사용 방법

매크로 정의

매크로는 일반적으로 dbt 프로젝트의 매크로/ 디렉터리에 있는 .sql 파일에 정의됩니다. 다음은 열의 평균을 계산하는 간단한 매크로의 예입니다.

-- macros/calculate_average.sql

{% macro calculate_average(column_name) %}
    AVG({{ column_name }})
{% endmacro %}

이 예에서 매크로calculate_average는 열 이름을 매개변수로 받아들이고 해당 열에 적용된 AVG() SQL 함수를 반환합니다.

모델에서 매크로 사용

매크로를 정의한 후에는 다음 구문을 사용하여 모든 모델 내에서 매크로를 호출할 수 있습니다.

-- models/my_model.sql

SELECT
    {{ calculate_average('price') }} AS avg_price,
    category
FROM
    {{ ref('products') }}
GROUP BY
    category

여기에서는 논리를 수동으로 반복할 필요 없이 SELECT 문의 계산_평균 매크로를 사용하여 제품 테이블의 평균 가격을 계산합니다.

변수와 함께 매크로 사용

매크로를 변수와 결합하여 유연성을 높일 수도 있습니다. 예를 들어, 변수를 기반으로 WHERE 절을 동적으로 작성하는 매크로를 정의해 보겠습니다.

-- macros/filter_by_status.sql

{% macro filter_by_status(status) %}
    WHERE status = '{{ status }}'
{% endmacro %}

이제 이 매크로를 사용하여 다음과 같은 변수를 기반으로 데이터를 필터링할 수 있습니다.

-- models/orders.sql

SELECT *
FROM {{ ref('orders') }}
{{ filter_by_status(var('order_status', 'completed')) }}

이 경우 filter_by_status는 order_status를 기준으로 결과를 필터링하는 WHERE 절을 동적으로 추가합니다. 제공되지 않으면 기본적으로 완료됩니다.

복잡한 매크로: 동적 테이블 조인
다음은 전달된 매개변수를 기반으로 동적 조인을 생성하는 고급 매크로의 예입니다.

-- macros/join_tables.sql

{% macro join_tables(left_table, right_table, join_key) %}
    SELECT
        left.*,
        right.*
    FROM
        {{ ref(left_table) }} AS left
    INNER JOIN
        {{ ref(right_table) }} AS right
    ON
        left.{{ join_key }} = right.{{ join_key }}
{% endmacro %}

이 매크로는 두 개의 테이블 이름과 하나의 조인 키를 사용하여 테이블 사이에 INNER JOIN을 동적으로 생성합니다.

-- models/joined_data.sql

{{ join_tables('customers', 'orders', 'customer_id') }}

이 매크로를 호출하면 customer_id 키에서 고객 및 주문 테이블을 조인하기 위한 전체 SQL이 생성됩니다.

dbt 매크로 사용에 대한 모범 사례

  • 매크로 집중 유지: 각 매크로는 잘 정의된 단일 작업을 수행해야 합니다. 하나의 매크로에 너무 많은 논리를 집어넣지 마십시오. 대신 재사용 가능한 더 작은 구성요소로 나누세요.

  • 명확한 명명 규칙 사용: 모델에서 사용할 때 목적이 명확하도록 매크로 이름이 설명적이어야 합니다. 이렇게 하면 코드를 더 쉽게 이해하고 유지 관리할 수 있습니다.

  • 예상적인 경우 처리: 다양한 시나리오에서 안정적으로 작동하도록 매크로 내에서 발생할 수 있는 극단적인 경우(예: null 값 또는 예상치 못한 입력)를 항상 고려하세요.

  • 테스트에서 매크로 활용: 또한 dbt 테스트에서 매크로를 사용하여 재사용 가능한 테스트 논리를 생성하여 프로젝트 검증 단계 전반에 걸쳐 일관성을 보장할 수 있습니다.

  • 매크로 문서화: 매크로에 설명과 문서를 추가하여 매크로의 목적, 매개변수 및 사용법을 설명합니다. 이는 여러 팀원이 동일한 프로젝트에 기여할 때 특히 유용합니다.

결론

dbt 매크로는 데이터 변환 프로젝트에서 더 깔끔하고 유지 관리가 용이하며 재사용이 가능한 코드를 작성하는 데 도움이 되는 강력한 도구입니다. 매크로는 복잡한 논리를 추상화하고, 반복 패턴을 표준화하고, SQL을 동적으로 생성함으로써 복잡성을 크게 줄이고 dbt 워크플로우의 안정성을 향상시킵니다.

dbt를 처음 사용하는 사용자이든 숙련된 사용자이든 매크로를 효과적으로 작성하고 사용하는 방법을 배우면 데이터 엔지니어링 능력을 한 단계 더 발전시킬 수 있습니다. 재사용 가능한 간단한 스니펫으로 작게 시작하고 시간이 지남에 따라 고급 로직을 통합하여 dbt 프로젝트에서 매크로의 잠재력을 완전히 활용하세요.

위 내용은 dbt 매크로 가이드 - 목적, 이점 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.