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 |
---|---|---|
|
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. |
|
|
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. |
|
|
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 |
|
|
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 |
|
|
Especificar |
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 |
---|---|
|
|
|
|
|
|
|
|
|
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 |
---|---|---|
|
||
|
||
|
Precisão de microssegundos conforme especificação da tabela Apache Iceberg. |
|
|
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 |
|
Precisão de microssegundos conforme especificação da tabela Apache Iceberg. Você também pode usar o tipo físico Parquet |
|
|
||
|
O tipo de dados 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 |
|
|
Colunas de tipo estruturado suportam no máximo 1.000 subcolunas. |
|
|
Colunas de tipo estruturado suportam no máximo 1.000 subcolunas. |
|
|
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 |
|
ARRAY |
|
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
oudouble
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.