- 카테고리:
GET_DDL¶
지정된 오브젝트를 다시 만드는 데 사용할 수 있는 DDL 문을 반환합니다. 데이터베이스 및 스키마의 경우 GET_DDL은 재귀적입니다(즉, 지정된 데이터베이스/스키마 내에서 지원되는 모든 오브젝트를 재생성하기 위한 DDL 문을 반환함).
GET_DDL은 현재 다음 오브젝트 유형을 지원합니다.
경고(CREATE ALERT 참조)
데이터베이스(CREATE DATABASE 참조)
데이터 메트릭 함수(CREATE DATA METRIC FUNCTION 참조)
동적 테이블(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 MASKING POLICY , CREATE PASSWORD POLICY , CREATE PRIVACY POLICY , CREATE PROJECTION POLICY , CREATE ROW ACCESS POLICY , CREATE SESSION POLICY 참조)
스키마(CREATE SCHEMA 참조)
시퀀스(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이 반환되는 오브젝트의 유형을 지정합니다. 유효한 값(지원되는 오브젝트 유형에 해당)은 다음과 같습니다.
DATABASE
DYNAMIC_TABLE
EVENT_TABLE
FILE_FORMAT
FUNCTION(UDF의 경우, 데이터 메트릭 함수 및 외부 함수 포함)
ICEBERG_TABLE
INTEGRATION(저장소)
PIPE
POLICY(집계, 인증, 마스킹, 비밀번호, 프로젝션, 행 액세스 및 세션 정책)
PROCEDURE(저장 프로시저의 경우)
SCHEMA
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를 포함합니다.
사용법 노트¶
다음 노트는 지원되는 모든 오브젝트에 적용됩니다.
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 [ , ... ] ] )'
형식으로 인자 데이터 타입을 함수 이름의 일부로서 포함해야 합니다.Iceberg 테이블인
TABLE
오브젝트를 지정하면 함수는 Iceberg 테이블의 DDL을 반환합니다.대부분의 Snowflake 오브젝트 유형에 대해 이 함수를 쿼리하려면 오브젝트를 보는 데 필요한 것과 동일한 최소 권한이 필요합니다(DESCRIBE <오브젝트> 또는 SHOW <오브젝트> 사용). Snowflake는 보안 뷰와 같은 특수 오브젝트 뷰를 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 역할)로 제한합니다.
다음 노트는 뷰 오브젝트에만 해당됩니다. 쿼리 결과는 항상 다음과 같습니다.
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 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.
예¶
뷰¶
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; |
| |
+-----------------------------------------------------------------------------+
스키마¶
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) |
| ); |
+---------------------------------------------+