Conversão de uma tabela Iceberg¶
Este tópico fornece informações sobre como converter uma tabela Iceberg que não é gerenciada pelo Snowflake em uma tabela que usa o Snowflake como catálogo Iceberg.
Você pode optar por converter uma tabela quando desejar suporte completo à plataforma Snowflake, incluindo suporte para SDK do catálogo Iceberg do Snowflake.
Para saber mais sobre as diferenças entre os tipos de tabela Iceberg, consulte Opções de catálogo Iceberg.
Antes e depois da conversão da tabela¶
Quando você converte uma tabela Iceberg para usar o Snowflake como catálogo, a tabela se torna gravável e o Snowflake assume o gerenciamento do ciclo de vida dela.
A tabela a seguir compara as tabelas Iceberg antes e depois da conversão:
Antes da conversão |
Depois da conversão |
|
---|---|---|
Catálogo Iceberg |
Um catálogo externo (como AWS Glue) ou nenhum catálogo. Exige uma integração de catálogo. |
Snowflake. Snowflake registra alterações nos dados de origem e registra as alterações no catálogo Snowflake. O Snowflake então atualiza os metadados da tabela no seu volume externo. Não exige integração de catálogo. |
Operações de leitura do Snowflake |
✔ |
✔ |
Operações de gravação do Snowflake |
❌ |
✔ |
Local de armazenamento para dados e metadados da tabela |
Volume externo (armazenamento externo em nuvem). |
Volume externo (armazenamento em nuvem externo) em um local base especificado. |
Limpeza de dados e metadados |
Gerenciado por você ou por seu catálogo externo. |
Snowflake does not touch any externally generated data and metadata files. |
Acessível do SDK do catálogo Iceberg do Snowflake |
❌ |
✔ |
Importante
When you convert an Iceberg table, Snowflake doesn’t lock down or assume sole access to your external storage. To prevent table corruption, ensure that you monitor and/or stop any non-Snowflake writes (such as automated maintenance jobs) to your external storage location.
Requisitos¶
Antes de converter uma tabela Iceberg, certifique-se de que o Snowflake possa gravar em seu volume externo.
Para que o Snowflake grave em seu volume externo, as seguintes condições devem ser atendidas:
Use o comando ALTER ICEBERG TABLE … REFRESH para atualizar manualmente a tabela antes de convertê-la.
A propriedade
ALLOW_WRITES
do seu volume externo está definida comoTRUE
. Para atualizar o valor desta propriedade para um volume externo existente, use o comando ALTER EXTERNAL VOLUME. Por exemplo:ALTER EXTERNAL VOLUME my_ext_vol SET ALLOW_WRITES=TRUE
.As permissões de controle de acesso definidas na conta de armazenamento em nuvem devem permitir acesso de gravação. Por exemplo, se você usar um volume externo configurado para Amazon S3, sua função IAM deverá ter a permissão
s3:PutObject
para seu local S3.
Exemplo: conversão de uma tabela Iceberg¶
Este exemplo começa criando uma tabela Iceberg a partir de arquivos Iceberg no armazenamento de objetos. Snowflake usa o valor METADATA_FILE_PATH
para procurar os metadados da tabela no seguinte local para definições de coluna: <ext-vol-storage-base-url>/path/to/metadata/v1.metadata.json
.
CREATE ICEBERG TABLE myIcebergTable
EXTERNAL_VOLUME='icebergMetadataVolume'
CATALOG='icebergCatalogInt'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Em seguida, use o comando ALTER ICEBERG TABLE … REFRESH para sincronizar os metadados da tabela com o arquivo de metadados mais recente. O comando de exemplo a seguir atualiza a tabela especificando um caminho de arquivo de metadados.
ALTER ICEBERG TABLE myIcebergTable REFRESH 'metadata/v2.metadata.json';
Finally, convert the table to use Snowflake as the Iceberg catalog by using a ALTER ICEBERG TABLE … CONVERT TO MANAGED command.
ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
BASE_LOCATION = myBaseLocation;
Nota
Neste exemplo, a instrução ALTER deve especificar um BASE_LOCATION
porque a tabela foi criada a partir de arquivos Iceberg no armazenamento de objetos e BASE_LOCATION
não fazia parte da instrução CREATE ICEBERG TABLE original. O BASE_LOCATION
define o caminho relativo do seu volume externo para um diretório onde o Snowflake grava dados e metadados da tabela convertida.
Caso contrário, se BASE_LOCATION
foi especificado na instrução CREATE ICEBERG TABLE original, não será necessário incluí-lo no comando ALTER ICEBERG TABLE … CONVERT TO MANAGED.
Por exemplo, o Snowflake grava dados da tabela em <ext-vol-storage-base-url>/myBaseLocation/data/
.
Snowflake grava metadados da tabela convertida em <ext-vol-storage-base-url>/myBaseLocation/metadata/
.
Conversão e tipos de dados¶
If you convert a table with an Iceberg data type that Snowflake doesn’t support, Snowflake uses a Snowflake data type to process and return values. However, Snowflake writes the original Iceberg data type to the table data files so that you can use the table with other compute engines like Apache Spark.
For data types such as int
and long
, the data type that Snowflake uses for processing supports a larger range of values than the source data type.
To stay consistent with the source data type, Snowflake does not allow inserting values outside the range that the
source data type supports.
For example, consider a table with a column of Iceberg type int
. After conversion, Snowflake processes the column values
using the Snowflake data type NUMBER(10,0). NUMBER(10,0) has a range of (-9,999,999,999, +9,999,999,999), but int
has a
more limited range of (-2,147,483,648, +2,147,483,647). If you try to insert a value of 3,000,000,000 into that column, Snowflake
returns an out-of-range error message.
For more information about data types, including limitations, see Tipos de dados da tabela Iceberg.