全部产品
Search
文档中心

E-MapReduce:Konektor Iceberg

更新时间:Jul 06, 2025

Iceberg adalah format tabel terbuka untuk data lake. Anda dapat menggunakan konektor Iceberg untuk menanyakan file data dalam format Iceberg.

Informasi Latar Belakang

Untuk informasi lebih lanjut tentang Iceberg, lihat Iceberg.

Prasyarat

Cluster DataLake atau Hadoop harus sudah dibuat, dengan layanan Presto dipilih. Untuk detail lebih lanjut, lihat Buat cluster.

Batasan

Hanya cluster Hadoop dari E-MapReduce (EMR) V3.38.0 atau versi minor yang lebih baru serta cluster DataLake yang mendukung konektor Iceberg.

Konfigurasikan Konektor Iceberg

Untuk panduan konfigurasi konektor Iceberg, lihat Konfigurasikan konektor.

Konfigurasi default dari konektor Iceberg

Masuk ke konsol EMR dan buka tab Configure pada halaman layanan Trino. Di tab Configure, klik iceberg.properties. Item konfigurasi hive.metastore.uri akan ditampilkan di tab iceberg.properties. Item ini menentukan pengenal sumber daya seragam (URI) Hive Metastore yang dapat diakses melalui protokol Thrift. Anda dapat memodifikasi item ini sesuai kebutuhan bisnis.

Tambahkan Konfigurasi Iceberg

Di tab Configure halaman layanan Trino, klik tab iceberg.properties. Kemudian, klik Add Configuration Item.

Item Konfigurasi

Deskripsi

iceberg.file-format

Format file tempat data tabel Iceberg disimpan. Nilai valid:

  • ORC (nilai default)

  • PARQUET

iceberg.compression-codec

Format kompresi yang digunakan saat file ditulis. Nilai valid:

  • GZIP (nilai default)

  • ZSTD

  • LZ4

  • SNAPPY

  • NONE

iceberg.max-partitions-per-writer

Jumlah maksimum partisi yang datanya dapat diproses oleh setiap penulis. Nilai default: 100.

Contoh: Menanyakan data dalam tabel Iceberg

Anda dapat menggunakan sintaks SQL dasar Trino untuk menanyakan data dalam tabel Iceberg.

  1. Masuk ke cluster Anda dalam mode SSH. Untuk detail lebih lanjut, lihat Masuk ke cluster.

  2. Sambungkan ke klien Trino. Untuk informasi lebih lanjut, lihat Gunakan CLI untuk menyambung ke Trino.

  3. Jalankan perintah berikut untuk membuat skema:

    create schema iceberg.testdb;
  4. Jalankan perintah berikut untuk membuat tabel bernama iceberg_test:

    create table iceberg.testdb.iceberg_test(id int);
  5. Jalankan perintah berikut untuk menyisipkan data ke tabel iceberg_test:

    insert into iceberg.testdb.iceberg_test values(1),(2);
    Catatan

    Jika Anda memilih Metadata DLF Unified saat membuat cluster, Anda tidak dapat menulis data ke tabel Iceberg.

  6. Jalankan perintah berikut untuk menanyakan data dari tabel:

    select * from iceberg.testdb.iceberg_test;

    Keluaran berikut akan dikembalikan:

     id
    ----
     1
     2

Sintaks SQL

Konektor Iceberg dapat digunakan untuk membaca atau menulis data serta metadata dari atau ke tabel Iceberg. Selain pernyataan SQL dasar, konektor Iceberg juga mendukung pernyataan SQL yang dijelaskan dalam tabel berikut.

Pernyataan SQL

Deskripsi

INSERT

Lihat INSERT dalam dokumentasi resmi.

DELETE

Lihat bagian Hapus data berdasarkan partisi dalam topik ini dan DELETE dalam dokumentasi resmi.

Pernyataan terkait manajemen skema dan tabel

Lihat bagian Partisi tabel dalam topik ini dan Manajemen skema dan tabel dalam dokumentasi resmi.

Pernyataan terkait manajemen tampilan materialisasi

Lihat bagian Tampilan materialisasi dalam topik ini dan Manajemen tampilan materialisasi dalam dokumentasi resmi.

Pernyataan terkait manajemen tampilan

Lihat Manajemen tampilan dalam dokumentasi resmi.

Partisi tabel

Konektor Iceberg dapat digunakan untuk mempartisi tabel berdasarkan fungsi. Tabel berikut menjelaskan fungsi-fungsi tersebut.

Fungsi

Deskripsi

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)

Menjalankan partisi hash pada data dan mengalokasikan data ke sejumlah ember 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 dari account_number (jumlah ember: 10), dan negara.

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 yang dipartisi, jika Anda menyertakan klausa WHERE dalam pernyataan DELETE untuk menyaring partisi, konektor Iceberg akan menghapus partisi yang memenuhi kondisi filter dalam tabel yang dipartisi. Sebagai contoh, jalankan pernyataan berikut untuk menghapus semua partisi yang memenuhi kondisi filter 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. Sebagai contoh, pernyataan berikut gagal dieksekusi karena klausa WHERE digunakan untuk menyaring 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. Setiap snapshot tabel Iceberg diidentifikasi oleh ID snapshot bertipe data BIGINT. Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk menanyakan 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****)

Tanyakan partisi tabel sistem

Anda dapat menggunakan konektor Iceberg untuk menanyakan partisi tabel sistem. Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk menanyakan 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.

Properti

Deskripsi

format

Menentukan format file tempat data tabel Iceberg disimpan. Nilai valid:

  • ORC (nilai default)

  • PARQUET

partitioning

Menentukan kolom kunci partisi.

Sebagai contoh, jika tabel berisi kolom kunci partisi c1 dan c2, properti ini diatur ke ARRAY['c1', 'c2'].

location

Menentukan URI sistem file yang menyimpan tabel.

Dalam pernyataan sampel 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 materialisasi

Konektor Iceberg mendukung tampilan materialisasi. Setiap tampilan materialisasi terdiri dari definisi tampilan dan tabel Iceberg. Nama tabel disimpan sebagai properti tampilan materialisasi, dan data disimpan dalam tabel Iceberg.

Tabel berikut menjelaskan pernyataan yang dapat dieksekusi pada tampilan materialisasi.

Pernyataan

Deskripsi

CREATE MATERIALIZED VIEW

Membuat tampilan materialisasi.

Anda dapat menggunakan properti tabel Iceberg untuk menentukan format penyimpanan tabel Iceberg. Sebagai contoh, atur properti format ke ORC dan properti 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 VIEW

Memperbarui data dalam tampilan materialisasi.

Setelah Anda menjalankan pernyataan, data tabel Iceberg dihapus, lalu hasil eksekusi query yang didefinisikan oleh tampilan materialisasi dimasukkan ke dalam tampilan materialisasi.

Penting

Jendela waktu kecil ada antara operasi hapus dan sisip. Saat tampilan materialisasi kosong, tampilan materialisasi tetap kosong jika operasi sisip gagal.

Anda juga dapat menjalankan pernyataan untuk menghapus definisi dan tabel Iceberg dari tampilan materialisasi.