Tipos de dados para tabelas Apache Iceberg™

O Snowflake oferece suporte à maioria dos tipos de dados definidos pela especificação Apache Iceberg™ e grava tipos de dados Iceberg em arquivos de tabela para que suas tabelas Iceberg permaneçam interoperáveis entre diferentes mecanismos de computação quando você usa o Snowflake como catálogo.

Para obter uma visão geral dos tipos de dados Iceberg compatíveis com o Snowflake, consulte Tipos de dados suportados.

Tipos aproximados

Se a sua tabela usar um tipo de dados Iceberg para o qual o Snowflake não oferece suporte a uma correspondência exata, o Snowflake usará um tipo Snowflake aproximado. Esse mapeamento de tipo afeta os valores das colunas para tabelas convertidas e tabelas Iceberg que usam Snowflake como catálogo.

Por exemplo, considere uma tabela com uma coluna do tipo Iceberg int. Snowflake processa os valores da coluna usando o tipo de dados Snowflake NUMBER(10,0).

NUMBER(10,0) tem um intervalo de (-9.999.999.999, +9.999.999.999), mas int tem um intervalo mais limitado de (-2.147.483.648, +2.147.483.647). Se você tentar inserir um valor de 3.000.000.000 nessa coluna, o Snowflake retornará uma mensagem de erro fora do intervalo.

Para obter detalhes sobre tipos aproximados, consulte as notas na tabela Tipos de dados suportados.

Tipos de dados suportados

As tabelas nesta seção mostram a relação entre os tipos de dados Iceberg e os tipos de dados Snowflake. Elas usam as seguintes colunas:

Tipo Iceberg:

O tipo de dados definido na especificação Apache Iceberg. Quando você usa o Snowflake como catálogo, o Snowflake grava o tipo Iceberg nos arquivos de dados da tabela para que as tabelas permaneçam interoperáveis entre diferentes mecanismos de computação.

Tipo de dados Snowflake:

O tipo de dados Snowflake usado para processar e retornar dados da tabela. Por exemplo, se seu esquema especificar o tipo Iceberg timestamp, o Snowflake processará e retornará valores usando o tipo de dados Snowflake TIMESTAMP_NTZ(6) com precisão de microssegundos.

Notas:

Notas de uso adicionais, incluindo notas para trabalhar com tipos aproximados.

Tipos numéricos

Snowflake como catálogo

A tabela a seguir mostra como os tipos de dados numéricos Iceberg são mapeados para os tipos de dados numéricos do Snowflake para tabelas que usam o Snowflake como o catálogo Iceberg (tabelas gerenciadas pelo Snowflake). Ao criar uma tabela Iceberg gerenciada pelo Snowflake, você pode usar os tipos de dados Iceberg para definir colunas numéricas.

Tipo de dados Iceberg

Tipo de dados do Snowflake

Notas

int (inteiro assinado de 32 bits)

NUMBER(10,0)

Inserir um número de 10 dígitos menor que o mínimo ou maior que o valor inteiro assinado de 32 bits máximo resulta em um erro fora do intervalo.

long (inteiro assinado de 64 bits)

NUMBER(19,0)

Inserir um número de 19 dígitos menor que o mínimo ou maior que o valor inteiro assinado de 64 bits máximo resulta em um erro fora do intervalo.

float (ponto flutuante precisão única 32 bits IEEE 754)

FLOAT

Sinônimo do tipo de dados Snowflake DOUBLE. Snowflake trata todos os números de ponto flutuante como números de ponto flutuante de 64 bits de precisão dupla, mas grava os números flutuantes Iceberg como números de ponto flutuante de 32 bits em arquivos de dados de tabela.

Reduzir as conversões de 64 bits para 32 bits resulta em perda de precisão.

Você não pode usar float ou double como chaves primárias (de acordo com o especificação do Apache Iceberg).

double (ponto flutuante de precisão dupla 64 bits IEEE 754)

FLOAT

Sinônimo do tipo de dados Snowflake DOUBLE. Snowflake trata todos os números de ponto flutuante como números de ponto flutuante de 64 bits de precisão dupla.

Reduzir as conversões de 64 bits para 32 bits resulta em perda de precisão.

Você não pode usar float ou double como chaves primárias (de acordo com o especificação do Apache Iceberg).

decimal(P,S)

NUMBER(P,S)

Especificar decimal(10,0) em vez de int cria um tipo decimal em Iceberg. O mesmo se aplica quando você especifica decimal(19,0).

Catálogo externo

Quando você cria uma tabela Iceberg que usa um catálogo Iceberg externo, os tipos numéricos Iceberg são mapeados para tipos numéricos Snowflake de acordo com a tabela a seguir.

Tipo de dados Iceberg

Tipo de dados do Snowflake

int (inteiro assinado de 32 bits)

NUMBER(10,0)

long (inteiro assinado de 64 bits)

NUMBER(19,0)

float (ponto flutuante precisão única 32 bits IEEE 754)

FLOAT

double (ponto flutuante de precisão dupla 64 bits IEEE 754)

FLOAT

decimal(P,S)

NUMBER(P,S)

Nota

Você não pode usar float ou double como chaves primárias (de acordo com o especificação do Apache Iceberg).

Outros tipos de dados

Tipo de dados Iceberg

Tipo de dados do Snowflake

Notas

boolean

BOOLEAN

date

DATE

time

TIME(6)

Precisão de microssegundos conforme especificação da tabela Apache Iceberg.

timestamp

TIMESTAMP_NTZ(6) ou TIMESTAMP_LTZ(6), dependendo do valor do parâmetro Snowflake TIMESTAMP_TYPE_MAPPING.

Precisão de microssegundos conforme especificação da tabela Apache Iceberg.

Você também pode usar o tipo físico Parquet int96 para carimbos de data/hora. O Snowflake traduz timestamp para microssegundos (conforme a especificação da tabela Apache Iceberg).

timestamptz

TIMESTAMP_LTZ(6)

Precisão de microssegundos conforme especificação da tabela Apache Iceberg.

Você também pode usar o tipo físico Parquet int96 para carimbos de data/hora. O Snowflake traduz timestamp para microssegundos (conforme a especificação da tabela Apache Iceberg).

string

VARCHAR(16777216)

uuid

BINARY(16)

O tipo de dados uuid não é compatível com tabelas que usam Snowflake como catálogo ou para tabelas convertidas.

Quando você usa um catálogo externo ou cria uma tabela a partir de arquivos no armazenamento de objetos, o Snowflake mapeia o tipo Iceberg uuid para o tipo BINARY(16) Snowflake.

struct

OBJECT estruturado

Colunas de tipo estruturado suportam no máximo 1.000 subcolunas.

list

ARRAY estruturada

Colunas de tipo estruturado suportam no máximo 1.000 subcolunas.

map

MAP

Colunas de tipo estruturado suportam no máximo 1.000 subcolunas.

Tipos de dados Delta

A tabela a seguir mostra como os tipos de dados Delta são mapeados para os tipos de dados Snowflake para tabelas Iceberg criadas a partir de arquivos de tabela Delta.

Tipo Delta

Tipo de dados do Snowflake

BYTE

NUMBER(3,0)

SHORT

NUMBER(5,0)

INTEGER

NUMBER(10,0)

LONG

NUMBER(20,0)

FLOAT

REAL

DOUBLE

REAL

TIMESTAMP

TIMESTAMP_LTZ(6)

TIMESTAMP_NTZ

TIMESTAMP_NTZ(6)

BINARY

BINARY

STRING

TEXT

BOOLEAN

BOOLEAN

DECIMAL(P,S)

NUMBER(P,S)

A tabela a seguir mostra como os tipos de dados Delta aninhados são mapeados para os tipos de dados do Snowflake.

Tipo Delta aninhado

Tipo de dados do Snowflake

STRUCT

OBJECT estruturado

ARRAY

ARRAY estruturado

MAP

MAP

Considerações

Considere os itens a seguir ao trabalhar com tipos de dados para tabelas Iceberg:

  • Não há suporte para a conversão de uma tabela com colunas que usam os seguintes tipos de dados Iceberg:

    • uuid

    • fixed(L)

  • Para tabelas que usam Snowflake como catálogo, não há suporte para a criação de uma tabela que use o tipo de dados Iceberg uuid.

  • Para todos os tipos de tabela Iceberg:

    • Colunas de tipo estruturado suportam no máximo 1.000 subcolunas.

    • Iceberg oferece suporte à precisão de microssegundos para tipos de hora e carimbo de data/hora. Como resultado, você não pode criar uma tabela Iceberg no Snowflake que use outra precisão, como milissegundo ou nanossegundo.

    • Você não pode usar float ou double como chaves primárias (de acordo com o especificação do Apache Iceberg).

  • Para tabelas criadas a partir de arquivos Delta:

    • Arquivos Parquet (arquivos de dados para tabelas Delta) que usam qualquer um dos seguintes recursos ou tipos de dados não são compatíveis:

      • Campo IDs.

      • O tipo de dados INTERVAL.

      • O tipo de dados DECIMAL com precisão maior que 38.

      • Os tipos LIST ou MAP com representação de um ou dois níveis.

      • Tipos inteiros sem sinal (INT(signed = false)).

      • O tipo de dados FLOAT16.