Pular para o conteúdo principal

Use o recurso Apache Iceberg v3

O Apache Iceberg v3 aprimora o desempenho de query e introduz novos recursos para tabelas gerenciadas usando Iceberg ou Delta Lake com leituras Iceberg no Unity Catalog.

Os key recursos do Iceberg v3 são:

Requisitos

Para usar tabelas gerenciadas com recursos do Iceberg v3, como tipos geoespaciais, você deve atender aos seguintes requisitos:

  • Um workspace com o Unity Catalog habilitado.
  • Databricks Runtime 18 LTS e acima.

Crie uma nova tabela com o Iceberg v3

Crie novas tabelas com o Iceberg v3 habilitado tanto para tabelas Delta Lake gerenciadas com leituras Iceberg quanto para tabelas Iceberg gerenciadas.

Para criar uma nova tabela gerenciada usando Delta Lake com leituras Iceberg e Iceberg v3 ativados, use o seguinte comando SQL:

SQL
CREATE OR REPLACE TABLE main.schema.table (c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableIcebergCompatV3' = 'true'
);

Para obter mais informações sobre leituras do Iceberg, consulte Ler tabelas Delta Lake com clientes Iceberg.

Atualize uma tabela existente para Iceberg v3.

Você pode atualizar uma tabela existente para o Iceberg v3 da seguinte forma:

  1. Habilitar qualquer recurso da versão 3 em uma tabela.
  2. Definindo a versão do formato Iceberg em uma tabela para 3 (mostrada abaixo).
info

As tabelas podem ser rebaixadas da versão 3 para a versão 2 restaurando a tabela para uma versão anterior à atualização para a versão 3 usando RESTORE. Consulte Fazer downgrade de uma tabela para uma versão anterior.

Para atualizar uma tabela gerenciada usando Delta Lake com leituras de Iceberg para a v3, use o seguinte comando:

SQL
ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.enableIcebergCompatV2' = 'false'
);

Habilitar vetores de exclusão

Os vetores de exclusão otimizam as operações de modificação de dados em nível de linha e estão ativados por default em todas as novas tabelas Iceberg v3. Consulte Vetores de exclusão no Databricks.

nota

Habilitar vetores de exclusão em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.

Para criar uma nova tabela gerenciada usando Delta Lake com leituras Iceberg, Iceberg v3 e vetores de exclusão ativados, defina as seguintes propriedades de tabela:

SQL
CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
'delta.enableDeletionVectors' = 'true',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Use o tipo de dados VARIANT.

O tipo de dados VARIANT permite armazenar e consultar dados semiestruturados.

nota

Usar VARIANT em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.

Para criar uma nova tabela gerenciada usando Delta Lake com leituras Iceberg e uma coluna VARIANT:

SQL
CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Para adicionar uma coluna VARIANT a uma tabela existente, use o comando ALTER TABLE :

SQL
ALTER TABLE catalog.schema.table ADD COLUMN variant_col VARIANT;

Use tipos de dados GEOMETRY e GEOGRAPHY

Use os tipos de dados GEOMETRY e GEOGRAPHY para armazenar e consultar dados geoespaciais. Veja tipoGEOMETRY e tipoGEOGRAPHY.

nota

O uso de GEOMETRY ou GEOGRAPHY em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.

Para criar uma nova tabela gerenciada usando o Delta Lake com leituras do Iceberg e colunas GEOMETRY ou GEOGRAPHY:

SQL
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Para adicionar uma coluna GEOMETRY ou GEOGRAPHY a uma tabela existente, use o comando ALTER TABLE:

SQL
ALTER TABLE catalog.schema.table ADD COLUMN geom_col GEOMETRY(3857);
ALTER TABLE catalog.schema.table ADD COLUMN geog_col GEOGRAPHY(4326);

Criar uma tabela com default de gravação

O Iceberg v3 define dois tipos de valores default:

  • Padrões de gravação aplicam-se a novas linhas quando uma gravação omite a coluna correspondente. O Databricks oferece suporte a padrões de gravação.
  • Padrões iniciais aplicam-se a linhas preexistentes quando uma nova coluna é adicionada. O Databricks não oferece suporte a padrões iniciais.

Para criar uma nova tabela gerenciada usando Delta Lake com leituras do Iceberg e um default de gravação:

SQL
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Para ver o default aplicado, insira uma linha sem row_status:

SQL
INSERT INTO catalog.schema.table (id) VALUES (1);
SELECT * FROM catalog.schema.table;

A query anterior retorna o seguinte, com o default aplicado a row_status:

Output
id  row_status
1 active

Reverter uma tabela para uma versão anterior do Apache Iceberg.

Se você precisar reverter uma tabela para um estado anterior à atualização para o Iceberg v3, você pode usar o comando RESTORE .

SQL
set spark.databricks.delta.restore.protocolDowngradeAllowed = true;
RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;
set spark.databricks.delta.restore.protocolDowngradeAllowed = false;

Limitações

O Databricks é compatível com a versão 3 da especificação Iceberg, com as seguintes exceções:

  • Defaults iniciais não são aceitos. Quando uma nova coluna é adicionada, um default inicial define o valor para as linhas preexistentes.

  • Os seguintes tipos de dados não são suportados:

    • Tipo desconhecido
    • Carimbo de data/hora com precisão de nanossegundos.
  • Transformações com múltiplos argumentos não são suportadas.