CREATE INTERACTIVE TABLE

Cria uma nova tabela interativa no esquema atual/especificado ou substitui uma tabela existente. As tabelas interativas são otimizadas para consultas interativas de baixa latência e oferecem o melhor desempenho quando consultadas usando warehouses interativos.

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>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  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 , ... ] )

Obrigatório. Especifica uma ou mais colunas ou expressões de coluna na tabela como chave de clustering. Escolha colunas de clustering que sejam utilizadas nas cláusulas WHERE de suas consultas mais urgentes, pois isso afeta significativamente o desempenho da consulta.

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

AS query

Obrigatório. Especifica a instrução SELECT que preenche a tabela interativa. Esta consulta deve ser especificada por último na instrução CREATE INTERACTIVE TABLE, independentemente de outros parâmetros incluídos.

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

Parâmetros opcionais

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.

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.

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.

  • Tabelas interativas estáticas exigem atualização manual para serem atualizadas com novos dados das tabelas de origem.

  • 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.

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

Tabelas interativas estáticas não são atualizadas automaticamente e exigem atualizações manuais para refletir as alterações nos dados de origem.

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