全部产品
Search
文档中心

E-MapReduce:Integrasi Hudi dengan Spark SQL

更新时间:Jun 24, 2025

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                      bigint
    null Secara default, _hoodie_commit_time, _hoodie_commit_seqno, _hoodie_record_key, _hoodie_partition_path, dan _hoodie_file_name adalah 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    1000
      null Tabel tersebut adalah tabel non-partisi. Oleh karena itu, bidang _hoodie_partition_path dibiarkan kosong. Empat nilai bidang pertama dalam output di atas adalah nilai-nilai dari bidang default yang ditambahkan oleh Hudi.