- 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)
Funções de métricas de dados (consulte CREATE DATA METRIC FUNCTION)
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 MASKING POLICY, CREATE PASSWORD POLICY, CREATE PRIVACY POLICY, CREATE PROJECTION POLICY, CREATE ROW ACCESS POLICY, CREATE SESSION POLICY)
Esquemas (consulte CREATE SCHEMA)
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:
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 (políticas de agregação, autenticação, mascaramento, senha, projeção, acesso a linhas e de sessão)
PROCEDURE (para procedimentos armazenados)
SCHEMA
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.schema
ouschema
.
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.
Notas de uso¶
As seguintes notas se aplicam a todos os objetos suportados:
object_type
eobject_name
(incluindonamespace
se especificado) devem ser colocados entre aspas simples.Para
object_type
,TABLE
eVIEW
são intercambiáveis. Se um tipo de objetoTABLE
for 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_type
forFUNCTION
(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 [ , ... ] ] )'
, ondefunction_name
é o nome da função earg_data_type
é o tipo de dados do argumento.Se
object_type
forPROCEDURE
e 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 [ , ... ] ] )'
.Se você especificar um objeto
TABLE
que seja uma tabela Iceberg, a função retornará o DDL para a tabela Iceberg.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).
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 ou APPLY PROJECTION POLICY ou APPLY TAG e o privilégio USAGE no banco de dados e esquema contendo a política ou tag. Caso contrário, o Snowflake substitui a política por
#UNKNOWN_POLICY
e 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 da recriação do objeto, a instrução CREATE OR REPLACE <objeto> falha.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¶
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; |
| |
+-----------------------------------------------------------------------------+
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) |
| ); |
+---------------------------------------------+