Hive tidak dapat menulis data ke Delta Lake atau Apache Hudi, tetapi dapat melakukan kueri terhadap data dari kedua format tersebut melalui tabel eksternal. Topik ini menjelaskan cara menggunakan Hive dalam kluster E-MapReduce (EMR) untuk melakukan kueri terhadap data Delta Lake dan Hudi.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Kluster dengan layanan Hive, Delta Lake, dan Hudi yang telah terinstal. Untuk informasi selengkapnya, lihat Buat sebuah Kluster.
-
Anda telah berhasil masuk ke kluster. Untuk informasi selengkapnya, lihat Masuk ke kluster.
Batasan
Untuk menggunakan Hive membaca data Hudi, kluster Anda harus memenuhi persyaratan versi berikut.
| Versi EMR | Akses Hive ke Hudi |
|---|---|
| V3.36.0 dan versi minor setelahnya | Didukung |
| V5.2.0 dan versi minor setelahnya | Didukung |
| Versi sebelumnya | Tidak didukung. Gunakan Spark atau Flink untuk melakukan kueri terhadap data Hudi sebagai gantinya. |
Lakukan kueri data Delta Lake menggunakan Hive
Hive dapat membaca tabel Delta Lake yang dibuat di Spark. Langkah-langkah berikut memandu Anda membuat tabel Delta Lake di Spark, memasukkan data, dan melakukan kueri terhadap data tersebut dari Hive.
Langkah 1: Buat tabel Delta Lake di Spark
-
Buka CLI Spark.
spark-sql -
Buat tabel Delta Lake bernama
delta_table.create table delta_table (id int) using delta; -
Masukkan data ke dalam tabel.
insert into delta_table values 0,1,2,3,4; -
Verifikasi data dengan melakukan kueri terhadap tabel di Spark.
select * from delta_table;Output-nya mirip dengan:
2 3 4 0 1 Time taken: 1.847 seconds, Fetched 5 row(s)
Langkah 2: Lakukan kueri data Delta Lake di Hive
-
Buka CLI Hive.
hive -
(Opsional) Periksa metadata tabel.
desc formatted delta_table; -
Lakukan kueri terhadap tabel Delta Lake.
select * from delta_table;Output-nya mirip dengan:
OK 2 3 4 0 1 Time taken: 1.897 seconds, Fetched: 5 row(s)Data yang dikembalikan oleh Hive sesuai dengan data dalam tabel Delta Lake di Spark, yang mengonfirmasi bahwa Hive berhasil membaca data Delta Lake.
Lakukan kueri data Hudi menggunakan Hive
Hanya Spark atau Flink yang dapat menulis data ke Hudi. Hive hanya mendukung akses read-only.
Langkah 1: Siapkan data Hudi menggunakan Spark
Sebelum melakukan kueri dari Hive, buat dan isi tabel Hudi menggunakan Spark SQL.
Jalankan Spark SQL
Perintah startup bergantung pada versi Spark dan Hudi di kluster Anda.
-
Untuk Spark 2 atau Spark 3 dengan Hudi versi sebelum 0.11:
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' -
Untuk Spark 3 dengan Hudi 0.11 atau versi setelahnya:
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'
Buat dan isi tabel Hudi
-
Buat tabel Hudi bernama
h0.create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" ); -
Periksa skema tabel.
desc formatted h0;Output-nya mirip dengan:
_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 secara otomatis menambahkan lima bidang metadata ke setiap tabel:
_hoodie_commit_time,_hoodie_commit_seqno,_hoodie_record_key,_hoodie_partition_path, dan_hoodie_file_name. Bidang-bidang ini muncul dalam semua hasil kueri yang menggunakanselect *. -
Masukkan, perbarui, dan hapus data.
-- 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; -
Verifikasi data. Setelah operasi update dan delete, hanya baris
id=2yang tersisa.Catatanh0adalah tabel non-partisi, sehingga_hoodie_partition_pathkosong. Lima nilai pertama dalam output berkorespondensi dengan lima bidang metadata Hudi.select id, name, price, ts from h0;Output-nya mirip dengan:
2 a2 11.0 1000Untuk menyertakan bidang metadata Hudi dalam hasil, jalankan:
select * from h0;Output-nya mirip dengan:
4.820221130150621338 20221130150621338_0_1 id:2 40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet 2 a2 11.0 1000
Untuk contoh Spark lainnya untuk Hudi, lihat Spark Guide.
Langkah 2: Lakukan kueri data Hudi di Hive
Buka CLI Hive atau hubungkan melalui Beeline ke Hive ThriftServer, lalu jalankan kueri terhadap tabel Hudi.
-- select
select * from h0;
Langkah selanjutnya
-
Untuk mengeksplorasi operasi Hudi tingkat lanjut lainnya di Spark, lihat Apache Hudi Spark Guide.