EXECUTE DCM PROJECT

:doc:`DCM 프로젝트 </user-guide/dcm-projects/dcm-projects-overview>`에서 다음 작업 중 하나를 실행합니다.

  • :code:` EXECUTE DCM PROJECT <name> PLAN`을 수행하여 DCM project 의 테스트 실행을 통해 배포 중에 대상에 적용되는 변경 사항을 분석하지만, 변경 사항을 적용하지는 않습니다.

  • :code:`EXECUTE DCM PROJECT <name> DEPLOY`는 프로젝트의 정의 파일에 정의된 변경 사항을 계정에 배포합니다.

  • :code:`EXECUTE DCM PROJECT <name> REFRESH ALL`은 DCM project 에서 관리하는 동적 테이블을 새로 고칩니다.

  • :code:`EXECUTE DCM PROJECT <name> TEST ALL`은 DCM project 에서 관리하는 연결된 데이터 메트릭 함수의 모든 기대치를 테스트합니다.

  • :code:`EXECUTE DCM PROJECT <name> PREVIEW`는 지정된 테이블, 뷰 또는 동적 테이블의 소스 경로에 지정된 현재 정의의 데이터 샘플을 반환합니다.

참고 항목:

CREATE DCM PROJECT, ALTER DCM PROJECT, DESCRIBE DCM PROJECT, DROP DCM PROJECT, SHOW DCM PROJECTS, SHOW DEPLOYMENTS IN DCM PROJECT

구문

EXECUTE DCM PROJECT <name>
  PLAN
  [ USING [ CONFIGURATION <config_name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  DEPLOY [ AS '<deployment_name_alias>' ]
  [ USING [ CONFIGURATION <name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  REFRESH ALL

EXECUTE DCM PROJECT <name>
  TEST ALL

EXECUTE DCM PROJECT <name>
  PREVIEW <fully_qualified_table_object_name>
  USING CONFIGURATION <config_name>
  FROM '<source_files_path>'

필수 매개 변수

name

실행할 DCM 프로젝트의 식별자를 지정합니다.

식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

PLAN

Snowflake에 DCM project 의 테스트 실행을 수행하도록 지시합니다. 테스트 실행의 경우 Snowflake는 배포 중에 대상에 적용되는 변경 사항을 분석하지만, 변경 사항을 적용하지는 않습니다.

DEPLOY [ AS 'deployment_name_alias' ]

프로젝트의 정의 파일에 정의된 변경 사항을 계정에 배포하며, 선택적으로 배포의 별칭을 지정합니다.

FROM 'source_files_path'

DCM project 의 소스 파일이 포함된 디렉터리를 지정합니다. 디렉터리에는 매니페스트 파일과 /sources/definitions/ 에 있는 하나 이상의 정의 파일이 포함되어야 합니다. 매니페스트 파일은 구성이 지정된 경우 템플릿 값을 제공합니다.

REFRESH ALL

현재 DCM project 에서 관리하는 모든 동적 테이블을 새로 고칩니다.

TEST ALL

현재 DCM project 에서 관리하는 테이블, 동적 테이블 또는 뷰에 연결된 모든 데이터 품질 기대치를 테스트합니다.

PREVIEW fully_qualified_table_object_name

배포된 상태와 관계없이 지정된 테이블, 뷰 또는 동적 테이블의 소스 경로에 지정된 현재 정의의 데이터 샘플을 반환합니다.

선택적 매개 변수

USING CONFIGURATION config_name

사용할 구성을 지정합니다. 이를 통해 다른 프로젝트 정의 파일을 사용하지 않고도 개발, 스테이징 또는 프로덕션과 같은 다양한 환경에 맞게 배포를 사용자 지정할 수 있습니다.

구성 이름이 모두 대문자가 아닌 경우 큰따옴표로 묶습니다.

USING ( expr [, expr , ... ] )

선택적으로 템플릿 변수 값을 지정합니다. 이 옵션을 사용하여 이 특정 변수에 대한 모든 기본값 또는 구성 값을 재정의합니다. 단일 식은 <variable_name> => <variable_value> 형식이어야 합니다. 목록의 경우 <variable_name> => [<value1>, <value2>, ...] 형식을 사용합니다. 예: wh_size => 'MEDIUM' 또는 teams => ['TEAM_A', 'TEAM_B'].

이를 통해 다른 프로젝트 정의 파일을 사용하지 않고도 개발, 스테이징 또는 프로덕션과 같은 다양한 환경에 맞게 배포를 사용자 지정할 수 있습니다.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

OWNERSHIP

DCM 프로젝트

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

스키마의 오브젝트에 대한 작업을 수행하려면 상위 데이터베이스에 대한 하나 이상의 권한과 상위 스키마에 대한 하나 이상의 권한이 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

출력

DCM project 가 실행된 후 이 명령은 변형에 따라 다음 출력을 반환합니다.

  • PLAN 및 DEPLOY: 변경 로그가 있는 JSON 오브젝트를 포함하는 단일 행

  • PREVIEW: 결과 세트

  • REFRESH ALL: 전체 응답이 포함된 JSON 오브젝트를 포함하는 단일 행

  • TEST ALL: 전체 응답이 포함된 JSON 오브젝트를 포함하는 단일 행

PLAN 및 DEPLOY 출력

참고

미리 보기 단계에서는 정확한 출력 유형이 변경될 수 있습니다.

표준 계획 출력에는 JSON 형식의 계획 실행에 대한 다음 정보가 포함됩니다.

{
  "version": 2,
  "metadata": {
    "timestamp": <timestamp>,
    "query_id": <query_id>,
    "project_name": <project_name>,
    "user": <user>,
    "role_name": <role_name>,
    "command": <command>
  },
  "changeset": [
    {
      "type": <type>,
      "object_id": {
        "domain": <domain>,
        "name": <name>,
        "fqn": <fqn>,
        "database": <database>,
        "schema": <schema>
      },
      "changes": [
        {
          "kind": <kind>,
          "attribute_name": <attribute_name>,
          "value": <value>,
          "changes": [
            {
              "kind": <kind>,
              "attribute_name": <attribute_name>,
              "value": <value>
            }
          ]
        }
      ]
    }
  ]
}

속성

설명

version

출력 형식의 스키마 버전입니다. 버전 2는 최신 버전이며 유일하게 지원되는 버전입니다.

metadata

실행에 대한 컨텍스트 정보입니다.

metadata.timestamp

명령이 실행된 시점의 ISO 8601 타임스탬프입니다.

metadata.query_id

이 계획을 생성한 쿼리의 고유 식별자입니다.

metadata.project_name

DCM 프로젝트 오브젝트의 정규화된 이름입니다.

metadata.user

명령을 실행한 사용자의 이름입니다.

metadata.role_name

명령을 실행하는 데 사용되는 활성 역할입니다.

metadata.command

실행된 명령입니다. PLAN 또는 ``DEPLOY``입니다.

changeset

변경 항목의 배열입니다. 각 항목은 생성, 변경 또는 삭제된 하나의 오브젝트를 나타냅니다. 빈 배열은 프로젝트 정의가 이미 계정과 동기화되어 있음을 나타냅니다.

changeset[].type

오브젝트에 대해 계획된 작업입니다. 가능한 값은 CREATE, ALTER, ``DROP``입니다.

changeset[].object_id

대상 오브젝트를 식별합니다.

changeset[].object_id.domain

Snowflake 오브젝트 유형입니다.

changeset[].object_id.name

오브젝트의 이름입니다.

changeset[].object_id.fqn

오브젝트의 정규화된 이름입니다.

changeset[].object_id.database

오브젝트가 포함된 데이터베이스입니다. 계정 수준 오브젝트의 경우 생략됩니다.

changeset[].object_id.schema

오브젝트가 포함된 스키마입니다. 데이터베이스 수준 및 계정 수준 오브젝트의 경우 생략됩니다.

changeset[].changes

특정 특성 수정 사항을 자세히 설명하는 변경 설명자의 배열입니다.

changeset[].changes[].kind

변경 유형입니다. 가능한 값: set, changed, unset, nested, collection. kind 값에 따라 오브젝트의 나머지 키가 결정됩니다.

changeset[].changes[].attribute_name

설정되거나 변경되는 특성의 이름입니다. kind``가 ``set, changed 또는 ``unset``인 경우 표시됩니다.

changeset[].changes[].value

특성의 새 값입니다. kind``가 ``set 또는 ``changed``인 경우 표시됩니다.

changeset[].changes[].prev_value

변경 전 속성의 이전 값입니다. ``kind``가 ``changed``인 경우에만 표시됩니다.

changeset[].changes[].collection_name

수정 중인 컬렉션의 이름(예: columns, constraints, privileges, expectations)입니다. ``kind``가 ``collection``인 경우에만 표시됩니다.

changeset[].changes[].id_label

컬렉션 내의 항목을 식별하는 데 사용되는 레이블(예: name)입니다. 특정 컬렉션에만 표시됩니다.

changeset[].changes[].changes

컬렉션 항목 설명자의 중첩된 배열입니다. ``kind``가 ``collection``인 경우에만 표시됩니다.

changeset[].changes[].changes[].kind

컬렉션 항목에 대한 변경 유형입니다. 가능한 값은 added, removed, ``modified``입니다.

changeset[].changes[].changes[].item_id

컬렉션 내의 항목을 식별합니다. 컬렉션 유형에 따라 문자열 또는 오브젝트일 수 있습니다.

changeset[].changes[].changes[].changes

이 항목에 대한 추가 변경 설명자의 배열입니다. addedmodified 항목의 경우 표시됩니다. removed 항목의 경우 항상 표시되지 않습니다.

계획 출력의 예제:

{
  "version": 2,
  "metadata": {
    "timestamp": <timestamp>,
    "query_id": <query_id>,
    "project_name": <project_name>,
    "user": <user>,
    "role_name": <role_name>,
    "command": <command>
  },
  "changeset": [
    {
      "type": "CREATE",
      "object_id": {
        "domain": "TABLE",
        "name": "CUSTOMER_SUMMARY",
        "fqn": "MY_DB.ANALYTICS.CUSTOMER_SUMMARY",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "set",
          "attribute_name": "warehouse_size",
          "value": "XSMALL"
        },
        {
          "kind": "set",
          "attribute_name": "query",
          "value": "SELECT customer_id, SUM(amount) AS total FROM orders GROUP BY customer_id"
        }
      ]
    },
    {
      "type": "ALTER",
      "object_id": {
        "domain": "DYNAMIC_TABLE",
        "name": "ORDER_DETAILS",
        "fqn": "MY_DB.ANALYTICS.ORDER_DETAILS",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "changed",
          "attribute_name": "warehouse_size",
          "value": "SMALL",
          "prev_value": "XSMALL"
        },
        {
          "kind": "collection",
          "collection_name": "columns",
          "id_label": "name",
          "changes": [
            {
              "kind": "added",
              "item_id": "DISCOUNT_AMOUNT",
              "changes": [
                {
                  "kind": "set",
                  "attribute_name": "data_type",
                  "value": "NUMBER(10,2)"
                }
              ]
            },
            {
              "kind": "modified",
              "item_id": "ORDER_STATUS",
              "changes": [
                {
                  "kind": "changed",
                  "attribute_name": "data_type",
                  "value": "VARCHAR(50)",
                  "prev_value": "VARCHAR(20)"
                }
              ]
            },
            {
              "kind": "removed",
              "item_id": "LEGACY_FLAG"
            }
          ]
        }
      ]
    },
    {
      "type": "DROP",
      "object_id": {
        "domain": "VIEW",
        "name": "OLD_REPORT_VIEW",
        "fqn": "MY_DB.ANALYTICS.OLD_REPORT_VIEW",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": []
    }
  ]
}

REFRESH ALL 출력

JSON 출력에는 다음 형식의 동적 테이블 새로 고침 작업 결과가 포함됩니다.

{
  "dts_refresh_result": {
    "refreshed_tables": [
      {
        "table_name": <table_name>,
        "statistics": {
          "inserted_rows": <inserted_rows>,
          "deleted_rows": <deleted_rows>
        },
        "data_timestamp": <data_timestamp>
      }
    ]
  }
}

속성

설명

dts_refresh_result

동적 테이블 새로 고침 작업의 결과를 포함합니다.

refreshed_tables[]

새로 고친 각 동적 테이블에 대한 항목이 하나씩 포함된 배열입니다.

table_name

새로 고친 동적 테이블의 정규화된 이름입니다.

statistics

테이블에 대한 새로 고침 통계입니다.

inserted_rows

새로 고침 중에 삽입된 행 수입니다.

deleted_rows

새로 고침 중에 삭제된 행 수입니다.

data_timestamp

새로 고침 후 데이터의 특정 시점 최신성을 나타내는 ISO 8601 타임스탬프입니다.

동적 테이블 새로 고침에 대한 JSON 출력의 예제입니다.

{
  "dts_refresh_result": {
    "refreshed_tables": [
      {
        "table_name": "db.schema.my_dynamic_table",
        "statistics": {
          "inserted_rows": 150,
          "deleted_rows": 30
        },
        "data_timestamp": "2026-03-16T12:00:00.000Z"
      }
    ]
  }
}

TEST ALL 출력

TEST 출력에는 다음 형식의 값과 함께 전체 상태 및 기대치가 포함됩니다.

참고

미리 보기 단계에서는 정확한 출력 유형이 변경될 수 있습니다.

{
  "status": <status>,
  "expectations": [
    {
      "table_name": <table_name>,
      "metric_database": <metric_database>,
      "metric_schema": <metric_schema>,
      "metric_name": <metric_name>,
      "expectation_name": <expectation_name>,
      "expectation_expression": <expectation_expression>,
      "value": <value>,
      "expectation_violated": <expectation_violated>,
      "column_names": <column_names>
    }
  ]
}

속성

설명

status

테스트 실행의 전체 결과입니다. 가능한 값은 ``SUCCESSFUL``(모든 기대치가 충족됨), ``FAILED``(하나 이상의 기대치가 위반됨)입니다.

expectations[]

평가된 각 데이터 품질 기대치에 대한 기대치 결과가 하나씩 포함된 배열입니다.

table_name

기대치가 평가된 테이블 또는 뷰의 정규화된 이름입니다.

metric_database

데이터 메트릭 함수가 포함된 데이터베이스입니다.

metric_schema

데이터 메트릭 함수를 포함하는 스키마입니다.

metric_name

데이터 메트릭 함수의 이름(예: NULL_COUNT, MIN, UNIQUE_COUNT)입니다.

expectation_name

프로젝트에 정의된 기대치의 이름입니다.

expectation_expression

메트릭 값이 평가되는 부울 식(예: value = 0, value >= 0)입니다.

value

데이터 메트릭 함수 평가의 결과입니다. ``expectation_violated``가 ``false``인 경우에만 표시됩니다.

expectation_violated

예상이 위반되었는지 여부입니다. 메트릭 값이 기대 식을 충족하지 않은 경우 ``true``이고 그렇지 않으면 ``false``입니다.

column_names

데이터 메트릭 함수가 평가된 열 이름의 배열입니다.

데이터 품질 테스트에 대한 JSON 출력의 예제입니다.

{
  "status": "FAILED",
  "expectations": [
    {
      "table_name": "db.schema.my_table",
      "metric_database": "SNOWFLAKE",
      "metric_schema": "CORE",
      "metric_name": "NULL_COUNT",
      "expectation_name": "no_nulls_in_id",
      "expectation_expression": "value = 0",
      "value": 0,
      "expectation_violated": false,
      "column_names": ["ID"]
    },
    {
      "table_name": "db.schema.my_table",
      "metric_database": "SNOWFLAKE",
      "metric_schema": "CORE",
      "metric_name": "UNIQUE_COUNT",
      "expectation_name": "unique_id_check",
      "expectation_expression": "value >= 100",
      "value": null,
      "expectation_violated": true,
      "column_names": ["ID"]
    }
  ]
}

사용법 노트

EXECUTE DCM PROJECT PLAN으로 DCM project 를 실행하는 경우 명령의 출력은 실제 배포의 경우와 동일합니다. 차이점은 영향을 받는 계정에 대한 변경 사항이 적용되지 않는다는 점입니다. 이 기능을 사용하면 렌더링된 정의 파일에 유효한 구문이 있는지 여부, 계정에 적용되는 변경 사항, 프로젝트 소유자 역할에 이러한 변경 사항을 적용하는 데 필요한 권한이 있는지 여부를 확인할 수 있습니다.

의도하지 않은 변경을 방지하고 오류를 포착하려면 DCM project 를 배포하기 전에 항상 EXECUTE DCM PROJECT PLAN을 실행합니다.

템플릿 변수에 대한 지원

템플릿 변수를 사용하면 DCM project 실행 중에 매개 변수화된 정의 파일의 내용을 동적으로 선택할 수 있습니다. 다음과 같은 방법으로 템플릿 변수를 사용할 수 있습니다.

예제는 :ref:`템플릿 변수 예제 <label-dcm_projects_template_variable_execute_examples>`를 참조하세요.

기본 예제

PLAN 모드에서 DCM project 를 실행하여 프로젝트에 대한 변경 사항을 적용하지 않고 유효성을 검사합니다.

EXECUTE DCM PROJECT my_project
  PLAN
  FROM '@my_database.my_schema.my_stage/my_project';

변경 사항을 적용하기 위해 DEPLOY 모드에서 DCM 프로젝트를 실행하여 배포 별칭 및 PROD라는 구성을 지정합니다.

EXECUTE DCM PROJECT my_project
  DEPLOY AS "my_update"
  USING CONFIGURATION PROD
  FROM '@my_database.my_schema.my_stage/my_project';

템플릿 변수 예제

다음 예제에서는 EXECUTE DCM PROJECT 문에서 템플릿 변수의 값을 지정하는 방법을 보여줍니다.

DCM 프로젝트의 매니페스트 파일에 정의된 템플릿 변수 재정의

  1. 매니페스트 파일에서 ``desc``라는 템플릿 변수를 정의합니다.

    manifest_version: 2
    type: DCM_PROJECT
    default_target: DCM_DEV
    targets:
      DCM_DEV:
        desc: "created by hello world project"
    
  2. 템플릿 변수를 사용하는 정의 파일을 생성합니다.

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc}}';
    
  3. DEPLOY 모드에서 EXECUTE DCM PROJECT 명령을 호출하고 desc 변수의 값을 지정하여 매니페스트에서 기본값을 재정의합니다.

    EXECUTE DCM PROJECT MY_PROJECT DEPLOY
      USING CONFIGURATION FIRST_CONFIG (desc => 'This object is mine')
      FROM '/my/project/source';
    

매니페스트 파일에 정의되지 않은 템플릿 변수의 값 제공

  1. 원하는 명령으로 정의 파일을 생성합니다.

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc_new}}';
    
  2. EXECUTE DCM PROJECT 명령을 호출하고 desc_new 변수에 대한 값을 지정합니다.

    EXECUTE DCM PROJECT MY_PROJECT (desc_new => 'This object is mine');