Snowflake CLI 를 사용하여 dbt Projects on Snowflake 관리하기

참고

Snowflake CLI 의 dbt Projects on Snowflake 기능은 버전 3.13.0 이상에서만 사용할 수 있습니다.

Snowflake CLI 를 사용하여 다음 작업으로 dbt 프로젝트를 관리할 수 있습니다.

dbt 프로젝트 오브젝트 배포

snow dbt deploy 명령은 로컬 파일을 임시 스테이지에 업로드한 후 새 dbt 프로젝트 오브젝트를 만들거나, 새 버전을 만들어서 업데이트하거나, 완전히 다시 만듭니다. 유효한 dbt 프로젝트에는 다음의 두 파일이 포함되어야 합니다.

  • dbt_project.yml: 사용할 프로필을 지정하는 표준 dbt 구성 파일입니다.

  • profiles.yml: dbt_project.yml.:file:`profiles.yaml`에서 참조되는 dbt 연결 프로필은 데이터베이스, 역할, 스키마, 유형을 정의해야 합니다.

    • 기본적으로, dbt Projects on Snowflake 는 dbt 환경 또는 프로필에서 지정된 대상 스키마(target.schema)를 사용합니다. dbt Core 동작과 달리, dbt 프로젝트를 성공적으로 컴파일하거나 실행하려면 profiles.yml 파일에 지정된 대상 스키마가 dbt 프로젝트를 만들기 전에 있어야 합니다.

    <profile_name>:
    target: dev
    outputs:
      dev:
        database: <database_name>
        role: <role_name>
        schema: <schema_name>
        type: snowflake
    
    Copy

다음 예에서는 snow dbt deploy 명령을 사용하는 방법을 보여줍니다.

  • :codenowrap:`jaffle_shop`이라는 dbt 프로젝트 오브젝트를 배포합니다.

    snow dbt deploy jaffle_shop
    
    Copy
  • 지정된 디렉터리에서 :codenowrap:`jaffle_shop`이라는 프로젝트를 배포하고, dbt 프로젝트 오브젝트가 이미 있는지 여부에 따라 새 버전을 만들거나 추가합니다.

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory --profiles-dir ~/.dbt/ --force
    
    Copy
  • 사용자 지정 프로필 디렉터리를 사용하고 :doc:`외부 액세스 통합</developer-guide/external-network-access/creating-using-external-network-access>`을 활성화하여 지정된 디렉터리에서 :codenowrap:`jaffle_shop`이라는 프로젝트를 배포합니다.

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory
    --profiles-dir ~/.dbt/ --default-target dev
    --external-access-integration dbthub-integration
    --external-access-integration github-integration
    --force
    
    Copy

사용 가능한 모든 dbt 프로젝트 오브젝트 나열

snow dbt list 명령은 Snowflake에서 사용 가능한 모든 dbt 프로젝트 오브젝트를 나열합니다.

다음 예에서는 snow dbt list 명령을 사용하는 방법을 보여줍니다.

  • 사용 가능한 모든 dbt 프로젝트 오브젝트를 나열합니다.

    snow dbt list
    
    Copy
  • 이름이 JAFFLE`로 시작하는 dbt 프로젝트 오브젝트를 :codenowrap:`product 데이터베이스에 나열합니다.

    snow dbt list --like JAFFLE% --in database product
    
    Copy

dbt 프로젝트 오브젝트 명령 실행

snow dbt execute 명령은 Snowflake dbt 프로젝트 오브젝트에서 다음과 같은 `dbt 명령<https://docs.getdbt.com/reference/dbt-commands>`_ 중 하나를 실행합니다.

dbt 명령 사용에 대한 자세한 내용은 `dbt 명령 참조<https://docs.getdbt.com/reference/dbt-commands>`_ 섹션을 참조하세요.

다음 예에서는 snow dbt execute 명령을 사용하는 방법을 보여줍니다.

  • dbt test 명령을 실행합니다.

    snow dbt execute jaffle_shop test
    
    Copy
  • run dbt 명령을 비동기적으로 실행합니다.

    snow dbt execute --run-async jaffle_shop run --select @source:snowplow,tag:nightly models/export
    
    Copy

dbt 프로젝트 오브젝트 설명

snow dbt describe 명령은 Snowflake의 dbt 프로젝트 오브젝트에 대해 설명합니다.

다음 예에서는 Snowflake의 :codenowrap:`my_dbt_project`라는 dbt 프로젝트 오브젝트에 대해 설명합니다.

snow dbt describe my_dbt_project
Copy

dbt 프로젝트 오브젝트 삭제

snow dbt drop 명령은 Snowflake에서 dbt 프로젝트 오브젝트를 삭제합니다.

다음 예에서는 Snowflake의 :codenowrap:`my_dbt_project`라는 dbt 프로젝트 오브젝트를 삭제합니다.

snow dbt drop my_dbt_project
Copy

CI/CD 워크플로에서 snow dbt 명령 사용

참고

CI/CD워크플로를 빌드할 때 Github와 Snowflake CLI 같은 git 서버만 필요합니다. Git 리포지토리 오브젝트는 필요하지 않습니다.

Snowflake CLI 를 사용해 dbt 명령을 실행하여 CI/CD 파이프라인을 빌드할 수 있습니다. 이러한 파이프라인은 일반적으로 새 풀 요청과 같은 새 코드를 테스트하거나, 기본 분기에 병합될 때마다 프로덕션 애플리케이션을 업데이트하는 데 사용됩니다.

snow dbt 명령을 사용하여 CI/CD 워크플로를 빌드하려면 다음 단계를 따르세요.

  1. dbt 프로젝트를 준비합니다.

    1. dbt 프로젝트를 다운로드하거나 새 프로젝트를 시작합니다.

      • 기본 프로젝트 디렉터리에 dbt_project.ymlprofiles.yml 파일이 포함되어 있는지 확인합니다.

      • :file:`dbt_project.yml`에서 참조된 프로필 이름이 :file:`profiles.yml`에 정의되어 있는지 확인합니다.

        참고

        Snowflake의 dbt 프로젝트 오브젝트에는 비밀번호가 필요하지 않으므로, :file:`profiles.yml`에 비밀번호가 포함된 경우 이를 제거할 때까지 배포가 중지됩니다.

  2. Snowflake CLI GitHub 작업을 설정합니다.

    지침에 따라 :doc:`Snowflake CLI에 대한 GitHub 작업을 설정 </developer-guide/snowflake-cli/cicd/integrate-ci-cd>`하고, Snowflake에 대한 :ref:`연결을 확인<label-cli_test_connection>`하세요.

  3. 워크플로를 정의합니다.

    조직의 요구 사항에 따라 워크플로에서 실행해야 하는 명령을 결정합니다. 다음 예제에서는 :codenowrap:`product_pipeline`이라는 dbt 프로젝트 오브젝트 버전을 새 파일로 업데이트하는 CI 워크플로를 설명하고, 변환 작업을 실행하며, 마지막으로 테스트를 실행합니다.

    - name: Execute Snowflake CLI command
      run: |
        snow dbt deploy product_pipeline
        snow dbt execute product_pipeline run
        snow dbt execute product_pipeline test
    
    Copy