Kategorien:

Metadaten-Funktionen

GET_DDL

Gibt eine DDL-Anweisung zurück, mit der sich das angegebene Objekt neu erstellen lässt. Bei Datenbanken und Schemas ist GET_DDL rekursiv (d. h. es werden die DDL-Anweisungen zur Neuerstellung aller unterstützten Objekte in der angegebenen Datenbank/im angegebenen Schema zurückgegeben).

GET_DDL unterstützt derzeit folgende Objekttypen:

Syntax

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

Argumente

Erforderlich:

object_type

Gibt den Objekttyp an, für den die DDL zurückgegeben wird. Gültige Werte (entsprechend den unterstützten Objekttypen) sind:

  • DATABASE

  • DYNAMIC_TABLE

  • EVENT_TABLE

  • FILE_FORMAT

  • FUNCTION (für UDFs, einschließlich externer Funktionen)

  • ICEBERG_TABLE

  • PIPE

  • POLICY (Aggregations-, Authentifizierungs-, Maskierungs-, Kennwort-, Projektions-, Zeilenzugriffs- und Sitzungsrichtlinien)

  • PROCEDURE (für gespeicherte Prozeduren)

  • SCHEMA

  • SEQUENCE

  • STREAM

  • TABLE (auch für externe Tabellen)

  • TAG (Objekt-Tagging)

  • TASK

  • VIEW (einschließlich für materialisierte Ansichten)

namespace.object_name

Gibt den vollqualifizierten Namen des Objekts an, für das die DDL zurückgegeben wird.

Namespace ist die Datenbank und/oder das Schema, in der bzw. dem sich das Objekt befindet:

  • Wird nicht für Datenbanken genutzt.

  • Bei Schemas liegt die Form database vor.

  • Für Schemaobjekte (Tabellen, Ansichten, Streams, Aufgaben, Sequenzen, Dateiformate, Pipes, Richtlinien und UDFs) wird database.schema oder schema verwendet.

Namespace ist optional, wenn in der Benutzersitzung aktuell eine Datenbank und ein Schema verwendet werden. Andernfalls ist er erforderlich.

Optional:

use_fully_qualified_names_for_recreated_objects

Bei TRUE werden in den generierten DDL-Anweisungen vollqualifizierte Namen für die neu zu erstellenden Objekte verwendet.

Standard: FALSE.

Bemerkung

Dies hat keine Auswirkungen auf die Namen anderer Objekte, auf die in der DDL-Anweisung verwiesen wird (z. B. den Namen einer Tabelle, auf die in einer Ansichtsdefinition verwiesen wird).

Rückgabewerte

Gibt eine Zeichenfolge (VARCHAR) zurück, die den Text der DDL-Anweisung enthält, mit der das Objekt erstellt wurde.

Bei UDFs und gespeicherten Prozeduren kann sich die Ausgabe geringfügig von der ursprünglichen DDL unterscheiden. Wenn beispielsweise die UDF oder die gespeicherte Prozedur JavaScript-Code enthält, können sich die Trennzeichen um den JavaScript-Code unterscheiden. Wenn in der ursprünglichen CREATE PROCEDURE-Anweisung weder EXECUTE AS OWNER noch EXECUTE AS CALLER angegeben wurden, enthält die Ausgabe von GET_DDL auch EXECUTE AS OWNER, da dies die Standardeinstellung ist.

Nutzungshinweise

Die folgenden Hinweise gelten für alle unterstützten Objekte:

  • object_type und object_name (einschließlich namespace, falls angegeben) müssen in einfache Anführungszeichen gesetzt werden.

  • Für object_type sind die Objekttypwerte TABLE und VIEW austauschbar. Wenn ein TABLE-Objekttyp angegeben und das per Name festgelegte Objekt eine Ansicht ist, gibt die Funktion die DDL für die Ansicht zurück und umgekehrt.

  • Wenn object_type den Objetkttypwert FUNCTION (d. h. UDF) hat und die UDF Argumente aufweist, müssen Sie die Argumentdatentypen als Teil des Funktionsnamens im Format 'function_name( [ arg_data_type [ , ... ] ] )' einschließen, wobei function_name der Funktionsname und arg_data_type der Datentyp des Arguments ist.

  • Wenn object_type den Objekttypwert PROCEDURE hat und die gespeicherte Prozedur Argumente aufweist, müssen Sie die Argumentdatentypen als Teil des Funktionsnamens einschließen, und zwar im Format 'procedure_name( [ arg_data_type [ , ... ] ] )', wobei „procedure_name“ der Name der Prozedur und „arg_data_type“ der Datentyp des Arguments ist.

  • Wenn Sie ein TABLE-Objekt angeben, das eine Iceberg-Tabelle ist, gibt die Funktion die DDL für die Iceberg-Tabelle zurück.

  • Das Abfragen dieser Funktion erfordert bei den meisten Snowflake-Objekttypen die gleichen Mindestberechtigungen, die zum Anzeigen des Objekts erforderlich sind (mit DESCRIBE <Objekt> oder SHOW <Objekte>). Snowflake beschränkt die Anzeige spezieller Objekte wie z. B. sicherer Ansichten auf den Eigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Objekt).

Die folgenden Hinweise beziehen sich auf Ansichtsobjekte:

  • Für das Abfrageergebnis gilt immer Folgendes:

    • Gibt SQL-Text in Kleinbuchstaben für create or replace view zurück, auch wenn in der ursprünglichen SQL-Anweisung, die zum Erstellen der Ansicht verwendet wurde, Großschreibung oder gemischte Klein-/Großschreibung verwendet wurde.

    • Enthält die OR REPLACE-Klausel.

    • Enthält die Eigenschaft SECURE, wenn die Ansicht sicher ist.

    • Schließt den Ansichtsparameter COPY GRANTS aus, auch wenn die ursprüngliche CREATE VIEW-Anweisung den Parameter COPY GRANTS angibt.

    • Generiert die Spaltenliste.

      Wenn auf einer Spalte eine Maskierungsrichtlinie festgelegt ist, gibt das Ergebnis die Maskierungsrichtlinie für die Spalte an.

    • Entfernt SQL-Kommentare vor dem Ansichtstext (d. h. AS). Im folgenden Code wird zum Beispiel der Kommentar unmittelbar vor der AS-Klausel entfernt:

      create view view_t1
          -- GET_DDL() removes this comment.
          AS
          select * from t1;
      
      Copy

Die folgenden Hinweise gelten speziell für Tabellen- und Ansichtsobjekte mit einem Tag oder einer Richtlinie:

  • Die Rolle, die die GET_DDL-Abfrage ausführt, muss die globale APPLY MASKING POLICY-, APPLY ROW ACCESS POLICY-, APPLY AGGREGATION POLICY- oder APPLY PROJECTION POLICY- oder APPLY TAG-Berechtigung sowie die USAGE-Berechtigung für die Datenbank und das Schema haben, die die Richtlinie oder das Tag enthalten. Andernfalls ersetzt Snowflake die Richtlinie durch #UNKNOWN_POLICY und das Tag durch #UNKNOWN_TAG='#UNKNOWN_VALUE. Dieser Text zeigt an, dass die Spalte oder das Objekt durch eine Richtlinie geschützt ist und ein Tag auf das Objekt bzw. die Spalte gesetzt ist. Wenn dieser Text nicht vor der Neuerstellung des Objekts entfernt wird, schlägt die CREATE OR REPLACE <Objekt>-Anweisung fehl.

    Wenn das Ergebnis der GET_DDL-Abfrage diesen Text enthält, wenden Sie sich vor der Neuerstellung der Ansicht an Ihren internen Governance-Administrator, um festzustellen, welche Richtlinien und Tags für die Spalten bzw. das Objekt erforderlich sind. Bearbeiten Sie schließlich das Abfrageergebnis von GET_DDL, und erstellen Sie das Objekt neu.

    Ohne die genannten Berechtigungen gibt diese Tabellenfunktion in der Ausgabe des Funktionsaufrufs nicht die entsprechende Zeile der Richtlinien- und Tag-Zuweisungen zurück.

  • Wenn für ein Objekt oder eine Spalte mehrere Tags gesetzt sind, sortiert die GET_DDL-Ausgabe die Tags alphabetisch nach dem Tag-Namen.

  • Durch das Löschen eines Tags wird das Tag aus der GET_DDL-Ausgabe entfernt.

  • Wenn ein Tag auf der Tabelle oder Ansicht gesetzt ist, enthält die GET_DDL-Ausgabe der Tabelle oder Ansicht die Tag-Zuweisungen in der CREATE OR REPLACE-Anweisung.

  • Wenn eine Maskierungsrichtlinie für die Spalte oder eine Zeilenzugriffsrichtlinie für die Tabelle festgelegt ist, enthält die GET_DDL-Ausgabe die Richtlinienzuweisungen mit dem Schlüsselwort WITH.

Wenn ein Tag auf der Datenbank oder auf dem Schema gesetzt ist, enthält die GET_DDL-Ausgabe Folgendes:

  • Eine ALTER DATABASE-Anweisung, wenn das Tag auf der Datenbank gesetzt ist.

  • Eine ALTER DATABASE-Anweisung und eine ALTER SCHEMA-Anweisung, wenn das Tag sowohl auf der Datenbank als auch auf dem Schema gesetzt ist.

  • Eine ALTER SCHEMA-Anweisung, wenn das Tag auf dem Schema gesetzt ist.

  • Eine CREATE OR REPLACE-Anweisung, um das Tag zu generieren, wenn das Tag in der Datenbank oder im Schema vorhanden ist.

Sortierungsdetails

  • Collation information is included in the input.

Beispiele

Zurückgeben der DDL, die zum Erstellen einer Ansicht namens books_view verwendet wurde:

select get_ddl('view', 'books_view');
+-----------------------------------------------------------------------------+ 
| GET_DDL('VIEW', 'BOOKS_VIEW')                                               |
|-----------------------------------------------------------------------------|
|                                                                             |
| create or replace view BOOKS_VIEW as select title, author from books_table; |
|                                                                             |
+-----------------------------------------------------------------------------+
Copy

Zurückgeben der DDL, die zum Erstellen eines Schemas mit dem Namen books_schema und der Objekte im Schema (die Tabelle books_table und die Ansicht books_view) verwendet wurde:

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; |
|                                                                             |
+-----------------------------------------------------------------------------+
Copy

Zurückgeben der DDL, die vollqualifizierte Namen für die neu zu erstellenden Objekte verwendet:

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; |
|                                                                                                   |
+---------------------------------------------------------------------------------------------------+
Copy

Bemerkung

Wie im obigen Beispiel gezeigt, verwendet die DDL-Anweisung keinen vollqualifizierten Namen für die Tabelle, die zum Erstellen der Ansicht verwendet wird. Um den Namen dieser Tabelle aufzulösen, verwendet Snowflake den Namen der Datenbank und den Namen des Schemas dieser Ansicht.

Zurückgeben der DDL, die zum Erstellen einer UDF mit dem Namen multiply verwendet wurde, die zwei Parameter vom Typ NUMBER enthält:

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';                                      |
--------------------------------------------------+
Copy

Zurückgeben der DDL, die zum Erstellen einer gespeicherten Prozedur mit dem Namen stproc_1 verwendet wurde, die einen Parameter vom Typ FLOAT aufweist:

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;''                                     |
| ';                                                |
+---------------------------------------------------+
Copy

Geben Sie die DDL zurück, um eine Maskierungsrichtlinie namens employee_ssn_mask zur Maskierung von Sozialversicherungsnummern zu erstellen. Maskierte Werte werden angezeigt, es sei denn, die aktuelle Rolle des Benutzers ist 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;                                                                       |
---------------------------------------------------------------------------+
Copy