Spark SQL を使用して、E-MapReduce(EMR)Hudi 0.8.0 からデータを読み書きできます。 これにより、Hudi の使用コストが大幅に削減されます。 このトピックでは、Spark SQL を使用して Hudi からデータを読み書きする方法について説明します。
制限事項
EMR V3.36.0 以降のマイナーバージョンのクラスターと EMR V5.2.0 以降のマイナーバージョンのクラスターのみで、Spark SQL を使用して Hudi からデータを読み書きできます。
Spark SQL を起動する方法
- Spark 2 または Spark 3 と 0.11 より前のバージョンの Hudi
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' - Spark 3 と Hudi 0.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フィールドは空のままです。 前の出力の最初の 4 つのフィールド値は、Hudi によって追加されるデフォルトフィールドの値です。
- 例 1