- カテゴリ:
GET_DDL¶
指定されたオブジェクトを再作成するために使用できる DDL ステートメントを返します。データベースとスキーマの場合、 GET_DDL は再帰的です(つまり、指定されたデータベース/スキーマ内でサポートされているすべてのオブジェクトを再作成するための DDL ステートメントを返します)。
GET_DDL は、現在、次のオブジェクト型をサポートしています。
アラート(CREATE ALERT を参照)
データベース( CREATE DATABASE を参照)
動的テーブル(CREATE DYNAMIC TABLE を参照)
イベントテーブル(CREATE EVENT TABLE を参照)
外部テーブル(CREATE EXTERNAL TABLE を参照)
ファイル形式( CREATE FILE FORMAT を参照)
Icebergテーブル(CREATE ICEBERG TABLE を参照)
パイプ( CREATE PIPE を参照)
ポリシー(CREATE AGGREGATION POLICY、 CREATE AUTHENTICATION POLICY、 CREATE MASKING POLICY、 CREATE PASSWORD POLICY、 CREATE PROJECTION POLICY、 CREATE ROW ACCESS POLICY、 CREATE SESSION POLICY を参照)
スキーマ( CREATE SCHEMA を参照)
シーケンス( CREATE SEQUENCE を参照)
ストアドプロシージャ(CREATE PROCEDURE を参照)
ストリーム( CREATE STREAM を参照)
テーブル(CREATE TABLE を参照)
タグ(CREATE TAG を参照)
タスク( CREATE TASK を参照)
UDFs、外部関数を含む(CREATE FUNCTION を参照)
ビュー(CREATE VIEW を参照)
構文¶
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 (UDFs の場合は外部関数を含む)
ICEBERG_TABLE
PIPE
POLICY (集計、認証、マスキング、パスワード、投影、行アクセス、およびセッションポリシー)
PROCEDURE (ストアドプロシージャの場合)
SCHEMA
SEQUENCE
STREAM
TABLE (外部テーブル向けを含む)
TAG (オブジェクトのタグ付け)
TASK
VIEW (マテリアライズドビュー向けを含む)
namespace.object_name
DDL が返されるオブジェクトの完全修飾名を指定します。
名前空間は、オブジェクトが存在するデータベースまたはスキーマです。
データベースには使用されません。
スキーマの場合、
database
の形式を取ります。スキーマオブジェクト(テーブル、ビュー、ストリーム、タスク、シーケンス、ファイル形式、パイプ、ポリシー、 UDFs)の場合は、
database.schema
またはschema
の形式を取ります。
データベースとスキーマがユーザーセッション内で現在使用されている場合、名前空間は オプション です。それ以外の場合は必須です。
オプション:
use_fully_qualified_names_for_recreated_objects
TRUE
の場合、生成される DDL ステートメントは、再作成されるオブジェクトに完全修飾名を使用します。デフォルト:
FALSE
。注釈
これは、 DDL ステートメントで参照される他のオブジェクトの名前(例: ビュー定義で参照されるテーブルの名前)には影響しません。
戻り値¶
オブジェクトを作成した DDL ステートメントのテキストを含む文字列(VARCHAR
)を返します。
UDFs およびストアドプロシージャの場合、出力は元の DDLとわずかに異なる場合があります。たとえば、 UDF またはストアドプロシージャに JavaScript コードが含まれる場合、 JavaScript コードを囲む区切り文字が異なる場合があります。また、元の CREATE PROCEDURE
ステートメントが EXECUTE AS OWNER
または EXECUTE AS CALLER
を指定しなかった場合、 GET_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 権限を持つロール)に制限します。
次の注意事項は、ビューオブジェクトに固有のものです。
クエリ結果は常に、
ビューの作成に使用された元の SQL ステートメントの文字種が大文字であるか、大文字と小文字が混在している場合でも、
create or replace view
に対して小文字の SQL テキストを返します。OR REPLACE
句が含まれます。ビューがセキュアな場合は、
SECURE
プロパティが含まれます。元の CREATE VIEW ステートメントが
COPY GRANTS
パラメーターを指定する場合でも、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 ステートメント。
照合の詳細¶
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; | ---------------------------------------------------------------------------+