Hive ne peut pas écrire de données dans Delta Lake ou Apache Hudi, mais il permet d'interroger des données dans ces deux formats via des tables externes. Cette rubrique explique comment utiliser Hive dans un cluster E-MapReduce (EMR) pour interroger des données Delta Lake et Hudi.
Prérequis
Avant de commencer, assurez-vous :
D'avoir un cluster avec les services Hive, Delta Lake et Hudi installés. Pour plus d'informations, consultez la section Créer un cluster.
D'être connecté au cluster. Pour plus d'informations, consultez la section Se connecter à un cluster.
Limitations
Pour lire des données Hudi avec Hive, votre cluster doit respecter les exigences de version suivantes.
| Version EMR | Accès Hive à Hudi |
|---|---|
| V3.36.0 et versions mineures ultérieures | Pris en charge |
| V5.2.0 et versions mineures ultérieures | Pris en charge |
| Versions antérieures | Non pris en charge. Utilisez Spark ou Flink pour interroger les données Hudi. |
Interroger des données Delta Lake avec Hive
Hive peut lire les tables Delta Lake créées dans Spark. Les étapes suivantes détaillent la création d'une table Delta Lake dans Spark, l'insertion de données, puis leur interrogation depuis Hive.
Étape 1 : Créer une table Delta Lake dans Spark
-
Ouvrez l'interface CLI de Spark.
spark-sql -
Créez une table Delta Lake nommée
delta_table.create table delta_table (id int) using delta; -
Insérez des données dans la table.
insert into delta_table values 0,1,2,3,4; -
Vérifiez les données en interrogeant la table dans Spark.
select * from delta_table;Le résultat ressemble à ceci :
2 3 4 0 1 Time taken: 1.847 seconds, Fetched 5 row(s)
Étape 2 : Interroger des données Delta Lake dans Hive
-
Ouvrez l'interface CLI de Hive.
hive -
(Facultatif) Inspectez les métadonnées de la table.
desc formatted delta_table; -
Interrogez la table Delta Lake.
select * from delta_table;Le résultat ressemble à ceci :
OK 2 3 4 0 1 Time taken: 1.897 seconds, Fetched: 5 row(s)Les données renvoyées par Hive correspondent à celles de la table Delta Lake dans Spark, ce qui confirme que Hive lit correctement les données Delta Lake.
Interroger des données Hudi avec Hive
Seuls Spark ou Flink peuvent écrire des données dans Hudi. Hive prend uniquement en charge la lecture.
Étape 1 : Préparer les données Hudi à l'aide de Spark
Avant d'interroger les données depuis Hive, créez et remplissez une table Hudi à l'aide de Spark SQL.
Démarrer Spark SQL
La commande de démarrage dépend des versions de Spark et de Hudi dans votre cluster.
-
Pour Spark 2 ou Spark 3 avec Hudi antérieur à la version 0.11 :
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' -
Pour Spark 3 avec Hudi 0.11 ou version 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'
Créer et remplir une table Hudi
-
Créez une table Hudi nommée
h0.create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" ); -
Inspectez le schéma de la table.
desc formatted h0;Le résultat ressemble à ceci :
_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 bigintHudi ajoute automatiquement cinq champs de métadonnées à chaque table :
_hoodie_commit_time,_hoodie_commit_seqno,_hoodie_record_key,_hoodie_partition_pathet_hoodie_file_name. Ces champs apparaissent dans tous les résultats de requête utilisantselect *. -
Insérez, mettez à jour et supprimez des données.
-- insert insert into h0 values (1, 'a1', 10, 1000), (2, 'a2', 11, 1000); -- update update h0 set name = 'a1_new' where id = 1; -- delete delete from h0 where id = 1; -
Vérifiez les données. Après les opérations de mise à jour et de suppression, seule la ligne
id=2subsiste.Remarqueh0étant une table non partitionnée,_hoodie_partition_pathest vide. Les cinq premières valeurs du résultat correspondent aux cinq champs de métadonnées Hudi.select id, name, price, ts from h0;Le résultat ressemble à ceci :
2 a2 11.0 1000Pour inclure les champs de métadonnées Hudi dans le résultat, exécutez :
select * from h0;Le résultat ressemble à ceci :
4.820221130150621338 20221130150621338_0_1 id:2 40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet 2 a2 11.0 1000
Pour plus d'exemples Spark pour Hudi, consultez le Guide Spark.
Étape 2 : Interroger des données Hudi dans Hive
Ouvrez l'interface CLI de Hive ou connectez-vous au serveur Thrift Hive via Beeline, puis interrogez la table Hudi.
-- select
select * from h0;
Étapes suivantes
Pour explorer des opérations Hudi plus avancées dans Spark, consultez le Guide Apache Hudi Spark.