제퍼넷 로고

데이터 변환을 위한 dbt – 실습 자습서

시간

데이터 변환을 위한 dbt – 실습 자습서

데이터 빌드 도구(dbt)는 인기를 얻고 사용되며 이 실습 자습서에서는 복잡한 모델 만들기, 변수 및 함수 사용, 테스트 실행, 문서 생성 및 더 많은 기능을 다룹니다.


By 에시 알리자데 영구 베타 버전의 엔지니어이자 선임 데이터 과학자입니다..

dbt(데이터 빌드 도구)는 선택 SQL 문을 사용하는 데이터 변환 도구입니다. 이를 통해 복잡한 모델을 생성하고, 변수와 매크로(일명 함수)를 사용하고, 테스트를 실행하고, 문서를 생성하고, 더 많은 기능을 사용할 수 있습니다.

dbt는 데이터를 추출하거나 로드하지 않지만 데이터베이스에서 이미 사용 가능한 데이터를 변환하는 데 강력합니다. T ELT(추출, 로드, 변환) 프로세스에서

이 게시물에서는 다음 방법을 배웁니다.

  • dbt 프로젝트를 구성합니다.
  • dbt 모델을 만듭니다(SELECT 문).
  • 전역 변수와 매크로를 사용하여 복잡한 dbt 모델을 구축합니다.
  • 다른 dbt 모델을 참조하여 복잡한 모델을 구축합니다.
  • 테스트를 실행합니다.
  • 문서를 생성합니다.

사전 요구 사항

회원 가입

당신은에 가입 할 수 있습니다 getdbt.com. 무료 계획은 소규모 프로젝트 및 테스트를 위한 훌륭한 계획입니다.

채워진 데이터가 있는 데이터베이스

내 게시물을 확인할 수 있습니다 배포하는 방법 비어 있는 Heroku의 PostgreSQL 데이터베이스. 이 게시물은 수행 방법에 대한 단계별 지침을 제공합니다. 당신은 또한 확인할 수 있습니다 데이터 수집 스크립트 FBI 증오 범죄 보고서 GitHub 레포 이 기사와 함께.

위의 내용에 따라 이 게시물에서 사용할 PostgreSQL 데이터베이스에 두 개의 테이블을 생성했습니다. 데이터베이스에는 covid_latest 및 population_prosperity라는 두 개의 테이블이 있습니다. 이 게시물의 GitHub 리포지토리에서 수집 스크립트를 찾을 수 있습니다.

dbt CLI 설치

다음 지침에 따라 dbt 명령줄 인터페이스(CLI)를 설치할 수 있습니다. dbt 문서 페이지.

dbt 프로젝트의 기초

dbt 도구를 사용하기 위해 알아야 할 세 가지 주요 사항이 있습니다.

  • DBT 프로젝트
  • 데이터베이스 연결
  • dbt 명령

dbt를 사용하는 방법?

dbt 프로젝트는 다음을 포함하는 디렉토리입니다. .SQL.yml 파일. 최소 필수 파일은 다음과 같습니다.

  • 라는 프로젝트 파일 dbt_project.yml: 이 파일에는 dbt 프로젝트의 구성이 포함되어 있습니다.
  • 모델(들)(.SQL 파일): dbt의 모델은 단순히 단일 .SQL 다음을 포함하는 파일 단일 고르다 성명서.

모든 dbt 프로젝트에는 dbt_project.yml 파일 — 이것은 dbt가 디렉토리가 dbt 프로젝트임을 아는 방법입니다. 또한 dbt에 프로젝트를 작동하는 방법을 알려주는 중요한 정보가 포함되어 있습니다.

dbt 프로젝트에 대한 자세한 정보를 찾을 수 있습니다. 여기를 눌러 더 많은 정보를 찾으세요..

A dbt 모델 기본적으로 .SQL 파일 SELECT 성명서.

dbt 명령

dbt 명령은 다음으로 시작합니다. DBT 다음 방법 중 하나를 사용하여 실행할 수 있습니다.

  • dbt Cloud(dbt Cloud 대시보드 하단의 명령 섹션),
  • DBT CLI

일부 명령은 다음과 같은 dbt CLI에서만 사용할 수 있습니다. dbt 초기화. 이 게시물에서 사용할 일부 dbt 명령은 다음과 같습니다.

  • dbt 초기화 (dbt CLI에서만)
  • dbt 실행
  • DBT 테스트
  • dbt 문서 생성

dbt 프로젝트 설정

1단계: dbt CLI를 사용하여 dbt 프로젝트(샘플 파일) 초기화

당신이 사용할 수 dbt 초기화 샘플 파일/폴더를 생성합니다. 특히, dbt 초기화 프로젝트 이름 다음을 생성합니다:

  • ~/.dbt/profiles.yml 파일이 이미 존재하지 않는 경우
  • 이라는 새 폴더 [프로젝트 이름]
  • dbt를 시작하는 데 필요한 디렉토리 및 샘플 파일

주의: 이후 dbt 초기화 라는 디렉토리를 생성합니다. 프로젝트 _ 이름, 충돌을 방지하려면 다음을 수행해야 합니다. 동일한 이름의 기존 폴더가 없습니다..

dbt 초기화

결과는 다음 샘플 파일이 있는 디렉토리입니다.

sample_dbt_project ├── README.md ├── 분석 ├── 데이터 ├── dbt_project.yml ├── 매크로 ├── 모델 │ └── 예제 │ ├── my_first_dbt_model.sql │ . ├── ── schema.yml ├── 스냅샷 └── 테스트 

이 게시물에서는 최소 파일만 고려하고 추가 항목을 제거합니다.

sample_dbt_project ├── README.md ├── dbt_project.yml └── 모델 ├── my_first_dbt_model.sql ├── my_second_dbt_model.sql └── schema.yml 

2단계: Git 리포지토리 설정

설정 중에 지정된 대로 기존 리포지토리를 사용할 수 있습니다. dbt 문서에 따라 리포지토리를 구성할 수 있습니다. 여기를 눌러 더 많은 정보를 찾으세요..

또는 새 리포지토리를 만들려면…

생성된 디렉토리 내부에서 새 리포지토리를 생성할 수 있습니다. 아래와 같이 할 수 있습니다.

자식 초기화 자식 추가 . git commit -m "첫 번째 커밋" git remote add origing git push -u origin master 

3단계: dbt Cloud Dashboard에서 새 프로젝트 설정

이전 단계에서 샘플 모델 및 구성이 포함된 샘플 dbt 프로젝트를 만들었습니다. 이제 새 프로젝트를 만들고 dbt Cloud 대시보드에서 데이터베이스와 저장소를 연결하려고 합니다.

계속하기 전에 다음을 수행해야 합니다.

  • 데이터베이스에서 이미 사용 가능한 일부 데이터,
  • 이전 단계에서 생성된 파일이 있는 저장소

아래 단계에 따라 dbt Cloud에서 새 프로젝트를 설정할 수 있습니다(이 단계는 일부 샘플 파일만 생성했다는 점에서 이전 단계와 다릅니다).

최대 XNUMXW 출력을 제공하는 dbt_project.yml 프로젝트의 파일은 아래에 나와 있습니다(전체 버전은 GitHub 레포 이 게시물에).

name: 'my_new_project' 버전: '1.0.0' config-version: 2 vars: selected_country: USA selected_year: 2019 # 이 설정은 dbt가 이 프로젝트에 사용할 "프로필"을 구성합니다. profile: 'default' # `dbt init`를 실행할 때 자동으로 생성되는 다른 것들이 있습니다. 

dbt_project.yml

dbt 모델 및 기능

dbt 모델

테이블의 몇 열을 검색하는 간단한 dbt 모델을 만들어 보겠습니다.

covid_latest에서 "iso_code", "total_cases", "new_cases"를 선택하십시오. 

covid19_최신_통계 dbt 모델(models/covid19_latest_stats.sql)

인구 번영에서 "코드", "연도", "대륙", "총 인구"를 선택하십시오. 

인구 dbt 모델(models/population.sql)

주의: dbt 모델 이름은 sql 파일의 파일 이름입니다. 모델 예배 규칙서. 모델 이름은 데이터베이스의 테이블 이름과 다를 수 있습니다. 예를 들어, 위의 dbt 모델 인구 의 결과입니다 SELECT 성명서 인구_번영 데이터베이스의 테이블.

모델 실행

다음을 실행하여 dbt 프로젝트의 모든 모델을 실행할 수 있습니다. dbt 실행. 샘플 dbt 실행 출력은 아래와 같습니다. 모든 dbt 모델 실행에 대한 요약 또는 세부 로그를 볼 수 있습니다. 이것은 쿼리에 있을 수 있는 문제를 디버그하는 데 많은 도움이 됩니다. 예를 들어 Postgres 오류를 발생시키는 실패한 모델을 볼 수 있습니다.

실패한 세부 로그 jinja_and_variable_usage dbt 모델.

진자와 매크로

dbt는 다음을 사용합니다. 진자 dbt 프로젝트를 SQL을 위한 이상적인 프로그래밍 환경으로 만드는 템플릿 언어. Jinja를 사용하면 환경 변수나 매크로(대부분의 프로그래밍 언어의 함수와 유사한 SQL의 추상 조각)를 사용하는 것과 같이 SQL에서 일반적으로 가능하지 않은 변환을 수행할 수 있습니다. 볼때마다 {{ … }}, 당신은 이미 Jinja를 사용하고 있습니다. Jinja 및 정의된 추가 Jinja 스타일 기능에 대한 자세한 내용은 다음을 확인하세요. dbt 문서.

이 게시물의 뒷부분에서 우리는 dbt에 의해 정의된 사용자 정의 매크로를 다룰 것입니다.

변수 사용

변수 정의

아래에서 변수를 정의할 수 있습니다. 바르 섹션에 dbt_project.yml. 예를 들어, 선택된_국가 기본값은 USA 그리고 또 하나는 selected_year 기본값은 2019.

이름: 'my_new_project' 버전: '1.0.0' config-version: 2 변수: selected_country: USA selected_year: 2019

dbt_project.yml

변수 사용

다음을 통해 dbt 모델에서 변수를 사용할 수 있습니다. var () 진자 기능({{ var(“var_key_name”) }}).

매크로

유용한 변환과 유용한 매크로가 많이 있습니다. dbt_utils 프로젝트에서 사용할 수 있습니다. 사용 가능한 모든 매크로 목록을 보려면 해당 매크로를 확인할 수 있습니다. GitHub 레포.

이제 프로젝트에 dbt_utils를 추가하고 아래 단계에 따라 설치해 보겠습니다.

  1. dbt_utils 매크로를 패키지.yml 파일로 복사하십시오.
패키지: - 패키지: dbt-labs/dbt_utils 버전: 0.6.6

추가 dbt_utils packages.yml로 패키지합니다.

  1. 달리기 dbt 뎁스 패키지를 설치합니다.

다음을 사용하여 패키지 설치 dbt 뎁스.

복잡한 dbt 모델

모델(선택)은 일반적으로 서로의 위에 쌓입니다. 더 복잡한 모델을 만들려면 다음을 사용해야 합니다. 참조() 매크로. 참조() 다른 모델을 참조할 수 있게 해주는 dbt에서 가장 중요한 기능입니다. 예를 들어 여러 작업을 수행하는 모델(SELECT 쿼리라고도 함)이 있고 다른 모델에서는 사용하고 싶지 않을 수 있습니다. 앞서 소개한 매크로를 사용하지 않고 복잡한 모델을 구축하는 것은 어려울 것입니다.

dbt 모델 사용 참조() 및 전역 변수

포스트 앞부분에서 정의한 두 개의 dbt 모델을 사용하여 더 복잡한 모델을 만들 수 있습니다. 예를 들어 위의 두 테이블을 국가 코드로 결합한 다음 선택한 국가 및 연도를 기준으로 필터링하는 새 dbt 모델을 생성해 보겠습니다.

{{ref('population')}}.code = {{ref('covid19_latest_stats')}}에서 {{ref('population')}} 내부 조인 {{ref('covid19_latest_stats')}}에서 *를 선택합니다. iso_code 여기서 code='{{ var("selected_country") }}' AND 연도='{{ var("selected_year") }}' 

jinja_and_variable_usage dbt 모델(models/jinja_and_variable_usage.sql).

위 쿼리에 대한 몇 가지 사항:

  • {{ref(‘dbt_model_name’)}} 프로젝트에서 사용 가능한 dbt 모델을 참조하는 데 사용됩니다.
  • 다음과 같은 모델에서 열을 얻을 수 있습니다. {{ref('dbt_model_name')}}.column_name.
  • 에 정의된 변수를 사용할 수 있습니다. dbt_project.yml 파일 {{var(“variable_name)}}.

위의 코드 조각은 국가 코드에 대한 인구 및 covid19_latest_stats 모델의 데이터를 결합하고 selected_country=USA 및 selected_year=2019를 기반으로 필터링합니다. 모델의 출력은 아래와 같습니다.

의 출력 jinja_and_variable_usage dbt 모델.

다음을 클릭하여 컴파일된 SQL 코드 스니펫을 볼 수도 있습니다. SQL 컴파일 단추. 이것은 특히 dbt 도구 외부에서 쿼리를 실행하려는 경우에 매우 유용합니다.

컴파일된 SQL 코드 jinja_and_variable_usage dbt 모델.

dbt_utils 패키지 및 매크로를 사용하는 dbt 모델

최대 XNUMXW 출력을 제공하는 dbt_utils 패키지에는 dbt 프로젝트에서 사용할 수 있는 매크로(일명 함수)가 포함되어 있습니다. 모든 매크로 목록은 다음에서 사용할 수 있습니다. dbt_utils의 GitHub 페이지.

dbt_utils를 사용하자 피벗()get_column_values() 아래와 같이 dbt 모델의 매크로:

대륙 선택, {{ ref('population') }} 대륙별 그룹에서 {{ dbt_utils.pivot( "population.year", dbt_utils.get_column_values(ref('population'), "year") ) }} 

using_dbt_utils_macros dbt 모델(models/using_dbt_utils_macros.sql).

위의 dbt 모델은 dbt에서 다음 SQL 쿼리로 컴파일됩니다.

대륙을 선택하고 sum(population.year = '2015'일 경우 1 else 0 end)을 "2015"로, sum(population.year = '2017'일 경우 1 else 0 end)를 "2017"로, sum(case when population.year = '2017' then 1 else 0 end) as "2016", sum(case when population.year = '2017' then 1 else 0 end) as "2018", sum(case when population.year = ' 2017' then 1 else 0 end) "d2019em15n1ihttu"."dbt_ealizadeh"."population" 대륙별 그룹별 그룹 제한 30 /* dbt 클라우드에 의해 자동으로 추가된 제한 */ 

다음에서 컴파일된 SQL 쿼리 using_dbt_utils_macros dbt 모델.

dbt에서 테스트 실행

dbt 사용의 또 다른 이점은 데이터를 테스트할 수 있다는 것입니다. 기본적으로 dbt에는 다음과 같은 일반 테스트가 있습니다. 유일한, not_null, 허용된 값관계. 모델에 대한 이러한 테스트의 예는 다음과 같습니다.

버전: 2 모델: - 이름: covid19_latest_stats 설명: "covid19에 대한 최신 통계 모델" 열: - 이름: iso_code 설명: "국가 코드" 테스트: - 고유 - not_null 

schema.yml(dbt 테스트).

다음을 통해 테스트를 실행할 수 있습니다. DBT 테스트. 아래에서 출력을 볼 수 있습니다.

dbt Cloud 대시보드에서 dbt 테스트를 실행한 결과입니다.

dbt 테스트에 대한 자세한 내용은 다음을 방문하십시오. dbt 문서.

dbt에서 문서 생성

간단히 실행하여 dbt 프로젝트에 대한 문서를 생성할 수 있습니다. dbt 문서 생성 아래와 같이 명령 섹션에서.

dbt 프로젝트에 대한 문서를 생성합니다.

다음을 클릭하여 생성된 문서를 탐색할 수 있습니다. 문서 보기. 아래에서 생성된 문서의 개요를 볼 수 있습니다.

dbt 문서 생성 외에도 dbt 문서는 생성된 문서와 함께 웹 서버에 서비스를 제공할 수도 있습니다. 그렇게 하려면 dbt docs serve를 실행하기만 하면 됩니다. dbt 프로젝트를 위한 문서 생성에 대한 자세한 정보를 볼 수 있습니다. 여기를 눌러 더 많은 정보를 찾으세요..

다른 기능들

Hooks & Operations를 사용한 데이터베이스 관리

다음과 같은 추가 SQL 쿼리를 실행해야 하는 데이터베이스 관리 작업이 있습니다.

  • 사용자 정의 함수 생성
  • 테이블에 대한 권한 부여
  • 그리고 더 많은

dbt에는 이러한 작업을 실행하기 위한 두 개의 인터페이스(후크 및 작업)가 있으며 중요하게는 버전 제어가 있습니다. 여기에서는 후크와 작업을 간략하게 소개합니다. 더 많은 정보를 위해, 당신은 확인할 수 있습니다 dbt 문서.

후크

후크는 단순히 다른 시간에 실행되는 SQL 스니펫입니다. 후크는 다음에서 정의됩니다. dbt_project.yml 파일. 다른 후크는 다음과 같습니다.

  • 프리 훅: 모델이 빌드되기 전에 실행됨
  • 포스트 후크: 모델 빌드 후 실행
  • 실행 시작: dbt 실행 시작 시 실행
  • 실행 중: dbt 실행 종료 시 실행

행정부

작업은 모델을 실행하지 않고 매크로를 호출하는 편리한 방법입니다. 작업은 다음을 사용하여 트리거됩니다. dbt 실행 작업 명령. 후크와 달리 명시적으로 SQL을 실행해야 합니다. dbt 작업.

결론

dbt는 데이터 ELT(또는 ETL) 파이프라인을 단순화할 수 있으므로 시도해 볼 가치가 있는 훌륭한 도구입니다. 이 게시물에서 우리는 데이터 변환을 위해 dbt를 설정하고 사용하는 방법을 배웠습니다. 이 도구의 다양한 기능을 안내해 드렸습니다. 특히 다음에 대한 단계별 가이드를 제공했습니다.

  • dbt 프로젝트 구성
  • dbt 모델 생성(SELECT 문)
  • 전역 변수 및 매크로를 사용하여 복잡한 dbt 모델 구축
  • 다른 dbt 모델을 참조하여 복잡한 모델 구축
  • 테스트 실행
  • 문서 생성

당신을 찾을 수 있습니다 GitHub 레포 아래의 모든 스크립트(데이터 수집 스크립트 포함)를 포함합니다. 이 기사의 소스 코드를 자유롭게 포크하십시오.

바이오 : 에시 알리자데 (@es_alizadeh)는 영구 베타 버전인 엔지니어이자 선임 데이터 과학자입니다. 그는 다양한 기술, 통계, 시계열 및 기계 학습에 대해 글을 쓰는 것을 좋아합니다.

관련 :


PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.
액세스하려면 여기를 클릭하십시오.

출처: https://www.kdnuggets.com/2021/07/dbt-data-transformation-tutorial.html

spot_img

최신 인텔리전스

spot_img