Criação de uma tabela híbrida

Este tópico fornece uma visão geral sobre a criação de tabelas híbridas no Snowflake.

Criação de uma tabela híbrida

Você pode criar uma tabela híbrida usando comandos SQL de uma das seguintes maneiras:

-- Create hybrid table
CREATE OR REPLACE HYBRID TABLE icecream (
  id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1,
  col1 VARCHAR NOT NULL,
  col2 VARCHAR NOT NULL
);

-- Insert data into hybrid table
INSERT INTO icecream VALUES(1, 'A1', 'B1');
INSERT INTO icecream VALUES(2, 'A2', 'B2');
INSERT INTO icecream VALUES(3, 'A3', 'B3');
INSERT INTO icecream VALUES(4, 'A4', 'B4');

-- Update data in hybrid table
UPDATE icecream SET col2 = 'B3-updated' WHERE id = 3;

-- Delete data from hybrid table
DELETE FROM icecream WHERE id = 4;

-- Select data from hybrid table
SELECT * FROM icecream;
Copy
  • Use a sintaxe variante CREATE HYBRID TABLE ... AS SELECT e CREATE HYBRID TABLE ... LIKE. Consulte CREATE HYBRID TABLE. Por exemplo:

CREATE OR REPLACE HYBRID TABLE table1 (
  employee_id INT PRIMARY KEY,
  department_id VARCHAR(200)
) as
SELECT * FROM table2;
Copy

Carregamento de dados

Nota

Para criar uma tabela híbrida, você deve ter um warehouse em execução especificado como o warehouse atual da sua sessão. Podem ocorrer erros se nenhum warehouse em execução for especificado ao criar uma tabela híbrida. Para obter mais informações, consulte Como trabalhar com warehouses.

Você pode carregar dados em massa em tabelas híbridas copiando de um estágio de dados ou de outras tabelas (ou seja, usando CREATE TABLE … AS SELECT, COPY ou INSERT INTO … SELECT), mas carregar os dados em massa em uma tabela híbrida usando uma instrução CREATE TABLE … AS SELECT é altamente recomendado. O carregamento em massa é otimizado para desempenho e permite que operações CREATE TABLE… AS SELECT sejam aproximadamente 10 vezes mais rápidas do que outras opções, na maioria dos casos, ao carregar vários milhões de registros.

O carregamento em massa via INSERT ou COPY também é compatível, mas o carregamento de dados é mais lento para grandes quantidades de dados. Você pode enfrentar longos tempos de espera ou até mesmo tempos limite ao carregar grandes conjuntos de dados. As consultas aos dados carregados recentemente também serão mais lentas. A otimização do carregamento em massa para instruções DML como COPY está planejada para um futuro próximo.

Atenção

CREATE TABLE … AS SELECT não oferece suporte a restrições de chave estrangeira. Se você precisar usar restrições de chave estrangeira em sua tabela híbrida, precisará usar outra opção, como COPY ou INSERT INTO… SELECT.

Se os dados de origem existirem em um estágio externo em vez de uma tabela Snowflake, use CREATE TABLE ... AS SELECT * FROM @stage/data.csv em vez de COPY FROM @stage/data.csv para se beneficiar do método de carregamento mais eficiente.

Ao não usar CREATE TABLE … AS SELECT, você poderá carregar até aproximadamente 1 milhão de registros por minuto. Mas observe que essa aproximação depende da estrutura da tabela (por exemplo, do tamanho dos registros, onde registros maiores demoram mais para carregar). Se suas operações de carregamento estiverem demorando muito e falhando, teste com um conjunto de dados menor ou divida suas cargas em partes menores.

Nota

Outros métodos de carregamento de dados em tabelas Snowflake (por exemplo, Snowpipe) não são suportados atualmente.

Adição de um índice a uma tabela híbrida

Você pode definir todas as chaves, índices e restrições ao criar uma tabela híbrida. Por exemplo:

CREATE OR REPLACE HYBRID TABLE targethybridtable (
  col1 VARCHAR(32) PRIMARY KEY,
  col2 NUMBER(38,0) UNIQUE,
  col3  NUMBER(38,0),
    INDEX index_col3 (col3))
AS
  (SELECT
     col1,
     col2,
     col3
   FROM sourcetable);
Copy

Ao adicionar um índice a uma tabela híbrida existente, é recomendável recriar a tabela híbrida.

Opcionalmente, você pode criar um índice para uma tabela híbrida existente usando CREATE INDEX. Ao adicionar um índice a uma tabela híbrida existente que está sendo usada para uma carga de trabalho, use CREATE INDEX. CREATE INDEX irá construir um índice simultaneamente sem que a tabela seja bloqueada durante a operação.

Uma tabela híbrida requer uma chave primária exclusiva. Os dados da sua tabela híbrida são ordenados por esta chave primária. Você pode adicionar índices secundários adicionais a atributos de chave não primários para acelerar pesquisas ao longo desse atributo. Os índices podem ser aproveitados para predicados =, >, >=, <, <=, IN para reduzir o número de registros a serem verificados.

Atenção

Para adicionar um índice secundário, você deve usar uma função que receba o privilégio SELECT na tabela híbrida. Se você tiver acesso a uma exibição dos dados na tabela híbrida, mas não à tabela em si, não será possível adicionar um índice secundário.

Se você tiver consultas comuns e repetidas com predicados em um atributo específico ou em um grupo composto de atributos, considere adicionar um índice a esse atributo ou grupo de atributos para melhorar o desempenho. Mas esteja ciente das seguintes considerações ao usar índices:

  • Aumento no consumo de armazenamento ao armazenar cópias adicionais do subconjunto de dados no índice.

  • Adição de sobrecarga a DMLs porque os índices são mantidos de forma síncrona.