Cette rubrique explique comment résoudre les problèmes courants lors de l'interrogation de tables Apache Hudi sur EMR avec Spark et Hive.
Données en double lors de l'interrogation avec Spark
Symptôme : Spark renvoie des enregistrements en double lors de l'interrogation d'une table Hudi.
Cause : La lecture des données Hudi via l'API Spark Data Source n'est pas prise en charge. Elle contourne la logique de fusion de Hudi, ce qui provoque la duplication des données.
Solution : Ajoutez la configuration suivante à votre commande de requête Spark :
spark.sql.hive.convertMetastoreParquet=false
Données en double lors de l'interrogation avec Hive
Symptôme : Hive renvoie des enregistrements en double lors de l'interrogation d'une table Hudi.
Cause : Par défaut, Hive utilise le format HiveCombineInputFormat. Ce format d'entrée ne peut pas appeler le format d'entrée personnalisé d'une table ; la logique de fusion de Hudi est donc ignorée et des enregistrements en double sont renvoyés.
Solution : Ajoutez l'instruction suivante à votre commande de requête Hive :
set hive.input.format = org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat
L'élimination des partitions ne fonctionne pas lors de l'interrogation avec Spark
Symptôme : Les requêtes Spark analysent toutes les partitions au lieu de se limiter aux partitions pertinentes.
Cause : Si un nom de champ de partition contient une barre oblique (/), Spark détecte un nombre de niveaux de partition différent de la réalité. Cette incompatibilité empêche l'élimination des partitions de fonctionner correctement.
Solution : Ajoutez la propriété suivante à votre commande d'écriture via l'API DataFrame Spark pour la table Hudi :
hoodie.datasource.write.partitionpath.urlencode= true
Erreur « xxx is only supported with v2 tables » lors de l'exécution d'une instruction ALTER TABLE dans Spark
Symptôme : L'exécution d'une instruction ALTER TABLE sur une table Hudi dans Spark renvoie l'erreur xxx is only supported with v2 tables.
Cause : Le paramètre hoodie.schema.on.read.enable n'est pas défini sur true. La fonctionnalité d'évolution du schéma Hudi-Spark nécessite cette configuration avant que vous ne puissiez exécuter l'instruction ALTER TABLE.
Solution : Ajoutez l'instruction suivante à votre instruction ALTER TABLE :
set hoodie.schema.on.read.enable=true
Pour connaître la syntaxe prise en charge, consultez la section SparkSQL schema evolution and syntax description de la documentation Apache Hudi.