- Categorias:
GET_DDL¶
Retorna uma instrução DDL que pode ser usada para recriar o objeto especificado. Para bancos de dados e esquemas, GET_DDL é recursivo (ou seja, retorna as instruções DDL para recriar todos os objetos compatíveis dentro do banco de dados/esquema especificado).
GET_DDL oferece suporte atualmente aos seguintes tipos de objetos:
- Alertas (consulte CREATE ALERT) 
- Bancos de dados (consulte CREATE DATABASE), incluindo bancos de dados vinculados a catálogo. 
- Funções de métricas de dados (consulte CREATE DATA METRIC FUNCTION) 
- Contatos (consulte CREATE CONTACT) 
- Objetobjetos de projeto dbt (consulte CREATE DBT PROJECT) 
- Tabelas dinâmicas (consulte CREATE DYNAMIC TABLE) 
- Tabelas de eventos (consulte CREATE EVENT TABLE) 
- Tabelas externas (consulte CREATE EXTERNAL TABLE) 
- Formatos de arquivo (consulte CREATE FILE FORMAT) 
- Tabelas híbridas (consulte CREATE HYBRID TABLE) 
- Tabelas Apache Iceberg™ (consulte CREATE ICEBERG TABLE) 
- Canal (consulte CREATE PIPE) 
- Políticas (consulte CREATE AGGREGATION POLICY, CREATE AUTHENTICATION POLICY, CREATE JOIN POLICY, CREATE MASKING POLICY, CREATE PASSWORD POLICY, CREATE PRIVACY POLICY, CREATE PROJECTION POLICY, CREATE ROW ACCESS POLICY, CREATE SESSION POLICY) 
- Esquemas (consulte CREATE SCHEMA) 
- Exibições semânticas (consulte CREATE SEMANTIC VIEW) 
- Sequências (consulte CREATE SEQUENCE) 
- Integrações de armazenamento (consulte CREATE STORAGE INTEGRATION) 
- Procedimentos armazenados (consulte CREATE PROCEDURE) 
- Fluxos (consulte CREATE STREAM) 
- Tabelas (consulte CREATE TABLE) 
- Tags (consulte CREATE TAG) 
- Tarefas (consulte CREATE TASK) 
- UDFs incluindo funções externas (consulte CREATE FUNCTION) 
- Exibições (consulte CREATE VIEW) 
- Warehouses (consulte CREATE WAREHOUSE) 
Sintaxe¶
GET_DDL( '<object_type>' , '[<namespace>.]<object_name>' [ , <use_fully_qualified_names_for_recreated_objects> ] )
Argumentos¶
Obrigatório:
- 'object_type'
- Especifica o tipo de objeto para o qual o DDL é devolvido. Os valores válidos (correspondentes aos tipos de objetos suportados) são: - CONTACT 
- DATABASE 
- DYNAMIC_TABLE 
- EVENT_TABLE 
- FILE_FORMAT 
- FUNCTION (para UDFs, incluindo funções de métricas de dados e funções externas) 
- ICEBERG_TABLE 
- INTEGRATION (armazenamento) 
- PIPE 
- POLICY (agregação, autenticação, junção, mascaramento, senha, projeção, acesso a linhas e políticas de sessão) 
- PROCEDURE (para procedimentos armazenados) 
- SCHEMA 
- SEMANTIC VIEW 
- SEQUENCE 
- STREAM 
- TABLE (para tabelas, tabelas externas e tabelas híbridas) 
- TAG (marcação de objetos) 
- TASK 
- VIEW (para exibições e exibições materializadas) 
- WAREHOUSE 
 
- 'namespace.object_name'
- Especifica o nome totalmente qualificado do objeto para o qual o DDL é devolvido. - Namespace é o banco de dados e/ou esquema no qual o objeto reside: - Não utilizado para bancos de dados. 
- Para esquemas, toma a forma de - database.
- Para objetos de esquema (tabelas, exibições, fluxos, tarefas, sequências, formatos de arquivo, canais, políticas e UDFs), toma a forma de - database.schemaou- schema.
 - O namespace é opcional se um banco de dados e esquema estiverem em uso atualmente dentro da sessão do usuário; caso contrário, ele é obrigatório. 
Opcional:
- use_fully_qualified_names_for_recreated_objects
- Se TRUE, as instruções DDL geradas utilizam nomes totalmente qualificados para os objetos a serem recriados. - Padrão: FALSE. - Nota - Isto não afeta os nomes de outros objetos referenciados na instrução DDL (por exemplo, o nome de uma tabela referenciada em uma definição de exibição). 
Retornos¶
Retorna uma cadeia de caracteres (um valor VARCHAR) com o texto da instrução DDL que criou o objeto.
Para UDFs e procedimentos armazenados, a saída pode ser um pouco diferente do DDL original. Por exemplo, se o UDF ou procedimento armazenado tiver um código JavaScript, os caracteres delimitadores ao redor do código JavaScript poderão ser diferentes.
Além disso, observe que a instrução DDL retornada pela função pode incluir valores padrão para propriedades. Por exemplo, mesmo que a instrução CREATE PROCEDURE original não tenha especificado EXECUTE AS OWNER, a instrução DDL retornada pela função inclui EXECUTE AS OWNER, que é o padrão.
Requisitos de controle de acesso¶
- Para visualizações semânticas, use uma função que tenha concedido o privilégio REFERENCES ou OWNERSHIP na visualização semântica 
Notas de uso¶
As seguintes notas se aplicam a todos os objetos suportados:
- object_typee- object_name(incluindo- namespacese especificado) devem ser colocados entre aspas simples.
- Para - object_type,- TABLEe- VIEWsão intercambiáveis. Se um tipo de objeto- TABLEfor especificado, e o objeto especificado pelo nome for uma exibição, a função retorna o DDL para a exibição e vice-versa.
- Se - object_typefor- FUNCTION(isto é, UDF) e o UDF tiver argumentos, você deve incluir os tipos de dados do argumento como parte do nome da função, na forma de- 'function_name( [ arg_data_type [ , ... ] ] )', onde- function_nameé o nome da função e- arg_data_typeé o tipo de dados do argumento.
- Se - object_typefor- PROCEDUREe o procedimento armazenado tiver argumentos, então você deve incluir os tipos de dados dos argumentos como parte do nome da função, na forma de- 'procedure_name( [ arg_data_type [ , ... ] ] )'.
- A consulta desta função para a maioria dos tipos de objetos Snowflake requer as mesmas permissões mínimas necessárias para visualizar o objeto (usando DESCRIBE <objeto> ou SHOW <objetos>). O Snowflake restringe a exibição de objetos especiais, como exibições seguras, ao proprietário (ou seja, a função com o privilégio OWNERSHIP no objeto). 
Para tabelas Iceberg:
- Se você especificar um objeto - TABLEque seja uma tabela Iceberg, a função retornará o DDL para a tabela Iceberg.
- Se BASE_LOCATION tiver sido especificado na instrução original CREATE ICEBERG TABLE, a função retornará a entrada original do usuário. Caso contrário, a função retorna o caminho do arquivo construído pelo Snowflake (incluindo a cadeia de caracteres aleatória de 8 caracteres). Para obter mais informações, consulte Diretórios de dados e metadados. 
Para banco de dados vinculado a catálogo:
- A saída inclui as opções de LINKED_CATALOG. 
- Para ALLOWED_NAMESPACES e BLOCKED_NAMESPACES, o Snowflake não armazena namespaces aninhados se o conjunto já contiver o namespace pai. Por exemplo, se você criar um banco de dados e especificar - ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3'), o Snowflake retorna- ALLOWED_NAMESPACES = ('ns1')na saída GET_DDL. O mesmo se aplica a BLOCKED_NAMESPACES.
As seguintes notas são específicas para exibir objetos. O resultado da consulta sempre:
- Retorna o texto SQL em minúsculas para - create or replace view, mesmo que o uso de maiúsculas e minúsculas na instrução SQL original usada para criar a exibição fosse em maiúsculas ou em maiúsculas e minúsculas.
- Inclui a cláusula OR REPLACE. 
- Inclui a propriedade SECURE, se a exibição for segura. 
- Exclui o parâmetro de exibição COPY GRANTS, mesmo que a instrução CREATE VIEW original especifique o parâmetro COPY GRANTS. 
- Gera a lista de colunas. - Se uma política de mascaramento for definida em uma coluna, o resultado especifica a política de mascaramento da coluna. 
- Remove comentários SQL em linha antes do corpo da exibição (ou seja, antes de AS). Por exemplo, no código seguinte, o comentário imediatamente anterior à cláusula AS é removido: - CREATE VIEW view_t1 -- GET_DDL() removes this comment. AS SELECT * FROM t1; 
As notas a seguir se aplicam especificamente a objetos de tabela e exibição com uma tag ou política:
- A função que executa a consulta GET_DDL deve ter o privilégio global APPLY MASKING POLICY, APPLY ROW ACCESS POLICY, APPLY AGGREGATION POLICY, APPLY JOIN POLICY, APPLY PROJECTION POLICY ou APPLY TAG e o privilégio USAGE no banco de dados e esquema que contém a política ou tag. Caso contrário, o Snowflake substitui a política por - #UNKNOWN_POLICYe a tag por- #UNKNOWN_TAG='#UNKNOWN_VALUE. Este texto indica que a coluna ou o objeto é protegido por uma política e uma tag é definida no objeto ou coluna. Se este texto não for removido antes de recriar o objeto, a instrução CREATE OR REPLACE <objeto> falhará.- Se este texto estiver presente no resultado da consulta GET_DDL, antes de recriar o objeto, consulte seu administrador de governança interna para determinar quais políticas e tags são necessárias para as colunas ou objeto. Por fim, edite o resultado da consulta GET_DDL e depois recrie o objeto. - Sem os privilégios mencionados, esta função de tabela não retorna a linha correspondente para as atribuições de política e tag na saída da chamada da função. 
- Quando múltiplas tags são definidas no objeto ou coluna, a saída GET_DDL ordena as tags alfabeticamente pelo nome da tag. 
- O descarte de uma tag remove a tag da saída GET_DDL. 
- Se uma tag for definida na tabela ou na exibição, a saída GET_DDL para a tabela ou exibição incluirá as atribuições da tag na instrução CREATE OR REPLACE. 
- Se uma política de mascaramento for definida na coluna ou uma política de acesso a linhas for definida na tabela, a saída GET_DDL incluirá as atribuições da política usando a palavra-chave WITH. 
Quando uma tag é definida no banco de dados ou no esquema, a saída GET_DDL inclui:
- Uma instrução ALTER DATABASE quando a tag é definida no banco de dados. 
- Uma instrução ALTER DATABASE e uma instrução ALTER SCHEMA quando a tag é definida tanto no banco de dados quanto no esquema. 
- Uma instrução ALTER SCHEMA quando a tag é definida no esquema. 
- Uma instrução CREATE OR REPLACE para gerar a tag, se a tag existir no banco de dados ou esquema. 
O seguinte se aplica às integrações de armazenamento:
- O comando sempre retorna a sintaxe CREATE OR REPLACE STORAGE INTEGRATION. 
- Se um STORAGE_AWS_EXTERNAL_ID não foi especificado durante a criação da integração de armazenamento, este comando retorna o ID que foi gerado automaticamente durante a criação da integração de armazenamento. 
Detalhes do agrupamento¶
- Collation information is included in the input. 
Exemplos¶
Os exemplos a seguir demonstram como usar essa função para recuperar a instrução DDL de um objeto:
Exibições¶
Retornar o DDL usado para criar uma exibição chamada 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; |
|                                                                             |
+-----------------------------------------------------------------------------+
Exibições semânticas¶
Consulte Obtenção da instrução SQL para uma exibição semântica.
Esquemas¶
Retornar o DDL usado para criar um esquema chamado books_schema e os objetos no esquema (a tabela books_table e a exibição 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; |
|                                                                             |
+-----------------------------------------------------------------------------+
Retornar o DDL que usa nomes totalmente qualificados para os objetos a serem recriados:
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; |
|                                                                                                   |
+---------------------------------------------------------------------------------------------------+
Nota
Como demonstrado no exemplo acima, a instrução DDL não usa um nome totalmente qualificado para a tabela usada para criar a exibição. Para resolver o nome desta tabela, Snowflake usa o nome do banco de dados e o nome do esquema para a exibição.
UDFs e procedimentos armazenados¶
Retorna o DDL usado para criar uma UDF nomeada multiply que tem dois argumentos com o tipo de dados 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';                                      |
+--------------------------------------------------+
Retorne o DDL para criar um procedimento armazenado nomeado stproc_1 que tenha um argumento com o tipo de dados 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;''                                     |
| ';                                                |
+---------------------------------------------------+
Políticas de mascaramento¶
Retornar o DDL para criar uma política de mascaramento chamada employee_ssn_mask para mascarar os números da previdência social. Os valores mascarados são vistos a menos que a função atual do usuário seja 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;                                                                       |
+----------------------------------------------------------------------------+
Integrações de armazenamento¶
Retorne DDL para criar uma integração de armazenamento nomeada s3_int que cria um estágio AWS externo.
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/');                   |
+----------------------------------------------------------------------------+
Warehouses¶
Suponha que você execute a seguinte instrução para criar um warehouse nomeado my_wh:
CREATE OR REPLACE WAREHOUSE my_wh
  WAREHOUSE_SIZE=LARGE
  INITIALLY_SUSPENDED=TRUE;
A seguinte chamada para a função GET_DDL retorna a instrução DDL para recriar este warehouse:
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   |
| ;                                         |
+-------------------------------------------+
Observe que a instrução retornada pela função GET_DDL inclui valores padrão para as propriedades não especificadas na instrução CREATE WAREHOUSE. Por exemplo, a instrução CREATE WAREHOUSE não especificou a propriedade AUTO_RESUME, então a instrução retornada inclui AUTO_RESUME=TRUE, que é o valor padrão para esta propriedade.
Tabelas híbridas¶
O exemplo a seguir mostra o DDL que é retornado para uma tabela híbrida nomeada ht_weather, que tem uma restrição PRIMARY KEY na coluna id.
CREATE OR REPLACE HYBRID TABLE ht_weather
 (id INT PRIMARY KEY,
  start_time TIMESTAMP,
  precip NUMBER(3,2),
  city VARCHAR(20),
  county VARCHAR(20));
Observe que o primeiro argumento da função usa o tipo TABLE para tabelas híbridas.
SELECT GET_DDL('TABLE','ht_weather');
A restrição PRIMARY KEY assume uma posição fora de linha na saída, após as definições de coluna. Consulte também Restrições em 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)                          |
| );                                          |
+---------------------------------------------+