Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan tabel Iceberg dengan menggunakan Trino
Bagian ini menjelaskan cara mengatur dan mengoperasikan tabel Iceberg dengan menggunakan Trino di
Amazon EMR pada pengaturan EC2
-
Buat
iceberg.properties
file dengan konten berikut.iceberg.file-format=parquet
Pengaturan menentukan format penyimpanan default untuk tabel baru jika format tidak secara eksplisit ditentukan dalam pernyataan.CREATE TABLE
connector.name=iceberg iceberg.catalog.type=glue iceberg.file-format=parquet fs.native-s3.enabled=true
-
Unggah file
iceberg.properties
ke bucket S3 Anda. -
Buat tindakan bootstrap yang menyalin
iceberg.properties
file dari bucket S3 Anda dan menyimpannya sebagai file konfigurasi Trino di cluster EMR Amazon yang akan Anda buat. Pastikan untuk mengganti<S3-bucket-name>
dengan nama bucket S3 Anda.#!/bin/bash set -ex sudo aws s3 cp s3://<S3-bucket-name>/iceberg.properties /etc/trino/conf/catalog/iceberg.properties
-
Buat cluster EMR Amazon dengan Trino diinstal dan tentukan eksekusi skrip sebelumnya sebagai tindakan bootstrap. Berikut adalah contoh AWS Command Line Interface (AWS CLI) perintah untuk membuat cluster:
aws emr create-cluster --release-label emr-7.9.0 \ --applications Name=Trino \ --region <region> \ --name Trino_Iceberg_Cluster \ --bootstrap-actions '[{"Path":"s3://<S3-bucket-name>/bootstrap.sh","Name":"Add iceberg.properties"}]' \ --instance-groups '[{"InstanceGroupType":"MASTER","InstanceCount":1,"InstanceType":"m5.xlarge"},{"InstanceGroupType":"CORE","InstanceCount":3,"InstanceType":"m5.xlarge"}]' \ --service-role "<IAM-service-role>" \ --ec2-attributes '{"KeyName":"<key-name>","InstanceProfile":"<EMR-EC2-instance-profile>"}'
di mana Anda mengganti:
-
<S3-bucket-name>
dengan nama bucket S3 Anda -
<region>
dengan spesifik Anda Wilayah AWS -
<key-name>
dengan key pair Anda. Jika key pair tidak ada, maka akan dibuat. -
<IAM-service-role>
dengan peran layanan EMR Amazon Anda yang mengikuti prinsip hak istimewa paling sedikit. -
<EMR-EC2-instance-profile>
dengan profil instans Anda.
-
-
Ketika klaster EMR Amazon telah diinisialisasi, Anda dapat menginisialisasi sesi Trino dengan menjalankan perintah berikut:
trino-cli
-
Di Trino CLI, Anda dapat melihat katalog dengan menjalankan:
SHOW CATALOGS;
Membuat tabel Iceberg
Untuk membuat tabel Iceberg, Anda dapat menggunakan pernyataan tersebut. CREATE TABLE
Berikut adalah contoh pembuatan tabel yang dipartisi yang menggunakan partisi tersembunyi Iceberg:
CREATE TABLE iceberg.iceberg_db.iceberg_table ( userid int, firstname varchar, city varchar) WITH ( format = 'PARQUET', partitioning = ARRAY['city', 'bucket(userid, 16)'], location = 's3://<S3-bucket>/<prefix>');
catatan
Jika Anda tidak menentukan format, iceberg.file-format
nilai yang Anda konfigurasikan di bagian sebelumnya akan digunakan.
Untuk memasukkan data, gunakan INSERT INTO
perintah. Inilah contohnya:
INSERT INTO iceberg.iceberg_db.iceberg_table (userid, firstname, city) VALUES (1001, 'John', 'New York'), (1002, 'Mary', 'Los Angeles'), (1003, 'Mateo', 'Chicago'), (1004, 'Shirley', 'Houston'), (1005, 'Diego', 'Miami'), (1006, 'Nikki', 'Seattle'), (1007, 'Pat', 'Boston'), (1008, 'Terry', 'San Francisco'), (1009, 'Richard', 'Denver'), (1010, 'Pat', 'Phoenix');
Membaca dari tabel Iceberg
Anda dapat membaca status terbaru dari tabel Iceberg Anda dengan menggunakan SELECT
pernyataan, sebagai berikut:
SELECT * FROM iceberg.iceberg_db.iceberg_table;
Menambah data ke dalam tabel Iceberg
Anda dapat melakukan operasi upsert (secara bersamaan menyisipkan catatan baru dan memperbarui yang sudah ada) dengan menggunakan MERGE INTO
pernyataan. Inilah contohnya:
MERGE INTO iceberg.iceberg_db.iceberg_table target USING ( VALUES (1001, 'John Updated', 'Boston'), -- Update existing user (1002, 'Mary Updated', 'Seattle'), -- Update existing user (1011, 'Martha', 'Portland'), -- Insert new user (1012, 'Paulo', 'Austin') -- Insert new user ) AS source (userid, firstname, city) ON target.userid = source.userid WHEN MATCHED THEN UPDATE SET firstname = source.firstname, city = source.city WHEN NOT MATCHED THEN INSERT (userid, firstname, city) VALUES (source.userid, source.firstname, source.city);
Menghapus catatan dari tabel Iceberg
Untuk menghapus data dari tabel Iceberg, gunakan DELETE FROM
ekspresi dan tentukan filter yang cocok dengan baris yang akan dihapus. Inilah contohnya:
DELETE FROM iceberg.iceberg_db.iceberg_table WHERE userid IN (1003, 1004);
Menanyakan metadata tabel Iceberg
Iceberg menyediakan akses ke metadata-nya melalui SQL. Anda dapat mengakses metadata untuk tabel tertentu (<table_name>
) dengan menanyakan namespace. "<table_name>.$<metadata_table>"
Untuk daftar lengkap tabel metadata, lihat Memeriksa tabel
Berikut adalah contoh daftar kueri untuk memeriksa metadata Iceberg:
SELECT FROM iceberg.iceberg_db."iceberg_table$snapshots"; SELECT FROM iceberg.iceberg_db."iceberg_table$history"; SELECT FROM iceberg.iceberg_db."iceberg_table$partitions"; SELECT FROM iceberg.iceberg_db."iceberg_table$files"; SELECT FROM iceberg.iceberg_db."iceberg_table$manifests"; SELECT FROM iceberg.iceberg_db."iceberg_table$refs"; SELECT * FROM iceberg.iceberg_db."iceberg_table$metadata_log_entries";
Misalnya, kueri ini:
SELECT * FROM iceberg.iceberg_db."iceberg_table$snapshots";
menyediakan output:

Menggunakan perjalanan waktu
Setiap operasi tulis (menyisipkan, memperbarui, meningkatkan, atau menghapus) dalam tabel Iceberg membuat snapshot baru. Anda kemudian dapat menggunakan snapshot ini untuk perjalanan waktu — untuk kembali ke masa lalu dan memeriksa status tabel di masa lalu.
Kueri perjalanan waktu berikut menampilkan status tabel berdasarkan spesifiksnapshot_id
:
SELECT * FROM iceberg.iceberg_db.iceberg_table FOR VERSION AS OF 241938428756831817;
Kueri perjalanan waktu berikut menampilkan status tabel berdasarkan stempel waktu tertentu:
SELECT * FROM iceberg.iceberg_db.iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2025-05-28 16:09:40.268 UTC'
Pertimbangan saat menggunakan Iceberg dengan Trino
Operasi penulisan Trino pada tabel Iceberg mengikuti merge-on-readdesain, sehingga mereka membuat file hapus posisi alih-alih menulis ulang seluruh file data yang dipengaruhi oleh pembaruan atau penghapusan. Jika Anda ingin menggunakan copy-on-write pendekatan ini, pertimbangkan untuk menggunakan Spark untuk operasi tulis.