全部产品
Search
文档中心

E-MapReduce:Gunakan Hive untuk mengakses data Delta Lake dan Hudi

更新时间:Jul 02, 2025

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

  1. Jalankan perintah berikut untuk membuka CLI Spark:

    spark-sql
  2. Buat tabel di Spark dan minta data dalam tabel tersebut.

    1. Eksekusi pernyataan berikut untuk membuat tabel Delta Lake bernama delta_table di Spark:

      create table delta_table (id int) using delta;
    2. Eksekusi pernyataan berikut untuk menyisipkan data ke dalam tabel:

      insert into delta_table values 0,1,2,3,4;
    3. 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
  3. Minta data Delta Lake di Hive.

    1. Jalankan perintah berikut untuk membuka CLI Hive:

      hive
    2. Jalankan perintah berikut untuk melihat informasi rinci tentang tabel Delta Lake di Hive:

      desc formatted delta_table;
    3. 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 baris
      Catatan

      Informasi 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

Penting Hanya 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 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                      bigint
      Catatan

      Secara default, bidang _hoodie_commit_time, _hoodie_commit_seqno, _hoodie_record_key, _hoodie_partition_path, dan _hoodie_file_name ditambahkan 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    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
        Catatan

        Tabel ini adalah tabel non-partisi. Oleh karena itu, bidang _hoodie_partition_path dibiarkan 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

Catatan

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;