Snowflake에서 dbt 프로젝트 객체 실행 스케줄링
Snowflake에서 dbt 프로젝트 객체 실행 스케줄링
Snowflake 태스크 또는 Apache Airflow 같은 외부 오케스트레이터를 사용해 EXECUTE DBT PROJECT 명령으로 dbt 프로젝트 객체 실행을 스케줄할 수 있어요. 네이티브 태스크 스케줄링과 외부 오케스트레이터를 비교하려면 dbt Projects on Snowflake 오케스트레이션 이해 문서를 참조하세요.
출처: Snowflake 문서
본문
워크스페이스에서 연결된 dbt 프로젝트 객체를 실행하는 사용자 관리 태스크(user-managed task)를 빠르게 만들고 스케줄할 수 있어요. SQL 명령으로 태스크를 직접 만들 수도 있어요. 워크스페이스가 dbt 프로젝트 객체에 연결되어 있으면 해당 객체에 대해 EXECUTE DBT PROJECT 명령을 실행하는 모든 태스크를 볼 수 있어요.
EXECUTE DBT PROJECT 명령을 실행하는 태스크는 dbt 프로젝트 객체와 같은 데이터베이스와 스키마에 만들어야 해요.
📌 서버리스 태스크(serverless task)로는 dbt 프로젝트 객체를 실행할 수 없어요.
EXECUTE DBT PROJECT명령을 실행하는 태스크를 만들 때는 사용자 관리 웨어하우스를 지정해야 해요.
워크스페이스에서 태스크 생성하기
워크스페이스 안에서 스케줄을 만들면 Snowflake가 dbt 프로젝트 객체와 같은 데이터베이스와 스키마에 사용자 관리 태스크를 생성해요. 태스크는 태스크 소유자의 권한으로 실행되지만, 태스크 실행은 사용자와 연결되지 않아요.
워크스페이스에서 dbt 프로젝트 객체 실행을 스케줄하는 태스크를 만들려면:
- 프로젝트 창 오른쪽의 dbt 프로젝트 메뉴에서 Scheduled runs 아래의 Create schedule을 선택해요.
- Schedule a dbt run 대화 상자에서 다음을 수행해요: Schedule name에 태스크 이름을 입력해요. Frequency에서 Hourly부터 Monthly까지 at 한정자와 함께 주파수를 선택하거나, Custom을 선택해 Cron 식을 입력해요. 태스크 스케줄링에 대한 자세한 내용은
CREATE TASK명령 참조의SCHEDULE = …을 참조하세요. dbt properties 아래에서: Operation에서 스케줄로 실행할 dbt 명령을 선택해요. 지원되는 명령 목록은 지원되는 dbt 명령과 플래그 문서를 참조하세요. Profile에서dbt_projects_profiles.yml또는profiles.yml에 정의된 프로필 중 하나를 선택해요. 두 파일이 모두 있으면 Snowflake는dbt_projects_profiles.yml을 사용해요. Additional flags에 dbt 명령에 대한 추가 명령줄 옵션을 입력해요. - Create를 선택해요. Snowflake가 지정한 매개 변수를 사용해
EXECUTE DBT PROJECT명령을 실행하는 태스크를 생성해요.
워크스페이스에서 태스크 보기
워크스페이스 내에서 연결된 dbt 프로젝트 객체를 실행하는 데이터베이스와 스키마의 모든 태스크를 볼 수 있어요. 태스크를 선택해 객체 탐색기에서 태스크 정의, 실행 기록, 태스크 그래프 등 세부 정보를 볼 수 있어요.
워크스페이스에서 dbt 프로젝트 객체와 연결된 태스크를 보려면:
- dbt 프로젝트 메뉴에서 View schedules를 선택한 다음 목록에서 스케줄(태스크)을 선택해요. 객체 탐색기에 태스크의 Task Details가 열려요. 태스크 세부 정보, 태스크 정의를 구성하는 SQL 문, 태스크 객체에 부여된 권한이 표시돼요. Run History 탭을 선택해 태스크 실행 기록을 보거나, 해당하는 경우 Task Graph 탭을 선택해 이 태스크와 다른 태스크의 관계를 태스크 그래프로 볼 수 있어요. 자세한 내용은 Snowsight에서 태스크와 태스크 그래프 보기 문서를 참조하세요.
SQL로 태스크 생성하기
CREATE TASK 명령을 사용해 EXECUTE DBT PROJECT 명령을 실행하는 태스크를 만들 수 있어요. SQL로 서로 다른 dbt CLI 옵션으로 서로 다른 dbt 명령을 실행하는 태스크를 만들면 Snowflake에서 dbt 배포를 오케스트레이션하는 강력한 방법이 돼요.
다음 SQL 예시는 6시간 간격으로 dbt run 명령을 실행하는 프로덕션 dbt target용 태스크를 생성해요.
CREATE OR ALTER TASK my_database.my_schema.run_dbt_project
WAREHOUSE = my_warehouse
SCHEDULE = '6 hours'
AS
EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='run --target prod';
💡 태스크에 지정한 웨어하우스는 각 예약 실행 기간 동안 청구돼요. 비용을 한곳으로 통합하려면 여기에
dbt_projects_profiles.yml또는profiles.yml의 target에 설정된 것과 같은 웨어하우스를 사용하세요. 자세한 내용은 웨어하우스 구성 정렬 문서를 참조하세요.
그런 다음, 다음 SQL은 이전 run_dbt_project 태스크가 완료될 때마다 dbt test 명령을 실행하는 태스크를 생성해요.
CREATE OR ALTER TASK change_this.public.test_dbt_project
WAREHOUSE = my_warehouse
AFTER run_dbt_project
AS
EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='test --target prod';