All Products
Search
Document Center

E-MapReduce:Delta connector

Last Updated:Mar 26, 2026

Delta connector memungkinkan Anda menjalankan kueri langsung terhadap tabel Delta Lake dari E-MapReduce (EMR) Trino. Connector ini mendukung semua fitur open source Delta Lake serta menambahkan kemampuan tambahan seperti time travel dan akselerasi kueri berbasis Z-Ordering.

Informasi latar belakang

Delta Lake adalah solusi data lake yang dikembangkan oleh Databricks, yang menyediakan fitur untuk menulis, mengelola, menjalankan kueri, dan membaca data dari data lake. Untuk informasi lebih lanjut, lihat Ikhtisar.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster DataLake atau kluster Custom dengan layanan Trino yang diaktifkan, atau kluster Hadoop dengan layanan Presto yang diaktifkan

Untuk membuat kluster, lihat Create a cluster.

Versi yang didukung

Delta connector didukung pada:

  • Kluster Hadoop yang menjalankan EMR V3.39.1, EMR V5.5.0, atau versi minor yang lebih baru

  • Kluster DataLake dan kluster Custom (tanpa batasan versi)

Konfigurasi Delta connector

Pengaturan Delta connector berada di tab delta.properties pada tab Configure layanan Trino di Konsol EMR. Untuk mengubah pengaturan ini, ikuti petunjuk dalam Modify the configurations of a built-in connector.

Item konfigurasiDeskripsi
hive.metastore.uriURI untuk mengakses Hive metastore melalui protokol Thrift. Format default: thrift://master-1-1.cluster-24****:9083
hive.config.resourcesPath ke file resource yang digunakan oleh Hive metastore

Jalankan kueri terhadap tabel Delta Lake

Trino dapat membaca tabel Delta Lake tetapi tidak dapat membuat atau memodifikasinya. Gunakan Spark SQL untuk membuat tabel dan menulis data. Untuk detailnya, lihat Use Delta Lake.

Contoh berikut menunjukkan cara membuat tabel dengan Spark SQL, lalu menjalankan kueri terhadapnya dari Trino.

Langkah 1: Buat tabel dan masukkan data

  1. Buka CLI Spark SQL:

    spark-sql
  2. Buat tabel Delta Lake bernama delta_table:

    CREATE TABLE delta_table (id INT) USING delta;
  3. Masukkan data ke dalam tabel:

    INSERT INTO delta_table VALUES 0,1,2,3,4;

Langkah 2: Jalankan kueri data dari Trino

  1. Login ke Konsol Trino. Untuk petunjuknya, lihat Log on to the Trino console by running commands.

  2. Jalankan kueri berikut:

    SELECT * FROM delta_table;

    Output yang diharapkan:

     id
    ----
      0
      1
      2
      3
      4
    (5 rows)

Fitur lanjutan

Penting

Fitur-fitur berikut hanya didukung pada EMR V3.39.1 dan EMR V5.5.0.

Time travel

Time travel memungkinkan Anda menjalankan kueri terhadap snapshot historis tabel Delta Lake berdasarkan nomor versi atau timestamp. Trino EMR menggunakan sintaksis FOR ... AS OF:

-- Kueri berdasarkan nomor versi
SELECT * FROM <table> FOR VERSION AS OF <version>;

-- Kueri berdasarkan timestamp
SELECT * FROM <table> FOR TIMESTAMP AS OF <timestamp>;
Penting

Sintaksis time travel Trino EMR mencakup kata kunci FOR. Hal ini berbeda dengan Spark SQL open source, yang tidak menggunakan FOR dalam sintaksis time travel-nya.

Kueri berdasarkan versi

Nomor versi adalah bilangan bulat yang dimulai dari 1 setelah INSERT pertama dan bertambah 1 setiap kali terjadi modifikasi.

Contoh berikut menimpa delta_table, lalu menjalankan kueri terhadap versi sebelumnya menggunakan time travel.

  1. Timpa data di Spark SQL:

    INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9;
  2. Konfirmasi status saat ini dari Trino:

    SELECT * FROM delta_table;

    Output:

     id
    ----
      5
      6
      7
      8
      9
    (5 rows)
  3. Jalankan kueri terhadap data pada versi 1:

    SELECT * FROM delta_table FOR VERSION AS OF 1;

    Output:

     id
    ----
      2
      1
      3
      4
      0
    (5 rows)

Kueri berdasarkan timestamp

Tiga tipe timestamp didukung: DATE, TIMESTAMP, dan TIMESTAMP WITH TIME ZONE.

  • Jika Anda menjalankan kueri berdasarkan timestamp bertipe DATE, data yang diambil adalah data dengan timestamp pukul 00:00:00 UTC pada tanggal kueri tersebut.

  • Jika Anda menjalankan kueri berdasarkan timestamp bertipe TIMESTAMP, data yang diambil adalah data dengan timestamp dalam UTC yang sesuai dengan timestamp yang ditentukan. Misalnya, untuk menjalankan kueri terhadap data pada pukul 20:00:00 tanggal 15 Februari 2022 UTC+8 menggunakan tipe TIMESTAMP:

    Catatan

    Dalam bentuk TIMESTAMP, kata kunci TIMESTAMP pertama menentukan mode time travel, sedangkan kata kunci TIMESTAMP kedua adalah kata kunci tipe literal.

    SELECT * FROM delta_table FOR TIMESTAMP AS OF TIMESTAMP '2022-02-15 12:00:00';

    Output berikut dikembalikan:

     id
    ----
      2
      0
      3
      4
      1
    (5 rows)
  • Jika Anda menjalankan kueri berdasarkan timestamp bertipe TIMESTAMP WITH TIME ZONE, tipe data tersebut dikonversi secara implisit sebelum snapshot dibaca:

    SELECT * FROM delta_table FOR TIMESTAMP AS OF CAST('2022-02-15 20:00:00 +0800' AS TIMESTAMP WITH TIME ZONE);

Z-Ordering

Z-Ordering adalah teknik optimasi tata letak data yang menempatkan data terkait dalam satu set file yang sama. Optimasi kueri data berbasis Parquet dan data skipping didukung. Setelah menerapkan Z-Ordering, Delta Lake mengumpulkan statistik min/maks untuk setiap kolom pada tingkat granularitas file dan menggunakannya untuk melewatkan file yang tidak relevan selama kueri. Delta connector membaca statistik tersebut, sehingga Trino dapat melewatkan file data dan mempercepat kueri hingga puluhan kali lipat.

Optimalkan tabel

Jalankan perintah OPTIMIZE dengan ZORDER BY di Spark untuk menulis ulang dan mengurutkan data tabel. Contoh berikut mengoptimalkan tabel conn_zorder, yang memiliki kolom src_ip, src_port, dst_ip, dan dst_port:

OPTIMIZE conn_zorder ZORDER BY (src_ip, src_port, dst_ip, dst_port);
Penting

Urutan kolom dalam klausa ZORDER BY menentukan prioritas Z-Ordering. Waktu penyelesaian operasi OPTIMIZE meningkat seiring dengan jumlah data.

Tipe kolom yang didukung

Z-Ordering mendukung tipe data kolom berikut: INT, LONG, DOUBLE, FLOAT, BINARY, BOOLEAN, STRING, dan ARRAY.

Predikat yang didukung untuk data skipping

Saat menjalankan kueri terhadap data yang telah di-Z-Order, fitur data skipping menerapkan penyaringan tingkat file untuk predikat berikut: =, <, <=, >, dan >=.

Predikat LIKE dan IN tidak memicu data skipping penuh. Namun, kueri yang menggunakan LIKE atau IN tetap dapat memperoleh manfaat dari pengurutan parsial ketika kolom yang di-Z-Order mempersempit rentang file yang relevan.

Contoh kueri

Setelah dioptimalkan, kueri yang melakukan filter pada kolom yang di-Z-Order berjalan jauh lebih cepat:

-- Filter pada satu kolom Z-Ordered
SELECT COUNT(*) FROM conn_zorder WHERE src_ip > '64.';

-- Filter pada beberapa kolom Z-Ordered
SELECT COUNT(*) FROM conn_zorder WHERE src_ip >= '64.' AND dst_ip < '192.' AND src_port < 1000 AND dst_port > 50000;

Langkah selanjutnya