GET_DDL

GET_DDL

지정한 객체를 다시 만들 수 있는 DDL 문장을 반환하는 메타데이터 함수예요. 데이터베이스와 스키마의 경우 재귀적으로 동작해서, 그 안의 지원되는 모든 객체를 다시 만들기 위한 DDL 문장을 반환해요.

출처: Snowflake SQL Reference

본문

GET_DDL은 다음과 같은 객체 유형을 지원해요: Cortex Agents, Cortex Search service, 알림(Alert), 데이터베이스(카탈로그 연결 포함), 데이터 메트릭 함수, 연락처(Contact), dbt 프로젝트 객체, 동적 테이블(Dynamic Table), 이벤트 테이블, 외부 테이블, 페일오버 그룹, 파일 형식, 하이브리드 테이블, Iceberg™ 테이블, 노트북, 온라인 피처 테이블, Openflow 배포·런타임·커넥터, 파이프, 정책(집계·인증·데이터 이동·조인·마스킹·암호·프로젝션·행 접근·세션·스토리지 수명 주기), 데이터 이동 규칙, 복제 그룹, 스키마, 시맨틱 뷰, 시퀀스, 스토리지 통합, 저장 프로시저, 스트림, 테이블, 태그, 태스크, UDF(외부 함수 포함), 사용자 정의 타입, 뷰, 웨어하우스.

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

object_type — DDL을 반환할 객체 유형. 예: DATABASE, SCHEMA, TABLE, VIEW, FUNCTION(UDF), PROCEDURE, STREAM, TASK, WAREHOUSE, POLICY, TAG 등.

namespace.object_name — DDL을 반환할 객체의 정규화된 이름이에요. 세션에 데이터베이스와 스키마가 현재 사용 중이면 네임스페이스는 선택이지만, 그렇지 않으면 필수예요.

use_fully_qualified_names_for_recreated_objects — TRUE면 생성되는 DDL 문장이 재생성할 객체에 정규화된 이름을 사용해요. 기본값은 FALSE예요. 이 옵션은 DDL에 참조된 다른 객체 이름(예: 뷰 정의에서 참조하는 테이블 이름)에는 영향을 주지 않아요.

반환값 — 객체를 만든 DDL 문장의 텍스트를 담은 문자열(VARCHAR)이에요. UDF·저장 프로시저의 출력은 원본 DDL과 약간 다를 수 있어요(JavaScript 코드 주변 구분자가 달라지는 등). 또한 반환된 DDL에는 속성의 기본값이 포함될 수 있어요.

접근 제어 요구사항 — 시맨틱 뷰에 대해서는 뷰에 REFERENCES 또는 OWNERSHIP 권한이 부여된 역할을 사용해야 해요.

사용 메모

  • object_type과 object_name(네임스페이스 포함)은 작은따옴표로 감싸야 해요.
  • TABLE과 VIEW는 상호 교환 가능해요. 이름으로 지정한 객체가 뷰인데 TABLE 유형을 지정하면 뷰의 DDL을 반환하고 그 반대도 마찬가지예요.
  • object_type이 FUNCTION(UDF)이고 인자가 있으면 함수 이름에 인자 데이터 타입을 포함해야 해요. PROCEDURE도 마찬가지예요.
  • 대부분의 객체에 대해 이 함수를 조회하려면 객체를 볼 수 있는 최소 권한이 필요해요. 보안 뷰 같은 특수 객체는 소유자(OWNERSHIP 권한을 가진 역할)만 볼 수 있게 제한돼요.
  • 반환된 DDL에 데이터 타입 명세가 포함될 때는 기본적으로 원본의 데이터 타입 별칭을 표준 Snowflake 타입 이름으로 바꿔요. 원본의 별칭을 유지하려면 ENABLE_GET_DDL_USE_DATA_TYPE_ALIAS 파라미터를 TRUE로 설정하세요.
  • 태그나 정책이 있는 객체의 경우, 실행 역할에 해당 APPLY 권한과 USAGE 권한이 없으면 정책은 #UNKNOWN_POLICY, 태그는 #UNKNOWN_TAG='#UNKNOWN_VALUE'로 바뀌어요. 이 텍스트를 지우지 않고 객체를 재생성하면 CREATE OR REPLACE가 실패하므로, 재생성 전에 거버넌스 관리자와 상의해 필요한 정책·태그를 결정한 뒤 DDL을 수정해야 해요.
  • 여러 태그가 있으면 태그 이름 알파벳순으로 정렬되고, 태그 삭제 시 GET_DDL 출력에서 제거돼요.
  • 스토리지 통합의 경우 항상 CREATE OR REPLACE STORAGE INTEGRATION 구문을 반환해요.

예시 — 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; |
|                                                                             |
+-----------------------------------------------------------------------------+

더 알아보기 (Learn more)