EMR Trino menyediakan Delta connector mandiri yang mendukung fitur data lake komprehensif pada kluster E-MapReduce.
Informasi latar belakang
Delta Lake adalah solusi data lake dari Databricks yang menyediakan fitur berbasis data untuk mengelola siklus hidup data. Untuk informasi selengkapnya, lihat Overview of Delta Lake.
Prasyarat
Anda telah membuat salah satu tipe kluster berikut: kluster DataLake atau Custom dengan layanan Trino, atau kluster Hadoop dengan layanan Presto. Untuk informasi selengkapnya, lihat Create a cluster.
Batasan
Delta connector didukung pada kluster DataLake, kluster Custom, dan kluster Hadoop yang menjalankan EMR-3.39.1 atau versi lebih baru, atau EMR-5.5.0 atau versi lebih baru.
Penggunaan dasar
Ubah konfigurasi connector
Untuk mengubah konfigurasi Delta connector, lihat Modify the configurations of a built-in connector.
Konfigurasi connector default
Di Konsol EMR, buka halaman
|
Parameter |
Description |
|
hive.metastore.uri |
URI untuk menghubungkan ke Hive metastore menggunakan protokol Thrift. Format default-nya adalah thrift://master-1-1.cluster-24****:9083. |
|
hive.config.resources |
Lokasi file resource yang digunakan oleh Hive metastore. |
Contoh
Trino tidak dapat membuat atau memodifikasi tabel Delta Lake. Gunakan Spark SQL untuk operasi tersebut. Untuk informasi selengkapnya, lihat Basic usage.
-
Hasilkan data.
-
Jalankan perintah berikut untuk masuk ke command line Spark SQL.
spark-sql -
Jalankan pernyataan berikut untuk membuat tabel Delta Lake.
CREATE TABLE delta_table (id INT) USING delta; -
Jalankan pernyataan berikut untuk menulis data ke tabel.
INSERT INTO delta_table VALUES 0,1,2,3,4;
-
-
Kueri data.
-
Akses command line Trino. Untuk informasi selengkapnya, lihat Access Trino using a command-line interface.
-
Jalankan pernyataan berikut untuk mengkueri tabel.
SELECT * FROM delta_table;Output berikut dikembalikan.
id ---- 0 1 2 3 4 (5 rows)
-
Penggunaan lanjutan
Fitur-fitur berikut didukung pada EMR-3.39.1 atau versi lebih baru, atau EMR-5.5.0 atau versi lebih baru.
Time travel
Fitur time travel memungkinkan Anda mengkueri data historis suatu tabel.
EMR Trino mendukung time travel untuk tabel Delta Lake. Sintaksnya adalah FOR xxx AS OF, di mana xxx dapat berupa VERSION atau TIMESTAMP, yang menentukan apakah kueri dilakukan berdasarkan nomor versi atau timestamp.
Dibandingkan dengan sintaks Spark SQL untuk Delta Lake, sintaks time travel Trino menambahkan kata kunci FOR.
Contoh:
-
Jalankan perintah berikut untuk masuk ke command line Spark SQL.
spark-sql -
Jalankan pernyataan berikut untuk menimpa data.
INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9; -
Kueri data.
-
Akses command line Trino. Untuk informasi selengkapnya, lihat Access Trino using a command-line interface.
-
Jalankan pernyataan berikut untuk mengkueri tabel.
SELECT * FROM delta_table;Output berikut dikembalikan.
id ---- 5 6 7 8 9 (5 rows)
-
-
Gunakan time travel untuk mengkueri data historis.
Jalankan pernyataan berikut untuk mengkueri data berdasarkan nomor versi. Nomor versi merupakan bilangan bulat yang meningkat secara monotonik. Secara default, nomor versi bernilai 1 setelah operasi INSERT pertama dan bertambah 1 setiap kali terjadi modifikasi.
SELECT * FROM delta_table FOR VERSION AS OF 1;Output berikut dikembalikan.
id ---- 2 1 3 4 0 (5 rows)Anda juga dapat mengkueri data berdasarkan timestamp. Tiga tipe timestamp didukung: DATE, TIMESTAMP, dan TIMESTAMP WITH TIME ZONE.
-
DATE: Mengkueri data pada pukul 00:00:00 UTC pada tanggal yang ditentukan.
-
TIMESTAMP: Mengkueri data pada timestamp tertentu dalam UTC.
Sebagai contoh, jalankan pernyataan berikut untuk mengkueri data pada pukul 20:00:00 tanggal 15 Februari 2022 waktu Beijing (UTC+08:00), menggunakan tipe TIMESTAMP.
SELECT * FROM delta_table FOR TIMESTAMP AS OF TIMESTAMP '2022-02-15 12:00:00';CatatanPada pernyataan ini, kata kunci TIMESTAMP pertama menetapkan mode time travel ke timestamp (bukan mode nomor versi). Kata kunci TIMESTAMP kedua melakukan casting literal string ke tipe data TIMESTAMP (bukan tipe DATE).
Output berikut dikembalikan.
id ---- 2 0 3 4 1 (5 rows) -
TIMESTAMP WITH TIME ZONE: Mengkueri dengan TIMESTAMP WITH TIME ZONE memerlukan casting tipe.
Sebagai contoh, untuk mengkueri data pada pukul 20:00:00 tanggal 15 Februari 2022 waktu Beijing (UTC+08:00), gunakan pernyataan berikut.
SELECT * FROM delta_table FOR TIMESTAMP AS OF CAST('2022-02-15 20:00:00 +0800' AS TIMESTAMP WITH TIME ZONE);
-
Z-order
Trino menggunakan Z-Ordering untuk mengoptimalkan kueri pada tabel Delta Lake dengan memanfaatkan optimasi native Parquet dan data skipping. Setelah dioptimalkan, Delta Lake mengumpulkan statistik tingkat file seperti nilai minimum dan maksimum untuk setiap kolom, yang digunakan oleh Delta connector untuk langsung memfilter file data.
Untuk tabel Delta Lake yang dioptimalkan dengan perintah OPTIMIZE dan ZORDER BY, kolom Z-Ordering yang dikonfigurasi dengan tepat dapat membuat kueri Trino puluhan kali lebih cepat.
Trino mendukung Z-Ordering untuk tipe data berikut: Int, Long, Double, Float, Binary, Boolean, String, dan Array.
Trino mendukung predikat berikut untuk data skipping Z-Ordering: =, <, <=, >, dan >=.
Trino saat ini tidak mendukung predikat seperti like dan in. Namun, karena sifat locality-preserving dari Z-Ordering, kueri yang menggunakan predikat tersebut mungkin tetap berjalan lebih cepat setelah optimasi Z-Ordering.
Sebagai contoh, pertimbangkan sebuah tabel bernama conn_zorder dengan empat kolom: src_ip, src_port, dst_ip, dan dst_port.
Pertama, jalankan pernyataan optimasi berikut di Spark:
OPTIMIZE conn_zorder ZORDER BY (src_ip, src_port, dst_ip, dst_port);
Urutan kolom dalam tanda kurung menentukan Z-Ordering.
Operasi OPTIMIZE mungkin memerlukan waktu tergantung pada volume data. Setelah dioptimalkan, semua kueri yang menggunakan kondisi filter ini akan berjalan lebih cepat.
-
Mengkueri subset kolom Z-Ordered meningkatkan performa. Contohnya:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip > '64.'; -
Mengkueri berdasarkan urutan Z-Ordering secara signifikan meningkatkan kecepatan kueri. Contohnya:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip >= '64.' AND dst_ip < '192.' AND src_port < 1000 AND dst_port > 50000;