Como trabalhar com tabelas temporárias e transitórias

Além das tabelas permanentes, que é o tipo de tabela padrão ao criar tabelas, o Snowflake suporta a definição de tabelas como temporárias ou transitórias. Estes tipos de tabelas são especialmente úteis para armazenar dados que não precisam ser mantidos por longos períodos de tempo (ou seja, dados transitórios).

Neste tópico:

Tabelas temporárias

O Snowflake suporta a criação de tabelas temporárias para armazenar dados não permanentes, transitórios (por exemplo, dados ETL, dados específicos da sessão). As tabelas temporárias só existem dentro da sessão em que foram criadas e persistem apenas para o restante da sessão. Como tal, elas não são visíveis para outros usuários ou sessões. Uma vez terminada a sessão, os dados armazenados na tabela são limpos completamente do sistema e, portanto, não são recuperáveis, seja pelo usuário que criou a tabela, seja pelo Snowflake.

Nota

Além das tabelas, o Snowflake suporta a criação de alguns outros objetos de banco de dados como objetos temporários (por exemplo, estágios). Estes objetos seguem a mesma semântica (ou seja, são baseados na sessão, persistindo apenas para o restante da sessão).

Uso de armazenamento de dados para tabelas temporárias

Durante a existência de uma tabela temporária, os dados armazenados na tabela contribuem para as cobranças gerais de armazenamento que o Snowflake aplica à sua conta. Para evitar qualquer mudança inesperada no armazenamento, particularmente se você criar grandes tabelas temporárias em sessões mantidas por períodos maiores que 24 horas, a Snowflake recomenda descartar explicitamente estas tabelas quando não forem mais necessárias. Você também pode sair explicitamente da sessão em que a tabela foi criada para garantir que não sejam acumuladas cobranças adicionais.

Para obter mais informações, consulte Comparação de tipos de tabela (neste tópico).

Potenciais conflitos de nomenclatura com outros tipos de tabela

Semelhante aos outros tipos de tabelas (transitórias e permanentes), as tabelas temporárias pertencem a um banco de dados e esquema específicos; entretanto, por serem baseadas em sessões, não estão vinculadas às mesmas exigências de exclusividade. Isto significa que você pode criar tabelas temporárias e não temporárias com o mesmo nome dentro do mesmo esquema.

Entretanto, observe que a tabela temporária tem precedência na sessão sobre qualquer outra tabela com o mesmo nome no mesmo esquema. Isto pode levar a conflitos potenciais e comportamentos inesperados, particularmente ao executar DDL tanto em tabelas temporárias quanto em tabelas não temporárias. Por exemplo:

  • Você pode criar uma tabela temporária que tenha o mesmo nome que uma tabela existente no mesmo esquema, ocultando efetivamente a tabela existente.

  • Você pode criar uma tabela que tenha o mesmo nome de uma tabela temporária existente no mesmo esquema; no entanto, a tabela recém-criada fica oculta pela tabela temporária.

Posteriormente, todas as consultas e outras operações realizadas na sessão sobre a tabela afetam apenas a tabela temporária.

Importante

Este comportamento é particularmente importante quando se descarta uma tabela em uma sessão e depois se usa o Time Travel para restaurar a tabela. Também é importante notar este comportamento ao usar CREATE OR REPLACE para criar uma tabela, porque isto essencialmente descarta uma tabela (se ela existir) e cria uma nova tabela com a definição especificada.

Criação de uma tabela temporária

Para criar uma tabela temporária, basta especificar a palavra-chave TEMPORARY (ou a abreviação TEMP) em CREATE TABLE.

Note que a criação de uma tabela temporária não requer o privilégio CREATE TABLE para o esquema em que o objeto é criado.

Por exemplo:

CREATE TEMPORARY TABLE mytemptable (id NUMBER, creation_date DATE);
Copy

Nota

Após a criação, as tabelas temporárias não podem ser convertidas em nenhum outro tipo de tabela.

Tabelas transitórias

O Snowflake suporta a criação de tabelas transitórias que persistem até serem descartadas explicitamente e que estão disponíveis a todos os usuários com os privilégios apropriados. As tabelas transitórias são semelhantes às tabelas permanentes, com a diferença fundamental de que não têm um período de Fail-safe. Como resultado, as tabelas transitórias são projetadas especificamente para dados transitórios que precisam ser mantidos além de cada sessão (ao contrário das tabelas temporárias), mas não precisam do mesmo nível de proteção e recuperação de dados fornecidos pelas tabelas permanentes.

Uso de armazenamento de dados para tabelas transitórias

Semelhante às tabelas permanentes, as tabelas transitórias contribuem para as cobranças gerais de armazenamento que o Snowflake aplica à sua conta; entretanto, como as tabelas transitórias não utilizam o Fail-safe, não há custos de Fail-safe (ou seja, os custos associados à manutenção dos dados necessários para a recuperação de desastres do Fail-safe).

Para obter mais informações, consulte Comparação de tipos de tabela (neste tópico).

Tabelas transitórias criadas como clones de tabelas permanentes

Quando você cria uma tabela transitória como um clone de uma tabela permanente, o Snowflake cria um clone zero-copy. Isso significa que quando a tabela transitória é criada, ela não utiliza armazenamento de dados porque compartilha todas as micropartições existentes da tabela permanente original. Quando linhas são adicionadas, excluídas ou atualizadas no clone, isso resulta em novas micropartições que pertencem exclusivamente ao clone (neste caso, a tabela transitória).

Quando uma tabela permanente é excluída, ela entra em Fail-safe por um período de 7 dias. Bytes do Fail-safe incorrem em custos de armazenamento. Se uma tabela transitória for criada como um clone de uma tabela permanente, isso poderá atrasar o tempo entre o momento em que a tabela permanente é excluída e o momento em que todos os seus bytes entram no Fail-safe. Se o clone da tabela transitória compartilhar quaisquer micropartições com a tabela permanente quando ela for excluída, esses bytes compartilhados só entrarão no Fail-safe quando a tabela transitória for excluída.

Bancos de dados e esquemas transitórios

O Snowflake também suporta a criação de bancos de dados e esquemas transitórios. Todas as tabelas criadas em um esquema transitório, assim como todos os esquemas criados em um banco de dados transitório, são transitórios por definição.

Criação de uma tabela, esquema ou banco de dados transitório

Para criar uma tabela, esquema ou banco de dados transitório, basta especificar a palavra-chave TRANSIENT ao criar o objeto:

Por exemplo, para criar uma tabela transitória:

CREATE TRANSIENT TABLE mytranstable (id NUMBER, creation_date DATE);
Copy

Nota

Após a criação, as tabelas transitórias não podem ser convertidas em nenhum outro tipo de tabela.

Comparação dos tipos de tabela

A tabela a seguir resume as diferenças entre os três tipos de tabela, particularmente no que diz respeito ao seu impacto no Time Travel e Fail-safe:

Tipo

Persistência

Clonagem (tipo de origem => tipo de destino)

Período de retenção Time Travel (dias)

Período do Fail-safe (dias)

Temporária

Restante da sessão

Temporária => Temporária . . Temporária => Transitória

0 ou 1 (o padrão é 1)

0

Transitória

Até descartada explicitamente

Transitória => Temporária . . Transitória => Transitória

0 ou 1 (o padrão é 1)

0

Permanente (Standard Edition)

Até descartada explicitamente

Permanente => Temporária . . Permanente => Transitória . . Permanente => Permanente

0 ou 1 (o padrão é 1)

7

Permanente (Enterprise Edition e superior)

Até descartada explicitamente

Permanente => Temporária . . Permanente => Transitória . . Permanente => Permanente

0 a 90 (o padrão é configurável)

7

Notas do Time Travel

  • O período de retenção do Time Travel para uma tabela pode ser especificado quando a tabela é criada ou a qualquer momento posterior. Dentro do período de retenção, todas as operações do Time Travel podem ser realizadas sobre os dados da tabela (por exemplo, consultas) e da própria tabela (por exemplo, clonagem e restauração).

  • Se o período de retenção do Time Travel para uma tabela permanente for definido como 0, ela entrará imediatamente no período de Fail-safe quando for descartada.

  • As tabelas temporárias podem ter um período de retenção do Time Travel de 1 dia; entretanto, uma tabela temporária é limpa assim que a sessão (na qual a tabela foi criada) termina, de modo que o período de retenção real é de 24 horas ou o restante da sessão, o que for mais curto.

  • Uma consulta do Time Travel de longa duração retardará a remoção em tabelas temporárias e transitórias até que a consulta seja concluída.

Notas do Fail-safe

  • O período do Fail-safe não é configurável para nenhum tipo de tabela.

  • As tabelas transitórias e temporárias não têm período de Fail-safe. Como resultado, nenhuma cobrança adicional de armazenamento de dados é incorrida além do período de retenção do Time Travel.

Importante

Como as tabelas transitórias não têm um período de Fail-safe, elas oferecem uma boa opção para gerenciar o custo de tabelas muito grandes usadas para armazenar dados transitórios; no entanto, os dados nessas tabelas não podem ser recuperados após a passagem do período de retenção do Time Travel.

Por exemplo, se ocorrer uma falha no sistema na qual uma tabela transitória é descartada ou perdida, após 1 dia, os dados não podem ser recuperados por você ou pelo Snowflake. Como tal, recomendamos o uso de tabelas transitórias apenas para dados que não precisam ser protegidos contra falhas ou dados que podem ser reconstruídos fora do Snowflake.

Para obter mais informações, consulte Considerações sobre armazenamento de dados.