CREATE INTERACTIVE TABLE

Creates a new interactive table in the current/specified schema or replaces an existing table. Interactive tables are optimized for low-latency, interactive queries and provide the best performance when queried using interactive warehouses.

As tabelas interativas são compatíveis com um conjunto mais limitado de operações SQL do que as tabelas padrão e foram projetadas para cargas de trabalho de consulta em tempo real de alta concorrência, como painéis e APIs baseadas em dados.

Nota

Ao criar uma tabela interativa, você deve definir uma cláusula CLUSTER BY em uma ou mais colunas que são utilizadas nas cláusulas WHERE para suas consultas mais urgentes.

Você também pode usar as seguintes variantes CREATE INTERACTIVE TABLE:

Para obter a sintaxe CREATE TABLE completa usada para tabelas padrão do Snowflake, consulte CREATE TABLE.

Dica

Antes de criar e usar tabelas interativas, você deve se familiarizar com as limitações e casos de uso. As tabelas interativas funcionam melhor com instruções SELECT simples com cláusulas WHERE seletivas.

Consulte também:

CREATE WAREHOUSE, ALTER WAREHOUSE, SHOW TABLES, SHOW WAREHOUSES, DROP TABLE

Sintaxe

CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
  (
    <col_name> <col_type>
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ , <col_name> <col_type> [ ... ] ]
  )
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [ , <col_name> ... ] ) ] ]
  [ [ WITH ] JOIN POLICY <policy_name> [ ALLOWED JOIN KEYS ( <col_name> [ , ... ] ) ] ]
  [ [ WITH ] STORAGE LIFECYCLE POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  AS <query>
Copy

Parâmetros obrigatórios

table_name

Especifica o identificador (ou seja, o nome) da tabela interativa; deve ser exclusivo para o esquema no qual a tabela é 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.

CLUSTER BY ( expr [ , expr , ... ] )

Specifies one or more columns or column expressions in the table as the clustering key. Choose clustering columns that are used in the WHERE clauses of your most time-critical queries, as this significantly affects query performance.

Para obter mais detalhes sobre como escolher chaves de clustering eficazes, consulte Chaves de clustering e tabelas clusterizadas.

AS query

Specifies the SELECT statement that populates the interactive table. This query must be specified last in the CREATE INTERACTIVE TABLE statement, regardless of other parameters included.

A consulta segue os padrões CREATE TABLE AS SELECT (CTAS) e define os dados e o esquema para a tabela interativa.

col_name

Specifies the column identifier (i.e. name). Column identifiers must start with an alphabetic character and cannot contain spaces or special characters unless the entire identifier string is enclosed in double quotes.

Para obter mais detalhes, consulte Requisitos para identificadores.

col_type

Especifica o tipo de dados para a coluna.

Para obter mais detalhes sobre os tipos de dados que podem ser especificados para colunas de tabela, consulte Referência dos tipos de dados SQL.

Parâmetros opcionais

MASKING POLICY policy_name

Especifica a política de mascaramento a ser definida em uma coluna.

USING ( col_name , cond_col_1 ... )

Especifica os argumentos para passar para a expressão SQL da política de mascaramento condicional.

A primeira coluna da lista especifica a coluna das condições da política para mascarar ou tokenizar os dados e deve corresponder à coluna para a qual a política de mascaramento é definida.

As colunas adicionais especificam as colunas a serem avaliadas para determinar se os dados em cada linha do resultado da consulta devem ser mascarados ou tokenizados quando uma consulta é feita na primeira coluna.

Se a cláusula USING for omitida, o Snowflake tratará a política de mascaramento condicional como uma política de mascaramento normal.

OR REPLACE

Especifica a substituição da tabela interativa caso ela já exista no esquema. Isso é equivalente a usar DROP TABLE na tabela existente e, em seguida, criar uma nova tabela com o mesmo nome.

IF NOT EXISTS

Especifica a criação da tabela interativa somente se ela ainda não existe no esquema. Se uma tabela com o mesmo nome já existir, a instrução será bem-sucedida sem a criação de uma nova tabela.

Nota

As cláusulas OR REPLACE e IF NOT EXISTS são mutuamente exclusivas e não podem ser utilizadas na mesma instrução.

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

Especifica o tempo máximo de atraso para a atualização automática da tabela interativa. Quando especificado, a tabela interativa torna-se uma tabela interativa dinâmica que se atualiza automaticamente para permanecer dentro do tempo de atraso especificado dos dados de origem.

  • O valor mínimo é de 60 segundos (1 minuto).

  • Se nenhuma unidade for especificada, o número representará segundos.

  • Se TARGET_LAG não for especificado, a tabela será criada como uma tabela interativa estática.

Quando TARGET_LAG for especificado, o parâmetro WAREHOUSE também será obrigatório.

WAREHOUSE = warehouse_name

Obrigatório quando TARGET_LAG for especificado. Especifica o warehouse padrão utilizado para operações de atualização quando TARGET_LAG estiver definido. Este deve ser um warehouse padrão, não um warehouse interativo.

COPY GRANTS

Especifica a retenção dos privilégios de acesso da tabela original ao substituir uma tabela interativa usando CREATE OR REPLACE INTERACTIVE TABLE.

O parâmetro copia todos os privilégios, exceto OWNERSHIP, da tabela existente para a nova. Por padrão, a função que executa a instrução CREATE INTERACTIVE TABLE é a proprietária da nova tabela.

COMMENT = 'string_literal'

Especifica um comentário para a tabela interativa.

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Especifica a política de acesso a linhas a ser definida em uma tabela.

Este parâmetro não é suportado pela sintaxe da variante CREATE OR ALTER.

AGGREGATION POLICY policy_name [ ENTITY KEY ( col_name [ , col_name ... ] ) ]

Especifica uma política de agregação a ser definida em uma tabela. Você pode aplicar uma ou mais políticas de agregação em uma tabela.

Use o parâmetro opcional ENTITY KEY para definir quais colunas identificam exclusivamente uma entidade dentro da tabela. Para obter mais informações, consulte Implementação de privacidade ao nível de entidade com políticas de agregação. Você pode especificar uma ou mais chaves de entidade para uma política de agregação.

JOIN POLICY policy_name [ ALLOWED JOIN KEYS ( col_name [ , ... ] ) ]

Especifica a política de junção a ser definida em uma tabela.

Use o parâmetro opcional ALLOWED JOIN KEYS para definir quais colunas podem ser usadas como colunas de junção quando essa política estiver em vigor. Para obter mais informações, consulte Políticas de junção.

Este parâmetro não é suportado pela sintaxe da variante CREATE OR ALTER.

STORAGE LIFECYCLE POLICY policy_name ON ( col_name [ , col_name ... ] )

Especifica uma política de ciclo de vida de armazenamento para anexar à tabela.

As colunas especificadas na cláusula ON devem corresponder à contagem de argumentos e aos tipos de dados definidos na assinatura da função de política. O Snowflake usa essas colunas para avaliar a expressão da política e determinar quais linhas arquivar ou expirar.

Importante

Se você anexar uma política de armazenamento de arquivos a uma tabela, a tabela será permanentemente atribuída à camada de arquivos especificada. Não é possível alterar a camada de arquivos aplicando uma nova política. Por exemplo, não é possível especificar uma política criada com uma camada de arquivos COOL em ALTER TABLE…DROP STORAGE LIFECYCLE POLICY e, posteriormente, alterar a tabela para adicionar uma política criada com uma camada de arquivos COLD. Para alterar a camada de arquivos de uma tabela, entre em contato com o suporte Snowflake para solicitar a exclusão dos dados já arquivados. Para considerações adicionais, consulte Políticas de armazenamento de arquivos.

Para obter mais informações sobre a criação e o gerenciamento de políticas de ciclo de vida de armazenamento, consulte Create and manage storage lifecycle policies.

Este parâmetro não é suportado pela sintaxe da variante CREATE OR ALTER.

Requisitos de controle de acesso

A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:

Privilégio

Objeto

Notas

CREATE INTERACTIVE TABLE

Esquema

Obrigatório para criar uma tabela interativa no esquema.

SELECT

Tabela, tabela externa, exibição

Obrigatório em tabelas e/ou exibições consultadas na cláusula AS SELECT.

APPLY

Política de mascaramento, política de acesso a linhas, tag, política de ciclo de vida de armazenamento

Necessário somente ao aplicar política de mascaramento, política de acesso a linhas, tags de objetos, política de ciclo de vida de armazenamento ou qualquer combinação desses recursos de governança durante a criação de tabelas.

USAGE

Banco de dados, esquema

Obrigatório no banco de dados e no esquema que contém a tabela interativa.

USAGE

Warehouse

Obrigatório no warehouse especificado no parâmetro WAREHOUSE (quando TARGET_LAG é utilizado).

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

  • As tabelas interativas devem ser criadas usando um warehouse padrão, não um interativo.

  • A cláusula CLUSTER BY é obrigatória para todas as tabelas interativas e afeta significativamente o desempenho da consulta. Escolha as colunas de clustering cuidadosamente com base nos seus padrões de cláusula WHERE mais comuns.

  • As tabelas interativas oferecem o melhor desempenho quando consultadas por meio de warehouses interativos. Para obter o desempenho ideal de uma tabela interativa:

    1. Criar um warehouse interativo

    2. Associe a tabela interativa ao warehouse interativo usando ALTER WAREHOUSE … ADD TABLES

    3. Retomar o warehouse interativo

    4. Use o warehouse interativo para consultar a tabela interativa

  • As tabelas interativas são compatíveis com um conjunto limitado de operações SQL em comparação com as tabelas padrão:

    • As instruções SELECT com cláusulas WHERE são otimizadas.

    • As operações GROUP BY simples são compatíveis.

    • As operações DML (INSERT, UPDATE, DELETE) não são compatíveis. A única operação DML permitida é INSERT OVERWRITE.

    • Operações de consulta complexas podem ter benefícios de desempenho limitados.

  • Tabelas interativas dinâmicas (com TARGET_LAG) são atualizadas automaticamente usando o warehouse padrão especificado. O tempo de atraso equilibra a atualização dos dados com os custos de computação.

  • Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

  • Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias tabelas, desde que a estrutura de colunas da tabela corresponda às colunas especificadas na política.

  • Ao criar uma tabela com uma política de mascaramento em uma ou mais colunas da tabela, ou uma política de acesso a linhas adicionada à tabela, use a função POLICY_CONTEXT para simular uma consulta na(s) coluna(s) protegida(s) por uma política de mascaramento e a tabela protegida por uma política de acesso a linhas.

  • Tabelas interativas armazenam informações de índice e metadados adicionais para acelerar as consultas, mas isso é compactado e tem um impacto mínimo no tamanho do armazenamento.

  • Em relação aos metadados:

    Atenção

    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.

  • Para criar uma tabela com a cláusula WITH STORAGE LIFECYCLE POLICY:

    • Você deve ter os privilégios necessários para aplicar a política. Para obter mais informações sobre os privilégios necessários, consulte Storage lifecycle policy privileges.

    • Uma tabela pode ter apenas uma política de ciclo de vida de armazenamento anexada.

    • O número de colunas deve corresponder à contagem de argumentos na assinatura da função de política, e os dados da coluna devem ser compatíveis com os tipos de argumentos.

    • As políticas associadas não serão afetadas se você renomear as colunas da tabela. O Snowflake associa políticas às tabelas usando os IDs de coluna.

    • Para avaliar e aplicar expressões da política de ciclo de vida de armazenamento, o Snowflake ignora as políticas de governança em uma tabela de maneira interna e temporária.

Sintaxe da variante: Tabela interativa estática

Cria uma tabela interativa estática que é preenchida uma única vez a partir da consulta de origem:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

Sintaxe da variante: Tabela interativa dinâmica

Cria uma tabela interativa dinâmica que é atualizada automaticamente com base no tempo de atraso especificado:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  WAREHOUSE = <warehouse_name>
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

As tabelas interativas dinâmicas são atualizadas automaticamente para permanecerem dentro do TARGET_LAG especificado dos dados de origem, usando o warehouse padrão especificado para operações de atualização.

Exemplos

Os exemplos a seguir mostram diferentes maneiras de criar tabelas interativas, além de especificar a origem dos dados e como atualizá-los.

Tabela interativa estática básica

Crie uma tabela interativa estática a partir de dados de pedidos existentes, agrupados por cliente e data para otimizar o desempenho das consultas:

CREATE INTERACTIVE TABLE orders_interactive
  CLUSTER BY (customer_id, order_date)
  COMMENT = 'Interactive table for real-time order analytics'
AS
  SELECT customer_id, order_date, product_id, quantity, total_amount
  FROM orders_staging
  WHERE order_date >= '2024-01-01';
Copy

Tabela interativa dinâmica com atualização automática

Crie uma tabela interativa dinâmica que é atualizada a cada cinco minutos para fornecer resumos de vendas quase em tempo real:

CREATE INTERACTIVE TABLE sales_summary_interactive
  CLUSTER BY (region, product_category)
  TARGET_LAG = '5 minutes'
  WAREHOUSE = refresh_warehouse
  COMMENT = 'Real-time sales dashboard data'
AS
  SELECT
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count,
    AVG(sales_amount) as avg_sale
  FROM sales_data
  GROUP BY region, product_category;
Copy

Clustering de várias colunas para consultas complexas

Crie uma tabela interativa com clustering de várias colunas otimizado para diversos padrões de consulta:

CREATE INTERACTIVE TABLE customer_analytics_interactive
  CLUSTER BY (customer_tier, region, signup_date)
  TARGET_LAG = '10 minutes'
  WAREHOUSE = analytics_warehouse
AS
  SELECT
    customer_id,
    customer_tier,
    region,
    signup_date,
    total_orders,
    lifetime_value,
    last_order_date
  FROM customer_metrics
  WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
Copy

Substituir uma tabela interativa existente

Substitua uma tabela interativa existente com configurações de atualização e clustering atualizadas:

CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
  CLUSTER BY (category, brand, launch_date)
  TARGET_LAG = '2 minutes'
  WAREHOUSE = fast_refresh_warehouse
  COPY GRANTS
AS
  SELECT
    product_id,
    category,
    brand,
    launch_date,
    units_sold,
    revenue,
    customer_rating
  FROM product_sales_view
  WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());
Copy