Todos os produtos
Search
Central de documentação

E-MapReduce:Conector Iceberg

Última atualização: Jun 27, 2026

O conector Iceberg permite consultar e gravar dados em tabelas Apache Iceberg usando Trino no EMR. O Iceberg é um formato de tabela aberto para data lakes que oferece suporte a transações ACID, evolução de particionamento e viagem no tempo baseada em snapshots.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um cluster DataLake ou Hadoop com o serviço Presto ativado. Consulte Criar um cluster.

Limitações

  • Apenas clusters DataLake e Hadoop executando EMR V3.38.0 ou posterior oferecem suporte ao conector Iceberg.

  • Caso tenha selecionado DLF Unified Metadata durante a criação do cluster, não será possível gravar dados em tabelas Iceberg.

Configure o conector Iceberg

Para obter o procedimento geral de modificação das configurações do conector, consulte Configurar conectores.

Configuração padrão

Faça logon no console EMR, acesse a aba Configure da página de serviço do Trino e clique em iceberg.properties. A aba exibe o item de configuração hive.metastore.uri, que especifica o URI do Hive Metastore acessível via protocolo Thrift. Modifique esse valor para corresponder ao seu ambiente.

Adicionar itens de configuração

Na aba Configure da página de serviço do Trino, clique em iceberg.properties e, em seguida, clique em Add Configuration Item.

Item de configuração

Descrição

Padrão

iceberg.file-format

Formato de arquivo para armazenar dados da tabela Iceberg. Valores válidos: ORC, PARQUET.

ORC

iceberg.compression-codec

Codec de compactação usado ao gravar arquivos. Valores válidos: GZIP, ZSTD, LZ4, SNAPPY, NONE.

GZIP

iceberg.max-partitions-per-writer

Número máximo de partições que cada writer pode processar.

100

Consultar tabelas Iceberg

Os passos a seguir demonstram como criar um schema e uma tabela, inserir dados e consultar resultados usando SQL padrão do Trino.

Pré-requisitos

Passos

  1. Crie um schema:

    CREATE SCHEMA iceberg.testdb;
  2. Crie uma tabela:

    CREATE TABLE iceberg.testdb.iceberg_test (id INT);
  3. Insira dados:

    INSERT INTO iceberg.testdb.iceberg_test VALUES (1), (2);
  4. Consulte a tabela:

    SELECT * FROM iceberg.testdb.iceberg_test;

    Saída esperada:

     id
    ----
     1
     2

Sintaxe SQL

O conector Iceberg oferece suporte à leitura e gravação de dados e metadados em tabelas Iceberg. Além do SQL padrão, ele aceita as seguintes instruções:

Instrução

Referência

INSERT

INSERT na documentação do Trino

DELETE

Excluir dados por partição neste tópico e DELETE na documentação do Trino

Gerenciamento de schema e tabela

Particionar uma tabela neste tópico e Schema and table management na documentação do Trino

Gerenciamento de visualizações materializadas

Gerenciar visualizações materializadas neste tópico e Materialized view management na documentação do Trino

Gerenciamento de views

View management na documentação do Trino

Propriedades da tabela

Utilize a cláusula WITH para definir as seguintes propriedades ao criar uma tabela Iceberg:

Propriedade

Descrição

Padrão

format

Formato de arquivo para armazenamento dos dados da tabela. Valores válidos: ORC, PARQUET.

ORC

partitioning

Colunas de chave de partição como um array. Por exemplo, ARRAY['c1', 'c2'].

location

URI do sistema de arquivos que armazena a tabela.

Exemplo:

CREATE TABLE test_table (
    c1 INTEGER,
    c2 DATE,
    c3 DOUBLE)
WITH (
    format = 'PARQUET',
    partitioning = ARRAY['c1', 'c2'],
    location = '/var/my_tables/test_table');

Particionar uma tabela

O conector Iceberg suporta particionamento baseado em funções. Use as seguintes funções na propriedade partitioning:

Função

Descrição

year(ts)

Particiona por ano. Retorna o número de anos entre ts e 1º de janeiro de 1970.

month(ts)

Particiona por mês. Retorna o número de meses entre ts e 1º de janeiro de 1970.

day(ts)

Particiona por dia. Retorna o número de dias entre ts e 1º de janeiro de 1970.

hour(ts)

Particiona por hora. Retorna um timestamp truncado com as partes de minuto e segundo removidas.

bucket(x, nbuckets)

Particiona dados por hash no número especificado de buckets. Retorna o valor de hash de x no intervalo [0, nbuckets - 1).

truncate(s, nchars)

Retorna os primeiros nchars caracteres de s.

Exemplo: Particione a tabela customer_orders por mês do pedido, hash do número da conta (10 buckets) e país:

CREATE TABLE iceberg.testdb.customer_orders (
    order_id BIGINT,
    order_date DATE,
    account_number BIGINT,
    customer VARCHAR,
    country VARCHAR)
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']);

Excluir dados por partição

Em uma tabela particionada, se você incluir uma cláusula WHERE em uma instrução DELETE para filtrar partições, o conector Iceberg exclui as partições que correspondem às condições do filtro. Por exemplo, a instrução abaixo remove todas as partições onde country = 'US' da tabela customer_orders:

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US';

O conector Iceberg permite excluir dados apenas por partição. A execução da instrução a seguir falha porque a cláusula WHERE filtra linhas específicas dentro das partições, em vez de partições completas:

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods';

Consultar tabelas do sistema

O conector Iceberg expõe tabelas do sistema que fornecem metadados sobre cada tabela Iceberg.

Consultar partições — inclui os valores mínimo e máximo para cada coluna de chave de partição:

SELECT * FROM iceberg.testdb."customer_orders$partitions";

Consultar snapshots — lista todos os snapshots com seus timestamps de commit:

SELECT * FROM iceberg.testdb."customer_orders$snapshots"
ORDER BY committed_at DESC;

Reverter para um snapshot

Tabelas Iceberg suportam snapshots. O conector Iceberg fornece uma tabela de snapshot do sistema para cada tabela Iceberg. Os IDs de snapshot são do tipo de dados BIGINT.

Para reverter uma tabela a um estado anterior, obtenha primeiro o ID do snapshot alvo e depois chame o procedimento de rollback.

  1. Obtenha o ID do snapshot mais recente:

    SELECT snapshot_id
    FROM iceberg.testdb."customer_orders$snapshots"
    ORDER BY committed_at DESC
    LIMIT 1;
  2. Reverta para o snapshot:

    CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****);

    Substitua 895459706749342**** pelo ID real do snapshot (um valor BIGINT).

Gerencie visualizações materializadas

Uma visualização materializada no conector Iceberg consiste em uma definição de view e uma tabela Iceberg subjacente. O nome da tabela é armazenado como uma propriedade da visualização materializada; os dados residem na tabela Iceberg.

Instrução

Descrição

CREATE MATERIALIZED VIEW

Cria uma visualização materializada. Use a cláusula WITH para definir propriedades da tabela Iceberg, como format e partitioning. Exemplo: WITH (format = 'ORC', partitioning = ARRAY['event_date']).

REFRESH MATERIALIZED VIEW

Atualiza a visualização materializada excluindo os dados da tabela subjacente e reinserindo os resultados da consulta. Esta instrução também serve para excluir a definição e a tabela Iceberg de uma visualização materializada.

Importante

Existe uma pequena janela de tempo entre as operações de exclusão e inserção durante a atualização. Se a inserção falhar, a visualização materializada ficará vazia até a próxima atualização bem-sucedida.

Próximos passos

  • Visão geral — conheça os conceitos do Iceberg, incluindo snapshots, partições e versões de formato de tabela.

  • Configurar conectores — guia geral para modificar configurações de conectores no EMR.