- カテゴリ:
ユーティリティとハッシュ関数 (ユーティリティ)
GET_DDL¶
指定されたオブジェクトを再作成するために使用できる DDL ステートメントを返します。データベースとスキーマの場合、 GET_DDL は再帰的です。つまり、指定されたデータベース/スキーマ内でサポートされているすべてのオブジェクトを再作成するための DDL ステートメントを返します。
GET_DDL は、現在、次のオブジェクト型をサポートしています。
データベース( CREATE DATABASE を参照)
スキーマ( CREATE SCHEMA を参照)
テーブル( CREATE TABLE を参照)(外部テーブルではありません)
ビュー( CREATE VIEW を参照)
ストリーム( CREATE STREAM を参照)
タスク( CREATE TASK を参照)
シーケンス( CREATE SEQUENCE を参照)
ファイル形式( CREATE FILE FORMAT を参照)
パイプ( CREATE PIPE を参照)
UDFs ( CREATE FUNCTION を参照)
ストアドプロシージャ( CREATE PROCEDURE を参照)
ポリシー(列レベルのセキュリティマスキングポリシーのみ。 CREATE MASKING POLICY を参照)
構文¶
GET_DDL( '<object_type>' , '[<namespace>.]<object_name>' [ , <use_fully_qualified_names_for_recreated_objects> ] )
引数¶
必須:
オブジェクト型
DDL が返されるオブジェクトの型を指定します。有効な値(サポートされているオブジェクト型に対応)は、次のとおりです。
DATABASE
SCHEMA
TABLE
VIEW (マテリアライズドビューを含む)
STREAM
TASK
SEQUENCE
FILE_FORMAT
PIPE
FUNCTION ( UDFsの場合)
PROCEDURE (ストアドプロシージャの場合)
POLICY (列レベルのセキュリティマスキングポリシーの場合)
名前空間.オブジェクト名
DDL が返されるオブジェクトの完全修飾名を指定します。
名前空間は、オブジェクトが存在するデータベースまたはスキーマです。
データベースには使用されません。
スキーマの場合、
データベース
の形式を取ります。スキーマオブジェクト(テーブル、ビュー、ストリーム、タスク、シーケンス、ファイル形式、パイプ、ポリシー、 UDFs)の場合、
データベース.スキーマ
またはスキーマ
の形式を取ります。
データベースとスキーマがユーザーセッション内で現在使用されている場合、名前空間は オプション です。それ以外の場合は必須です。
オプション:
再作成されたオブジェクトに対する完全修飾名を使用
TRUE
の場合、生成される DDL ステートメントは、再作成されるオブジェクトに完全修飾名を使用します。デフォルト:
FALSE
。注釈
これは、 DDL ステートメントで参照される他のオブジェクトの名前(例:ビュー定義で参照されるテーブルの名前)には影響しません。
戻り値¶
オブジェクトを作成した DDL ステートメントのテキストを含む文字列(VARCHAR
)を返します。
UDFs およびストアドプロシージャの場合、出力は元の DDLとわずかに異なる場合があります。たとえば、 UDF またはストアドプロシージャに JavaScript コードが含まれる場合、 JavaScript コードを囲む区切り文字が異なる場合があります。また、元の CREATE PROCEDURE
ステートメントが EXECUTE AS OWNER
または EXECUTE AS CALLER
を指定しなかった場合、 GET_DDL
からの出力にはデフォルトの EXECUTE AS OWNER
が含まれます。
使用上の注意¶
現在、 GET_DDL は外部テーブルをサポートしていません。
オブジェクト型
およびオブジェクト名
(指定されている場合は名前空間
を含む)は、一重引用符で囲む必要があります。オブジェクト型
の場合、TABLE
とVIEW
は交換可能です。TABLE
オブジェクト型が指定され、名前で指定されたオブジェクトがビューである場合、関数はビューの DDL を返し、その逆も同様です。オブジェクト型
がFUNCTION
(つまり、 UDF)で、 UDF に引数がある場合、関数データ名を'関数名( [ 引数データ型 [ , ... ] ] )'
の形式で関数名の一部として含める必要があります。オブジェクト型
がPROCEDURE
で、ストアドプロシージャに引数がある場合、関数データ名の一部として引数データ型を'プロシージャ名( [ 引数データ型 [ , ... ] ] )'
の形式で含める必要があります。
照合の詳細¶
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
というスキーマの作成に使用された DDL とスキーマ内のオブジェクト(テーブル books_table
と、ビュー books_view
)を返します。
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
型の2つのパラメーターを持つ 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'; | --------------------------------------------------+
DDL を返し、 FLOAT
型のパラメーターを1つ持つ stproc_1
という名前のストアドプロシージャを作成します。
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;'' | | '; | +---------------------------------------------------+
DDL を返して、社会保障番号をマスクする employee_ssn_mask
という名前のマスキングポリシーを作成します。ユーザーの現在のロールが 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; | ---------------------------------------------------------------------------+