- Catégories :
GET_DDL¶
Renvoie une instruction DDL qui peut être utilisée pour recréer l’objet spécifié. Pour les bases de données et les schémas, GET_DDL est récursif (c’est-à-dire qu’il renvoie les instructions DDL pour recréer tous les objets pris en charge dans la base de données / schéma spécifié).
GET_DDL prend actuellement en charge les types d’objet suivants :
Alertes (voir CREATE ALERT)
Bases de données (voir CREATE DATABASE)
Tableaux dynamiques (voir CREATE DYNAMIC TABLE)
Tables d’événements (voir CREATE EVENT TABLE)
Tables externes (voir CREATE EXTERNAL TABLE)
Formats de fichier (voir CREATE FILE FORMAT)
Tables Iceberg (voir CREATE ICEBERG TABLE)
Canaux (voir CREATE PIPE)
Politiques (voir CREATE AGGREGATION POLICY , CREATE AUTHENTICATION POLICY , CREATE MASKING POLICY , CREATE PASSWORD POLICY , CREATE PROJECTION POLICY , CREATE ROW ACCESS POLICY , CREATE SESSION POLICY)
Schémas (voir CREATE SCHEMA)
Séquences (voir CREATE SEQUENCE)
Procédures stockées (voir CREATE PROCEDURE)
Flux (voir CREATE STREAM)
Tables (voir CREATE TABLE)
Balises (voir CREATE TAG)
Tâches (voir CREATE TASK)
UDFs, y compris les fonctions externes (voir CREATE FUNCTION)
Vues (voir CREATE VIEW)
Syntaxe¶
GET_DDL( '<object_type>' , '[<namespace>.]<object_name>' [ , <use_fully_qualified_names_for_recreated_objects> ] )
Arguments¶
Obligatoire :
object_type
Spécifie le type d’objet pour lequel le DDL est renvoyé. Les valeurs valides (correspondant aux types d’objet pris en charge) sont :
DATABASE
DYNAMIC_TABLE
EVENT_TABLE
FILE_FORMAT
FUNCTION (pour les UDFs, y compris les fonctions externes)
ICEBERG_TABLE
PIPE
POLICY (politiques d’agrégation, d’authentification, de masquage, de mot de passe, de projection, d’accès aux lignes et de session)
PROCEDURE (pour les procédures stockées)
SCHEMA
SEQUENCE
STREAM
TABLE (y compris pour les tables externes)
TAG (balisage d’objets)
TASK
VIEW (y compris pour les vues matérialisées)
namespace.object_name
Spécifie le nom qualifié complet de l’objet pour lequel le DDL est renvoyé.
L’espace de noms est la base de données et / ou le schéma dans lequel l’objet réside :
Non utilisé pour les bases de données.
Pour les schémas, prend la forme de la
database
.Pour les objets de schéma (tables, vues, flux, tâches, séquences, formats de fichier, canaux, politiques et UDFs), prend la forme d’un
database.schema
ou d’unschema
.
L’espace de noms est facultatif si une base de données et un schéma sont actuellement utilisés dans la session utilisateur ; sinon, il est obligatoire.
Facultatif :
use_fully_qualified_names_for_recreated_objects
Si
TRUE
, les instructions DDL générées utilisent des noms complets pour les objets à recréer.Par défaut :
FALSE
.Note
Cela n’affecte pas les noms des autres objets référencés dans l’instruction DDL (par exemple le nom d’une table référencée dans une définition de vue).
Renvoie¶
Renvoie une chaîne (VARCHAR
) contenant le texte de l’instruction DDL qui a créé l’objet.
Pour les UDFs et les procédures stockées, le résultat peut être légèrement différent de la DDL d’origine. Par exemple, si l’UDF ou la procédure stockée contient le code JavaScript, les caractères de délimitation entourant le code JavaScript peuvent être différents. De même, si l’instruction CREATE PROCEDURE
d’origine ne spécifiait pas EXECUTE AS OWNER
ni EXECUTE AS CALLER
, le résultat de GET_DDL
inclurait EXECUTE AS OWNER
, car il s’agit de la valeur par défaut.
Notes sur l’utilisation¶
Les remarques suivantes s’appliquent à tous les objets pris en charge :
object_type
etobject_name
(y comprisnamespace
si spécifié) doivent être entourés de guillemets simples.object_type
,TABLE
etVIEW
sont interchangeables. Si un type d’objetTABLE
est spécifié et que l’objet spécifié par nom est une vue, la fonction renvoie le DDL pour la vue et inversement.Si
object_type
est uneFUNCTION
(c’est-à-dire une UDF) et que l’UDF a des arguments, vous devez inclure les types de données d’argument dans le nom de la fonction, sous la forme de'function_name( [ arg_data_type [ , ... ] ] )'
, oufunction_name
est le nom de la fonction etarg_data_type
est le type de données de l’argument.Si
object_type
estPROCEDURE
et que la procédure stockée présente des arguments, vous devez inclure les types de données d’argument dans le nom de la fonction, sous la forme de'procedure_name( [ arg_data_type [ , ... ] ] )'
.Si vous spécifiez un objet
TABLE
qui est une table Iceberg, la fonction renvoie le DDL de la table Iceberg.L’interrogation de cette fonction pour la plupart des types d’objets Snowflake nécessite les mêmes autorisations minimales que celles requises pour visualiser l’objet (en utilisant DESCRIBE <objet> ou SHOW <objets>). Snowflake limite la visualisation d’objets spéciaux tels que les vues sécurisées au propriétaire (c’est-à-dire le rôle ayant le privilège OWNERSHIP sur l’objet).
Les remarques suivantes sont spécifiques aux objets de vue :
Le résultat de la requête toujours :
Renvoie le texte SQL en minuscules pour
create or replace view
, même si la casse dans l’instruction SQL d’origine utilisée pour créer la vue était en majuscules ou mixte.Inclut la clause
OR REPLACE
.Inclut la propriété
SECURE
si la vue est sécurisée.Exclut le paramètre de vue
COPY GRANTS
même si l’instruction CREATE VIEW d’origine spécifie le paramètreCOPY GRANTS
.Génère la liste des colonnes.
Si une politique de masquage est définie sur une colonne, le résultat spécifie la politique de masquage pour la colonne.
Supprime les commentaires SQL en ligne avant le corps de la vue (c’est-à-dire
AS
). Par exemple, dans le code suivant, le commentaire qui précède immédiatement la clause AS est supprimé :create view view_t1 -- GET_DDL() removes this comment. AS select * from t1;
Les remarques suivantes s’appliquent spécifiquement aux objets de table et de vue avec une balise ou une politique :
Le rôle qui exécute la requête GET_DDL doit disposer du privilège global APPLY MASKING POLICY, APPLY ROW ACCESS POLICY, APPLY AGGREGATION POLICY, ou APPLY PROJECTION POLICY ou APPLY TAG et du privilège USAGE sur la base de données et le schéma contenant la politique ou la balise. Sinon, Snowflake remplace la politique par
#UNKNOWN_POLICY
et la balise par#UNKNOWN_TAG='#UNKNOWN_VALUE
. Ce texte indique que la colonne ou l’objet est protégé par une politique et qu’une balise est définie sur l’objet ou la colonne. Si ce texte n’est pas supprimé avant de recréer l’objet, l’instruction CREATE OR REPLACE <objet> échoue.Si ce texte est présent dans le résultat de la requête GET_DDL, avant de recréer l’objet, consultez votre administrateur de gouvernance interne pour déterminer les politiques et les balises nécessaires pour les colonnes ou l’objet. Enfin, modifiez le résultat de la requête GET_DDL, puis recréez l’objet.
Sans les privilèges mentionnés, cette fonction de table ne renvoie pas la ligne correspondante pour les affectations de politiques et de balises dans le résultat de l’appel de la fonction.
Lorsque plusieurs balises sont définies sur l’objet ou la colonne, la sortie GET_DDL trie les balises dans l’ordre alphabétique de leur nom.
L’abandon d’une balise supprime la balise de la sortie GET_DDL.
Si une balise est définie sur la table ou la vue, la sortie GET_DDL pour la table ou la vue inclut les affectations de balise dans l’instruction CREATE OR REPLACE.
Si une politique de masquage est définie sur la colonne ou si une politique d’accès aux lignes est définie sur la table, la sortie GET_DDL inclut les affectations de politique à l’aide du mot-clé
WITH
.
Lorsqu’une balise est définie sur la base de données ou le schéma, la sortie GET_DDL comprend :
Une instruction ALTER DATABASE lorsque la balise est définie sur la base de données.
Une instruction ALTER DATABASE et une instruction ALTER SCHEMA lorsque la balise est définie à la fois sur la base de données et sur le schéma.
Une instruction ALTER SCHEMA lorsque la balise est définie sur le schéma.
Une instruction CREATE OR REPLACE pour générer la balise, si la balise existe dans la base de données ou le schéma.
Détails du classement¶
Collation information is included in the input.
Exemples¶
Renvoyer le DDL utilisé pour créer une vue nommée books_view
:
select get_ddl('view', 'books_view'); +-----------------------------------------------------------------------------+ | GET_DDL('VIEW', 'BOOKS_VIEW') | |-----------------------------------------------------------------------------| | | | create or replace view BOOKS_VIEW as select title, author from books_table; | | | +-----------------------------------------------------------------------------+
Renvoyer le DDL utilisé pour créer un schéma nommé books_schema
et les objets du schéma (la table books_table
et la vue 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; | | | +-----------------------------------------------------------------------------+
Renvoyer le DDL qui utilise des noms complets pour les objets à recréer :
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; | | | +---------------------------------------------------------------------------------------------------+
Note
Comme illustré dans l’exemple ci-dessus, l’instruction DDL n’utilise pas de nom complet pour la table utilisée pour créer la vue. Pour résoudre le nom de cette table, Snowflake utilise le nom de la base de données et le nom du schéma pour la vue.
Renvoie le DDL utilisé pour créer un UDF nommé multiply
ayant deux paramètres de type NUMBER
:
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'; | --------------------------------------------------+
Renvoyer la DDL pour créer une procédure stockée nommée stproc_1
comportant un paramètre de type FLOAT
:
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;'' | | '; | +---------------------------------------------------+
renvoyer la DDL pour créer une politique de masquage nommée employee_ssn_mask
pour masquer les numéros de sécurité sociale. Les valeurs masquées sont visibles, sauf si le rôle actuel de l’utilisateur est 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; | ---------------------------------------------------------------------------+