- カテゴリ:
GET_DDL¶
指定されたオブジェクトを再作成するために使用できる DDL ステートメントを返します。データベースとスキーマの場合、 GET_DDL は再帰的です(つまり、指定されたデータベース/スキーマ内でサポートされているすべてのオブジェクトを再作成するための DDL ステートメントを返します)。
GET_DDL は、現在、次のオブジェクト型をサポートしています。
データベース( CREATE DATABASE を参照)
スキーマ( CREATE SCHEMA を参照)
テーブル(CREATE TABLE を参照)
外部テーブル(CREATE EXTERNAL TABLE を参照)
ビュー(CREATE VIEW を参照)
ストリーム( CREATE STREAM を参照)
タスク( CREATE TASK を参照)
シーケンス( CREATE SEQUENCE を参照)
ファイル形式( CREATE FILE FORMAT を参照)
パイプ( CREATE PIPE を参照)
UDFs、外部関数を含む(CREATE FUNCTION を参照)
ストアドプロシージャ(CREATE PROCEDURE を参照)
ポリシー(CREATE MASKING POLICY および CREATE ROW ACCESS 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
が含まれます。
使用上の注意¶
次の注意事項は、サポートされているすべてのオブジェクトに適用されます。
オブジェクト型
およびオブジェクト名
(指定されている場合は名前空間
を含む)は、一重引用符で囲む必要があります。オブジェクト型
の場合、TABLE
とVIEW
は交換可能です。TABLE
オブジェクト型が指定され、名前で指定されたオブジェクトがビューである場合、関数はビューの DDL を返し、その逆も同様です。オブジェクト型
がFUNCTION
(つまり、 UDF)で、 UDF に引数がある場合、関数データ名を'関数名( [ 引数データ型 [ , ... ] ] )'
の形式で関数名の一部として含める必要があります。オブジェクト型
がPROCEDURE
で、ストアドプロシージャに引数がある場合は、関数データ名の一部として引数データ型を'プロシージャ名( [ 引数データ型 [ , ... ] ] )'
の形式で含める必要があります。ほとんどのSnowflakeオブジェクト型についてこの関数をクエリするには、オブジェクトを表示するために必要な最小限のアクセス許可が必要です( DESCRIBE <オブジェクト> または SHOW <オブジェクト> を使用)。Snowflakeは、セキュアビューなどの特別なオブジェクトの表示を所有者(つまり、オブジェクトに対する OWNERSHIP 権限を持つロール)に制限します。
次の注意事項は、ビューオブジェクトに固有のものです。
クエリ結果は常に、
ビューの作成に使用された元の SQL ステートメントの文字種が大文字の場合や、大文字と小文字が混在している場合でも、
create or replace view
の小文字の SQL テキストを返します。OR REPLACE
句が含まれます。ビューが安全な場合は、
SECURE
プロパティが含まれます。元の CREATE VIEW ステートメントで
COPY GRANTS
パラメーターが指定されている場合でも、COPY GRANTS
ビューパラメーターを除外します。列リストを生成します。
列にマスキングポリシーが設定されている場合、結果はその列のマスキングポリシーを指定します。
ビュー本文の前のインライン SQL コメント(つまり、
AS
)を削除します。たとえば、次のコードでは、 AS 句の直前のコメントが削除されています。create view view_t1 -- GET_DDL() removes this comment. AS select * from t1;
ビューの1つ以上の列または行アクセスポリシーにマスキングポリシーがあり、 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
というスキーマの作成に使用された 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; | ---------------------------------------------------------------------------+