Todos os produtos
Search
Central de documentação

E-MapReduce:Integrar Hudi com Spark SQL

Última atualização: Jun 27, 2026

O EMR Hudi 0.8.0 introduziu suporte ao Spark SQL, o que permite consultar e modifique tabelas Hudi com SQL padrão, sem código Spark DataFrame. Esse recurso reduz significativamente os custos de uso do Hudi e oferece um ponto de entrada mais acessível no EMR, sendo ideal para equipes que preferem fluxos de trabalho baseados em SQL em vez de APIs DataFrame.

Limitações

A leitura e escrita no Hudi via Spark SQL exigem uma das seguintes versões de cluster EMR:

  • EMR V3.36.0 ou versão secundária posterior

  • EMR V5.2.0 ou versão secundária posterior

Iniciar o Spark SQL

As flags de inicialização necessárias variam conforme as versões do Spark e do Hudi. Consulte a tabela abaixo para identificar sua configuração antes de executar o comando de inicialização.

Versão do Spark

Versão do Hudi

**Flags --conf obrigatórias**

Spark 2 ou Spark 3

Anterior à 0.11

spark.serializer, spark.sql.extensions

Spark 3

0.11 ou posterior

spark.serializer, spark.sql.extensions, spark.sql.catalog.spark_catalog

Spark 2 ou Spark 3, Hudi anterior à 0.11:

spark-sql \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

Spark 3, Hudi 0.11 ou posterior:

spark-sql \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
  --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'

Exemplos

Os exemplos a seguir demonstram o ciclo de vida completo de uma tabela Hudi: crie, inspeção, escrita e consulta.

Crie uma tabela

CREATE TABLE h0 (
  id    BIGINT,
  name  STRING,
  price DOUBLE,
  ts    LONG
) USING hudi
TBLPROPERTIES (
  primaryKey="id",
  preCombineField="ts"
);
  • primaryKey identifica exclusivamente cada registro na tabela. O Hudi utiliza esse campo para indexação e buscas de upsert.

  • preCombineField é o campo de ordenação (geralmente um timestamp de evento) usado pelo Hudi para resolver conflitos quando existem várias versões do mesmo registro.

Inspecionar o schema da tabela

DESC FORMATTED h0;

Saída esperada:

_hoodie_commit_time       string
_hoodie_commit_seqno      string
_hoodie_record_key        string
_hoodie_partition_path    string
_hoodie_file_name         string
id                        bigint
name                      string
price                     double
ts                        bigint
Nota

O Hudi adiciona automaticamente cinco campos de metadados com o prefixo

_hoodie_

a todas as tabelas. Esses campos rastreiam o histórico de commits, a identidade do registro, a localização da partição e informações do arquivo, oferecendo suporte aos recursos de indexação e consulta incremental do Hudi.

Inserir dados

INSERT INTO h0 VALUES (1, 'a1', 10, 1000), (2, 'a2', 11, 1000);

Atualize dados

UPDATE h0 SET name = 'a1_new' WHERE id = 1;

Exclua dados

DELETE FROM h0 WHERE id = 1;

Consultar dados

Após as operações de inserção, atualize e exclua acima, consulte a tabela para confirme os resultados.

Consultar colunas específicas:

SELECT id, name, price, ts FROM h0;

Saída esperada:

2    a2    11.0    1000

Consultar todas as colunas (incluindo campos de metadados):

SELECT * FROM h0;

Saída esperada:

4.820221130150621338    20221130150621338_0_1    id:2        40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet    2    a2    11.0    1000
Nota

Esta é uma tabela não particionada, portanto

_hoodie_partition_path

está em branco. Os quatro primeiros valores na saída correspondem aos campos de metadados do Hudi.