E-MapReduce的Hudi 0.8.0版本支援Spark SQL對Hudi進行讀寫操作,可以極大的簡化Hudi的使用成本。本文為您介紹如何通過Spark SQL對Hudi進行讀寫操作。
使用限制
EMR-3.36.0及後續版本和EMR-5.2.0及後續版本,支援Spark SQL對Hudi進行讀寫操作。
啟動方式
- Spark2和Spark3 hudi0.11以下版本
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
- Spark3 hudi0.11及以上版本
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'
使用樣本
- 建表
create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" );
- 查看錶詳情
desc formatted h0;
返回資訊如下所示。_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 bigint
說明_hoodie_commit_time
、_hoodie_commit_seqno
、_hoodie_record_key
、_hoodie_partition_path
、_hoodie_file_name
為Hudi預設添加的輔助欄位。 - 資料操作
-- 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;
- 查詢
- 樣本1
select id, name, price, ts from h0;
查詢結果如下所示。2 a2 11.0 1000
- 樣本2
select * from h0;
查詢結果如下所示。4.820221130150621338 20221130150621338_0_1 id:2 40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet 2 a2 11.0 1000
說明 由於當前為非分區表,所以_hoodie_partition_path
為空白。前四個欄位為Hudi預設添加的輔助欄位的值。
- 樣本1