Transações e tabelas Apache Iceberg™

Este tópico fornece informações sobre como o Snowflake trata especificamente transações para tabelas Apache Iceberg™. As regras descritas no tópico Transações do Snowflake também se aplicam às tabelas Iceberg.

Tabelas que usam o Snowflake como o catálogo

Para uma tabela que usa o Snowflake como catálogo, o Snowflake gerencia os metadados Iceberg para que outros mecanismos de consulta, como o Spark, possam ler a tabela.

Consultas

Quando você usa o Snowflake para consultar esse tipo de tabela, a tabela segue os princípios gerais de transação do Snowflake.

Atualmente, o Snowflake oferece suporte ao isolamento de leitura confirmada para transações para uma melhor simultaneidade e rendimento, enquanto o Iceberg oferece suporte ao isolamento em séries ou de snapshots.

Instruções DDL

O Snowflake processa instruções DDL como transações individuais e não isola instruções DDL em várias transações simultâneas. Para mais informações, consulte DDL em transações implícitas.

Isso difere de como as tabelas Iceberg normalmente tratam transações com instruções DDL, onde uma única transação confirmada pode incluir instruções DML e DDL ou várias instruções DDL agrupadas.

Nota

  • Os metadados do Iceberg nem sempre mostram uma nova versão do esquema para cada alteração DDL individual. Em alguns casos, o Snowflake agrupa instruções DDL e registra o grupo como uma única nova versão de esquema nos metadados do Iceberg.

  • As alterações DDL podem aparecer fora de ordem nos metadados do Iceberg, especialmente se uma alteração DDL ocorrer próxima a outras operações DDL ou DML.

Grava a partir de mecanismos externos em tabelas gerenciadas pelo Snowflake

Atualmente, o Snowflake não oferece suporte a gravações em tabelas gerenciadas pelo Snowflake a partir de mecanismos de consulta externos, como o Spark.

Tabelas que usam um catálogo externo

Para uma tabela Iceberg que usa um catálogo externo, o Snowflake recupera o estado mais recente da tabela do catálogo externo quando você executa o comando ALTER ICEBERG TABLE … REFRESH.

Atualizar transações

O Snowflake confirma automaticamente as instruções ALTER ICEBERG TABLE … REFRESH dentro de uma transação de instrução única.

Em uma transação implícita, o Snowflake processa a instrução da mesma forma que trata qualquer outra instrução quando AUTOCOMMIT está habilitado.

Em uma transação explícita (com múltiplas instruções), o Snowflake executa e confirma automaticamente a atualização como uma transação de instrução única antes de confirmar o bloco de transação explícita.

Grava em tabelas gerenciadas externamente

Atualmente, o Snowflake não oferece suporte a gravações em tabelas gerenciadas externamente.

Transações com várias instruções.

O Snowflake oferece suporte a transações com múltiplas instruções, confirmando várias instruções DML atomicamente e usando a seguinte lógica:

  • Cada instrução DDL é executada como uma transação individual quando encontrada.

  • Cada operação ALTER ICEBERG TABLE … REFRESH é executada como uma única transação quando encontrada.

  • Todas as outras instruções dentro de uma transação explícita ou implícita são agrupadas e confirmadas como uma única transação

Considere o seguinte exemplo de um bloco de transação explícita para uma tabela Iceberg no Snowflake:

BEGIN
  INSERT INTO table1 VALUES (1, "One");
  INSERT INTO table1 VALUES (2, "Two");
  ALTER ICEBERG TABLE table1 ALTER COLUMN c3 SET DATA TYPE ARRAY(long);
  INSERT INTO table1 VALUES (3, "Three");
  INSERT INTO table1 VALUES (4, "Four");
COMMIT;
Copy
  1. Quando o Snowflake encontra a instrução ALTER ICEBERG TABLE, ele confirma as duas primeiras instruções INSERT INTO TABLE (tudo processado até agora) como uma transação.

  2. O Snowflake então confirma a instrução ALTER ICEBERG TABLE como uma transação separada.

  3. Por fim, o Snowflake cria uma nova transação e processa as instruções INSERT INTO restantes. Como o restante do bloco não contém instruções DDL ou de atualização, ele confirma as transações restantes no final do bloco (em COMMIT).