Criação de tabelas híbridas¶
Este tópico fornece uma visão geral sobre a criação de tabelas híbridas no Snowflake.
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.
Opções CREATE HYBRID TABLE¶
Você pode criar uma tabela híbrida usando um dos seguintes comandos SQL:
CREATE HYBRID TABLE. Este exemplo cria uma tabela híbrida, insere algumas linhas nela, exclui uma linha e consulta a tabela:
CREATE OR REPLACE HYBRID TABLE icecream ( id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1, col1 VARCHAR NOT NULL, col2 VARCHAR NOT NULL ); 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 icecream SET col2 = 'B3-updated' WHERE id = 3; DELETE FROM icecream WHERE id = 4; SELECT * FROM icecream;
CREATE HYBRID TABLE … AS SELECT (CTAS) ou CREATE HYBRID TABLE … LIKE. Por exemplo:
CREATE OR REPLACE HYBRID TABLE table1 ( employee_id INT PRIMARY KEY, department_id VARCHAR(200) ) AS SELECT * FROM table2;
Carregamento de dados¶
Nota
Como o armazenamento primário para tabelas híbridas é um armazenamento de linhas, as tabelas híbridas normalmente têm uma área de armazenamento maior do que as tabelas padrão. O principal motivo para a diferença é que dados em colunas para tabelas padrão geralmente atingem taxas mais altas de compressão. Para obter detalhes sobre custos de armazenamento, consulte Avaliar custo para tabelas híbridas.
Você pode carregar dados em massa em tabelas híbridas copiando de um estágio de dados ou de outras tabelas (ou seja, usando CTAS, COPY ou INSERT INTO … SELECT), mas carregar os dados em massa em uma tabela híbrida usando uma instrução CTAS é extremamente recomendado. O carregamento em massa com CTAS é otimizado para desempenho e permite que grandes cargas (vários milhões de registros) sejam executadas aproximadamente 10 vezes mais rápido do que outras opções, na maioria dos casos.
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. Consultas em dados carregados recentemente também sã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
Comandos CTAS não aceitam restrições de chave estrangeira. Se você precisar usar restrições de chave estrangeira em sua tabela híbrida, use outra opção de carregamento, como COPY ou INSERT INTO … SELECT.
Se os seus dados de origem existirem em um estágio externo, e não em uma tabela Snowflake, use a seguinte sintaxe:
CREATE TABLE ... AS SELECT * FROM @stage/data.csv
Evite usar esta sintaxe:
COPY FROM @stage/data.csv
A opção CTAS é o método de carregamento mais eficiente.
Quando você não estiver usando CTAS, você conseguirá 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.
Quando índices são criados nas colunas de uma tabela híbrida, especialmente índices em um grande número de colunas, qualquer comando que carregue a tabela (incluindo CTAS, COPY ou INSERT INTO … SELECT) pode retornar o seguinte erro:
The value is too long for index "IDX_HT100_COLS".
onde IDX_HT100_COLS
é o nome de um índice na tabela que está sendo criada.
Esse erro ocorre porque o armazenamento baseado em linhas impõe um limite no tamanho dos dados (e metadados) que podem ser armazenados por registro. Para reduzir o tamanho do registro, tente criar a tabela sem especificar colunas maiores (por exemplo, colunas largas VARCHAR) como colunas indexadas.
Você também pode tentar criar a tabela usando colunas INCLUDE em índices secundários em vez de indexar diretamente as colunas. Para um exemplo simples, consulte Crie um índice secundário com uma coluna INCLUDE.
Nota
Outros métodos de carregamento de dados em tabelas Snowflake (por exemplo, Snowpipe) não são suportados atualmente.
Como adicionar índices a uma tabela híbrida¶
Você pode definir 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);
Opcionalmente, você pode criar um índice para uma tabela híbrida existente usando CREATE INDEX. Use este comando para adicionar um índice a uma tabela híbrida que está sendo usada ativamente para uma carga de trabalho e está atendendo consultas ou tem chaves estrangeiras. CREATE INDEX irá construir um índice simultaneamente sem bloquear a tabela durante a operação.
No entanto, se seu aplicativo de tabela híbrida estiver no modo de desenvolvimento ou teste, e algum tempo de inatividade para a tabela não for um problema, é mais eficiente recriar a tabela híbrida e criar os índices dentro do comando CTAS. O caminho rápido de carregamento em massa que o comando CTAS fornece é mais eficiente do que a construção de índice online com o comando CREATE INDEX.
Uma tabela híbrida requer uma chave primária exclusiva. Os dados da tabela 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 com esses atributos. Os índices podem ser aproveitados para os 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.