AnalyticDB for PostgreSQL connector, Realtime Compute for Apache Flink SQL işlerinde AnalyticDB for PostgreSQL hizmetini kaynak (beta), boyut veya havuz tablosu olarak kullanmanıza olanak tanır. AnalyticDB for PostgreSQL, büyük ölçekli çevrimiçi analitik için tasarlanmış yüksek derecede paralel işleme (MPP) özellikli bir veri ambarıdır.
Desteklenenler: Kaynak (beta) · Boyut · Havuz | Akış · Toplu İş | SQL API | Havuz güncellemeleri ve silme işlemlerini destekler
Kaynak tablodan veri okumak için Flink CDC aracılığıyla yapılandırılmış özel bir connector gerekir. Kurulum talimatları için bkz. Use Flink CDC to subscribe to full and incremental data in real time .
Önkoşullar
Başlamadan önce aşağıdakileri tamamladığınızdan emin olun:
Bir AnalyticDB for PostgreSQL örneği ve tablosu. Bkz. Create an instance ve CREATE TABLE
Örnek için yapılandırılmış bir IP adresi izin listesi. Bkz. Configure an IP address whitelist
Sınırlamalar
AnalyticDB for PostgreSQL V7.0, VVR 8.0.1 veya sonraki bir sürümü gerektirir.
Kendi kendine yönetilen PostgreSQL veritabanları desteklenmez.
Söz dizimi
Boyut ve havuz tabloları için connector='adbpg' parametresini, kaynak tabloları için ise connector='adbpg-cdc' parametresini kullanın.
CREATE TEMPORARY TABLE adbpg_table (
id INT,
len INT,
content VARCHAR,
PRIMARY KEY (id)
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
Connector seçenekleri
Genel
Bu seçenekler tüm tablo türleri için geçerlidir.
| Seçenek | Zorunlu | Varsayılan | Tür | Açıklama |
|---|---|---|---|---|
connector |
Evet | — | STRING | Kaynak tablolar için adbpg-cdc değerini, boyut ve havuz tabloları için adbpg değerini ayarlayın. |
url |
Evet | — | STRING | jdbc:postgresql://<host>:<port>/<database> biçimindeki Java Database Connectivity (JDBC) URL'si. |
tableName |
Evet | — | STRING | Veritabanındaki tablonun adı. |
userName |
Evet | — | STRING | AnalyticDB for PostgreSQL veritabanı kullanıcı adı. |
password |
Evet | — | STRING | AnalyticDB for PostgreSQL veritabanı parolası. |
maxRetryTimes |
Hayır | 3 |
INTEGER | Yazma işlemi başarısız olduğunda denenecek maksimum yeniden deneme sayısı. |
targetSchema |
Hayır | public |
STRING | Veritabanı şemasının adı. |
caseSensitive |
Hayır | false |
STRING | Tanımlayıcıların büyük/küçük harfe duyarlı olup olmadığını belirtir. Geçerli değerler: true, false. |
connectionMaxActive |
Hayır | 5 |
INTEGER | Bağlantı havuzundaki maksimum bağlantı sayısı. Connector, boşta kalan bağlantıları otomatik olarak serbest bırakır. Bu değerin çok yüksek ayarlanması sunucudaki bağlantı sayısının anormal hale gelmesine neden olabilir. |
Kaynağa özgü (beta)
Bu seçenekler yalnızca kaynak tablolar (connector='adbpg-cdc') için geçerlidir.
| Seçenek | Zorunlu | Varsayılan | Tür | Açıklama |
|---|---|---|---|---|
schema-name |
Evet | — | STRING | Şema adı. Birden fazla şemaya aynı anda abone olmak için normal ifadeleri destekler. |
port |
Evet | 5432 |
INTEGER | AnalyticDB for PostgreSQL örneğinin bağlantı noktası. |
decoding.plugin.name |
Evet | pgoutput |
STRING | PostgreSQL mantıksal kod çözme eklentisi. pgoutput olarak ayarlayın. |
slot.name |
Evet | — | STRING | Mantıksal kod çözme yuvasının adı. Bkz. Yuva adı rehberi. |
debezium.* |
Evet | — | STRING | Debezium istemci yapılandırma özellikleri. Örneğin, ilk anlık görüntüyü atlamak için 'debezium.snapshot.mode' = 'never' ayarını yapın. Bkz. Connector properties. |
scan.incremental.snapshot.enabled |
Hayır | false |
BOOLEAN | Artımlı anlık görüntünün etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler: true, false. |
scan.startup.mode |
Hayır | initial |
STRING | Veri tüketimi için başlangıç modu. Bkz. Başlangıç modları. |
changelog-mode |
Hayır | ALL |
STRING | Değişiklik olaylarının değişiklik akışında nasıl kodlandığını belirtir. Geçerli değerler: ALL, UPSERT. |
heartbeat.interval.ms |
Hayır | 30 saniye | DURATION | Milisaniye cinsinden kalp atışı paketlerinin gönderilme aralığı. Bkz. Kalp atışı ve WAL saklama. |
scan.incremental.snapshot.chunk.key-column |
Hayır | İlk birincil anahtar sütunu | STRING | Anlık görüntü okumaları sırasında parça anahtarı olarak kullanılan sütun. |
Başlangıç modları
| Değer | Davranış |
|---|---|
initial (varsayılan) |
İlk başlatmada tam geçmiş veri taraması gerçekleştirir, ardından en son Write-Ahead Logging (WAL) konumundan okumaya devam eder. |
latest-offset |
Geçmiş veri taramasını atlar ve yalnızca WAL'in mevcut sonundan okur. |
snapshot |
Tam geçmiş veri taraması gerçekleştirir ve bu tarama sırasında oluşturulan WAL verilerini yakalar. Tarama tamamlandıktan sonra durur. |
Değişiklik günlüğü modları
| Değer | Yakalanan olaylar |
|---|---|
ALL (varsayılan) |
INSERT, DELETE, UPDATE_BEFORE, UPDATE_AFTER |
UPSERT |
INSERT, DELETE, UPDATE_AFTER |
Yuva adı rehberi
Çakışmaları önlemek için çoğaltma yuvalarının dikkatlice yönetilmesi gerekir:
Tek bir Flink işi içinde: İş içindeki tüm kaynak tablolar için aynı
slot.namedeğerini kullanın.Farklı Flink işleri arasında: Her iş için benzersiz bir
slot.namedeğeri atayın. Farklı işlerde aynı yuva adının yeniden kullanılmasıPSQLException: ERROR: replication slot "debezium" is active for PID 974hatasına neden olur.
Kalp atışı ve WAL saklama
Bir kaynak tablodaki güncellemeler seyrek olduğunda, connector çoğaltma yuvası ofsetini ilerletmeyebilir. Veritabanı, yuva ofseti ilgili dosyaların üzerine gelene kadar WAL dosyalarını tuttuğu için bu durum AnalyticDB for PostgreSQL'in WAL disk alanını geri kazanmasını engeller. Periyodik kalp atışı göndermek, yuva ofsetinin ileriye doğru hareket etmesini sağlayarak eski WAL dosyalarının serbest bırakılmasına olanak tanır. Tablo değişikliklerinin seyrek olduğu durumlarda heartbeat.interval.ms değerini güncelleme sıklığınıza uygun olacak şekilde ayarlayın.
Havuza özgü
Bu seçenekler yalnızca havuz tabloları (connector='adbpg') için geçerlidir.
| Seçenek | Zorunlu | Varsayılan | Tür | Açıklama |
|---|---|---|---|---|
writeMode |
Hayır | insert |
STRING | İlk yazma denemesi için yazma stratejisi. Bkz. Yazma modları ve çakışma çözümü. |
conflictMode |
Hayır | strict |
STRING | Birincil anahtar veya dizin çakışmalarının nasıl ele alınacağını belirtir. Bkz. Yazma modları ve çakışma çözümü. |
batchSize |
Hayır | 500 |
INTEGER | Parti başına yazılan kayıt sayısı. |
flushIntervalMs |
Hayır | — | INTEGER | Connector'un önbelleğe alınan kayıtları flush etmeden önce bekleyeceği maksimum süre (milisaniye). Arabellek bu süre içinde batchSize değerine ulaşmazsa arabellekteki tüm kayıtlar hemen yazılır. |
retryWaitTime |
Hayır | 100 |
INTEGER | Yeniden deneme girişimleri arasındaki aralık (milisaniye). |
Yazma modları ve çakışma çözümü
writeMode ve conflictMode parametreleri, kayıtların nasıl yazılacağını ve çakışmaların nasıl ele alınacağını kontrol etmek için birlikte çalışır.
**writeMode** |
Açıklama | Notlar |
|---|---|---|
insert (varsayılan) |
Kayıtları doğrudan ekler. Çakışma işleme yöntemi conflictMode tarafından belirlenir. |
Çoğu kullanım senaryosu için uygundur. |
upsert |
Çakışma durumunda mevcut kayıtları otomatik olarak günceller. | Birincil anahtar gerektirir. |
copy |
Kayıtları PostgreSQL COPY komutunu kullanarak ekler. |
VVR 11.1 veya sonraki bir sürüm gerektirir. |
**conflictMode** |
Çakışma durumunda davranış | Notlar |
|---|---|---|
strict (varsayılan) |
Hata bildirir. | |
ignore |
Çakışan kaydı sessizce atar. | |
update |
Çakışan kaydı günceller. | Birincil anahtarı olmayan tablolar için uygundur. Yazma aktarım hızını azaltır. |
upsert |
Çakışan kaydı günceller. | Birincil anahtar gerektirir. Anahtarlı tablolar için update modundan daha verimlidir. |
Boyut tablosuna özgü
Bu seçenekler yalnızca boyut tabloları (connector='adbpg' ile FOR SYSTEM_TIME AS OF kullanılarak JOIN yapılan tablolar) için geçerlidir.
| Seçenek | Zorunlu | Varsayılan | Tür | Açıklama |
|---|---|---|---|---|
cache |
Hayır | ALL |
STRING | Boyut tablosu aramaları için önbellek ilkesi. Bkz. Önbellek ilkeleri. |
cacheSize |
Hayır | 100000 |
LONG | Önbellekte tutulacak maksimum satır sayısı. Yalnızca cache=LRU olduğunda etkili olur. |
cacheTTLMs |
Hayır | Long.MAX_VALUE |
LONG | Milisaniye cinsinden önbellek girdisinin yaşam süresi. Davranış cache ayarına bağlıdır. Bkz. Önbellek ilkeleri. |
maxJoinRows |
Hayır | 1024 |
INTEGER | Giriş kaydı başına join yapılacak maksimum satır sayısı. |
Önbellek ilkeleri
Doğru önbellek ilkesini seçmek, sorgu aktarım hızı ile veri güncelliği arasında denge kurmanızı sağlar.
**cache değeri** |
Davranış | Ne zaman kullanılır |
|---|---|---|
ALL (varsayılan) |
İş başlamadan önce boyut tablosunun tamamını belleğe yükler. Tüm aramalar önbelleğe isabet eder. Önbellek süresi dolduğunda (cacheTTLMs), tabloyu tamamen yeniden yükler. Join anahtarı önbellekte bulunamazsa, veri yok demektir. |
Periyodik yeniden yüklemelere tolerans gösterilebilen küçük ve orta ölçekli boyut tabloları için. |
LRU |
Satırların bir alt kümesini önbelleğe alır. Önbellek isabeti olmadığında veritabanından getirir ve önbelleği günceller. Önbellek cacheSize sınırına ulaştığında en uzun süredir kullanılmayan girdileri temizler. cacheTTLMs girdi başına son kullanma süresini kontrol eder. |
Her şeyi önbelleğe almanın mümkün olmadığı büyük boyut tabloları veya düşük gecikmeli kısmi önbelleklemenin kabul edilebilir olduğu durumlar için. |
None |
Önbellek yok. Her arama veritabanına gider. | Verilerin her zaman veritabanından taze olarak okunması gerektiğinde. |
Veri türü eşlemeleri
| AnalyticDB for PostgreSQL türü | Flink SQL türü |
|---|---|
BOOLEAN |
BOOLEAN |
SMALLINT |
INT |
INT |
INT |
BIGINT |
BIGINT |
FLOAT |
DOUBLE |
VARCHAR |
VARCHAR |
TEXT |
VARCHAR |
TIMESTAMP |
TIMESTAMP |
DATE |
DATE |
Örnekler
Havuz tablosu
Bu örnek, bir datagen kaynağından veri okur ve bir AnalyticDB for PostgreSQL havuz tablosuna yazar.
CREATE TEMPORARY TABLE datagen_source (
`name` VARCHAR,
`age` INT
)
COMMENT 'datagen source table'
WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE adbpg_sink (
name VARCHAR,
age INT
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
INSERT INTO adbpg_sink
SELECT * FROM datagen_source;
Boyut tablosu
Bu örnek, bir datagen akışını geçici bir join kullanarak bir AnalyticDB for PostgreSQL boyut tablosuyla birleştirir.
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
`proctime` AS PROCTIME()
)
COMMENT 'datagen source table'
WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE adbpg_dim (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
CREATE TEMPORARY TABLE blackhole_sink (
a INT,
b STRING
)
COMMENT 'blackhole sink table'
WITH (
'connector' = 'blackhole'
);
INSERT INTO blackhole_sink
SELECT T.a, H.b
FROM datagen_source AS T
JOIN adbpg_dim FOR SYSTEM_TIME AS OF T.proctime AS H
ON T.a = H.a;
Kaynak tablosu (beta)
Kaynak tablosu yapılandırması ve örnekleri için bkz. Use Flink CDC to subscribe to full and incremental data in real time.
Metrikler
Havuz tablosu metrikleri Realtime Compute for Apache Flink konsolunda kullanılabilir. Boyut tabloları metrikleri dışa açmaz. Metrik tanımları için bkz. Metrics.
| Metrik | Açıklama |
|---|---|
numRecordsOut |
Havuza yazılan toplam kayıt sayısı. |
numRecordsOutPerSecond |
Saniye başına yazılan kayıt sayısı. |
numBytesOut |
Havuza yazılan toplam bayt sayısı. |
numBytesOutPerSecond |
Saniye başına yazılan bayt sayısı. |
currentSendTime |
En son yazma işleminin gerçekleşme süresi. |