본문 바로가기
Data Science/DBT

Airbnb 데이터 모델 프로젝트 준비하기 (Windows, DBT 프로젝트)

by 루크 Luke 2024. 9. 1.
반응형

 

개요

본격적으로 DBT 설치 후에 프로젝트를 진행해보려고 한다. 아무래도 처음 접해보는 툴이라서 설정부터 버벅거림이 있었는데, Windows 사용자는 아래 내용을 참고하면 좋을 것 같다. 설정값들은 강의에서 나온 내용으로 설정한 것이라서, 혹시 다르게 세팅한 사람은 해당 부분을 본인 것으로 수정해서 넣으면 될 것 같다. (계정명이나 클라우드 등등) 다행히 오류 없이 세팅이 잘 된 것 같아서 안심이다.. 버전 같은 것도 안 맞아서 호환 안 되는 경우도 있다는데, 나는 무리 없었다. 휴.

 

Snowflake Free Trial 가입하기

- 가입 시 클라우드는 AWS로 설정하고, 계정 하나 만들어주기

- Trial 기간은 30일이기 때문에, 프로젝트 빨리 끝내기 목표!

- 개인 프로젝트라면 클라우드 보통 없으니까 Google Cloud가 좋을 듯.

 

Airbnb 데이터 INSERT 해놓기

- 데이터 적재 전에, 계정 권한을 설정해줘야 한다.

-- Use an admin role
USE ROLE ACCOUNTADMIN;

-- Create the `transform` role
CREATE ROLE IF NOT EXISTS transform;
GRANT ROLE TRANSFORM TO ROLE ACCOUNTADMIN;

-- Create the default warehouse if necessary
CREATE WAREHOUSE IF NOT EXISTS COMPUTE_WH;
GRANT OPERATE ON WAREHOUSE COMPUTE_WH TO ROLE TRANSFORM;

-- Create the `dbt` user and assign to role
CREATE USER IF NOT EXISTS dbt
  PASSWORD='dbtPassword123'
  LOGIN_NAME='dbt'
  MUST_CHANGE_PASSWORD=FALSE
  DEFAULT_WAREHOUSE='COMPUTE_WH'
  DEFAULT_ROLE='transform'
  DEFAULT_NAMESPACE='AIRBNB.RAW'
  COMMENT='DBT user used for data transformation';
GRANT ROLE transform to USER dbt;

 

- DB 만들고, S3에 미리 넣어둔 데이터 INSERT 하기 (Snowflake worksheet 추가해서 SQL로 진행)

- 이 데이터는 Udemy 강사님이 설정해두신 곳 같은데, 만일 Airbnb의 다른 데이터로 하고 싶다면 이 사이트에서 다운 받아서 진행하면 좋을 것 같다. (사이트 : https://insideairbnb.com/get-the-data/)

- 새로 만든 AIRBNB 디비에도 유저 권한 부여 필수

-- Create our database and schemas
CREATE DATABASE IF NOT EXISTS AIRBNB;
CREATE SCHEMA IF NOT EXISTS AIRBNB.RAW;

-- Set up permissions to role `transform`
GRANT ALL ON WAREHOUSE COMPUTE_WH TO ROLE transform; 
GRANT ALL ON DATABASE AIRBNB to ROLE transform;
GRANT ALL ON ALL SCHEMAS IN DATABASE AIRBNB to ROLE transform;
GRANT ALL ON FUTURE SCHEMAS IN DATABASE AIRBNB to ROLE transform;
GRANT ALL ON ALL TABLES IN SCHEMA AIRBNB.RAW to ROLE transform;
GRANT ALL ON FUTURE TABLES IN SCHEMA AIRBNB.RAW to ROLE transform;

- 데이터 INSERT SQL 날리기

- 파일을 해당 DB로 밀어 넣는 거니까, COPY + 파일 경로

-- Set up the defaults
USE WAREHOUSE COMPUTE_WH;
USE DATABASE airbnb;
USE SCHEMA RAW;

-- Create our three tables and import the data from S3
CREATE OR REPLACE TABLE raw_listings
                    (id integer,
                     listing_url string,
                     name string,
                     room_type string,
                     minimum_nights integer,
                     host_id integer,
                     price string,
                     created_at datetime,
                     updated_at datetime);
                    
COPY INTO raw_listings (id,
                        listing_url,
                        name,
                        room_type,
                        minimum_nights,
                        host_id,
                        price,
                        created_at,
                        updated_at)
                   from 's3://dbtlearn/listings.csv'
                    FILE_FORMAT = (type = 'CSV' skip_header = 1
                    FIELD_OPTIONALLY_ENCLOSED_BY = '"');
                    

CREATE OR REPLACE TABLE raw_reviews
                    (listing_id integer,
                     date datetime,
                     reviewer_name string,
                     comments string,
                     sentiment string);
                    
COPY INTO raw_reviews (listing_id, date, reviewer_name, comments, sentiment)
                   from 's3://dbtlearn/reviews.csv'
                    FILE_FORMAT = (type = 'CSV' skip_header = 1
                    FIELD_OPTIONALLY_ENCLOSED_BY = '"');
                    

CREATE OR REPLACE TABLE raw_hosts
                    (id integer,
                     name string,
                     is_superhost string,
                     created_at datetime,
                     updated_at datetime);
                    
COPY INTO raw_hosts (id, name, is_superhost, created_at, updated_at)
                   from 's3://dbtlearn/hosts.csv'
                    FILE_FORMAT = (type = 'CSV' skip_header = 1
                    FIELD_OPTIONALLY_ENCLOSED_BY = '"');

 

DBT 프로젝트 진행할 가상환경 만들기 (Virtualenv)

- pip install virtualenv 로 해당 패키지 있는지 확인하고 없으면 자동 설치됨

- 가상환경 세팅할 폴더 만들기

- 접근하기 편하게 바탕화면에 만들었음 (cd Desktop > mkdir course)

- 해당 폴더로 들어가서 가상환경 venv 만들기 (cd course > virtualenv venv)

- 가상환경 Activate하기 (venv\Scripts\activate)

이렇게 앞에 (venv) 뜨면 정상 activate된 상태

 

DBT 설치

- Python 버전 확인하는 것이 좋음 (3.12 이상은 DBT 지원 안하는 것 같다. 그 미만 버전으로 설치할 것)

- 버전 확인 (python --version)

- dbt-snowflake 설치 (pip install dbt-snowflake==1.7.1)

- 버전은 호환성에 따라서 확인하고 진행하면 됨

- cmd에서 dbt 실행했을 때, 결과 하단에 이 화면 뜨면 정상 설치 완료

DBT만 커맨드 날렸을 때 화면

 

 

DBT 초기 셋팅

- DBT 프로필 파일 생성 (mkdir %userprofile%\.dbt)

- snowflake 정보 확인 (Admin > Accounts > 사용하는 계정 i 아이콘 위에 마우스오버 하면 URL > "~~~ - ~~~~" 확인

- 이 정보는 사용자마다 다르니까, 본인꺼로 꼭 이용할 것

- dbt init [프로젝트명]

 

※ dbt profile setup

1. Which database would you like to use? -> snowflake니까 1

2. DB 정보 입력

-> 이 내용은 아까 snowflake에서 DB 세팅할 때 넣었던 값으로 넣으면 된다. (threads는 프로젝트용이면 그냥 엔터)

snowflake db 세팅할 때 넣었던 값들

 

- 모두 세팅하면 course 폴더 안에 dbtlearn 디렉토리가 생성된 상태

 

DBT DEBUG로 설정 확인

- dbtlearn 폴더로 이동 (cd dbtlearn)

- dbt debug 커맨드 수행 (dbt debug)

- 본인이 설정한 내용들이 모두 출력됨

dbt debug All checks passed 상태 확인

 

 


포스팅 자료 출처

본 포스팅은 유데미(Udemy) 사이트의 "The Complete dbt (Data Build Tool) Bootcamp: Zero to Hero" 강의의 내용을 발췌하여 작성했습니다. (광고 X)

 

반응형

댓글