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> ] )

Argumente

Erforderlich:

Objekttyp

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

  • DATABASE

  • SCHEMA

  • TABLE (auch für externe Tabellen)

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

  • STREAM

  • TASK

  • SEQUENCE

  • FILE_FORMAT

  • PIPE

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

  • PROCEDURE (für gespeicherte Prozeduren)

  • POLICY (Maskierungs- und Zeilenzugriffsrichtlinien)

Namespace.Objektname

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 Datenbank vor.

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

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

Optional:

vollqualifizierte_Namen_für_neu_erstellte_Objekte_verwenden

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:

  • Objekttyp und Objektname (einschließlich Namespace, falls angegeben) müssen in einfache Anführungszeichen gesetzt werden.

  • Bei Objekttyp sind 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 Objekttyp eine FUNCTION (d. h. UDF) ist und die UDF Argumente aufweist, müssen Sie die Argumentdatentypen als Teil des Funktionsnamens einschließen, und zwar im Format 'Funktionsname( [ Datentyp_des_Arguments [ , ... ] ] )'.

  • Wenn Objekttyp eine PROCEDURE ist und die gespeicherte Prozedur Argumente aufweist, müssen Sie die Argumentdatentypen als Teil des Funktionsnamens einschließen, und zwar im Format 'Prozedurname( [ Datentyp_des_Arguments [ , ... ] ] )'.

  • 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;
      
  • Wenn die Ansicht eine Maskierungsrichtlinie auf einer oder mehrerer ihrer Spalten oder eine Zeilenzugriffsrichtlinie hat und die Rolle, die die GET_DDL-Abfrage ausführt, nicht über die globale APPLY MASKING POLICY- bzw. die globale APPLY ROW ACCESS POLICY-Berechtigung verfügt, ersetzt Snowflake den Richtliniennamen durch #unknown_policy.

    Wenn der Text #unknown_policy nicht vor der Neuerstellung der Ansicht entfernt wird, schlägt die CREATE VIEW-Anweisung fehl. Die Verwendung dieses Textes soll darauf hinweisen, dass die Spalte oder die Ansicht durch eine Richtlinie geschützt ist.

    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 für die Spalten oder die Ansicht erforderlich sind. Bearbeiten Sie das GET_DDL-Abfrageergebnis entsprechend, und erstellen Sie dann die Ansicht neu.

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

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

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

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

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

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