Tous les produits
Search
Centre de documentation

E-MapReduce:Intégrer Hudi à Spark SQL

Dernière mise à jour :Aug 09, 2026

Spark SQL prend en charge Hudi depuis la version 0.8.0 d'EMR Hudi. Vous pouvez ainsi interroger et modifier des tables Hudi avec du SQL standard, sans écrire de code Spark DataFrame. Cette fonctionnalité réduit considérablement les coûts d'utilisation de Hudi et facilite son adoption sur EMR, notamment si votre équipe privilégie les workflows SQL aux API DataFrame.

Limites

La lecture et l'écriture Hudi via Spark SQL nécessitent l'une des versions de cluster EMR suivantes :

  • EMR V3.36.0 ou une version mineure ultérieure

  • EMR V5.2.0 ou une version mineure ultérieure

Démarrer Spark SQL

Les indicateurs de démarrage requis dépendent de vos versions de Spark et de Hudi. Identifiez votre configuration dans le tableau ci-dessous avant d'exécuter la commande de démarrage.

Version de Spark Version de Hudi **Indicateurs --conf requis**
Spark 2 ou Spark 3 Antérieure à 0.11 spark.serializer, spark.sql.extensions
Spark 3 0.11 ou ultérieure spark.serializer, spark.sql.extensions, spark.sql.catalog.spark_catalog

Spark 2 ou Spark 3, Hudi antérieure à 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 ultérieure :

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'

Exemples

Les exemples suivants détaillent le cycle de vie complet d'une table Hudi : création, inspection, écriture et interrogation.

Créer une table

CREATE TABLE h0 (
  id    BIGINT,
  name  STRING,
  price DOUBLE,
  ts    LONG
) USING hudi
TBLPROPERTIES (
  primaryKey="id",
  preCombineField="ts"
);
  • primaryKey identifie de manière unique chaque enregistrement de la table. Hudi l'utilise pour l'indexation et les recherches lors des opérations upsert.

  • preCombineField est le champ de tri, généralement un horodatage d'événement. Hudi l'utilise pour résoudre les conflits lorsque plusieurs versions du même enregistrement existent.

Inspecter le schéma de la table

DESC FORMATTED h0;

Sortie attendue :

_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
Remarque

Hudi ajoute automatiquement cinq champs de métadonnées préfixés par

_hoodie_

à chaque table. Ces champs suivent l'historique des validations, l'identité des enregistrements, l'emplacement des partitions et les informations sur les fichiers. Ils prennent en charge les fonctionnalités d'indexation et d'interrogation incrémentielle de Hudi.

Insérer des données

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

Mettre à jour des données

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

Supprimer des données

DELETE FROM h0 WHERE id = 1;

Interroger des données

Après les opérations d'insertion, de mise à jour et de suppression ci-dessus, interrogez la table pour confirmer les résultats.

Interroger des colonnes spécifiques :

SELECT id, name, price, ts FROM h0;

Sortie attendue :

2    a2    11.0    1000

Interroger toutes les colonnes (y compris les champs de métadonnées) :

SELECT * FROM h0;

Sortie attendue :

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

Il s'agit d'une table non partitionnée, donc

_hoodie_partition_path

est vide. Les quatre premières valeurs de la sortie correspondent aux champs de métadonnées de Hudi.