Sebuah kluster E-MapReduce (EMR) yang dilengkapi layanan Trino menyediakan konektor Delta. Konektor ini mendukung semua fitur dari Delta Lake sumber terbuka serta menawarkan peningkatan tambahan di atas fitur-fitur tersebut.
Informasi latar belakang
Delta Lake adalah solusi data lake yang dikembangkan oleh Databricks. Delta Lake menyediakan fitur untuk menulis, mengelola, meminta, dan membaca data dari data lake. Untuk informasi lebih lanjut, lihat Ikhtisar.
Prasyarat
Dibutuhkan kluster DataLake atau Custom dengan layanan Trino yang dipilih, serta kluster Hadoop dengan layanan Presto yang dipilih. Untuk informasi lebih lanjut, lihat Buat Kluster.
Batasan
Hanya kluster Hadoop EMR V3.39.1, EMR V5.5.0, dan versi minor berikutnya, serta kluster DataLake dan Custom yang mendukung konektor Delta.
Penggunaan dasar
Ubah konfigurasi konektor Delta
Untuk informasi lebih lanjut tentang cara mengubah konfigurasi konektor Delta, lihat Ubah Konfigurasi Konektor Bawaan.
Konfigurasi default konektor Delta
Buka tab Konfigurasi layanan Trino di konsol EMR. Pada tab Konfigurasi, klik tab delta.properties. Ubah atau tambahkan item konfigurasi sesuai kebutuhan bisnis Anda seperti yang dijelaskan dalam tabel berikut.
Item konfigurasi | Deskripsi |
hive.metastore.uri | Uniform resource identifier (URI) yang digunakan untuk mengakses metastore Hive berdasarkan protokol Thrift. Anda dapat mengubah nilai item konfigurasi ini berdasarkan kebutuhan bisnis Anda. Secara default, item konfigurasi ini ditentukan dalam format thrift://master-1-1.cluster-24****:9083. |
hive.config.resources | Jalur yang menyimpan file sumber daya yang digunakan oleh metastore Hive. |
Contoh
Trino tidak dapat digunakan untuk membuat atau memodifikasi tabel Delta Lake. Gunakan Spark SQL untuk membuat tabel Delta Lake. Untuk informasi lebih lanjut, lihat Gunakan Delta Lake.
Hasilkan data.
Jalankan perintah berikut untuk membuka CLI Spark SQL:
spark-sqlEksekusi pernyataan berikut untuk membuat tabel Delta Lake bernama delta_table:
CREATE TABLE delta_table (id INT) USING delta;Eksekusi pernyataan berikut untuk menulis data ke tabel delta_table:
INSERT INTO delta_table VALUES 0,1,2,3,4;
Permintaan data.
Buka konsol Trino. Untuk informasi lebih lanjut, lihat Masuk ke Konsol Trino dengan Menjalankan Perintah.
Eksekusi pernyataan berikut untuk meminta data di tabel delta_table:
SELECT * FROM delta_table;Output berikut akan ditampilkan:
id ---- 0 1 2 3 4 (5 baris)
Penggunaan lanjutan
Fitur ini hanya didukung di versi EMR V3.39.1 dan EMR V5.5.0.
Perjalanan waktu
Anda dapat menggunakan fitur perjalanan waktu untuk meminta data historis dalam tabel Delta Lake.
EMR Trino mendukung fitur perjalanan waktu tabel Delta Lake. Sintaksis fitur ini adalah for xxx as of, di mana xxx menunjukkan mode kerja fitur perjalanan waktu, yang dapat disetel ke VERSION atau TIMESTAMP.
Sintaksis fitur perjalanan waktu yang didukung oleh EMR Trino mencakup kata kunci FOR, yang tidak termasuk dalam sintaksis Spark SQL dari Delta Lake sumber terbuka.
Contoh:
Jalankan perintah berikut untuk membuka CLI Spark SQL:
spark-sqlEksekusi pernyataan berikut untuk menimpa data:
INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9;Permintaan data.
Buka konsol Trino. Untuk informasi lebih lanjut, lihat Masuk ke Konsol Trino dengan Menjalankan Perintah.
Eksekusi pernyataan berikut untuk meminta data di tabel delta_table:
SELECT * FROM delta_table;Output berikut akan ditampilkan:
id ---- 5 6 7 8 9 (5 baris)
Gunakan fitur perjalanan waktu untuk meminta data historis di tabel delta_table.
Eksekusi pernyataan berikut untuk meminta data berdasarkan nomor versi. Anda dapat mengonfigurasi parameter VERSION sesuai kebutuhan bisnis Anda. Nomor versi adalah bilangan bulat yang meningkat secara monotonik. Secara default, nilai parameter VERSION adalah 1 setelah operasi INSERT pertama, dan bertambah 1 setiap kali modifikasi dilakukan.
SELECT * FROM delta_table FOR VERSION AS OF 1;Output berikut akan ditampilkan:
id ---- 2 1 3 4 0 (5 baris)Anda juga dapat meminta data historis dalam tabel Delta Lake berdasarkan timestamp. Jenis timestamp yang didukung meliputi DATE, TIMESTAMP, dan TIMESTAMP WITH TIME ZONE.
Jika Anda meminta data berdasarkan timestamp tipe DATE, data dengan timestamp 00:00:00 dalam format UTC pada tanggal permintaan akan diminta.
Jika Anda meminta data berdasarkan timestamp tipe TIMESTAMP, data dengan timestamp dalam format UTC sesuai dengan timestamp yang ditentukan akan diminta.
Sebagai contoh, Anda meminta data pada pukul 20:00:00 tanggal 15 Februari 2022 UTC+8 berdasarkan tipe TIMESTAMP. Contoh kode:
SELECT * FROM delta_table FOR TIMESTAMP AS OF TIMESTAMP '2022-02-15 12:00:00';CatatanDalam contoh kode, TIMESTAMP pertama menunjukkan bahwa mode timestamp digunakan untuk fitur perjalanan waktu, dan TIMESTAMP kedua menunjukkan bahwa tipe TIMESTAMP digunakan untuk meminta data.
Output berikut akan ditampilkan:
id ---- 2 0 3 4 1 (5 baris)Jika Anda meminta data berdasarkan timestamp tipe TIMESTAMP WITH TIME ZONE, tipe data tersebut secara implisit dikonversi sebelum data dibaca.
Sebagai contoh, Anda meminta data pada pukul 20:00:00 tanggal 15 Februari 2022 UTC+8 berdasarkan tipe TIMESTAMP WITH TIME ZONE. Contoh kode:
SELECT * FROM delta_table FOR TIMESTAMP AS OF CAST('2022-02-15 20:00:00 +0800' AS TIMESTAMP WITH TIME ZONE);
Z-Ordering
Trino mengoptimalkan permintaan tabel Delta Lake berdasarkan Z-Ordering. Optimasi permintaan data berdasarkan Parquet dan pengabaian data didukung. Setelah Anda mengoptimalkan permintaan data berdasarkan Parquet atau pengabaian data, Delta Lake mengumpulkan statistik nilai maksimum dan minimum setiap bidang pada granularitas file. Statistik ini digunakan untuk menyaring file data. Anda dapat menggunakan konektor Delta yang disediakan oleh EMR Trino untuk membaca statistik tersebut.
Anda dapat menggunakan pernyataan OPTIMIZE dan klausa ZORDER BY untuk mengoptimalkan tabel Delta Lake dan menentukan kolom yang tepat untuk Z-Ordering. Dengan cara ini, ketika Anda menggunakan Trino untuk meminta tabel Delta Lake yang dioptimalkan, kecepatan permintaan dapat meningkat hingga puluhan kali.
Trino memungkinkan Anda untuk Z-Order kolom dengan tipe data berikut: INT, LONG, DOUBLE, FLOAT, BINARY, BOOLEAN, STRING, dan ARRAY.
Ketika Anda mengonfigurasi fitur pengabaian data untuk memproses data yang di-Z-Ordered, Anda dapat menentukan predikat berikut: =, <, <=, >, dan >=.
Trino tidak mendukung predikat seperti LIKE dan IN. Setelah Anda mengoptimalkan predikat seperti LIKE dan IN menggunakan Z-Ordering, Anda dapat menggunakan predikat tersebut berdasarkan kemampuan pengurutan parsial Z-Ordering untuk mempercepat permintaan.
Sebagai contoh, tabel conn_zorder berisi empat kolom: src_ip, src_port, dst_ip, dan dst_port.
Eksekusi pernyataan berikut untuk mengoptimalkan kolom di Spark:
OPTIMIZE conn_zorder ZORDER BY (src_ip, src_port, dst_ip, dst_port);Kolom dalam tanda kurung diurutkan dalam urutan yang sama dengan kolom yang di-Z-Ordered.
Waktu yang diperlukan untuk melakukan operasi OPTIMIZE bervariasi berdasarkan jumlah data. Setelah Anda mengoptimalkan kolom, kinerja permintaan yang memenuhi kondisi eksekusi permintaan ditingkatkan.
Anda dapat meningkatkan kinerja permintaan data dengan meminta kolom tertentu yang di-Z-Ordered. Contoh pernyataan:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip > '64.';Ketika Anda meminta kolom yang di-Z-Ordered, kecepatan permintaan meningkat secara signifikan. Contoh pernyataan:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip >= '64.' AND dst_ip < '192.' AND src_port < 1000 AND dst_port > 50000;