주요 컨텐츠로 이동
제품

쿼리 태그를 통한 dbt 파이프라인의 세분화된 사용량 귀속

단 한 줄의 설정이나 Genie를 통해 비용 귀속 및 성능 디버깅부터 환경 모니터링까지, 모든 dbt 모델을 태그하고 추적하며 최적화해 보세요.

작성자: Heeren Sharma, Lennart Reschke , JooHo Yeo

  • SQL 모델의 코드를 전혀 변경하지 않고 모든 dbt 쿼리에 팀, 비용 센터, 프로젝트, 환경 태그를 지정하세요.
  • system.query.history를 쿼리하여 어떤 dbt 모델의 비용이 가장 많이 발생하고 컴퓨팅 시간이 어디에 소요되는지 정확히 확인하세요.
  • 단일 GitHub 리포지토리에서 Declarative Automation Bundles를 사용하여 dbt 파이프라인, Query Tag 분석 대시보드, 예약된 작업 등 완전한 참조 프로젝트를 배포하세요.

여러분의 dbt 프로젝트는 매일 밤 80개의 모델을 실행합니다. 지난 분기 웨어하우스 비용이 두 배로 늘었습니다. 모델 성능은 천차만별이며, 가장 최근에 진행한 최적화의 효과도 불분명합니다. 재무팀에서 어느 팀의 책임인지 묻습니다. 쿼리 기록을 열어보니... 'Databricks Dbt'라고 표시된 동일한 행 80개가 보입니다. 행운을 빕니다.

현재 퍼블릭 프리뷰로 제공되는 Query Tags ()를 사용하면, 데이터 팀은 이제 모든 실행을 풍부하게 만들어 주는 dbt_model_name과 같이 기본으로 자동 삽입되는 태그의 이점을 누릴 수 있습니다. 또한 파이프라인이 생성하는 모든 쿼리에 팀, 비용 센터, 환경 등 원하는 맞춤형 태그를 직접 추가할 수도 있습니다.

태그는 system.query.history에 기록되므로 간단한 SQL 쿼리만으로 비용 귀속, 성능 디버깅, 워크로드 모니터링을 쉽게 수행할 수 있습니다(자세한 내용은 문서를 참조하세요).

이 블로그에서는 구성부터 비용 귀속 대시보드에 이르기까지 Query Tags를 엔드투엔드로 보여주는 완전한 오픈 소스 dbt 프로젝트를 살펴봅니다. 여기에 설명된 모든 내용은 복제하여 자체 워크스페이스에 배포할 수 있는 GitHub 리포지토리로 제공되거나, Genie에게 간단히 물어볼 수도 있습니다.

dbt-databricks와 Query Tags의 통합 방법

dbt-databricks 어댑터(버전 1.11 이상)는 Query Tags를 기본적으로 지원합니다. 태그를 적용할 수 있는 수준은 세 가지가 있으며, 각 수준은 이전 수준을 기반으로 합니다.

자동 삽입 태그

맞춤형 태그 외에도 dbt-databricks는 각 모델 실행에 대한 메타데이터를 자동으로 삽입합니다.

태그

예시 값

설명

@@dbt_model_name

fct_daily_usage_by_sku

실행 중인 dbt 모델

@@dbt_materialized

table

구체화 전략(table, view, incremental, metric_view)

@@dbt_core_version

1.11.6

dbt-core 버전

@@dbt_databricks_version

1.12.0a1

dbt-databricks 어댑터 버전

이러한 자동 태그 덕분에 별도의 구성 없이도 모델별 가시성을 확보할 수 있습니다. 어댑터가 알아서 처리해 주기 때문입니다.

프로필 수준 태그

가장 간단한 방법은 dbt 프로필의 특정 대상에 query_tags 필드를 추가하는 것입니다. 프로젝트의 모든 쿼리가 이 태그를 자동으로 상속합니다.

예를 들어, 이 한 줄은 소유자(team), 비용 발생처(cost_center), 속한 파이프라인(project_name), 실행 환경(env)의 네 가지 차원으로 모든 쿼리에 태그를 지정합니다.

모델 수준 태그

더 세분화된 귀속을 위해 dbt_project.yml의 특정 모델이나 sql 정의의 모델 구성에 태그를 제공할 수 있습니다.

모델 수준 태그는 프로필 수준 태그와 병합됩니다. 양쪽 모두에 동일한 키가 정의되어 있으면 모델 수준 값이 우선합니다.

태그가 표시되는 위치 – system.query.history

dbt run을 실행한 후, 모든 SQL 문은 query_tags 열이 MAP으로 채워진 채 system.query.history에 나타납니다. 다음과 같이 표준 맵 액세스 구문을 사용하여 쿼리할 수 있습니다.

이렇게 하면 지난 7일 동안 태그가 지정된 모든 쿼리가 반환되며, 맞춤형 및 자동 삽입 태그가 개별 열로 추출되어 집계할 준비가 완료됩니다.

실행한 쿼리의 Query Tags는 Query History UI 또는 SQL Warehouse Monitoring UI에서도 확인할 수 있습니다.

SQL Warehouse Monitoring UI에서 Query Tags 찾기

Query Profile의 오른쪽 하단에서 정의한 Query Tags를 볼 수 있어 필요한 모든 정보를 한눈에 파악할 수 있습니다.

Query Profile의 Query Tags

Query Tags를 사용한 비용 귀속

Query Tags를 사용하면 SQL 쿼리를 통해 직접 세부적인 사용량 귀속을 결정할 수 있으므로, 수동으로 로그를 분석하거나 웨어하우스 리소스를 분할할 필요가 없습니다.

어떤 dbt 모델이 웨어하우스 리소스를 가장 많이 사용하나요?

두 가지 방법으로 답을 얻을 수 있습니다. 애드혹 탐색을 위해 Genie에게 일상적인 언어로 물어보거나, 대시보드에 바로 사용할 수 있는 반복 가능한 결과를 위해 직접 SQL을 작성하는 것입니다. 두 방법 모두 동일한 system.query.history 데이터를 읽습니다.

옵션 1: Genie

Genie를 사용하여 Query Tags 작성 지원받기

Genie가 이에 해당하는 쿼리를 작성하고 실행하므로, SQL을 전혀 건드리지 않고도 후속 질문을 통해 계속해서 상세히 분석할 수 있습니다.

옵션 2: SQL

어떤 경로를 선택하든 동일한 결과를 얻을 수 있습니다. 참조 프로젝트에서는 4개의 마트 테이블(table로 구체화됨)이 컴퓨팅 시간의 대부분을 차지하는 반면, 스테이징 뷰와 메트릭 뷰는 거의 즉각적으로 처리됩니다. 이를 통해 최적화 작업에 집중해야 할 부분을 즉시 파악할 수 있습니다.

dbt 모델 및 구체화별 비용 시각화

자체 모니터링 대시보드 구축

참조 프로젝트에는 프로젝트 자체의 쿼리 태그로 필터링된 system.query.history를 쿼리하는 AI/BI 대시보드가 포함되어 있습니다. 그 결과, 청구 데이터를 분석하는 파이프라인이 자체 비용도 추적하게 되며, Query Tags를 자체적으로 직접 테스트(dogfooding)하게 됩니다.

대시보드에는 다음이 포함됩니다:

  • KPIs: 총 태그 지정된 쿼리 수, 총 컴퓨팅 시간(초), 고유 dbt 모델 수
  • 일별 활동: 환경별로 구분된 일별 쿼리 수 및 컴퓨팅 시간
  • 모델별 분석: 구체화 유형별로 색상이 지정된 모델당 컴퓨팅 시간
  • 구체화 분포: table, view, metric_view 간에 컴퓨팅이 어떻게 분배되는지 보여주는 원형 차트
  • 쿼리 세부 정보 테이블: 모델, 소요 시간, 환경, 실행기(executor)가 포함된 태그된 모든 쿼리

참조 프로젝트에서는 4개의 마트 모델이 컴퓨팅 시간의 92%를 차지했습니다. Query Tags가 없었다면 이러한 인사이트를 파악할 수 없었을 것입니다.

dbt 쿼리 태그 분석용 예시 대시보드

Genie Code를 사용하면 이 대시보드를 직접 구축하는 데 몇 분밖에 걸리지 않습니다. Genie Code에 쿼리 태그로 필터링된 system.query.history의 dbt 모델당 컴퓨팅 시간을 요청하면, SQL을 작성하고 시각화 자료를 구성해 줍니다. 완성된 결과로 바로 넘어가고 싶다면, 이 대시보드는 참조 프로젝트에도 포함되어 있으며 dbt 작업과 함께 단 한 번의 databricks bundle deploy 명령으로 배포할 수 있습니다(자세한 가이드는 GitHub 리포지토리를 참조하세요).

메트릭 뷰 태깅

Databricks 메트릭 뷰(dbt-databricks 1.12+에서 사용 가능)는 Unity Catalog에서 직접 차원 및 측정값 형태로 재사용 가능한 비즈니스 의미 체계를 정의하는 새로운 구체화 유형입니다(전체 문서 참조). query_tags 구성 매개변수를 사용하여 다른 모델과 마찬가지로 Query Tags를 가질 수 있습니다:

차이점에 유의하세요. query_tags는 메트릭 뷰를 생성하거나 새로 고치는 SQL 쿼리(system.query.history에서 추적됨)에 첨부되는 반면, databricks_tags는 Unity Catalog 태그객체 자체에 지정됩니다(거버넌스 및 검색용). 전자는 쿼리 수준의 추적을 위한 것이고, 후자는 전반적인 데이터 검색 가능성을 위한 Unity Catalog 객체 수준의 태그입니다.

dbt 프로젝트 태깅을 위한 모범 사례

문서에서는 비용 할당의 기초가 되는 Query Tags를 사용하여 탄탄한 FinOps 관행을 구축하기 위한 전체적인 프로세스를 다루었습니다. 참조 프로젝트를 구축하고 dbt 파워 유저들과 대화하면서 배운 점은 다음과 같습니다:

  • 일관된 태그 계층 구조를 사용하세요. 프로필 수준(team, cost_center, project_name, env)에서 조직 전체 태그를 정의하고, 모델 수준 태그는 예외적인 경우를 위해 예약해 두세요. 이렇게 하면 태그를 예측 가능하게 유지하고 모델별 구성이 무분별하게 늘어나는 것을 방지할 수 있습니다.
  • 항상 환경을 태깅하세요. 로컬 개발(local-dev)과 배포된 작업(dev, staging, prod)에 서로 다른 env 값을 사용하세요. 이를 통해 분석 시 임시 개발 쿼리와 예약된 프로덕션 실행을 분리할 수 있습니다. 참조 프로젝트에서 로컬 프로필은 "env": "local-dev"로 설정하고, 배포된 프로필은 "env": "dev"로 설정합니다.
  • `project_name`을 사용하여 파이프라인을 구분하세요. 여러 dbt 프로젝트가 웨어하우스를 공유할 때, project_name을 사용하면 웨어하우스를 분할하지 않고도 파이프라인별로 비용을 할당할 수 있습니다. 자동으로 삽입되는 @@dbt_model_name과 결합하면 프로젝트 → 모델 → 구체화로 이어지는 완전한 추적성을 확보할 수 있습니다.
  • 과도하게 태깅하지 마세요. 자동으로 삽입되는 태그에는 이미 모델 이름, 구체화 유형, 어댑터 버전이 포함되어 있습니다. 사용자 지정 태그에서 이 정보를 중복으로 지정할 필요는 거의 없습니다. 사용자 지정 태그는 dbt가 유추할 수 없는 비즈니스 컨텍스트(팀 소유권, 비용 센터, 프로젝트 식별 등)에 집중하세요.
  • 메트릭 뷰를 명시적으로 태깅하세요. 메트릭 뷰는 비교적 새로운 구체화 유형이므로, 비용 분석 시 메트릭 뷰 생성 쿼리를 쉽게 필터링할 수 있도록 기능 키(예: "feature": "metric_view")를 태깅하는 것이 유용합니다.

직접 시도해 보세요

전체 참조 프로젝트는 GitHub에서 확인할 수 있습니다: github.com/databricks-solutions/dbt-query-tags

시작 방법:

  1. 리포지토리 복제
  2. Python 3.12 가상 환경을 생성하고 종속성을 설치합니다: pip install dbt-databricks>=1.12.0a1
  3. 워크스페이스 호스트, SQL 웨어하우스 HTTP 경로, 카탈로그 및 사용자 지정 쿼리 태그로 profiles.yml을 업데이트합니다.
  4. 파이프라인을 실행하려면 dbt deps && dbt run --profiles-dir .을 실행합니다.
  5. 태그가 작동하는지 확인하려면 system.query.history를 쿼리합니다.
  6. 올바른 구성을 가리키도록 dbt_profiles/profiles.yml 및 databricks.yml을 업데이트합니다.
  7. 예약된 실행 및 분석 대시보드를 위해 databricks bundle deploy로 배포합니다.

자신의 팀 및 비용 센터 값으로 바꾸어 사용하세요. 이 패턴은 Databricks의 모든 dbt 프로젝트에 적용됩니다.

지금 리포지토리를 복제해 보세요! 프로필에 단 한 줄만 추가하면 전체 웨어하우스에서 모델 수준의 사용량 할당 가시성을 확보할 수 있습니다.

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.