Bu konuda, Apache Iceberg bağlayıcısının nasıl kullanılacağı açıklanmaktadır.
Genel bilgiler
Apache Iceberg açık kaynaklı bir veri gölü tablo biçimidir. Apache Iceberg kullanarak HDFS veya cloud OSS üzerinde kendi veri gölü depolama hizmetinizi hızla oluşturabilir; Flink, Spark, Hive ve Presto gibi açık kaynaklı büyük veri ekosisteminden gelen işlem motorlarını kullanarak veri gölü analizi yapabilirsiniz.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Özellikler
Apache Iceberg bağlayıcısı aşağıdaki özellikleri sunar:
HDFS veya nesne depolama alanı üzerine düşük maliyetli, hafif bir veri gölü depolama hizmeti oluşturur.
Tam ACID semantiği sunar.
Geçmiş veri sürümlerine erişmek için zaman yolculuğu sorgularını destekler.
Verimli veri filtrelemeyi destekler.
Şema evrimini destekler.
Bölümleme evrimini destekler.
Flink'in hata toleransı ve akış işleme yeteneklerini kullanarak büyük hacimli günlük verilerini gerçek zamanlı olarak bir Apache Iceberg veri gölüne aktarın. Ardından, verilerden değer elde etmek için Flink veya diğer analiz motorlarını kullanabilirsiniz.
Sınırlamalar
Apache Iceberg bağlayıcısı yalnızca Ververica Runtime (VVR) 4.0.8 veya sonraki bir sürümü kullanan Realtime Compute for Apache Flink tarafından desteklenir. Apache Iceberg bağlayıcısı, bir Data Lake Formation (DLF) kataloğu ile birlikte kullanılmalıdır. Daha fazla bilgi için bkz. DLF-Legacy kataloglarını yönetme.
-
Apache Iceberg bağlayıcısı, Apache Iceberg v1 ve v2 tablo biçimlerini destekler. Daha fazla bilgi için bkz. Iceberg Tablo Teknik Özellikleri.
Notv2 tablo biçimi yalnızca VVR 8.0.7 veya sonraki bir sürümü kullanan Realtime Compute for Apache Flink tarafından desteklenir.
Akış okuma modunda, kaynak tablo olarak yalnızca sadece ekleme yapılabilen (append-only) Iceberg tablolarını kullanabilirsiniz.
Söz dizimi
CREATE TABLE iceberg_table (
id BIGINT,
data STRING
PRIMARY KEY(`id`) NOT ENFORCED
)
PARTITIONED BY (data)
WITH (
'connector' = 'iceberg',
...
);
WITH seçenekleri
Ortak seçenekler
|
Parametre |
Açıklama |
Tür |
Gerekli |
Varsayılan |
Açıklamalar |
|
connector |
Bağlayıcı türü. |
String |
Evet |
Yok |
Değer |
|
catalog-name |
Katalog adı. |
String |
Evet |
Yok |
İngilizce özel bir ad girin. |
|
catalog-database |
Veritabanı adı. |
String |
Evet |
default |
Data Lake Formation (DLF) içindeki veritabanınızın adı, örneğin dlf_db. Not
Bir Data Lake Formation (DLF) veritabanınız yoksa önce bir tane oluşturun. |
|
io-impl |
Dağıtılmış dosya sistemi için uygulama sınıfı. |
String |
Evet |
Yok |
Değer |
|
oss.endpoint |
Alibaba Cloud Object Storage Service (OSS) uç noktası. |
String |
Hayır |
Yok |
Daha fazla bilgi için bkz. Bölgeler ve Uç Noktalar. Not
|
|
Alibaba Cloud hesabınızın AccessKey ID'si. |
String |
Evet |
Yok |
Daha fazla bilgi için bkz. AccessKey ID ve AccessKey gizli anahtarı nasıl görüntülenir? Önemli
AccessKey bilgilerinizin sızmasını önlemek için AccessKey değerlerini belirtmek amacıyla değişkenler kullanmanız önerilir. Daha fazla bilgi için bkz. Proje değişkenleri. |
|
Alibaba Cloud hesabınızın AccessKey gizli anahtarı. |
String |
Evet |
Yok |
|
|
catalog-impl |
Katalogun sınıf adı. |
String |
Evet |
Yok |
Değer |
|
warehouse |
Tablo verilerini depolamak için kullanılan OSS yolu. |
String |
Evet |
Yok |
Yok |
|
dlf.catalog-id |
Alibaba Cloud hesap kimliğiniz. |
String |
Evet |
Yok |
Hesap kimliğini Kullanıcı Bilgileri sayfasından edinebilirsiniz. |
|
dlf.endpoint |
Data Lake Formation (DLF) uç noktası. |
String |
Evet |
Yok |
. Not
|
|
dlf.region-id |
Data Lake Formation (DLF) bölgesi. |
String |
Evet |
Yok |
. Not
Bölgenin, dlf.endpoint parametresi için belirtilen bölgeyle aynı olduğundan emin olun. |
Yalnızca hedefe yönelik seçenekler
|
Parametre |
Açıklama |
Tür |
Gerekli |
Varsayılan |
Açıklamalar |
|
write.operation |
Yazma işlemi modu. |
String |
Hayır |
upsert |
|
|
hive_sync.enable |
Meta verilerin Hive ile senkronize edilip edilmeyeceğini belirtir. |
Boolean |
Hayır |
false |
Geçerli değerler:
|
|
hive_sync.mode |
Hive meta veri senkronizasyon modu. |
String |
Hayır |
hms |
|
|
hive_sync.db |
Verilerin senkronize edildiği Hive veritabanının adı. |
String |
Hayır |
Katalogdaki mevcut tablonun veritabanı adı. |
Yok |
|
hive_sync.table |
Verilerin senkronize edildiği Hive tablosunun adı. |
String |
Hayır |
Mevcut tablonun adı. |
Yok |
|
dlf.catalog.region |
Data Lake Formation (DLF) bölgesi. |
String |
Hayır |
Yok |
. Not
|
|
dlf.catalog.endpoint |
Data Lake Formation (DLF) uç noktası. |
String |
Hayır |
Yok |
. Not
|
Veri türü eşlemesi
|
Iceberg türü |
Flink türü |
|
BOOLEAN |
BOOLEAN |
|
INT |
INT |
|
LONG |
BIGINT |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
DECIMAL(P,S) |
DECIMAL(P,S) |
|
DATE |
DATE |
|
TIME |
TIME Not
Iceberg zaman damgaları mikrosaniye hassasiyetine sahipken Flink zaman damgaları milisaniye hassasiyetine sahiptir. Flink'i kullanarak Iceberg'den veri okuduğunuzda Flink, zaman hassasiyetini milisaniyeye dönüştürür. |
|
TIMESTAMP |
TIMESTAMP |
|
TIMESTAMPTZ |
TIMESTAMP_LTZ |
|
STRING |
STRING |
|
FIXED(L) |
BYTES |
|
BINARY |
VARBINARY |
|
STRUCT<...> |
ROW |
|
LIST<E> |
LIST |
|
MAP<K,V> |
MAP |
Örnekler
Bir OSS paketiniz ve bir Data Lake Formation (DLF) veritabanınız olduğundan emin olun. Daha fazla bilgi için bkz. Paket oluşturma ve Veritabanları, tablolar ve işlevler.
Data Lake Formation (DLF) veritabanınız için bir path belirtirken ${warehouse}/${database_name}.db biçimini izlemeniz önerilir. Örneğin, depo adresi oss://iceberg-test/warehouse ve veritabanı adı dlf_db ise dlf_db için OSS yolunu oss://iceberg-test/warehouse/dlf_db.db olarak ayarlayın.
Hedef tablo örneği
Bu örnekte, Datagen bağlayıcısı kullanılarak rastgele akış verileri oluşturulur ve veriler bir Iceberg tablosuna yazılır.
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;
Kaynak tablo örnekleri
-
Bir DLF kataloğu kullanarak verileri bir Iceberg kaynak tablosundan bir Iceberg hedef tablosuna yazın.
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;
Veri alımı
Apache Iceberg bağlayıcısını, veri alımı için bir YAML işinde hedef olarak kullanabilirsiniz.
Söz dizimi
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
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Birden çok tablo için bölümleme anahtarları ayarlayabilirsiniz. Tablo tanımlarını noktalı virgül ( Örtük dönüşümler gerektiren bölümler için dönüşüm işlevini doğrudan bölüm alanına ekleyin. Örnek: |
|
|
|
|
|
|
|
Mevcut bir kataloğu yeniden kullanma
VVR 11.5'ten başlayarak, bir Flink CDC veri alımı işinde Veri Yönetimi sayfasında oluşturulan yerleşik bir Iceberg kataloğuna doğrudan başvurabilirsiniz. Bu yaklaşım, gerekli bağlantı özelliği sayısını azaltarak yapılandırmanızı basitleştirir.
sink:
type: iceberg
using.built-in-catalog: iceberg_catalog
Veri alımı işleri, tüm Iceberg katalog parametrelerini otomatik olarak yeniden kullanabilir. Bu durum, YAML işinizde catalog.properties. önekiyle parametreleri manuel olarak yapılandırmaya eşdeğerdir.
Yeniden kullanılan parametreleri geçersiz kılmak istiyorsanız ilgili YAML parametrelerini açıkça belirtebilirsiniz. Bu parametreler önceliklidir.
Örnek
Aşağıdaki örnekte, bir DLF kataloğunun Iceberg kataloğu olarak nasıl kullanılacağı ve verilerin Data Lake Formation (DLF) adresine nasıl yazılacağı gösterilmektedir:
-
catalog.properties önekiyle başlayan parametreler hakkında bilgi için bkz. Iceberg DLF kataloğu oluşturma.
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.DlfFileIO
Şema değişiklikleri
Veri alımı hedefi olarak kullanıldığında Apache Iceberg bağlayıcısı aşağıdaki şema değişikliklerini destekler:
CREATE TABLE
ADD COLUMN
ALTER COLUMN TYPE (Birincil anahtar sütununun türünün değiştirilmesi desteklenmez.)
RENAME COLUMN
DROP COLUMN
TRUNCATE TABLE
DROP TABLE
Aşağı akıştaki Iceberg tablosu zaten varsa iş, mevcut tablo şemasını yazma işlemleri için kullanır ve tabloyu yeniden oluşturmaz.
İlgili belgeler
Flink tarafından desteklenen bağlayıcılar hakkında daha fazla bilgi için bkz. Desteklenen bağlayıcılar.