카테고리:

메타데이터 함수

GET_DDL

지정된 오브젝트를 다시 만드는 데 사용할 수 있는 DDL 문을 반환합니다. 데이터베이스 및 스키마의 경우 GET_DDL은 재귀적입니다(즉, 지정된 데이터베이스/스키마 내에서 지원되는 모든 오브젝트를 재생성하기 위한 DDL 문을 반환함).

GET_DDL은 현재 다음 오브젝트 유형을 지원합니다.

구문

GET_DDL( '<object_type>' , '[<namespace>.]<object_name>' [ , <use_fully_qualified_names_for_recreated_objects> ] )

인자

필수:

object_type

DDL이 반환되는 오브젝트의 유형을 지정합니다. 유효한 값(지원되는 오브젝트 유형에 해당)은 다음과 같습니다.

  • DATABASE

  • FILE_FORMAT

  • FUNCTION(UDF의 경우, 외부 함수 포함)

  • PIPE

  • POLICY(마스킹 및 행 액세스 정책)

  • PROCEDURE(저장 프로시저의 경우)

  • SCHEMA

  • SEQUENCE

  • STREAM

  • TABLE(외부 테이블 포함)

  • TAG(오브젝트 태그 지정)

  • TASK

  • VIEW(구체화된 뷰 포함)

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 코드 주위의 구분 문자가 다를 수 있습니다. 또한, 원래 CREATE PROCEDURE 문이 EXECUTE AS OWNER 또는 EXECUTE AS CALLER 를 지정하지 않은 경우, GET_DDL 의 출력에는 EXECUTE AS OWNER 가 기본값이기 때문에 포함됩니다.

사용법 노트

다음 노트는 지원되는 모든 오브젝트에 적용됩니다.

  • object_typeobject_name (지정된 경우 namespace 포함)는 작은따옴표로 묶어야 합니다.

  • object_type 의 경우, TABLEVIEW 는 서로 바꿔 사용할 수 있습니다. TABLE 오브젝트 유형이 지정되고, 이름으로 지정된 오브젝트가 뷰인 경우, 함수는 뷰에 대한 DDL을 반환하고, 그 반대의 경우도 마찬가지입니다.

  • If object_type is FUNCTION (i.e. UDF) and the UDF has arguments, you must include the argument data types as part of the function name, in the form of 'function_name( [ arg_data_type [ , ... ] ] )', where function_name is the name of the function and arg_data_type is the data type of the argument.

  • object_typePROCEDURE 이고, 저장 프로시저에 인자가 있는 경우, 'procedure_name( [ arg_data_type [ , ... ] ] )' 형식으로 인자 데이터 타입을 함수 이름의 일부로서 포함해야 합니다.

  • 대부분의 Snowflake 오브젝트 유형에 대해 이 함수를 쿼리하려면 오브젝트를 보는 데 필요한 것과 동일한 최소 권한이 필요합니다(DESCRIBE <오브젝트> 또는 SHOW <오브젝트> 사용). Snowflake는 보안 뷰와 같은 특수 오브젝트 뷰를 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 역할)로 제한합니다.

다음 노트는 뷰 오브젝트에만 해당됩니다.

  • 쿼리 결과는 항상 다음과 같습니다.

    • create or replace view 에 대한 소문자 SQL 텍스트를 반환합니다. 뷰를 만드는 데 사용된 원래 SQL 문이 대문자로 되어 있거나 대/소문자가 혼합된 경우에도 마찬가지입니다.

    • OR REPLACE 절을 포함합니다.

    • 뷰가 안전한 경우 SECURE 속성을 포함합니다.

    • COPY GRANTS 뷰 매개 변수를 제외합니다. 원래 CREATE VIEW 문이 COPY GRANTS 매개 변수를 지정하더라도 마찬가지입니다.

    • 열 목록을 생성합니다.

      열에 마스킹 정책이 설정된 경우 결과는 열에 대한 마스킹 정책을 지정합니다.

    • 뷰 본문 앞의 인라인 SQL 주석을 제거합니다(즉, AS). 예를 들어, 다음 코드에서 AS 절 바로 앞의 주석이 제거됩니다.

      create view view_t1
          -- GET_DDL() removes this comment.
          AS
          select * from t1;
      
  • 뷰에 하나 이상의 열 또는 행 액세스 정책에 대한 마스킹 정책이 있고, GET_DDL 쿼리를 실행하는 역할에 전역 APPLY MASKING POLICY 또는 전역 APPLY ROW ACCESS POLICY 권한이 없는 경우 Snowflake는 정책 이름을 #unknown_policy 로 바꿉니다.

    뷰를 다시 만들기 전에 제거하지 않으면 #unknown_policy 텍스트로 인해 CREATE VIEW 문이 실패합니다. 이 텍스트를 사용하는 목적은 열이나 뷰가 정책으로 보호되고 있음을 나타내는 것입니다.

    이 텍스트가 GET_DDL 쿼리 결과에 있는 경우, 뷰를 다시 만들기 전에 내부 거버넌스 관리자에게 문의하여 열 또는 뷰에 필요한 정책을 확인하고, GET_DDL 쿼리 결과를 편집한 다음 뷰를 다시 만듭니다.

데이터 정렬 세부 정보

  • 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는 데이터베이스 이름과 뷰에 대한 스키마 이름을 사용합니다.

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;                                                                       |
---------------------------------------------------------------------------+
맨 위로 이동