CREATE DYNAMIC TABLE

Cria uma tabela dinâmica, com base em uma consulta especificada.

Consulte também:

ALTER DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE, SHOW DYNAMIC TABLES

Neste tópico:

Sintaxe

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  [ ( <column_list> ) ]
  TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
  WAREHOUSE = <warehouse_name>
  REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
  INITIALIZE = { ON_CREATE | ON_SCHEDULE }
  AS <query>
  [ COMMENT = '<string_literal>' ]
Copy

Sintaxe da variante

CREATE DYNAMIC TABLE … CLONE

Cria uma nova tabela dinâmica com as mesmas definições de coluna e contendo todos os dados existentes da tabela dinâmica de origem, sem realmente copiar os dados. Esta variante também pode ser usada para clonar uma tabela dinâmica em um ponto específico no passado. Consulte Considerações sobre clonagem.

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  CLONE <source_dynamic_table>
        [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [
    TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
    WAREHOUSE = <warehouse_name>
  ]
Copy

Para obter mais detalhes sobre clonagem, consulte CREATE <objeto> … CLONE.

Parâmetros obrigatórios

name

Especifica o identificador (ou seja, nome) da tabela dinâmica; deve ser único para o esquema no qual a tabela dinâmica é criada.

Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo, "My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais detalhes, consulte Requisitos para identificadores.

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

Especifica o atraso para a tabela dinâmica:

'num seconds | minutes | hours | days'

Especifica a quantidade máxima de tempo que o conteúdo da tabela dinâmica deve atrasar as atualizações nas tabelas de base.

Por exemplo:

  • Se os dados na tabela dinâmica não demorarem mais de 5 minutos, especifique 5 minutes.

  • Se os dados na tabela dinâmica não demorarem mais de 5 horas, especifique 5 hours.

O valor mínimo é de 1 minuto. Se a tabela dinâmica A depender de outra tabela dinâmica B, o atraso mínimo de A deverá ser maior ou igual ao atraso de B.

DOWNSTREAM

Especifica que a tabela dinâmica deve ser atualizada somente quando as tabelas dinâmicas que dependem dela forem atualizadas.

WAREHOUSE = warehouse_name

Especifica o nome do warehouse que fornece os recursos de computação para atualizar a tabela dinâmica.

Você deve ter o privilégio USAGE neste warehouse para criar a tabela dinâmica.

REFRESH_MODE = { AUTO | FULL | INCREMENTAL }

Especifica o tipo de atualização para a tabela dinâmica. Esta propriedade não pode ser alterada após a criação da tabela dinâmica. Para modificar a propriedade, replique a tabela dinâmica com um comando CREATE OR REPLACE DYNAMIC TABLE.

AUTO

Impõe uma atualização incremental da tabela dinâmica por padrão. Se a instrução CREATE DYNAMIC TABLE não oferecer suporte ao modo de atualização incremental, a tabela dinâmica será criada automaticamente com o modo de atualização completa.

Você pode verificar o modo de atualização usando a instrução SHOW DYNAMIC TABLES. A coluna refresh_mode mostra o modo de atualização em uso, enquanto a coluna text mostra o modo de atualização especificado pelo usuário.

FULL

Impõe uma atualização completa da tabela dinâmica, mesmo que a tabela dinâmica possa ser atualizada de forma incremental.

INCREMENTAL

Impõe uma atualização incremental da tabela dinâmica. Se a consulta subjacente à tabela dinâmica não puder executar uma atualização incremental, a criação da tabela dinâmica falhará e exibirá uma mensagem de erro.

Padrão: AUTO

INITIALIZE

Especifica o comportamento da atualização inicial da tabela dinâmica. Esta propriedade não pode ser alterada após a criação da tabela dinâmica. Para modificar a propriedade, replique a tabela dinâmica com um comando CREATE OR REPLACE DYNAMIC TABLE.

ON_CREATE

Atualiza a tabela dinâmica de forma síncrona na criação.

ON_SCHEDULE

Atualiza a tabela dinâmica na próxima atualização agendada.

A tabela dinâmica é preenchida quando o processo de agendamento de atualização é executado. Nenhum dado é preenchido quando a tabela dinâmica é criada. Se você tentar consultar a tabela usando SELECT * FROM DYNAMIC TABLE, poderá ver o seguinte erro porque a primeira atualização agendada ainda não ocorreu.

Padrão: ON_CREATE

AS query

Especifica a consulta cujos resultados devem estar contidos na tabela dinâmica.

Parâmetros opcionais

COMMENT = 'string_literal'

Especifica um comentário para a tabela dinâmica.

Padrão: sem valor.

column_list

Se você quiser mudar o nome de uma coluna ou adicionar um comentário a uma coluna na tabela dinâmica, inclua uma lista de colunas que especifique os nomes das colunas e, se necessário, comentários sobre as colunas. Você não precisa especificar os tipos de dados das colunas.

Se qualquer uma das colunas na tabela dinâmica for baseada em expressões, por exemplo, não apenas em nomes simples de colunas, então você deverá fornecer um nome de coluna para cada coluna na tabela dinâmica. Por exemplo, os nomes das colunas são necessários no caso a seguir:

CREATE DYNAMIC TABLE product (pre_tax_profit, taxes, after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Você pode especificar um comentário opcional para cada coluna. Por exemplo:

CREATE DYNAMIC TABLE product (pre_tax_profit COMMENT 'revenue minus cost',
                taxes COMMENT 'assumes taxes are a fixed percentage of profit',
                after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Requisitos de controle de acesso

Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:

Privilégio

Objeto

Notas

CREATE DYNAMIC TABLE

Esquema no qual você planeja criar a tabela dinâmica.

SELECT

Tabelas, exibições e tabelas dinâmicas que você planeja consultar para a nova tabela dinâmica.

USAGE

Warehouse que você planeja usar para atualizar a tabela.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.

Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.

Notas de uso

  • Quando você executar o comando CREATE DYNAMIC TABLE, a função atual em uso se torna a proprietária da tabela dinâmica. Essa função é usada para executar atualizações da tabela dinâmica em segundo plano.

  • As tabelas dinâmicas são atualizadas à medida que os objetos de banco de dados subjacentes mudam. O rastreamento de alterações deve ser ativado em todos os objetos subjacentes usados por uma tabela dinâmica. Consulte Tabelas dinâmicas e rastreamento de alterações.

  • Se você quiser substituir uma tabela dinâmica existente e precisar ver sua definição atual, chame a função GET_DDL.

  • Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.

Exemplos

Crie uma tabela dinâmica chamada product:

CREATE OR REPLACE DYNAMIC TABLE product
 TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

No exemplo acima:

  • A tabela dinâmica materializa os resultados de uma consulta das colunas product_id e product_name da tabela staging_table.

  • A meta do tempo de atraso é de 20 minutos, o que significa que os dados na tabela dinâmica não devem ser mais de 20 minutos mais antigos do que os dados em staging_table.

  • O processo de atualização automatizada usa os recursos de computação no warehouse mywh para atualizar os dados na tabela dinâmica.

Clonar uma tabela dinâmica como ela existia exatamente na data e na hora do carimbo de data/hora especificado:

CREATE DYNAMIC TABLE orders_clone_restore CLONE orders AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
Copy