All Products
Search
Document Center

E-MapReduce:Konektor Iceberg

Last Updated:Aug 22, 2026

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.

Konektor Iceberg Alibaba Cloud E-MapReduce (EMR) kompatibel dengan fitur-fitur yang disediakan oleh konektor Iceberg dari komunitas open source. Selain itu, konektor Iceberg EMR menyediakan fitur-fitur berikut berdasarkan optimasi mendalam:
  • 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 itemDescription
iceberg.file-format Format file tempat data tabel Iceberg disimpan. Nilai yang valid:
  • ORC. Ini adalah nilai default.
  • PARQUET.
iceberg.compression-codecFormat kompresi yang digunakan saat menulis file. Nilai yang valid:
  • GZIP. Ini adalah nilai default.
  • ZSTD.
  • LZ4.
  • SNAPPY.
  • NONE.
iceberg.max-partitions-per-writerJumlah 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.

  1. Masuk ke node master kluster Anda melalui mode SSH. Untuk informasi selengkapnya, lihat Masuk ke kluster.
  2. Jalankan perintah berikut untuk menghubungkan ke client Presto:
    presto --server emr-header-1:9090 --catalog iceberg --schema default
    Jika informasi berikut dikembalikan, client Presto telah terhubung:
    presto:default>
  3. Jalankan perintah berikut untuk membuat tabel bernama iceberg_test:
    create table iceberg_test(id int);
  4. Jalankan perintah berikut untuk memasukkan data ke tabel iceberg_test:
    insert into iceberg_test values(1),(2);
  5. Jalankan perintah berikut untuk mengkueri data dalam tabel iceberg_test:
    select * from iceberg_test;
    Informasi berikut dikembalikan:
     id
    ----
     1
     2

Pernyataan SQL

Konektor Iceberg dapat digunakan untuk membaca atau menulis data ke tabel Iceberg serta membaca atau menulis metadata tabel. Selain pernyataan SQL dasar, konektor Iceberg juga mendukung pernyataan SQL yang dijelaskan dalam tabel berikut.
SQL statementDescription
INSERTUntuk informasi selengkapnya, lihat INSERT dalam dokumentasi resmi Presto.
DELETELihat bagian Hapus data berdasarkan partisi dalam topik ini.

Untuk informasi selengkapnya, lihat DELETE dalam dokumentasi resmi Presto.

Schema and table managementLihat bagian Partisi tabel dalam topik ini.

Untuk informasi selengkapnya, lihat Schema and table management dalam dokumentasi resmi Presto.

Materialized views managementLihat bagian Kelola Tampilan yang di-materialisasi dalam topik ini.

Untuk informasi selengkapnya, lihat Materialized views management dalam dokumentasi resmi Presto.

Views managementUntuk informasi selengkapnya, lihat Views management dalam dokumentasi resmi Presto.

Partisi tabel

Konektor Iceberg dapat menggunakan fungsi-fungsi yang dijelaskan dalam tabel berikut untuk mempartisi tabel.
FunctionDescription
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.
Contoh: Partisi tabel bernama customer_orders berdasarkan bulan dalam nilai order_date, nilai hash account_number (jumlah bucket: 10), dan country.
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

Untuk tabel partisi, jika Anda menyertakan klausa WHERE dalam pernyataan DELETE untuk memfilter partisi, konektor Iceberg akan menghapus partisi yang memenuhi kondisi filter tersebut. Misalnya, jalankan pernyataan berikut untuk menghapus semua partisi yang memenuhi kondisi country=US dari tabel customer_orders:
DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US'
Anda hanya dapat menggunakan konektor Iceberg untuk menghapus data berdasarkan partisi. Misalnya, pernyataan berikut gagal dijalankan karena klausa WHERE dalam pernyataan tersebut digunakan untuk memfilter baris tertentu dalam partisi:
DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods'

Kembali ke Snapshot

Snapshot didukung untuk tabel Iceberg.

Konektor Iceberg menyediakan tabel snapshot sistem untuk setiap tabel Iceberg. Snapshot setiap tabel Iceberg diidentifikasi oleh ID snapshot bertipe data BIGINT. Misalnya, Anda dapat menjalankan pernyataan berikut untuk mengkueri ID snapshot terbaru dari tabel customer_orders:
SELECT snapshot_id FROM iceberg.testdb."customer_orders$snapshots" ORDER BY committed_at DESC LIMIT 1
Anda dapat menjalankan pernyataan berikut untuk mengembalikan status tabel ke snapshot berdasarkan ID snapshot yang ditentukan:
CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****)

Kueri partisi tabel sistem

Anda dapat menggunakan konektor Iceberg untuk mengkueri partisi tabel sistem. Misalnya, Anda dapat menjalankan pernyataan berikut untuk mengkueri partisi tabel customer_orders. Informasi partisi mencakup nilai maksimum dan minimum dari setiap kolom kunci partisi.
SELECT * FROM iceberg.testdb."customer_orders$partitions"

Properti tabel Iceberg

Tabel berikut menjelaskan properti tabel Iceberg.
PropertyDescription
formatMenentukan format file tempat data tabel Iceberg disimpan. Nilai yang valid:
  • ORC. Ini adalah nilai default.
  • PARQUET.
partitioningMenentukan kolom kunci partisi.

Misalnya, jika sebuah tabel berisi kolom kunci partisi c1 dan c2, properti ini diatur menjadi ARRAY['c1', 'c2'].

locationMenentukan URI sistem file yang menyimpan tabel.
Dalam contoh pernyataan berikut, properti format diatur ke PARQUET, properti partitioning diatur ke ARRAY['c1', 'c2'], dan properti location diatur ke /var/my_tables/test_table:
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.

Tabel berikut menjelaskan pernyataan yang dapat dijalankan pada Tampilan yang di-materialisasi.
StatementDescription
CREATE MATERIALIZED VIEWMembuat 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.
WITH ( format = 'ORC', partitioning = ARRAY['event_date'] )
REFRESH MATERIALIZED VIEWMemperbarui 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.