Snowflake의 dbt 프로젝트

dbt Core`_는 SQL 변환을 정의, 테스트, 배포하는 사용할 있는 오픈 소스 데이터 변환 도구 프레임워크입니다. |sf-dbt|를 사용하면 익숙한 Snowflake 기능을 사용하여 dbt Core 프로젝트를 생성, 편집, 테스트, 실행, 관리할 있습니다. *dbt 프로젝트*는 :file:`dbt_project.yml 파일과 모델 및 소스와 같은 dbt 자산을 정의하는 파일 세트가 포함된 디렉터리입니다.

|sf-web-interface|에서 :doc:`/user-guide/ui-snowsight/workspaces`을 사용하여 dbt 프로젝트 파일 및 디렉터리로 작업한 다음, 프로젝트를 스키마 수준 DBT PROJECT 오브젝트로 배포할 수 있습니다. 또한 :doc:`SQL</sql-reference/commands-dbt-projects-on-snowflake>`을 사용하여 dbt 프로젝트 오브젝트로 작업하고, :doc:`Snowflake CLI 명령</developer-guide/snowflake-cli/command-reference/dbt-commands/overview>`을 사용하여 배포 및 실행을 CI/CD 워크플로에 통합하고, :doc:`작업</user-guide/data-engineering/dbt-projects-on-snowflake-schedule-project-execution>`을 사용하여 dbt 프로젝트 실행을 예약 및 오케스트레이션하고, :doc:`Snowflake 모니터링 도구</user-guide/data-engineering/dbt-projects-on-snowflake-monitoring-observability>`를 사용하여 프로젝트 실행을 검사, 관리, 조정할 수 있습니다.

|sf-dbt|용 작업 공간 사용

|sf-web-interface|의 작업 공간은 Git 리포지토리에 연결하고 동기화할 수 있는 dbt 프로젝트에 대한 웹 기반 통합 개발 환경(IDE)을 제공합니다. 각각의 |sf-dbt|용 작업 공간은 파일과 폴더를 구성하는 방법에 따라 단일 dbt 프로젝트 또는 여러 dbt 프로젝트를 나타낼 수 있습니다.

|sf-dbt|용 작업 공간을 사용하여 Snowflake에서 직접 dbt 프로젝트를 시각화, 테스트, 실행할 수 있습니다. 작업 공간을 Snowflake의 *dbt 프로젝트 오브젝트*에 연결하여 작업 공간 내에서 오브젝트를 생성하고 업데이트할 수도 있습니다. 또한, 작업 공간은 새 dbt 프로젝트를 빠르게 초기화(또는 스캐폴드)할 수 있는 방법을 제공하며, 이를 통해 dbt 프로젝트에 필요한 파일과 디렉터리(예: dbt_project.yml 파일)가 생성됩니다.

작업 공간은 dbt 프로젝트를 지원할 뿐만 아니라 Snowflake 내에서 여러 파일 형식과 프로젝트에 걸쳐 코드를 생성, 구성, 관리할 수 있는 통합 편집기를 제공합니다. 자세한 내용은 작업 공간 섹션을 참조하십시오.

dbt 프로젝트 오브젝트 이해

DBT PROJECT는 Snowflake의 dbt 프로젝트에 대한 버전이 지정된 소스 파일을 포함하는 스키마 수준 오브젝트입니다. dbt 프로젝트 오브젝트를 작업 공간에 연결하거나, 작업 공간과는 독립적으로 오브젝트를 만들고 관리할 수 있습니다.

Snowflake의 다른 스키마 수준 오브젝트와 같은 dbt 프로젝트 오브젝트에 대해 CREATE, ALTER, DROP 작업을 수행할 수 있습니다. dbt 프로젝트 오브젝트는 역할 기반 액세스 제어(RBAC)도 지원합니다. Snowflake Warehouse에서 EXECUTE DBT PROJECT 명령을 사용하여 test``run``과 같은 dbt 명령을 실행할 수 있습니다. :doc:`작업</user-guide/tasks-intro>`을 사용하여 이러한 명령의 실행을 예약할 수도 있습니다.

dbt 프로젝트 오브젝트는 일반적으로 dbt-project.yml 파일이 포함된 dbt 프로젝트 디렉터리를 기반으로 합니다. 이는 작업 공간 내에서 dbt 프로젝트 오브젝트를 배포(생성)할 때 Snowflake가 사용하는 패턴입니다.

하위 디렉터리에 여러 dbt 프로젝트가 포함된 상위 디렉터리에서 dbt 프로젝트를 생성하도록 선택할 수도 있습니다. 이러한 방식으로 dbt 프로젝트 오브젝트를 생성하는 경우 프로젝트와 함께 사용하는 모든 EXECUTE DBT PROJECT 명령에서 PROJECT_ROOT 매개 변수를 사용해야 합니다. 이 매개 변수는 프로젝트의 dbt_project.yml 파일이 포함된 하위 디렉터리의 경로를 지정합니다.

dbt 프로젝트 오브젝트에 대한 CI/CD 워크플로

dbt 프로젝트 오브젝트는 명령줄에서 dbt 프로젝트를 만들고 관리하는 데 사용할 수 있는 Snowflake CLI 명령을 지원합니다. 이는 dbt 프로젝트를 데이터 엔지니어링 워크플로 및 CI/CD 파이프라인에 통합하는 데 유용합니다. 자세한 내용은 Snowflake CLI, CI/CD 와 Snowflake CLI 통합하기, snow dbt 명령 를 참조하십시오.

dbt 프로젝트 오브젝트 및 파일의 버전 관리

Snowflake는 dbt 프로젝트 오브젝트와 해당 프로젝트 파일의 버전을 유지 관리합니다. 이 버전 관리를 사용하여 데이터 개발 및 배포 수명 주기 전체에서 변경 사항을 추적하고 관리할 수 있습니다. Snowflake는 다음 예제와 같이 dbt 프로젝트 스테이지에서 dbt 프로젝트 오브젝트 버전을 식별합니다.

snow://dbt/my_db.my_schema.my_dbt_project_object/versions/version_id

:samp:`{version_id}`는 다음 식별자 중 하나일 수 있습니다.

  • VERSION$<num> - VERSION$<num>``의 형식으로 버전 식별자를 지정합니다. 여기서 ``<num>은 양의 정수(예: VERSION$1)입니다.

    dbt 프로젝트 오브젝트를 생성할 때 버전 번호는 ``1``에서 시작하고 dbt 프로젝트 오브젝트의 새 버전이 나올 때마다 1씩 증분합니다.

    Snowflake는 다음 작업을 수행할 때 버전 식별자를 증분합니다.

    • 작업 공간에서 :ui:`Redeploy dbt project`(ALTER 명령 실행).

    • ALTER DBT PROJECT 명령을 사용하여 프로젝트 업데이트.

    • --force 옵션 없이 Snow CLI snow dbt deploy 명령 실행.

    Snowflake는 버전 식별자를 ``1``로 재설정하고 다음 명령을 실행할 때 모든 버전 별칭을 제거합니다.

    • OR REPLACE 옵션이 있는 SQL의 CREATE DBT PROJECT 명령.

    • Snowflake CLI의 --force 옵션이 있는 snow dbt deploy 명령.

  • LAST - dbt 프로젝트 오브젝트의 최신 버전을 나타냅니다.

  • FIRST - dbt 프로젝트 오브젝트의 가장 오래된 버전을 나타냅니다.

  • version_name_alias - ADD VERSION 옵션과 함께 ALTER DBT PROJECT 명령을 사용하여 dbt 프로젝트 오브젝트의 특정 버전에 대해 생성한 사용자 지정 버전 이름 별칭을 나타냅니다. 버전 이름 별칭은 항상 특정 버전 식별자(예: VERSION$3)에 매핑됩니다.

dbt 프로젝트 스테이지에 저장된 프로젝트 파일은 버전별로 구성되며, 각 버전에는 자체 하위 디렉터리가 있습니다. 예를 들어, 버전 식별자가 ``VERSION$3``인 ``my_dbt_project_object``라는 dbt 프로젝트 오브젝트와 :file:`dbt_project.yml`이라는 dbt 프로젝트 파일은 다음 예와 같이 참조할 수 있습니다.

snow://dbt/my_db.my_schema/my_dbt_project_object/versions/VERSION$3/dbt_project.yml

요구 사항, 고려 사항, 제한 사항

|sf-dbt|를 사용하기 전에 이 섹션의 요구 사항, 고려 사항, 제한 사항을 검토하세요.

dbt 프로젝트

|sf-dbt|에서 지원하는 dbt 프로젝트 구성에는 다음 요구 사항, 고려 사항, 제한 사항이 적용됩니다.

  • dbt Core 프로젝트만 지원됩니다. dbt Cloud 프로젝트는 지원되지 않습니다. |sf-dbt|는 dbt-core 버전 1.9.4 및 dbt-snowflake 버전 1.9.2를 실행합니다. 기존 dbt 프로젝트를 Snowflake로 마이그레이션할 때 dbt 버전을 Snowflake 버전과 맞출 필요가 없습니다.

  • Snowflake 작업 공간의 각 dbt 프로젝트 폴더에는 프로젝트에 대한 Snowflake의 대상 warehouse, database, schema, role`을 지정하는 :file:`profiles.yml 파일이 포함되어야 합니다. type`은 :code:`snowflake`로 설정해야 합니다. dbt에는 :code:`account 및 :code:`user`가 필요하지만, dbt 프로젝트는 현재 계정 및 사용자 컨텍스트로 Snowflake에서 실행되므로 비어 있거나 임의의 문자열로 남을 수 있습니다.

  • 작업 공간의 dbt 프로젝트는 폴더 구조에 20,000개 이상의 파일을 포함할 수 없습니다. 이 제한에는 dbt 프로젝트 디렉터리와 하위 디렉터리의 모든 파일이 포함되며, dbt 프로젝트가 작업 공간 내에서 실행될 때 로그 파일이 저장되는 target/dbt_packages/logs 디렉터리도 포함됩니다.

저장 프로시저

저장 프로시저를 사용하여 EXECUTE DBT PROJECT를 호출하는 경우, 호출자 권한 저장 프로시저를 사용합니다. 자세한 내용은 CREATE PROCEDURE저장 프로시저 만들기 섹션을 참조하십시오.

|sf-dbt|용 작업 공간

|sf-dbt|용 작업 공간에는 다음 요구 사항, 고려 사항, 제한 사항이 적용됩니다.

개인 데이터베이스 요구 사항

작업 공간은 개인 데이터베이스 내에 생성되며 다른 사용자와 공유할 수 없습니다. 개인 데이터베이스는 계정 수준에서 활성화해야 하며, 이를 위해서는 ACCOUNTADMIN 권한이 필요합니다. 자세한 내용은 워크스페이스 관리하기 섹션을 참조하십시오.

프로젝트당, 세션당 보조 역할이 필요합니다.

|sf-dbt|용 작업 공간 내에서 dbt 명령을 실행하려면 보조 역할을 활성화해야 합니다. 프로젝트 및 세션에 대해 보조 역할이 활성화되지 않은 경우 명령을 처음 실행할 때 Profile 목록에서 보조 역할을 활성화하라는 메시지가 표시됩니다. 이 선택은 각 프로젝트에 대해 수행되어야 하며, 현재 브라우저 세션 이후에는 선택이 유지되지 않습니다.

Enterprise Edition 계정이 있는 경우 계정 또는 특정 사용자에 대한 보조 역할을 허용하지 않도록 세션 정책을 구성할 수 있습니다. 이러한 사용자는 |sf-dbt|용 작업 공간 내에서 dbt 명령을 실행할 수 없습니다. 세션 정책에 대한 자세한 내용은 세션 정책에서 보조 역할 지정 섹션을 참조하세요.

Git 리포지토리

|sf-dbt|용 작업 공간을 Git 리포지토리에 연결할 때 다음 요구 사항, 고려 사항, 제한 사항이 적용됩니다.

  • Snowflake에서 Git 리포지토리 오브젝트를 설정하려면 Snowflake에서 API 통합을 설정해야 합니다. 자세한 내용은 Git을 사용하기 위해 Snowflake 설정하기 섹션을 참조하십시오.

  • PrivateLink를 통해서만 액세스할 수 있는 Git 리포지토리는 지원되지 않습니다.

  • 2GB보다 큰 Git 리포지토리는 지원되지 않습니다.

  • 빈 Git 리포지토리에는 연결할 수 없습니다. 커밋이 하나 이상 있어야 합니다.

dbt 종속성

|sf-dbt|의 dbt 프로젝트에 대한 dbt 종속성에 적용되는 요구 사항, 고려 사항, 제한 사항은 다음과 같습니다.

  • |sf-dbt|용 작업 공간 내에서 dbt deps 명령을 실행하거나, Snowflake CLI에서 snow dbt execute 명령을 사용하여 dbt_packages 프로젝트 폴더를 빌드하고 채워야 합니다. EXECUTE DBT PROJECT SQL 명령을 사용하여 deps 명령을 실행할 수 없습니다. 또는 Snowflake에 dbt 프로젝트 오브젝트로 배포하기 전에 로컬 dbt 프로젝트에서 ``deps``를 실행할 수 있습니다.

  • packages.yml 파일에서 `Git 패키지`_를 지정하는 것은 지원되지 않습니다.

  • Snowflake가 종속성에 대한 리포지토리에 액세스할 수 있도록 허용하려면 네트워크 규칙 및 외부 액세스 통합이 필요합니다. 자세한 내용은 Snowflake에서 dbt 종속성에 대한 외부 액세스 통합 만들기 섹션을 참조하십시오. 외부 네트워크 액세스 제한에 대한 자세한 내용은 외부 네트워크 액세스 제한 사항 섹션을 참조하세요.

원격 분석, 로깅, 추적

Snowflake의 dbt에 대한 원격 분석, 로깅, 추적에는 다음 요구 사항, 고려 사항, 제한 사항이 적용됩니다.

  • |sf-dbt|용 작업 공간은 표준 출력을 동적으로 스트리밍하지 않으며, 표준 출력은 명령 완료 시에만 볼 수 있습니다.

  • 로그 및 추적을 보려면 dbt 프로젝트 오브젝트에 LOG_LEVEL 및 TRACE_LEVEL을 설정해야 합니다. 자세한 내용은 Snowflake의 dbt 프로젝트에 대한 액세스 제어Snowflake에서 dbt 프로젝트 모니터링 섹션을 참조하십시오.

  • 기본적으로 Snowflake는 기본 SNOWFLAKE.TELEMETRY.EVENTS 테이블에서 원격 분석을 수집합니다. 계정의 이벤트 테이블로 설정된 사용자 지정 이벤트 테이블이 있는 경우 원격 분석 데이터가 그곳에서 수집됩니다. Enterprise Edition 계정을 사용하는 경우 이벤트 테이블을 생성하여 원격 분석 데이터를 수집하고 이를 dbt 프로젝트 오브젝트가 배포된 데이터베이스와 연결할 수 있습니다. 자세한 내용은 이벤트 테이블 개요 섹션을 참조하십시오.

지원되는 dbt 명령

다음 테이블은 |sf-dbt|에서 지원되는 dbt 명령을 보여줍니다. 여기에 나열되지 않은 `dbt 명령`_은 지원되지 않습니다.

dbt Projects on Snowflake, 실행 방법별로 지원되는 dbt 명령

dbt 명령

작업 공간

EXECUTE DBT PROJECT

snow dbt execute (CLI)

build

compile

deps

list

parse

run

run-operation

시드

show

snapshot

test