- カテゴリ:
GET_DDL¶
指定されたオブジェクトを再作成するために使用できる DDL ステートメントを返します。データベースとスキーマの場合、 GET_DDL は再帰的です(つまり、指定されたデータベース/スキーマ内でサポートされているすべてのオブジェクトを再作成するための DDL ステートメントを返します)。
GET_DDL は、現在、次のオブジェクト型をサポートしています。
アラート(CREATE ALERT を参照)
データベース( CREATE DATABASE を参照)
データメトリック関数(CREATE DATA METRIC FUNCTION を参照)
動的テーブル(CREATE DYNAMIC TABLE を参照)
イベントテーブル(CREATE EVENT TABLE を参照)
外部テーブル(CREATE EXTERNAL TABLE を参照)
ファイル形式( CREATE FILE FORMAT を参照)
ハイブリッドテーブル(CREATE HYBRID TABLE を参照)
Apache Iceberg™ テーブル(CREATE ICEBERG TABLE を参照)
パイプ( CREATE PIPE を参照)
ポリシー( CREATE AGGREGATION POLICY、 CREATE AUTHENTICATION POLICY、 CREATE MASKING POLICY、 CREATE PASSWORD POLICY、 CREATE PRIVACY POLICY、 CREATE PROJECTION POLICY、 CREATE ROW ACCESS POLICY、 CREATE SESSION POLICY を参照)
スキーマ( CREATE SCHEMA を参照)
シーケンス( CREATE SEQUENCE を参照)
ストレージ統合(CREATE STORAGE INTEGRATION を参照)
ストアドプロシージャ(CREATE PROCEDURE を参照)
ストリーム( CREATE STREAM を参照)
テーブル(CREATE TABLE を参照)
タグ(CREATE TAG を参照)
タスク( CREATE TASK を参照)
UDFs、外部関数を含む(CREATE FUNCTION を参照)
ビュー(CREATE VIEW を参照)
ウェアハウス(CREATE WAREHOUSE を参照)
構文¶
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
INTEGRATION (ストレージ)
PIPE
POLICY (集計、認証、マスキング、パスワード、投影、行アクセス、およびセッションポリシー)
PROCEDURE (ストアドプロシージャの場合)
SCHEMA
SEQUENCE
STREAM
TABLE (テーブル、外部テーブル、ハイブリッドテーブルの場合)
TAG (オブジェクトのタグ付け)
TASK
VIEW (ビューとマテリアライズドビューの場合)
WAREHOUSE
'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 コードを囲む区切り文字が異なる場合があります。
さらに、関数が返す DDL ステートメントには、プロパティのデフォルト値が含まれている可能性があることに注意してください。例えば、元の CREATE PROCEDURE ステートメントが EXECUTE AS OWNER を指定していなかったとしても、関数が返す 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 ステートメント。
以下はストレージ統合に適用されます。
このコマンドは常に CREATE OR REPLACE STORAGE INTEGRATION 構文を返します。
ストレージ統合作成時に STORAGE_AWS_EXTERNAL_ID を指定しなかった場合、このコマンドはストレージ統合作成時に自動生成された ID を返します。
照合順序の詳細¶
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はデータベースの名前とビューのスキーマの名前を使用します。
UDFs およびストアドプロシージャ¶
データ型が 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; |
+----------------------------------------------------------------------------+
ストレージの統合¶
外部 AWS ステージを作成する s3_int
という名前のストレージ統合を作成する DDL を返します。
SELECT GET_DDL('INTEGRATION', s3_int);
+----------------------------------------------------------------------------+
| GET_DDL('INTEGRATION', 's3_int') |
|----------------------------------------------------------------------------|
| CREATE OR REPLACE STORAGE INTEGRATION s3_int |
| TYPE = EXTERNAL_STAGE |
| STORAGE_PROVIDER = 'S3' |
| STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole' |
| STORAGE_AWS_EXTERNAL_ID='ACCOUNT_SFCRole=2_kztjogs3W9S18I+iWapHpIz/wq4=' |
| ENABLED = TRUE |
| STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/'); |
+----------------------------------------------------------------------------+
ウェアハウス¶
例えば、次のステートメントを実行して my_wh
という名前のウェアハウスを作成するとします。
CREATE OR REPLACE WAREHOUSE my_wh
WAREHOUSE_SIZE=LARGE
INITIALLY_SUSPENDED=TRUE;
次の GET_DDL 関数の呼び出しは、このウェアハウスを再作成する DDL ステートメントを返します。
SELECT GET_DDL('WAREHOUSE', 'my_wh');
+-------------------------------------------+
| GET_DDL('WAREHOUSE', 'MY_WH') |
|-------------------------------------------|
| create or replace warehouse MY_WH |
| with |
| warehouse_type='STANDARD' |
| warehouse_size='Large' |
| max_cluster_count=1 |
| min_cluster_count=1 |
| scaling_policy=STANDARD |
| auto_suspend=600 |
| auto_resume=TRUE |
| initially_suspended=TRUE |
| enable_query_acceleration=FALSE |
| query_acceleration_max_scale_factor=8 |
| max_concurrency_level=8 |
| statement_queued_timeout_in_seconds=0 |
| statement_timeout_in_seconds=172800 |
| ; |
+-------------------------------------------+
GET_DDL 関数によって返されるステートメントには、 CREATE WAREHOUSE ステートメントで指定されていないプロパティのデフォルト値が含まれていることに注意してください。例えば、 CREATE WAREHOUSE ステートメントは、 AUTO_RESUME プロパティを指定していないため、返されるステートメントにはこのプロパティのデフォルト値である AUTO_RESUME=TRUE が含まれます。
ハイブリッドテーブル¶
次の例は、 id
列に PRIMARY KEY 制約を持つ、 ht_weather
という名前のハイブリッドテーブルに対して返される DDL を示しています。
CREATE OR REPLACE HYBRID TABLE ht_weather
(id INT PRIMARY KEY,
start_time TIMESTAMP,
precip NUMBER(3,2),
city VARCHAR(20),
county VARCHAR(20));
関数の最初の引数は、ハイブリッドテーブルに TABLE
型を使用することに注意してください。
SELECT GET_DDL('TABLE','ht_weather');
PRIMARY KEY 制約は、出力では列定義の後に行外に配置されます。 GET_DDL の制約 もご参照ください。
+---------------------------------------------+
| GET_DDL('TABLE','HT_WEATHER') |
|---------------------------------------------|
| create or replace HYBRID TABLE HT_WEATHER ( |
| ID NUMBER(38,0) NOT NULL, |
| START_TIME TIMESTAMP_NTZ(9), |
| PRECIP NUMBER(3,2), |
| CITY VARCHAR(20), |
| COUNTY VARCHAR(20), |
| primary key (ID) |
| ); |
+---------------------------------------------+