Anda tidak dapat menggunakan Hive untuk menulis data ke Delta Lake dan Hudi, tetapi Anda dapat meminta data Delta Lake dan Hudi menggunakan tabel eksternal Hive. Topik ini menjelaskan cara menggunakan Hive di kluster E-MapReduce (EMR) Anda untuk mengakses data Delta Lake dan Hudi.
Prasyarat
Kluster yang berisi layanan Hive, Delta Lake, dan Hudi telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster.
Anda telah masuk ke kluster. Untuk informasi lebih lanjut, lihat Masuk ke Kluster.
Batasan
Hanya E-MapReduce (EMR) V3.36.0 dan versi minor terbaru atau EMR V5.2.0 dan versi minor terbaru yang memungkinkan Anda menggunakan Hive untuk membaca data Hudi.
Gunakan Hive untuk mengakses data Delta Lake
Jalankan perintah berikut untuk membuka CLI Spark:
spark-sqlBuat tabel di Spark dan minta data dalam tabel tersebut.
Eksekusi pernyataan berikut untuk membuat tabel Delta Lake bernama delta_table di Spark:
create table delta_table (id int) using delta;Eksekusi pernyataan berikut untuk menyisipkan data ke dalam tabel:
insert into delta_table values 0,1,2,3,4;Eksekusi pernyataan berikut untuk meminta data dalam tabel:
select * from delta_table;Output berikut dikembalikan:
2 3 4 0 1 Waktu yang diperlukan: 1,847 detik, Diambil 5 baris
Minta data Delta Lake di Hive.
Jalankan perintah berikut untuk membuka CLI Hive:
hiveJalankan perintah berikut untuk melihat informasi rinci tentang tabel Delta Lake di Hive:
desc formatted delta_table;Jalankan perintah berikut untuk meminta data tabel Delta Lake di Hive:
select * from delta_table;Output berikut dikembalikan:
OK 2 3 4 0 1 Waktu yang diperlukan: 1,897 detik, Diambil: 5 barisCatatanInformasi sebelumnya menunjukkan bahwa data yang diminta di Hive sama dengan data dalam tabel Delta Lake di Spark. Ini menunjukkan bahwa Anda telah menggunakan Hive untuk mengakses data Delta Lake.
Gunakan Hive untuk mengakses data Hudi
Gunakan Spark untuk membaca data dari dan menulis data ke Hudi
Metode untuk memulai Spark SQL
Jika Anda menggunakan Spark 2 atau Spark 3 dan Hudi versi lebih lama dari 0.11, jalankan kode berikut:
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'Jika Anda menggunakan Spark 3 dan Hudi 0.11 atau lebih baru, jalankan kode berikut:
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'
Contoh
Buat tabel.
create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" );Lihat detail tabel.
desc formatted h0;Output berikut dikembalikan:
_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 bigintCatatanSecara default, bidang
_hoodie_commit_time,_hoodie_commit_seqno,_hoodie_record_key,_hoodie_partition_path, dan_hoodie_file_nameditambahkan oleh Hudi.Lakukan operasi pada tabel.
-- 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;Minta data dalam tabel.
Contoh 1
select id, name, price, ts from h0;Output berikut dikembalikan:
2 a2 11.0 1000Contoh 2
select * from h0;Output berikut dikembalikan:
4.820221130150621338 20221130150621338_0_1 id:2 40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet 2 a2 11.0 1000CatatanTabel ini adalah tabel non-partisi. Oleh karena itu, bidang
_hoodie_partition_pathdibiarkan kosong. Empat nilai bidang pertama dalam output sebelumnya adalah nilai-nilai bidang default yang ditambahkan oleh Hudi.
Untuk lebih banyak contoh penggunaan Spark untuk membaca data dari dan menulis data ke Hudi, lihat Panduan Spark.
Gunakan Hive untuk meminta data Hudi
Anda hanya dapat menggunakan Spark atau Flink untuk membaca data dari atau menulis data ke Hudi. Anda dapat menggunakan Hive hanya untuk meminta data dari Hudi.
Masukkan perintah hive untuk membuka CLI Hive atau gunakan Beeline untuk terhubung ke Hive ThriftServer. Kemudian, eksekusi pernyataan SQL untuk meminta data. Contoh pernyataan:
-- select
select * from h0;