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 konfigurasi | Deskripsi |
|---|---|
hive.metastore.uri | URI untuk mengakses Hive metastore melalui protokol Thrift. Format default: thrift://master-1-1.cluster-24****:9083 |
hive.config.resources | Path 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
Buka CLI Spark SQL:
spark-sqlBuat tabel Delta Lake bernama
delta_table:CREATE TABLE delta_table (id INT) USING delta;Masukkan data ke dalam tabel:
INSERT INTO delta_table VALUES 0,1,2,3,4;
Langkah 2: Jalankan kueri data dari Trino
Login ke Konsol Trino. Untuk petunjuknya, lihat Log on to the Trino console by running commands.
Jalankan kueri berikut:
SELECT * FROM delta_table;Output yang diharapkan:
id ---- 0 1 2 3 4 (5 rows)
Fitur lanjutan
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>;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.
Timpa data di Spark SQL:
INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9;Konfirmasi status saat ini dari Trino:
SELECT * FROM delta_table;Output:
id ---- 5 6 7 8 9 (5 rows)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:
CatatanDalam bentuk TIMESTAMP, kata kunci
TIMESTAMPpertama menentukan mode time travel, sedangkan kata kunciTIMESTAMPkedua 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);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
Use Delta Lake — buat dan kelola tabel Delta Lake dengan Spark SQL
Log on to the Trino console by running commands — hubungkan ke Trino untuk menjalankan kueri
Modify the configurations of a built-in connector — sesuaikan pengaturan connector