데이터 엔지니어 이것저것

dbt 시작하기 본문

오픈소스/dbt

dbt 시작하기

pastime 2023. 11. 11. 01:41
728x90

dbt를 postgresql과 연결하여 시작을 해보려한다

 

pip install dbt-postgres

 

 

설치 이후

 

프로젝트 생성

dbt init users

 

이후 db 접근 설정들을 입력하라고 하는데 일단 설정을 모두 해본다

users라는 dir가 생성된다

 

 

cd users
dbt debug

 

 

성공한 모습

 

 

db 접근 정보들이 어디에 저장되어있는지 확인하던 도중 

 

설정 정보값들이 HOME DIR에 저장되어 있어서 이것을 바꾸려 한다

 

dbt run --help

 

 

 

 

별도로 설정을 하지 않으면 HOME dir를 검색한다고 한다

 

.env Dir에 profiles.yml에 db 접근 정보를 입력하고 테스트 해보자

 

users:
  outputs:
    dev:
      dbname: root
      host: localhost
      pass: password
      port: 5432
      schema: source
      threads: 1
      type: postgres
      user: root
  target: dev

 

 

실행할때 따로 옵션을 추가해서 실행을 해보자

 

 dbt debug --profiles-dir ..\.env\profiles.yml

 

 

 

에러가 나서 확인을 해보니 profiles.yml 까지 작성을 하면 안된다.

 

 dbt debug --profiles-dir ..\.env

 

설정 정보들을 저장한 dir 위치까지만 입력해주고 실행을 하면 

 

정상 동작하는걸 확인할수 있다.

 

 

환경변수 적용 순서

 

  1. 명령어에 --profiles-dir 옵션을 주었을 경우
  2. 환경 변수에 설정된 값
  3. 현재 DIR
  4. root의 .dbt DIR

mac의 경우 환경변수를 추가하면 해결되지만 윈도우에서는 귀찮다.

 

 

 

 

모델 생성

 

  • models DIR에 테스트를 위한 SQL을 생성한다
SELECT id,
       user_name
FROM users

 

 

dbt run

 

이렇게 하면 오류가 발생하는데 테이블이 존재하지 않다고 한다.

 

SELECT id,
       user_name
FROM source.users

 

앞에 스키마 정보를 추가하면 정상 동작한다.

 

 

schema.yml 에 정보를 입력

version: 2

sources:
  - name: user_table
    database: root
    schema: source
    tables:
      - name: users

 

 

관련 문서 : https://docs.getdbt.com/docs/build/sources

 

Add sources to your DAG | dbt Developer Hub

Read this tutorial to learn how to use sources when building in dbt.

docs.getdbt.com

 

쿼리 수정

SELECT id,
       user_name
FROM {{ source('user_table', 'users')}}

 

정상 동작

 

 

 

관련 view 테이블이 생성된것을 확인할수있다

 

{{config(alias='test') }}

SELECT id,
       user_name
FROM {{ source('user_table', 'users')}}

맨 앞줄에 config alias 로 설정을 하면 원하는 테이블 또는 view로 작성할수있다

 

 

초반에 테이블이 삭제가 되었다

 

  • alias를 하지 않고 sql 파일이 테이블 명과 같으면 안된다.
  • alias를 하여도 테이블명과 동일하면 안된다.

해당 부분은 많이 위험한것같은데 테스트중 미리 발견해서 다행이다.

 

 

 

진자 탬플릿으로 작성한 SQL이 변환되는지 확인하는 방법

 

dbt compile

 

해당 명령어를 실행하면 

 

├─target
│  ├─compiled
│  │  └─users
│  │      └─models
│  │          └─users

 

targer 폴더 밑에 compiled로 sql들이 작성된다.

SELECT id,
       user_name

FROM "root"."source"."users"

 

이런식으로 확인할 수 있다.

 

 

 

TODO

  • dbt run 할때 스키마 입력 안하면 오류 발생하는 부분

 

 

 

728x90

'오픈소스 > dbt' 카테고리의 다른 글

dbt test  (0) 2023.11.14
dbt snapshot  (0) 2023.11.13
dbt sources  (1) 2023.11.12
dbt seeds  (0) 2023.11.12
dbt란?  (0) 2023.11.10