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:
- Vetores de exclusão : ativam exclusões eficientes em nível de linha sem reescrever arquivos de dados inteiros. Consulte Vetores de exclusão no Databricks.
- Tipo de dados VARIANT : oferece suporte para armazenar e processar dados semiestruturados. Consulte Suporte para tipo variante para Apache Iceberg e Delta Lake.
- Linhagem da linha : rastreia alterações incrementais nos dados da tabela. Consulte Acompanhamento de linha no Databricks.
- Tipos de dados GEOMETRY e GEOGRAPHY : Armazene e query dados geoespaciais para analítica espacial e join. Veja tipo
GEOMETRYe tipoGEOGRAPHY. - Write default : especifique valores de coluna que se aplicam a novas linhas quando uma gravação omite uma coluna. Consulte Criar uma tabela com default de gravaçã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.
- Delta Lake with Iceberg reads
- Iceberg
Para criar uma nova tabela gerenciada usando Delta Lake com leituras Iceberg e Iceberg v3 ativados, use o seguinte comando 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.
Para criar uma nova tabela gerenciada usando Iceberg v3, use o seguinte comando SQL:
CREATE OR REPLACE TABLE main.schema.table (c1 INT)
USING iceberg
TBLPROPERTIES ('format-version' = 3);
Para obter mais informações sobre tabelas Iceberg, consulte O que é o Apache Iceberg no Databricks?.
Atualize uma tabela existente para Iceberg v3.
Você pode atualizar uma tabela existente para o Iceberg v3 da seguinte forma:
- Habilitar qualquer recurso da versão 3 em uma tabela.
- Definindo a versão do formato Iceberg em uma tabela para 3 (mostrada abaixo).
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.
- Delta Lake with Iceberg reads
- Iceberg
Para atualizar uma tabela gerenciada usando Delta Lake com leituras de Iceberg para a v3, use o seguinte comando:
ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.enableIcebergCompatV2' = 'false'
);
Para atualizar uma tabela gerenciada usando o Iceberg para a versão 3, utilize o seguinte comando:
ALTER TABLE catalog.schema.table SET TBLPROPERTIES (
'format-version' = 3
);
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.
Habilitar vetores de exclusão em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.
- Delta Lake with Iceberg reads
- Iceberg
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:
CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
'delta.enableDeletionVectors' = 'true',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
Para criar uma nova tabela gerenciada usando Iceberg v3 com vetores de exclusão ativados, defina a propriedade da tabela iceberg.enableDeletionVectors:
CREATE TABLE catalog.schema.table (c1 INT)
USING ICEBERG TBLPROPERTIES (
'iceberg.enableDeletionVectors' = 'true'
);
Use o tipo de dados VARIANT.
O tipo de dados VARIANT permite armazenar e consultar dados semiestruturados.
Usar VARIANT em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.
- Delta Lake with Iceberg reads
- Iceberg
Para criar uma nova tabela gerenciada usando Delta Lake com leituras Iceberg e uma coluna VARIANT:
CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
Para criar uma nova tabela gerenciada usando Iceberg v3 com uma coluna VARIANT:
CREATE TABLE catalog.schema.icebergTable (col VARIANT) USING iceberg;
Para adicionar uma coluna VARIANT a uma tabela existente, use o comando ALTER TABLE :
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.
O uso de GEOMETRY ou GEOGRAPHY em uma tabela Iceberg existente atualiza a versão do formato Iceberg para 3.
- Delta Lake with Iceberg reads
- Iceberg
Para criar uma nova tabela gerenciada usando o Delta Lake com leituras do Iceberg e colunas GEOMETRY ou GEOGRAPHY:
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
Para criar uma nova tabela gerenciada usando Iceberg v3 com colunas GEOMETRY ou GEOGRAPHY:
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) USING iceberg;
Para adicionar uma coluna GEOMETRY ou GEOGRAPHY a uma tabela existente, use o comando ALTER TABLE:
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.
- Delta Lake with Iceberg reads
- Iceberg
Para criar uma nova tabela gerenciada usando Delta Lake com leituras do Iceberg e um default de gravação:
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);
Para criar uma nova tabela gerenciada usando Iceberg v3 com um default de gravação:
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) USING iceberg;
Para ver o default aplicado, insira uma linha sem row_status:
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:
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 .
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.