Anda dapat menggunakan Spark SQL untuk membaca data dari atau menulis data ke E-MapReduce (EMR) Hudi 0.8.0, sehingga biaya penggunaan Hudi berkurang secara signifikan. Topik ini menjelaskan cara menggunakan Spark SQL untuk membaca data dari atau menulis data ke Hudi.
Batasan
Hanya kluster EMR V3.36.0 atau versi minor lebih baru dan kluster EMR V5.2.0 atau versi minor lebih baru yang mengizinkan Anda menggunakan Spark SQL untuk membaca data dari atau menulis data ke Hudi.
Cara memulai Spark SQL
- Spark 2 atau Spark 3 dan Hudi versi lebih awal dari 0.11
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' - Spark 3 dan Hudi 0.11 atau lebih baru
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
- Membuat tabel
create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" ); - Mengquery 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 bigintnull Secara default,_hoodie_commit_time,_hoodie_commit_seqno,_hoodie_record_key,_hoodie_partition_path, dan_hoodie_file_nameadalah bidang tambahan yang ditambahkan oleh Hudi. - Melakukan 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; - Mengquery data dalam tabel
- Contoh 1
select id, name, price, ts from h0;Output berikut dikembalikan:2 a2 11.0 1000 - Contoh 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 1000null Tabel tersebut adalah tabel non-partisi. Oleh karena itu, bidang_hoodie_partition_pathdibiarkan kosong. Empat nilai bidang pertama dalam output di atas adalah nilai-nilai dari bidang default yang ditambahkan oleh Hudi.
- Contoh 1