dbt 프로젝트 오브젝트 배포

|sf-dbt|에서 dbt 프로젝트 오브젝트 배포는 dbt 프로젝트 코드를 Snowflake에 복사하여 오브젝트를 생성하거나 새 버전으로 업데이트하는 작업을 의미합니다. 이 작업은 |sf-web-interface|, CREATE DBT PROJECT 명령이나 ALTER DBT PROJECT SQL 명령 또는 Snowflake CLI의 snow dbt deploy 명령으로 수행합니다.

|sf-web-interface|를 사용하여 dbt 프로젝트 오브젝트 배포

|sf-web-interface|에 dbt 프로젝트 오브젝트 배포는 작업 공간에서 dbt 코드를 가져와 신규 또는 기존 dbt 프로젝트를 업데이트합니다.

|sf-web-interface|에 dbt 프로젝트 오브젝트를 배포하려면 dbt deps 명령 실행 후 다음 단계를 완료합니다.

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Projects » Workspaces 를 선택합니다.

  3. Workspaces 메뉴에서 dbt 프로젝트가 포함된 작업 공간을 선택합니다.

  4. dbt 파일이 제자리에 있는지 확인합니다.

    해당 항목이 작동하는지 확인하려면 다음과 같이 dbt compile, dbt run 또는 dbt build 명령을 실행합니다.

    1. 작업 공간 편집기 아래에서 Output 탭을 열면 작업 공간에서 dbt 명령을 실행한 후 표준 출력을 볼 수 있습니다.

    2. 작업 공간 편집기 위의 메뉴 모음에서 기본값 Project 및 :ui:`Profile`이 선택되어 있는지 확인합니다.

    3. 명령 목록에서 dbt compile, dbt run, :ui:`dbt build`를 선택한 후 실행 버튼을 선택합니다. 이 단계에서는 프로젝트를 구문 분석합니다.

  5. 작업 공간의 오른쪽 상단에서 :ui:`Connect`를 선택한 후 다음 중 하나를 선택합니다.

    • :ui:`Deploy dbt project`를 수행하여 새 dbt 프로젝트를 연결합니다. 이를 통해 처음 배포 시 스키마 수준 dbt 프로젝트 오브젝트를 생성합니다.

    • ::ui:`Existing dbt deployment`를 수행하여 기존 dbt 프로젝트를 연결합니다. 배포하면 기존 dbt 프로젝트 오브젝트에 새 버전이 추가됩니다(:code:`ALTER DBT PROJECT … ADD VERSION FROM ‘snow://workspace/…/versions/last’`에 해당).

  6. Deploy dbt project 팝업 창에서 다음을 선택합니다.

    • Select location 아래에서 데이터베이스와 스키마를 선택합니다.

    • Select or Create dbt projecr 에서 Create dbt project 를 선택합니다.

    • 이름과 설명을 입력합니다.

    • 선택적으로, 기본 대상을 입력하여 컴파일 및 후속 실행에 사용할 프로필(예: prod)을 선택합니다. dbt 프로젝트 실행의 대상은 여전히 ARGS`에서 :code:–target`으로 재정의할 수 있습니다.

    • 선택적으로, :ui:`Run dbt deps`를 선택한 다음, 배포 중에 :code:`dbt deps`를 자동으로 실행하기 위한 외부 액세스 통합을 선택합니다.

  7. Deploy 를 선택합니다.

    Output 탭에는 다음 예와 유사한 Snowflake에서 실행되는 명령이 표시됩니다.

    CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
      FROM 'snow://workspace/mydb.my_dbt_projects_schema.sales_model/versions/version$2'
      EXTERNAL_ACCESS_INTEGRATIONS = ();
    
    Copy
    my_dbt_project successfully created.
    

    이제 생성한 dbt 프로젝트 오브젝트의 이름이 Connect 메뉴에 다음 옵션과 함께 표시됩니다.

    • Redeploy dbt project: ALTER를 사용하여 dbt 프로젝트 오브젝트를 프로젝트의 현재 작업 공간 버전으로 업데이트합니다. 이렇게 하면 dbt 프로젝트 오브젝트의 버전이 1씩 증분합니다. 자세한 내용은 dbt 프로젝트 오브젝트 및 파일의 버전 관리 섹션을 참조하십시오.

    • Disconnect: dbt 프로젝트 오브젝트에서 작업 공간의 연결을 해제하지만, dbt 프로젝트 오브젝트를 삭제하지는 않습니다.

    • Edit project: dbt 프로젝트 오브젝트에 대한 설명, 기본 대상 및 외부 액세스 통합을 업데이트합니다.

    • View project: 오브젝트 탐색기에서 dbt 프로젝트 오브젝트를 열어 dbt 프로젝트 오브젝트에 대한 CREATE DBT PROJECT 명령과 프로젝트에 대한 실행 기록을 볼 수 있습니다.

    • Create schedule: 일정에 따라 dbt 프로젝트 오브젝트를 실행하는 작업을 생성할 수 있는 옵션을 제공합니다. 자세한 내용은 dbt 프로젝트 실행을 예약하는 작업 만들기 섹션을 참조하십시오.

    • View schedules: 오브젝트 탐색기에서 작업 세부 정보를 보는 옵션과 함께 dbt 프로젝트 오브젝트를 실행하는 일정(작업) 목록을 엽니다.

  8. 선택적으로 워크시트의 SHOW DBT PROJECTS 명령을 실행하여 dbt 프로젝트가 있는지 확인합니다. 예:

    SHOW DBT PROJECTS IN DATABASE mydb;
    
    Copy

SQL 명령을 사용하여 dbt 프로젝트 오브젝트 배포하기

CREATE DBT PROJECTALTER DBT PROJECT 명령은 문의 FROM 절에 지정된 파일을 복사하여 dbt 프로젝트 오브젝트에 각각 새 버전을 생성하고 추가합니다.

CREATE DBT PROJECT 명령은 아래에 표시된 것처럼 단일 초기 버전(예: VERSION$1)으로 새 오브젝트를 생성합니다.

CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = my_dbt_ext_access
  COMMENT = 'Generates sales data models.';
Copy

ALTER DBT PROJECT 명령은 증분된 고유 버전 번호(예: VERSION$2, VERSION$3 등)로 기존 오브젝트 내에서 새 버전을 생성합니다.

-- Update the Git repository object to fetch the latest code
ALTER GIT REPOSITORY sales_db.integrations_schema.sales_dbt_git_stage FETCH;

-- Add a new version to the dbt project object based on the updated Git repository object
ALTER DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
  ADD VERSION
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main/sales_dbt_project';
Copy

|sf-cli|를 사용하여 dbt 프로젝트 오브젝트 배포

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

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

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

    • 기본적으로, |sf-dbt|는 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 프로젝트 원본 파일은 다음 위치 중 하나에 있을 수 있습니다.

  • Git 리포지토리 스테이지, 예를 들면 다음과 같습니다.

    '@my_db.my_schema.my_git_repository_stage/branches/my_branch/path/to/dbt_project_or_projects_parent'

    Snowflake에서 |sf-dbt|용 워크스페이스에 Git 리포지토리를 연결하는 Git 리포지토리 오브젝트를 생성하는 방법에 대한 자세한 내용은 Git 리포지토리에 연결된 작업 공간 만들기 섹션을 참조하세요. 워크스페이스를 사용하지 않고 Git 리포지토리 오브젝트 및 스테이지를 생성하고 관리하는 방법에 대한 자세한 내용은 Snowflake에서 Git 리포지토리 사용하기CREATE GIT REPOSITORY 섹션을 참조하세요.

  • 기존 dbt 프로젝트 스테이지, 예를 들면 다음과 같습니다.

    'snow://dbt/my_db.my_schema.my_existing_dbt_project_object/versions/last'

    버전 지정자는 필수이며 last (이전 예제에 표시), first 또는 version$<num> 형식의 기존 버전에 대한 지정자일 수 있습니다. 자세한 내용은 dbt 프로젝트 오브젝트 및 파일의 버전 관리 섹션을 참조하십시오.

  • 명명된 내부 스테이지, 예를 들면 다음과 같습니다.

    '@my_db.my_schema.my_internal_named_stage/path/to/dbt_projects_or_projects_parent'

    내부 사용자 스테이지 및 테이블 스테이지는 지원되지 않습니다.

  • Snowflake의 dbt를 위한 워크스페이스, 예를 들면 다음과 같습니다.

    'snow://workspace/user$.public."my_workspace_name"/versions/live/path/to/dbt_projects_or_projects_parent'

    워크스페이스 이름은 대소문자를 구분하고 특수 문자를 포함할 수 있으므로 워크스페이스 이름을 큰따옴표로 묶는 것이 좋습니다.

    버전 지정자는 필수이며 last, first, live 또는 version$<num> 형식의 기존 버전에 대한 지정자일 수 있습니다. 자세한 내용은 dbt 프로젝트 오브젝트 및 파일의 버전 관리 섹션을 참조하십시오.