- 카테고리:
GET_DDL¶
지정된 오브젝트를 다시 만드는 데 사용할 수 있는 DDL 문을 반환합니다. 데이터베이스 및 스키마의 경우 GET_DDL은 재귀적입니다(즉, 지정된 데이터베이스/스키마 내에서 지원되는 모든 오브젝트를 재생성하기 위한 DDL 문을 반환함).
GET_DDL은 현재 다음 오브젝트 유형을 지원합니다.
- 경고(CREATE ALERT 참조) 
- 카탈로그 연결 데이터베이스 를 포함하는 데이터베이스(CREATE DATABASE 참조) 
- 데이터 메트릭 함수(CREATE DATA METRIC FUNCTION 참조) 
- 연락처(CREATE CONTACT 참조) 
- dbt 프로젝트 오브젝트(CREATE DBT PROJECT 참조) 
- 동적 테이블(CREATE DYNAMIC TABLE 참조) 
- 이벤트 테이블(CREATE EVENT TABLE 참조) 
- 외부 테이블(CREATE EXTERNAL TABLE 참조) 
- 파일 형식(CREATE FILE FORMAT 참조) 
- 하이브리드 테이블(CREATE HYBRID TABLE 참조) 
- Apache Iceberg™ 테이블(CREATE ICEBERG TABLE 참조) 
- 파이프(CREATE PIPE 참조) 
- 정책(CREATE AGGREGATION POLICY, CREATE AUTHENTICATION POLICY, CREATE JOIN POLICY, CREATE MASKING POLICY, CREATE PASSWORD POLICY, CREATE PRIVACY POLICY, CREATE PROJECTION POLICY, CREATE ROW ACCESS POLICY, CREATE SESSION POLICY 참조) 
- 스키마(CREATE SCHEMA 참조) 
- 시맨틱 뷰(CREATE SEMANTIC VIEW 참조) 
- 시퀀스(CREATE SEQUENCE 참조) 
- 저장소 통합(CREATE STORAGE INTEGRATION 참조) 
- 저장 프로시저(CREATE PROCEDURE 참조) 
- 스트림(CREATE STREAM 참조) 
- 테이블(CREATE TABLE 참조) 
- 태그(CREATE TAG 참조) 
- 작업(CREATE TASK 참조) 
- UDF(외부 함수 포함)(CREATE FUNCTION 참조) 
- 뷰(CREATE VIEW 참조) 
- 웨어하우스(CREATE WAREHOUSE 참조) 
구문¶
GET_DDL( '<object_type>' , '[<namespace>.]<object_name>' [ , <use_fully_qualified_names_for_recreated_objects> ] )
인자¶
필수:
- 'object_type'
- DDL이 반환되는 오브젝트의 유형을 지정합니다. 유효한 값(지원되는 오브젝트 유형에 해당)은 다음과 같습니다. - CONTACT 
- DATABASE 
- DYNAMIC_TABLE 
- EVENT_TABLE 
- FILE_FORMAT 
- FUNCTION(UDF의 경우, 데이터 메트릭 함수 및 외부 함수 포함) 
- ICEBERG_TABLE 
- INTEGRATION(저장소) 
- PIPE 
- POLICY (집계, 인증, 조인, 마스킹, 비밀번호, 프로젝션, 행 액세스 및 세션 정책) 
- PROCEDURE(저장 프로시저의 경우) 
- SCHEMA 
- SEMANTIC VIEW 
- SEQUENCE 
- STREAM 
- TABLE(테이블, 외부 테이블, 하이브리드 테이블의 경우) 
- TAG(오브젝트 태그 지정) 
- TASK 
- VIEW(뷰 및 구체화된 뷰의 경우) 
- WAREHOUSE 
 
- 'namespace.object_name'
- DDL이 반환되는 오브젝트의 정규화된 이름을 지정합니다. - 네임스페이스는 오브젝트가 있는 데이터베이스 및/또는 스키마입니다. - 데이터베이스에는 사용되지 않습니다. 
- 스키마의 경우, - database형식을 취합니다.
- 스키마 오브젝트(테이블, 뷰, 스트림, 작업, 시퀀스, 파일 형식, 파이프, 정책, UDF)의 경우, - database.schema또는- schema형식을 취합니다.
 - 데이터베이스와 스키마가 사용자 세션 내에서 현재 사용 중인 경우, 네임스페이스는 선택 사항 입니다. 그렇지 않은 경우, 필수입니다. 
선택 사항:
- use_fully_qualified_names_for_recreated_objects
- TRUE 인 경우, 생성된 DDL 문은 다시 만들 오브젝트의 정규화된 이름을 사용합니다. - 기본값: FALSE. - 참고 - 이는 DDL 문에서 참조되는 다른 오브젝트의 이름(예: 뷰 정의에서 참조되는 테이블의 이름)에는 영향을 미치지 않습니다. 
반환¶
오브젝트를 만든 DDL 문의 텍스트가 포함된 문자열(VARCHAR 값)을 반환합니다.
UDF 및 저장 프로시저의 경우, 출력이 원래 DDL과 약간 다를 수 있습니다. 예를 들어, UDF 또는 저장 프로시저에 JavaScript 코드가 포함된 경우, JavaScript 코드 주위의 구분 문자가 다를 수 있습니다.
또한 함수에서 반환된 DDL 문에는 속성의 기본값이 포함될 수 있습니다. 예를 들어, 원래 CREATE PROCEDURE 문에서 EXECUTE AS OWNER를 지정하지 않았더라도 함수에서 반환된 DDL 문은 기본값인 EXECUTE AS OWNER를 포함합니다.
액세스 제어 요구 사항¶
- 의미 체계 뷰 의 경우 의미 체계 뷰에 대해 REFERENCES 또는 OWNERSHIP 권한이 부여된 역할을 사용해야 합니다. 
사용법 노트¶
다음 노트는 지원되는 모든 오브젝트에 적용됩니다.
- object_type및- object_name(지정된 경우- namespace포함)는 작은따옴표로 묶어야 합니다.
- object_type의 경우,- TABLE및- VIEW는 서로 바꿔 사용할 수 있습니다.- TABLE오브젝트 유형이 지정되고, 이름으로 지정된 오브젝트가 뷰인 경우, 함수는 뷰에 대한 DDL을 반환하고, 그 반대의 경우도 마찬가지입니다.
- object_type이- FUNCTION(즉, UDF)이고, UDF에 인자가 있는 경우,- 'function_name( [ arg_data_type [ , ... ] ] )'형식으로 인자 데이터 타입을 함수 이름의 일부로서 포함해야 하는데, 여기서- function_name은 함수의 이름이고- arg_data_type은 인자의 데이터 타입입니다.
- object_type이- PROCEDURE이고, 저장 프로시저에 인자가 있는 경우,- 'procedure_name( [ arg_data_type [ , ... ] ] )'형식으로 인자 데이터 타입을 함수 이름의 일부로서 포함해야 합니다.
- 대부분의 Snowflake 오브젝트 유형에 대해 이 함수를 쿼리하려면 오브젝트를 보는 데 필요한 것과 동일한 최소 권한이 필요합니다(DESCRIBE <오브젝트> 또는 SHOW <오브젝트> 사용). Snowflake는 보안 뷰와 같은 특수 오브젝트 뷰를 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 역할)로 제한합니다. 
Iceberg 테이블의 경우:
- Iceberg 테이블인 - TABLE오브젝트를 지정하면 이 함수는 Iceberg 테이블에 대해 DDL 을 반환합니다.
- 원래 CREATE ICEBERG TABLE 문에 BASE_LOCATION 이 지정된 경우 함수는 원래 사용자 입력을 반환합니다. 그렇지 않으면 함수는 Snowflake로 구성된 파일 경로(임의의 8자 문자열 포함)를 반환합니다. 자세한 내용은 데이터 및 메타데이터 디렉터리 섹션을 참조하십시오. 
카탈로그 연결 데이터베이스의 경우:
- 출력에는 LINKED_CATALOG 옵션이 포함됩니다. 
- ALLOWED_NAMESPACES 및 BLOCKED_NAMESPACES의 경우 Snowflake는 세트에 이미 상위 네임스페이스가 포함된 경우 중첩된 네임스페이스를 저장하지 않습니다. 예를 들어, 데이터베이스를 생성하고 - ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3')를 지정하는 경우 Snowflake는 GET_DDL 출력에- ALLOWED_NAMESPACES = ('ns1')를 반환합니다. BLOCKED_NAMESPACES에도 동일하게 적용됩니다.
다음 노트는 뷰 오브젝트에만 해당됩니다. 쿼리 결과는 항상 다음과 같습니다.
- create or replace view에 대한 소문자 SQL 텍스트를 반환합니다. 뷰를 만드는 데 사용된 원래 SQL 문이 대문자로 되어 있거나 대/소문자가 혼합된 경우에도 마찬가지입니다.
- OR REPLACE 절을 포함합니다. 
- 뷰가 안전한 경우 SECURE 속성을 포함합니다. 
- COPY GRANTS 뷰 매개 변수를 제외합니다. 원래 CREATE VIEW 문이 COPY GRANTS 매개 변수를 지정하더라도 마찬가지입니다. 
- 열 목록을 생성합니다. - 열에 마스킹 정책이 설정된 경우 결과는 열에 대한 마스킹 정책을 지정합니다. 
- 뷰 본문 앞(즉, AS 앞)의 인라인 SQL 주석을 제거합니다. 예를 들어, 다음 코드에서 AS 절 바로 앞의 주석이 제거됩니다. - CREATE VIEW view_t1 -- GET_DDL() removes this comment. AS SELECT * FROM t1; 
다음 참고 사항은 태그 또는 정책이 있는 테이블 및 뷰 오브젝트에 특별히 적용됩니다.
- GET_DDL 쿼리를 실행하는 역할에는 전역 APPLY MASKING POLICY, APPLY ROW ACCESS POLICY, APPLY AGGREGATION POLICY, APPLY JOIN POLICY, APPLY PROJECTION POLICY 또는 APPLY TAG 권한과 정책 또는 태그를 포함한 데이터베이스 및 스키마에 대한 USAGE 권한이 있어야 합니다. 그렇지 않으면, Snowflake가 정책을 - #UNKNOWN_POLICY로, 태그를- #UNKNOWN_TAG='#UNKNOWN_VALUE로 바꿉니다. 이 텍스트는 열 또는 오브젝트가 정책으로 보호되고 오브젝트 또는 열에 태그가 설정되었음을 나타냅니다. 오브젝트를 다시 생성하기 전에 이 텍스트를 제거하지 않으면 CREATE OR REPLACE <오브젝트> 문이 실패합니다.- 이 텍스트가 GET_DDL 쿼리 결과에 있는 경우, 오브젝트를 다시 만들기 전에 내부 거버넌스 관리자에게 문의하여 열 또는 뷰에 필요한 정책과 태그를 확인합니다. 마지막으로, GET_DDL 쿼리 결과를 편집한 다음 오브젝트를 다시 만듭니다. - 언급된 권한이 없으면 이 테이블 함수는 함수 호출의 출력에서 정책 및 태그 할당에 해당 행을 반환하지 않습니다. 
- 오브젝트 또는 열에 여러 태그가 설정된 경우 GET_DDL 출력은 태그 이름을 기준으로 알파벳순으로 태그를 정렬합니다. 
- 태그를 삭제하면 GET_DDL 출력에서 태그가 제거됩니다. 
- 태그가 테이블 또는 뷰에 설정된 경우 테이블 또는 뷰에 대한 GET_DDL 출력에는 CREATE OR REPLACE 문의 태그 할당이 포함됩니다. 
- 열에 마스킹 정책이 설정되거나 테이블에 행 액세스 정책이 설정된 경우 GET_DDL 출력에는 WITH 키워드를 사용하는 정책 할당이 포함됩니다. 
데이터베이스 또는 스키마에 태그가 설정되면 GET_DDL 출력에 다음이 포함됩니다.
- 태그가 데이터베이스에 설정된 경우 ALTER DATABASE 문. 
- 태그가 데이터베이스와 스키마에 모두 설정된 경우 ALTER DATABASE 문 및 ALTER SCHEMA 문. 
- 태그가 스키마에 설정된 경우 ALTER SCHEMA 문. 
- 태그가 데이터베이스 또는 스키마에 있는 경우 태그를 생성하는 CREATE OR REPLACE 문. 
다음 사항은 저장소 통합에 적용됩니다.
- 이 명령은 항상 CREATE OR REPLACE STORAGE INTEGRATION 구문을 반환합니다. 
- 저장소 통합 생성 시 STORAGE_AWS_EXTERNAL_ID를 지정하지 않은 경우 이 명령은 저장소 통합 생성 시 자동으로 생성된 ID를 반환합니다. 
데이터 정렬 세부 정보¶
- Collation information is included in the input. 
예¶
다음은 이 함수를 사용하여 오브젝트에 대한 DDL 문을 검색하는 방법을 보여주는 예입니다.
뷰¶
books_view 라는 뷰를 만드는 데 사용된 DDL을 반환합니다.
SELECT GET_DDL('VIEW', 'books_view');
+-----------------------------------------------------------------------------+ 
| GET_DDL('VIEW', 'BOOKS_VIEW')                                               |
|-----------------------------------------------------------------------------|
|                                                                             |
| CREATE OR REPLACE VIEW BOOKS_VIEW as select title, author from books_table; |
|                                                                             |
+-----------------------------------------------------------------------------+
의미 체계 뷰¶
의미 체계 뷰를 위한 SQL 문 가져오기 섹션을 참조하십시오.
스키마¶
books_schema 라는 스키마와 해당 스키마의 오브젝트(테이블 books_table 및 뷰 books_view)를 만드는 데 사용된 DDL을 반환합니다.
SELECT GET_DDL('SCHEMA', 'books_schema');
+-----------------------------------------------------------------------------+ 
| GET_DDL('SCHEMA', 'BOOKS_SCHEMA')                                           |
|-----------------------------------------------------------------------------|
| CREATE OR REPLACE SCHEMA BOOKS_SCHEMA;                                      |
|                                                                             |
| CREATE OR REPLACE TABLE BOOKS_TABLE (                                       |
| 	ID NUMBER(38,0),                                                          |
| 	TITLE VARCHAR(255),                                                       |
| 	AUTHOR VARCHAR(255)                                                       |
| );                                                                          |
|                                                                             |
| CREATE OR REPLACE VIEW BOOKS_VIEW as select title, author from books_table; |
|                                                                             |
+-----------------------------------------------------------------------------+
다시 만들 오브젝트의 정규화된 이름을 사용하는 DDL을 반환합니다.
SELECT GET_DDL('SCHEMA', 'books_schema', true);
+---------------------------------------------------------------------------------------------------+
| GET_DDL('SCHEMA', 'BOOKS_SCHEMA', TRUE)                                                           |
|---------------------------------------------------------------------------------------------------|
| CREATE OR REPLACE SCHEMA BOOKS_DB.BOOKS_SCHEMA;                                                   |
|                                                                                                   |
| CREATE OR REPLACE TABLE BOOKS_DB.BOOKS_SCHEMA.BOOKS_TABLE (                                       |
| 	ID NUMBER(38,0),                                                                                |
| 	TITLE VARCHAR(255),                                                                             |
| 	AUTHOR VARCHAR(255)                                                                             |
| );                                                                                                |
|                                                                                                   |
| CREATE OR REPLACE VIEW BOOKS_DB.BOOKS_SCHEMA.BOOKS_VIEW as select title, author from books_table; |
|                                                                                                   |
+---------------------------------------------------------------------------------------------------+
참고
위의 예에서 보여주듯이, DDL 문은 뷰를 만드는 데 사용되는 테이블의 정규화된 이름을 사용하지 않습니다. 이 테이블의 이름을 확인하기 위해 Snowflake는 데이터베이스 이름과 뷰에 대한 스키마 이름을 사용합니다.
UDF 및 저장 프로시저¶
데이터 타입이 NUMBER인 두 개의 인자를 갖는 multiply 라는 UDF를 생성하는 데 사용된 DDL을 반환합니다.
SELECT GET_DDL('FUNCTION', 'multiply(number, number)');
+--------------------------------------------------+
| GET_DDL('FUNCTION', 'MULTIPLY(NUMBER, NUMBER)')  |
+--------------------------------------------------+
| CREATE OR REPLACE "MULTIPLY"(A NUMBER, B NUMBER) |
| RETURNS NUMBER(38,0)                             |
| COMMENT='multiply two numbers'                   |
| AS 'a * b';                                      |
+--------------------------------------------------+
데이터 타입이 FLOAT인 인자가 하나 있는 stproc_1 이라는 저장 프로시저를 만들기 위한 DDL을 반환합니다.
SELECT GET_DDL('procedure', 'stproc_1(float)');
+---------------------------------------------------+
| GET_DDL('PROCEDURE', 'STPROC_1(FLOAT)')           |
|---------------------------------------------------|
| CREATE OR REPLACE PROCEDURE "STPROC_1"("F" FLOAT) |
| RETURNS FLOAT                                     |
| LANGUAGE JAVASCRIPT                               |
| EXECUTE AS OWNER                                  |
| AS '                                              |
| ''return F;''                                     |
| ';                                                |
+---------------------------------------------------+
마스킹 정책¶
사회 보장 번호를 마스킹하기 위해 employee_ssn_mask 라는 마스킹 정책을 만들기 위한 DDL을 반환합니다. 사용자의 현재 역할이 payroll 이 아닌 경우, 마스킹된 값이 표시됩니다.
SELECT GET_DDL('POLICY', 'employee_ssn_mask');
+----------------------------------------------------------------------------+
|                   GET_DDL('POLICY', 'EMPLOYEE_SSN_MASK')                   |
+----------------------------------------------------------------------------+
| CREATE MASKING POLICY employee_ssn_mask AS (val string) RETURNS string ->  |
| case                                                                       |
|   when current_role() in ('PAYROLL')                                       |
|   then val                                                                 |
|   else '******'                                                            |
| end;                                                                       |
+----------------------------------------------------------------------------+
저장소 통합¶
DDL을 반환하여 외부 AWS 스테이지를 생성하는 s3_int 라는 저장소 통합을 생성합니다.
SELECT GET_DDL('INTEGRATION', s3_int);
+----------------------------------------------------------------------------+
| GET_DDL('INTEGRATION', 's3_int')                                           |
|----------------------------------------------------------------------------|
| CREATE OR REPLACE STORAGE INTEGRATION s3_int                               |
|   TYPE = EXTERNAL_STAGE                                                    |
|   STORAGE_PROVIDER = 'S3'                                                  |
|   STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'           |
|   STORAGE_AWS_EXTERNAL_ID='ACCOUNT_SFCRole=2_kztjogs3W9S18I+iWapHpIz/wq4=' |
|   ENABLED = TRUE                                                           |
|   STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/');                   |
+----------------------------------------------------------------------------+
웨어하우스¶
다음 문을 실행하여 my_wh 라는 웨어하우스를 만든다고 가정해 보겠습니다.
CREATE OR REPLACE WAREHOUSE my_wh
  WAREHOUSE_SIZE=LARGE
  INITIALLY_SUSPENDED=TRUE;
다음 GET_DDL 함수 호출을 통해 이 웨어하우스를 다시 만드는 DDL 문을 반환합니다.
SELECT GET_DDL('WAREHOUSE', 'my_wh');
+-------------------------------------------+
| GET_DDL('WAREHOUSE', 'MY_WH')             |
|-------------------------------------------|
| create or replace warehouse MY_WH         |
| with                                      |
|     warehouse_type='STANDARD'             |
|     warehouse_size='Large'                |
|     max_cluster_count=1                   |
|     min_cluster_count=1                   |
|     scaling_policy=STANDARD               |
|     auto_suspend=600                      |
|     auto_resume=TRUE                      |
|     initially_suspended=TRUE              |
|     enable_query_acceleration=FALSE       |
|     query_acceleration_max_scale_factor=8 |
|     max_concurrency_level=8               |
|     statement_queued_timeout_in_seconds=0 |
|     statement_timeout_in_seconds=172800   |
| ;                                         |
+-------------------------------------------+
GET_DDL 함수가 반환하는 문에는 CREATE WAREHOUSE 문에 지정되지 않은 속성의 기본값이 포함됩니다. 예를 들어, CREATE WAREHOUSE 문은 AUTO_RESUME 속성을 지정하지 않았으므로, 반환된 문에는 이 속성의 기본값인 AUTO_RESUME=TRUE가 포함됩니다.
하이브리드 테이블¶
다음 예에서는 id 열에 PRIMARY KEY 제약 조건이 있는 ht_weather 라는 하이브리드 테이블에 대해 반환되는 DDL을 보여줍니다.
CREATE OR REPLACE HYBRID TABLE ht_weather
 (id INT PRIMARY KEY,
  start_time TIMESTAMP,
  precip NUMBER(3,2),
  city VARCHAR(20),
  county VARCHAR(20));
함수의 첫 번째 인자는 하이브리드 테이블에 대해 TABLE 타입을 사용합니다.
SELECT GET_DDL('TABLE','ht_weather');
PRIMARY KEY 제약 조건은 열 정의 뒤의 출력에서 아웃오브 라인 위치에 있습니다. GET_DDL의 제약 조건 도 참조하십시오.
+---------------------------------------------+
| GET_DDL('TABLE','HT_WEATHER')               |
|---------------------------------------------|
| create or replace HYBRID TABLE HT_WEATHER ( |
|   ID NUMBER(38,0) NOT NULL,                 |
|   START_TIME TIMESTAMP_NTZ(9),              |
|   PRECIP NUMBER(3,2),                       |
|   CITY VARCHAR(20),                         |
|   COUNTY VARCHAR(20),                       |
|   primary key (ID)                          |
| );                                          |
+---------------------------------------------+