Iceberg adalah format tabel terbuka untuk data lake. Anda dapat menggunakan konektor Iceberg untuk mengkueri file data dalam format Iceberg.
Informasi latar belakang
Untuk informasi selengkapnya tentang Iceberg, lihat Iceberg.
- Dynamic filtering
- Operasi baca pada tabel Iceberg V2
- Iceberg filter pushdown
Prasyarat
Kluster Hadoop dengan layanan Presto yang dideploy atau kluster Presto telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster.
Batasan
Hanya kluster Hadoop atau Presto EMR versi V3.38.0 dan yang lebih baru yang mendukung konektor Iceberg.
Konfigurasikan konektor Iceberg
Ubah konfigurasi konektor Iceberg. Untuk informasi selengkapnya, lihat Konfigurasikan konektor.
Konfigurasi default
Di Konsol EMR, buka halaman Configure layanan Presto. Di bagian Service Configuration, klik tab iceberg.properties. Anda akan menemukan parameter hive.metastore.uri, yang menentukan URI untuk menghubungkan ke Hive Metastore menggunakan protokol Thrift. Ubah nilai parameter sesuai kebutuhan aktual Anda. Format default-nya adalah thrift://emr-header-1.cluster-24****:9083.
Parameter
Di Konsol EMR, buka halaman layanan Presto dan klik tab Configure. Di bagian Service Configuration, klik tab iceberg.properties, lalu klik Custom Configuration. Anda dapat menambahkan item konfigurasi berikut.
| Configuration item | Description |
| iceberg.file-format | Format file tempat data tabel Iceberg disimpan. Nilai yang valid:
|
| iceberg.compression-codec | Format kompresi yang digunakan saat menulis file. Nilai yang valid:
|
| iceberg.max-partitions-per-writer | Jumlah maksimum partisi yang datanya dapat diproses oleh setiap writer. Nilai default: 100. |
Contoh: Kueri data dalam tabel Iceberg
Anda dapat menggunakan sintaksis SQL dasar Presto untuk mengkueri data dalam tabel Iceberg.
- Masuk ke node master kluster Anda melalui mode SSH. Untuk informasi selengkapnya, lihat Masuk ke kluster.
- Jalankan perintah berikut untuk menghubungkan ke client Presto:
presto --server emr-header-1:9090 --catalog iceberg --schema defaultJika informasi berikut dikembalikan, client Presto telah terhubung:presto:default> - Jalankan perintah berikut untuk membuat tabel bernama iceberg_test:
create table iceberg_test(id int); - Jalankan perintah berikut untuk memasukkan data ke tabel iceberg_test:
insert into iceberg_test values(1),(2); - Jalankan perintah berikut untuk mengkueri data dalam tabel iceberg_test:
Informasi berikut dikembalikan:select * from iceberg_test;id ---- 1 2
Pernyataan SQL
| SQL statement | Description |
| INSERT | Untuk informasi selengkapnya, lihat INSERT dalam dokumentasi resmi Presto. |
| DELETE | Lihat bagian Hapus data berdasarkan partisi dalam topik ini. Untuk informasi selengkapnya, lihat DELETE dalam dokumentasi resmi Presto. |
| Schema and table management | Lihat bagian Partisi tabel dalam topik ini. Untuk informasi selengkapnya, lihat Schema and table management dalam dokumentasi resmi Presto. |
| Materialized views management | Lihat bagian Kelola Tampilan yang di-materialisasi dalam topik ini. Untuk informasi selengkapnya, lihat Materialized views management dalam dokumentasi resmi Presto. |
| Views management | Untuk informasi selengkapnya, lihat Views management dalam dokumentasi resmi Presto. |
Partisi tabel
| Function | Description |
| year(ts) | Mempartisi tabel berdasarkan tahun. Fungsi ini mengembalikan selisih dalam tahun antara nilai ts dan 1 Januari 1970. |
| month(ts) | Mempartisi tabel berdasarkan bulan. Fungsi ini mengembalikan selisih dalam bulan antara nilai ts dan 1 Januari 1970. |
| day(ts) | Mempartisi tabel berdasarkan hari. Fungsi ini mengembalikan selisih dalam hari antara nilai ts dan 1 Januari 1970. |
| hour(ts) | Mempartisi tabel berdasarkan jam. Fungsi ini mengembalikan timestamp berdasarkan nilai ts. Bagian menit dan detik dari nilai ts diabaikan. |
| bucket(x, nbuckets) | Melakukan partisi hash pada data dan mengalokasikan data ke jumlah bucket tertentu. Fungsi ini mengembalikan nilai hash integral dari x. Nilai hash integral dari x berada dalam rentang [0, nbuckets - 1). |
| truncate(s, nchars) | Mengembalikan nchars karakter pertama dari s. |
CREATE TABLE iceberg.testdb.customer_orders (
order_id BIGINT,
order_date DATE,
account_number BIGINT,
customer VARCHAR,
country VARCHAR)
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country'])Hapus data berdasarkan partisi
DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US'DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods'Kembali ke Snapshot
Snapshot didukung untuk tabel Iceberg.
SELECT snapshot_id FROM iceberg.testdb."customer_orders$snapshots" ORDER BY committed_at DESC LIMIT 1CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****)Kueri partisi tabel sistem
SELECT * FROM iceberg.testdb."customer_orders$partitions"Properti tabel Iceberg
| Property | Description |
| format | Menentukan format file tempat data tabel Iceberg disimpan. Nilai yang valid:
|
| partitioning | Menentukan kolom kunci partisi. Misalnya, jika sebuah tabel berisi kolom kunci partisi c1 dan c2, properti ini diatur menjadi ARRAY['c1', 'c2']. |
| location | Menentukan URI sistem file yang menyimpan tabel. |
CREATE TABLE test_table (
c1 integer,
c2 date,
c3 double)
WITH (
format = 'PARQUET',
partitioning = ARRAY['c1', 'c2'],
location = '/var/my_tables/test_table')Kelola Tampilan yang di-materialisasi
Konektor Iceberg mendukung Tampilan yang di-materialisasi. Setiap Tampilan yang di-materialisasi terdiri dari definisi tampilan dan tabel Iceberg. Nama tabel disimpan sebagai properti Tampilan yang di-materialisasi, dan data disimpan dalam tabel Iceberg.
| Statement | Description |
| CREATE MATERIALIZED VIEW | Membuat Tampilan yang di-materialisasi. Anda dapat menggunakan properti tabel Iceberg untuk menentukan format penyimpanan tabel Iceberg. Misalnya, atur format ke ORC dan partitioning ke ARRAY['event_date'] dalam klausa WITH untuk menyimpan data tabel Iceberg dalam file ORC dan mempartisi tabel berdasarkan hari. |
| REFRESH MATERIALIZED VIEW | Memperbarui data dalam Tampilan yang di-materialisasi. Setelah Anda menjalankan pernyataan ini, data tabel Iceberg dihapus, lalu hasil eksekusi kueri yang didefinisikan oleh Tampilan yang di-materialisasi dimasukkan kembali ke dalam tampilan tersebut. Penting Ada jendela waktu kecil antara operasi hapus dan masukkan. Saat Tampilan yang di-materialisasi kosong, tampilan tersebut tetap kosong jika operasi masukkan gagal. Anda juga dapat menjalankan pernyataan ini untuk menghapus definisi dan tabel Iceberg dari Tampilan yang di-materialisasi. |