Topik ini menjelaskan cara menggunakan Apache Iceberg connector.
Informasi latar belakang
Apache Iceberg adalah format tabel data lake terbuka. Anda dapat menggunakan Apache Iceberg untuk dengan cepat membangun layanan penyimpanan data lake sendiri di HDFS atau Object Storage Service (OSS), serta menggunakan mesin komputasi dari ekosistem big data open-source seperti Flink, Spark, Hive, dan Presto untuk melakukan analisis data lake.
|
Kategori |
Deskripsi |
|
Jenis yang didukung |
Tabel sumber, tabel sink, dan sink ingesti data |
|
Mode operasional |
Mode batch dan mode streaming |
|
Format data |
Tidak berlaku |
|
Metrik spesifik |
Tidak ada |
|
Jenis API |
SQL, pekerjaan ingesti data YAML |
|
Mendukung pembaruan atau penghapusan data di tabel sink |
Ya |
Fitur
Apache Iceberg connector menyediakan fitur-fitur berikut:
-
Membangun layanan penyimpanan data lake berbiaya rendah dan ringan berbasis HDFS atau object storage.
-
Menyediakan semantik ACID lengkap.
-
Mendukung kueri time travel untuk mengakses versi data historis.
-
Mendukung penyaringan data yang efisien.
-
Mendukung evolusi skema tabel.
-
Mendukung evolusi partisi.
Gunakan kemampuan toleransi kesalahan dan pemrosesan aliran Flink untuk mengimpor volume besar log ke data lake Apache Iceberg secara real time. Anda kemudian dapat menggunakan Flink atau mesin analisis lainnya untuk mengekstraksi nilai dari data tersebut.
Batasan
-
Apache Iceberg connector hanya didukung di Realtime Compute for Apache Flink dengan Ververica Runtime (VVR) 4.0.8 atau lebih baru. Apache Iceberg connector harus digunakan bersama katalog Data Lake Formation (DLF). Untuk informasi selengkapnya, lihat Mengelola katalog DLF-Legacy.
-
Apache Iceberg connector mendukung format tabel Apache Iceberg v1 dan v2. Untuk informasi selengkapnya, lihat Spesifikasi Tabel Iceberg.
CatatanHanya Realtime Compute for Apache Flink yang menggunakan VVR 8.0.7 atau lebih baru yang mendukung format tabel v2.
-
Dalam mode baca streaming, Anda hanya dapat menggunakan tabel Iceberg append-only sebagai tabel sumber.
Sintaksis
CREATE TABLE iceberg_table (
id BIGINT,
data STRING
PRIMARY KEY(`id`) NOT ENFORCED
)
PARTITIONED BY (data)
WITH (
'connector' = 'iceberg',
...
);
Opsi WITH
Opsi umum
|
Parameter |
Deskripsi |
Type |
Wajib |
Default |
Keterangan |
|
connector |
Jenis connector. |
String |
Ya |
None |
Nilainya harus |
|
catalog-name |
Nama katalog. |
String |
Ya |
None |
Masukkan nama kustom dalam bahasa Inggris. |
|
catalog-database |
Nama database. |
String |
Ya |
default |
Nama database Anda di Data Lake Formation (DLF), misalnya dlf_db. Catatan
Jika Anda belum memiliki database Data Lake Formation (DLF), buat terlebih dahulu. |
|
io-impl |
Kelas implementasi untuk sistem file terdistribusi. |
String |
Ya |
None |
Nilainya harus |
|
oss.endpoint |
Titik akhir Alibaba Cloud Object Storage Service (OSS). |
String |
Tidak |
None |
Untuk informasi selengkapnya, lihat Wilayah dan Titik Akhir. Catatan
|
|
ID AccessKey akun Alibaba Cloud Anda. |
String |
Ya |
None |
Untuk informasi selengkapnya, lihat Bagaimana cara melihat ID AccessKey dan rahasia AccessKey? Penting
Untuk mencegah kebocoran informasi AccessKey Anda, kami menyarankan Anda menggunakan variabel untuk menentukan nilai AccessKey. Untuk informasi selengkapnya, lihat Variabel proyek. |
|
Rahasia AccessKey akun Alibaba Cloud Anda. |
String |
Ya |
None |
|
|
catalog-impl |
Nama kelas katalog. |
String |
Ya |
None |
Nilainya harus |
|
warehouse |
Jalur OSS untuk menyimpan data tabel. |
String |
Ya |
None |
None |
|
dlf.catalog-id |
ID akun Alibaba Cloud Anda. |
String |
Ya |
None |
Anda dapat memperoleh ID akun di halaman Informasi Pengguna. |
|
dlf.endpoint |
Titik akhir Data Lake Formation (DLF). |
String |
Ya |
None |
. Catatan
|
|
dlf.region-id |
Wilayah Data Lake Formation (DLF). |
String |
Ya |
None |
. Catatan
Pastikan wilayahnya sama dengan wilayah yang ditentukan untuk parameter dlf.endpoint. |
Opsi khusus sink
|
Parameter |
Deskripsi |
Tipe |
Wajib |
Default |
Keterangan |
|
write.operation |
Mode operasi penulisan. |
String |
Tidak |
upsert |
|
|
hive_sync.enable |
Menentukan apakah metadata disinkronkan ke Hive. |
Boolean |
Tidak |
false |
Nilai yang valid:
|
|
hive_sync.mode |
Mode sinkronisasi metadata Hive. |
String |
Tidak |
hms |
|
|
hive_sync.db |
Nama database Hive tempat data disinkronkan. |
String |
Tidak |
Nama database tabel saat ini di katalog. |
None |
|
hive_sync.table |
Nama tabel Hive tempat data disinkronkan. |
String |
Tidak |
Nama tabel saat ini. |
None |
|
dlf.catalog.region |
Wilayah Data Lake Formation (DLF). |
String |
Tidak |
None |
. Catatan
|
|
dlf.catalog.endpoint |
Titik akhir Data Lake Formation (DLF). |
String |
Tidak |
None |
. Catatan
|
Pemetaan tipe data
|
Iceberg Type |
Tipe Flink |
|
BOOLEAN |
BOOLEAN |
|
INT |
INT |
|
LONG |
BIGINT |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
DECIMAL(P,S) |
DECIMAL(P,S) |
|
DATE |
DATE |
|
TIME |
TIME Catatan
Timestamp Iceberg memiliki presisi mikrodetik, sedangkan timestamp Flink memiliki presisi milidetik. Saat Anda menggunakan Flink untuk membaca data dari Iceberg, Flink mengonversi presisi waktu ke milidetik. |
|
TIMESTAMP |
TIMESTAMP |
|
TIMESTAMPTZ |
TIMESTAMP_LTZ |
|
STRING |
STRING |
|
FIXED(L) |
BYTES |
|
BINARY |
VARBINARY |
|
STRUCT<...> |
ROW |
|
LIST<E> |
LIST |
|
MAP<K,V> |
MAP |
Contoh
Pastikan Anda memiliki bucket OSS dan database Data Lake Formation (DLF). Untuk informasi selengkapnya, lihat Membuat bucket dan Database, tabel, dan fungsi.
Saat Anda menentukan path untuk database Data Lake Formation (DLF) Anda, kami menyarankan Anda mengikuti format ${warehouse}/${database_name}.db. Misalnya, jika alamat warehouse adalah oss://iceberg-test/warehouse dan nama database adalah dlf_db, atur jalur OSS dlf_db menjadi oss://iceberg-test/warehouse/dlf_db.db.
Contoh tabel sink
Contoh ini menggunakan connector Datagen untuk menghasilkan data streaming acak dan menulis data tersebut ke tabel Iceberg.
CREATE TEMPORARY TABLE datagen(
id BIGINT,
data STRING
) WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE dlf_iceberg (
id BIGINT,
data STRING
) WITH (
'connector' = 'iceberg',
'catalog-name' = '<yourCatalogName>',
'catalog-database' = '<yourDatabaseName>',
'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO',
'oss.endpoint' = '<yourOSSEndpoint>',
'access.key.id' = '${secret_values.ak_id}',
'access.key.secret' = '${secret_values.ak_secret}',
'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog',
'warehouse' = '<yourOSSWarehousePath>',
'dlf.catalog-id' = '<yourCatalogId>',
'dlf.endpoint' = '<yourDLFEndpoint>',
'dlf.region-id' = '<yourDLFRegionId>'
);
INSERT INTO dlf_iceberg SELECT * FROM datagen;
Contoh tabel sumber
-
Gunakan katalog DLF untuk menulis data dari tabel sumber Iceberg ke tabel sink Iceberg.
CREATE TEMPORARY TABLE src_iceberg ( id BIGINT, data STRING ) WITH ( 'connector' = 'iceberg', 'catalog-name' = '<yourCatalogName>', 'catalog-database' = '<yourDatabaseName>', 'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO', 'oss.endpoint' = '<yourOSSEndpoint>', 'access.key.id' = '${secret_values.ak_id}', 'access.key.secret' = '${secret_values.ak_secret}', 'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog', 'warehouse' = '<yourOSSWarehousePath>', 'dlf.catalog-id' = '<yourCatalogId>', 'dlf.endpoint' = '<yourDLFEndpoint>', 'dlf.region-id' = '<yourDLFRegionId>' ); CREATE TEMPORARY TABLE dst_iceberg ( id BIGINT, data STRING ) WITH ( 'connector' = 'iceberg', 'catalog-name' = '<yourCatalogName>', 'catalog-database' = '<yourDatabaseName>', 'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO', 'oss.endpoint' = '<yourOSSEndpoint>', 'access.key.id' = '${secret_values.ak_id}', 'access.key.secret' = '${secret_values.ak_secret}', 'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog', 'warehouse' = '<yourOSSWarehousePath>', 'dlf.catalog-id' = '<yourCatalogId>', 'dlf.endpoint' = '<yourDLFEndpoint>', 'dlf.region-id' = '<yourDLFRegionId>' ); BEGIN STATEMENT SET; INSERT INTO src_iceberg VALUES (1, 'AAA'), (2, 'BBB'), (3, 'CCC'), (4, 'DDD'), (5, 'EEE'); INSERT INTO dst_iceberg SELECT * FROM src_iceberg; END;
Ingesti Data
Anda dapat menggunakan Apache Iceberg connector sebagai sink dalam pekerjaan YAML untuk Ingesti Data.
Sintaksis
sink:
type: iceberg
name: Iceberg Sink
catalog.properties.rest.signing-region: cn-beijing
catalog.properties.uri: http://cn-beijing-vpc.dlf.aliyuncs.com/iceberg
catalog.properties.warehouse: flink_iceberg
catalog.properties.type: rest
catalog.properties.io-impl: org.apache.iceberg.rest.DlfFileIO
Parameter
|
Parameter |
Deskripsi |
Wajib |
Tipe |
Default |
Keterangan |
|
type |
Jenis connector. |
Ya |
STRING |
None |
Nilai tetap adalah |
|
name |
Nama sink. |
Tidak |
STRING |
None |
Nama sink. |
|
catalog.properties.rest.signing-region |
ID wilayah DLF. Untuk informasi selengkapnya, lihat Titik akhir layanan. |
Ya |
STRING |
None |
None |
|
catalog.properties.uri |
URI yang digunakan untuk mengakses katalog REST DLF. Untuk informasi selengkapnya, lihat Iceberg REST. |
Ya |
STRING |
None |
None |
|
catalog.properties.warehouse |
Direktori root untuk penyimpanan file. |
Ya |
STRING |
None |
None |
|
catalog.properties.warehouse |
Direktori root untuk penyimpanan file. |
Tidak |
STRING |
None |
None |
|
catalog.properties.type |
Jenis katalog. Nilainya harus rest. |
Ya |
STRING |
rest |
None |
|
catalog.properties.io-impl |
Nilainya harus org.apache.iceberg.rest.DlfFileIO. |
Ya |
STRING |
org.apache.iceberg.rest.DlfFileIO |
None |
|
partition.key |
Kunci partisi untuk setiap tabel partisi. |
Tidak |
STRING |
None |
Anda dapat mengatur kunci partisi untuk beberapa tabel. Pisahkan definisi tabel dengan titik koma ( Untuk partisi yang memerlukan transformasi implisit, tambahkan fungsi transformasi langsung ke bidang partisi. Contoh: |
|
table.properties.* |
Parameter untuk membuat tabel Iceberg. |
Tidak |
String |
None |
Untuk informasi selengkapnya, lihat Opsi tabel Iceberg. |
Gunakan katalog yang sudah ada
Mulai dari VVR 11.5, Anda dapat langsung mereferensikan katalog Iceberg bawaan yang dibuat di halaman Data Management dalam pekerjaan ingesti data Flink CDC. Hal ini menyederhanakan konfigurasi Anda dengan mengurangi jumlah properti koneksi yang diperlukan.
sink:
type: iceberg
using.built-in-catalog: iceberg_catalog
Pekerjaan ingesti data dapat secara otomatis menggunakan kembali semua parameter katalog Iceberg. Ini setara dengan mengonfigurasi parameter secara manual dengan awalan catalog.properties. dalam pekerjaan YAML Anda.
Jika Anda ingin mengganti parameter yang digunakan kembali, Anda dapat secara eksplisit menentukan parameter YAML yang sesuai. Parameter ini akan memiliki prioritas lebih tinggi.
Contoh
Contoh berikut menunjukkan cara menggunakan katalog DLF sebagai katalog Iceberg dan menulis data ke Data Lake Formation (DLF):
source: type: mysql name: MySQL Source hostname: ${secret_values.mysql.hostname} port: ${mysql.port} username: ${secret_values.mysql.username} password: ${secret_values.mysql.password} tables: ${mysql.source.table} server-id: 8601-8604 sink: type: iceberg name: Iceberg Sink catalog.properties.rest.signing-region: cn-beijing catalog.properties.uri: http://cn-beijing-vpc.dlf.aliyuncs.com/iceberg catalog.properties.warehouse: flink_iceberg catalog.properties.type: rest catalog.properties.io-impl: org.apache.iceberg.rest.DlfFileIOUntuk informasi tentang parameter yang diawali dengan catalog.properties, lihat Membuat katalog Iceberg DLF.
Perubahan skema
Saat digunakan sebagai sink ingesti data, Apache Iceberg connector mendukung perubahan skema berikut:
-
CREATE TABLE
-
ADD COLUMN
-
ALTER COLUMN TYPE (Mengubah tipe kolom kunci primer tidak didukung.)
-
RENAME COLUMN
-
DROP COLUMN
-
TRUNCATE TABLE
-
DROP TABLE
Jika tabel Iceberg downstream sudah ada, pekerjaan akan menggunakan skema tabel yang ada untuk penulisan dan tidak membuat ulang tabel tersebut.
Dokumentasi terkait
Untuk informasi selengkapnya tentang connector yang didukung oleh Flink, lihat Connector yang didukung.