Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Tablestore

Son Güncelleme:Oct 04, 2026

Tablestore konektörü, streaming modunda çalışan Flink SQL işlerinde Tablestore tablolarını kaynak tablo, boyut tablosu ve hedef tablo olarak kullanmanıza olanak tanır.

Konektör yetenekleri

Öğe Açıklama
Çalışma modu Streaming modu
API türü SQL API
Tablo türü Kaynak tablo, boyut tablosu ve hedef tablo
Veri biçimi Yok
Hedef tablo ölçümleri numBytesOut, numBytesOutPerSecond, numRecordsOut, numRecordsOutPerSecond, currentSendTime
Hedef tabloda veri güncelleme veya silme Desteklenir
Hedef ölçümler hakkında ayrıntılı bilgi için bkz. Monitoring metrics .

Önkoşullar

Başlamadan önce aşağıdaki öğelere sahip olduğunuzdan emin olun:

  • Bir Tablestore örneği ve bir Tablestore tablosu. Bkz. Use Tablestore.

Kullanım sınırlamaları

Tablestore örneklerine hesaplar arası erişim desteklenir. Bir VPC uç noktası kullanırken, Tablestore örneği Flink ile aynı bölgede olmalıdır. accessId ve accessKey değerlerini, Tablestore örneğinin sahibi olan hesabın AccessKey çiftine ayarlayın.

Söz dizimi

Üç tablo türünün tümü, WITH yan tümcesinde türüne özel seçeneklerle birlikte 'connector'='ots' ifadesini kullanır.

Hedef tablo

CREATE TABLE ots_sink (
  name VARCHAR,
  age BIGINT,
  birthday BIGINT,
  PRIMARY KEY (name, age) NOT ENFORCED
) WITH (
  'connector'='ots',
  'instanceName'='<yourInstanceName>',
  'tableName'='<yourTableName>',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'endPoint'='<yourEndpoint>',
  'valueColumns'='birthday'
);
Bir Tablestore hedef tablosu birincil anahtar gerektirir. Her çıktı kaydı, mevcut verileri güncellemek üzere tabloya eklenir.

Boyut tablosu

CREATE TABLE ots_dim (
  id INT,
  len INT,
  content STRING
) WITH (
  'connector'='ots',
  'endPoint'='<yourEndpoint>',
  'instanceName'='<yourInstanceName>',
  'tableName'='<yourTableName>',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}'
);

Kaynak tablo

CREATE TABLE tablestore_stream (
  `order` VARCHAR,
  orderid VARCHAR,
  customerid VARCHAR,
  customername VARCHAR
) WITH (
  'connector'='ots',
  'endPoint'='<yourEndpoint>',
  'instanceName'='flink-source',
  'tableName'='flink_source_table',
  'tunnelName'='flinksourcestream',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'ignoreDelete'='false'
);

Kullanılabilir meta veriler

Tablestore kaynak tablosu, METADATA anahtar sözcüğü aracılığıyla iki meta veri alanını sunar. Bu alanları, her değişiklik olayının işlem türünü ve zamanlamasını izlemek için kullanın.

Meta veri anahtarı Flink veri türü Açıklama
type STRING Veri işlemi türü (OtsRecordType ile eşleşir).
timestamp BIGINT Mikrosaniye cinsinden veri işlemi zamanı (OtsRecordTimestamp ile eşleşir). Tam veri okumaları için 0 olarak ayarlanır.

Meta veri alanlarını okumak için bunları METADATA FROM söz dizimiyle bildirin:

CREATE TABLE tablestore_stream (
  `order` VARCHAR,
  orderid VARCHAR,
  customerid VARCHAR,
  customername VARCHAR,
  record_type STRING METADATA FROM 'type',
  record_timestamp BIGINT METADATA FROM 'timestamp'
) WITH (
  ...
);

Konektör seçenekleri

Genel seçenekler

Tüm tablo türleri aşağıdaki seçenekleri paylaşır.

Seçenek Tür Gerekli Varsayılan Açıklama
connector String Evet — ots olarak ayarlayın.
instanceName String Evet — Tablestore örneğinin adı.
endPoint String Evet — Tablestore örneğinin uç noktası. Bkz. Endpoints.
tableName String Evet — Tablonun adı.
accessId String Evet — Alibaba Cloud hesabınızın veya bir Resource Access Management (RAM) kullanıcısının AccessKey ID'si. Bkz. How do I view the AccessKey ID and AccessKey secret?
accessKey String Evet — Alibaba Cloud hesabınızın veya bir RAM kullanıcısının AccessKey gizli anahtarı.
connectTimeout Integer Hayır 30000 Milisaniye cinsinden bağlantı zaman aşımı.
socketTimeout Integer Hayır 30000 Milisaniye cinsinden soket zaman aşımı.
ioThreadCount Integer Hayır 4 G/Ç iş parçacığı sayısı.
callbackThreadPoolSize Integer Hayır 4 Geri arama iş parçacığı havuzunun boyutu.
Önemli

AccessKey çiftinizi sabit kodlamak yerine saklamak için variables kullanın.

Kaynak tablo seçenekleri

Seçenek Tür Gerekli Varsayılan Açıklama
tunnelName String Evet — Tablestore tünelinin adı. Bu seçeneği kullanmadan önce tüneli Tablestore konsolunda oluşturun. Desteklenen tünel türleri: Artımlı, Tam ve Farklı. Bkz. Quick start içindeki "Create a tunnel" bölümü.
ignoreDelete Boolean Hayır false Silme işlemlerinin atlanıp atlanmayacağı. true: atla; false: silme işlemlerini işle.
skipInvalidData Boolean Hayır false Hatalı verilerin atlanıp atlanmayacağı. true: hatalı verileri atla; false: hata bildir. Ververica Runtime (VVR) 8.0.4 veya sonraki sürümler gerektirir.
retryStrategy Enum Hayır TIME Yeniden deneme ilkesi. TIME: retryTimeoutMs süresi dolana kadar yeniden dene; COUNT: retryCount sayısına ulaşılana kadar yeniden dene.
retryCount Integer Hayır 3 Maksimum yeniden deneme sayısı. retryStrategy değeri COUNT olduğunda uygulanır.
retryTimeoutMs Integer Hayır 180000 Milisaniye cinsinden yeniden deneme zaman aşımı. retryStrategy değeri TIME olduğunda uygulanır.
streamOriginColumnMapping String Hayır — Orijinal sütun adlarından gerçek sütun adlarına eşleme. Biçim: origin_col1:col1,origin_col2:col2.
outputSpecificRowType Boolean Hayır false Belirli satır türünün geçirilip geçirilmeyeceği. false: tüm satırlar INSERT olarak işlenir; true: satırlar INSERT, DELETE veya UPDATE_AFTER olabilir.
dataFetchTimeoutMs Integer Hayır 10000 Tek bir bölümden veri getirmek için milisaniye cinsinden maksimum süre. Çok sayıda bölüm senkronize ederken genel senkronizasyon gecikmesini azaltmak için bu değeri düşürün. VVR 8.0.10 veya sonraki sürümler gerektirir.
enableRequestCompression Boolean Hayır false İstek sıkıştırmasının etkinleştirilip etkinleştirilmeyeceği. Daha yüksek CPU yükü pahasına bant genişliği kullanımını azaltır. VVR 8.0.10 veya sonraki sürümler gerektirir.

Hedef tablo seçenekleri

Seçenek Tür Gerekli Varsayılan Açıklama
valueColumns String Evet — Yazılacak sütunların adları. Birden fazla sütun adını virgülle (,) ayırın.
retryIntervalMs Integer Hayır 1000 Milisaniye cinsinden yeniden deneme aralığı.
maxRetryTimes Integer Hayır 10 Maksimum yeniden deneme sayısı.
bufferSize Integer Hayır 5000 Bir yazma işlemi tetiklenmeden önce arabelleğe alınan maksimum kayıt sayısı.
batchWriteTimeoutMs Integer Hayır 5000 Milisaniye cinsinden yazma zaman aşımı. Arabellekteki kayıtlar bu süre içinde bufferSize değerine ulaşmazsa, arabellekteki tüm kayıtlar yazılır.
batchSize Integer Hayır 100 Toplu iş başına yazılan kayıt sayısı. Maksimum: 200.
ignoreDelete Boolean Hayır false Silme işlemlerinin atlanıp atlanmayacağı.
autoIncrementKey String Hayır — Otomatik artan birincil anahtar sütununun adı. Yalnızca hedef tabloda otomatik artan birincil anahtar sütunu varsa yapılandırın. VVR 8.0.4 veya sonraki sürümler gerektirir.
overwriteMode Enum Hayır PUT Yazma modu. PUT: PUT modunda üzerine yaz; UPDATE: UPDATE modunda üzerine yaz. Dinamik sütun modu UPDATE gerektirir.
defaultTimestampInMillisecond Long Hayır -1 Yazmalar için varsayılan zaman damgası. Ayarlanmazsa geçerli sistem saati kullanılır.
dynamicColumnSink Boolean Hayır false Dinamik sütun modunun etkinleştirilip etkinleştirilmeyeceği. Bu modda hiçbir sütun önceden tanımlanmaz; sütunlar çalışma zamanı değerlerine göre eklenir. İlk N sütun birincil anahtarı tanımlar. Sondan ikinci sütun sütun adını, son sütun ise değerini tutar; her ikisi de STRING olmalıdır. Etkinleştirilirse, overwriteMode değeri UPDATE olmalı ve otomatik artan birincil anahtarlar desteklenmez.
checkSinkTableMeta Boolean Hayır true Tablestore tablosunun birincil anahtarının CREATE TABLE deyimi içinde bildirilen birincil anahtarla eşleştiğinin doğrulanıp doğrulanmayacağı.
enableRequestCompression Boolean Hayır false Yazma sırasında istek sıkıştırmasının etkinleştirilip etkinleştirilmeyeceği.
maxColumnsCount Integer Hayır 128 Hedef tabloya yazılan maksimum sütun sayısı. 128'in üzerinde ayarlanırsa The count of attribute columns exceeds the maximum hatası oluşur. VVR 8.0.10 veya sonraki sürümler gerektirir.
storageType String Hayır WIDE_COLUMN Hedef tablo türü. WIDE_COLUMN: geniş sütunlu tablo; TIMESERIES: zaman serisi tablosu.

Boyut tablosu seçenekleri

Önbelleğin çalışma şekli

Boyut tablosu önbelleği, Tablestore'a yönelik tekrarlayan aramaları azaltır. Tablo boyutunuza ve sorgu kalıplarınıza göre bir önbellek ilkesi seçin:

  • None: Önbellek yok. Her arama doğrudan Tablestore'a gider. Verilerin sık değiştiği ve güncelliğin kritik olduğu durumlarda kullanın.

  • LRU: Son erişilen sabit sayıda kaydı önbelleğe alır. Bir arama önbellekte bulunamazsa, konektör Tablestore'u sorgular ve sonucu önbellekle günceller. Bu ilkeyi kullanırken cacheSize ve cacheTTLMs değerlerini ayarlayın.

  • ALL (varsayılan): İş başlamadan önce tüm boyut tablosunu önbelleğe yükler. Sonraki tüm aramalar önbellekten karşılanır. Önbelleğin süresi dolduğunda (cacheTTLMs), konektör tüm verileri yeniden yükler. Tablo küçükse ve çok sayıda eksik anahtar araması bekliyorsanız ALL kullanın. ALL kullanırken, join düğümünün belleğini artırın; önbellek, uzak tablonun yaklaşık iki katı büyüklükte yer kaplar.

Seçenek Tür Gerekli Varsayılan Açıklama
retryIntervalMs Integer Hayır 1000 Milisaniye cinsinden yeniden deneme aralığı.
maxRetryTimes Integer Hayır 10 Maksimum yeniden deneme sayısı.
cache String Hayır ALL Önbellek ilkesi: None, LRU veya ALL.
cacheSize Integer Hayır — Maksimum önbelleğe alınan kayıt sayısı. cache değeri LRU olduğunda uygulanır.
cacheTTLMs Integer Hayır — Milisaniye cinsinden önbellek TTL'si. LRU için: giriş başına zaman aşımı. ALL için: tam önbellek yenileme aralığı. Süre sonunu devre dışı bırakmak için ayarlamayın.
cacheEmpty Boolean Hayır — Boş (eşleşme yok) sonuçların önbelleğe alınıp alınmayacağı. true: önbelleğe al; false: önbelleğe alma.
cacheReloadTimeBlackList String Hayır — ALL önbelleğinin yenilenmediği zaman pencereleri. Biçim: 2017-10-24 14:00 -> 2017-10-24 15:00, 2017-11-10 23:30 -> 2017-11-11 08:00. Birden fazla pencereyi virgülle ayırın; başlangıç ve bitiş saatleri arasında -> kullanın.
async Boolean Hayır false Eşzamansız aramanın etkinleştirilip etkinleştirilmeyeceği. true: eşzamansız aramalar (sonuçlar sıralı değildir); false: eşzamanlı aramalar.

Veri türü eşlemeleri

Kaynak tablo

Tablestore türü Flink SQL türü
INTEGER BIGINT
STRING STRING
BOOLEAN BOOLEAN
DOUBLE DOUBLE
BINARY BINARY

Hedef tablo

Flink SQL türü Tablestore türü
BINARY BINARY
VARBINARY BINARY
CHAR STRING
VARCHAR STRING
TINYINT INTEGER
SMALLINT INTEGER
INTEGER INTEGER
BIGINT INTEGER
FLOAT DOUBLE
DOUBLE DOUBLE
BOOLEAN BOOLEAN

Örnekler

Tablestore'dan okuma ve Tablestore'a yazma

Bu örnekte, Tunnel Service aracılığıyla bir Tablestore kaynak tablosundan sipariş verileri okunur ve bir Tablestore hedef tablosuna yazılır. Hedef tablo, otomatik artan bir birincil anahtar sütunu kullanır.

CREATE TEMPORARY TABLE tablestore_stream (
  `order` VARCHAR,
  orderid VARCHAR,
  customerid VARCHAR,
  customername VARCHAR
) WITH (
  'connector'='ots',
  'endPoint'='<yourEndpoint>',
  'instanceName'='flink-source',
  'tableName'='flink_source_table',
  'tunnelName'='flinksourcestream',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'ignoreDelete'='false',
  'skipInvalidData'='false'
);

CREATE TEMPORARY TABLE ots_sink (
  `order` VARCHAR,
  orderid VARCHAR,
  customerid VARCHAR,
  customername VARCHAR,
  PRIMARY KEY (`order`, orderid) NOT ENFORCED
) WITH (
  'connector'='ots',
  'endPoint'='<yourEndpoint>',
  'instanceName'='flink-sink',
  'tableName'='flink_sink_table',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'valueColumns'='customerid,customername',
  'autoIncrementKey'='${auto_increment_primary_key_name}'
);

INSERT INTO ots_sink
SELECT `order`, orderid, customerid, customername FROM tablestore_stream;

Geniş sütunlu tabloyu zaman serisi tablosuna senkronize etme

Bu örnekte, geniş sütunlu bir kaynak tablosundan okuma yapılır ve zaman serisi bir hedef tabloya yazılır. Hedef tablonun tags sütunu, etiket anahtar-değer çiftlerini tutmak için MAP<STRING, STRING> kullanır ve storageType değeri TIMESERIES olarak ayarlanır.

CREATE TEMPORARY TABLE timeseries_source (
  measurement STRING,
  datasource STRING,
  tag_a STRING,
  `time` BIGINT,
  binary_value BINARY,
  bool_value BOOLEAN,
  double_value DOUBLE,
  long_value BIGINT,
  string_value STRING,
  tag_b STRING,
  tag_c STRING,
  tag_d STRING,
  tag_e STRING,
  tag_f STRING
) WITH (
  'connector'='ots',
  'endPoint'='https://iotstore-test.cn-hangzhou.vpc.tablestore.aliyuncs.com',
  'instanceName'='iotstore-test',
  'tableName'='test_ots_timeseries_2',
  'tunnelName'='timeseries_source_tunnel_2',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'ignoreDelete'='true'
);

CREATE TEMPORARY TABLE timeseries_sink (
  measurement STRING,
  datasource STRING,
  tags MAP<STRING, STRING>,
  `time` BIGINT,
  binary_value BINARY,
  bool_value BOOLEAN,
  double_value DOUBLE,
  long_value BIGINT,
  string_value STRING,
  tag_b STRING,
  tag_c STRING,
  tag_d STRING,
  tag_e STRING,
  tag_f STRING,
  PRIMARY KEY (measurement, datasource, tags, `time`) NOT ENFORCED
) WITH (
  'connector'='ots',
  'endPoint'='https://iotstore-test.cn-hangzhou.vpc.tablestore.aliyuncs.com',
  'instanceName'='iotstore-test',
  'tableName'='test_timeseries_sink_table_2',
  'accessId'='${ak_id}',
  'accessKey'='${ak_secret}',
  'storageType'='TIMESERIES'
);

-- Build the tags map from individual tag columns and insert into the time series sink table
INSERT INTO timeseries_sink
SELECT
  measurement,
  datasource,
  MAP['tag_a', tag_a, 'tag_b', tag_b, 'tag_c', tag_c, 'tag_d', tag_d, 'tag_e', tag_e, 'tag_f', tag_f] AS tags,
  `time`,
  binary_value,
  bool_value,
  double_value,
  long_value,
  string_value,
  tag_b,
  tag_c,
  tag_d,
  tag_e,
  tag_f
FROM timeseries_source;

Sonraki adımlar