Hologres veri kaynağı, Hologres için çift yönlü okuma ve yazma kanalları sağlar. Bu konuda, DataWorks tarafından desteklenen Hologres veri senkronizasyonu yetenekleri açıklanmaktadır.
Sınırlamalar
Hologres veri kaynağı, senkronizasyon görevlerini yalnızca bir serverless kaynak grubunda çalıştırmayı destekler.
Toplu iş okuma ve yazma
Hologres Writer, verilerin Hologres harici tablolarına yazılmasını desteklemez.
-
Veri kaynağı bağlantısı için Hologres uç noktasının belirlenmesine ilişkin mantık:
Geçerli bölgedeki Hologres örnekleri için uç nokta önceliği şöyledir: any Tunnel > Single Tunnel > Public (internet).
Diğer bölgelerdeki Hologres örnekleri için uç nokta önceliği şöyledir: Public (internet) > Single Tunnel.
Tek tablo gerçek zamanlı okuma
Hologres sürümü 2,1 veya üzeri olmalıdır.
Hologres bölümlenmiş tabloların artımlı senkronizasyonu desteklenmez.
Hologres tablolarındaki DDL değişiklik mesajlarının senkronizasyonu desteklenmez.
-
Hologres artımlı senkronizasyon aşağıdaki veri türlerini destekler:
INTEGER, BIGINT, TEXT, CHAR(n), VARCHAR(n), REAL, JSON, SERIAL, OID, INT4[], INT8[], FLOAT8[], BOOLEAN[], TEXT[].
Hologres'ten tek tablo gerçek zamanlı senkronizasyon için kaynak Hologres tablosunda Hologres Binlog'u etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. Hologres Binlog'a abone olma.
Tam veritabanı gerçek zamanlı yazma
Gerçek zamanlı veri senkronizasyon görevleri, birincil anahtarı olmayan tabloların senkronize edilmesini desteklemez.
MySQL tam veritabanından Hologres'e gerçek zamanlı olarak veri senkronize ederken veriler yalnızca bölümlenmiş tabloların alt tablolarına yazılabilir. Bölümlenmiş bir tablonun üst tablosuna yazma işlemi desteklenmez.
Desteklenen veri türleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Çalışma mekanizması
Toplu iş okuma
Hologres Reader iki okuma modunu destekler:
JDBC modu (varsayılan)
PSQL aracılığıyla Hologres tablolarından veri okur. Tablonun parça sayısına bağlı olarak birden çok eşzamanlı görev başlatılır; her parça bir Select görevine karşılık gelir:
-
Hologres'te tablo oluştururken, aynı
CREATE TABLEişlemi içindeCALL set_table_property('table_name', 'shard_count', 'xx')komutunu çalıştırarak tablonun parça sayısını yapılandırabilirsiniz.Varsayılan olarak, veritabanı Hologres örneğinin yapılandırmasına bağlı olan varsayılan parça sayısını kullanır.
Select deyimi, tablonun yerleşik sütunu hg_shard_id kullanarak verilere göre parçaları filtreler.
Arrow modu (useArrow=true)
Hologres COPY OUT Arrow protokolü üzerinden veri okur. Bu mod LZ4 sıkıştırılmış aktarımı destekler ve daha yüksek performans sağlar:
Hologres sürümünün >= 4,0,18 olması gerekir.
Eşzamanlı görevler ayrıca parça sayısına göre ayrılır.
İşlev sütunları ve sabit sütunlar desteklenmez. Yalnızca tablodaki fiziksel sütunlar desteklenir.
Sürüm gereksinimi karşılandığında sıkıştırılmış aktarım otomatik olarak etkinleştirilir.
Toplu iş yazma
Hologres Writer, veri senkronizasyon çerçevesi aracılığıyla Reader tarafından oluşturulan protokol verilerini alır. Veri yazmak için kullanılan kanal ve çakışma çözümleme stratejisi, writeMode ve conflictMode yapılandırmaları tarafından belirlenir.
Yazma modu (writeMode)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Senaryo önerileri
Çakışma işleme modu (conflictMode)
Mevcut verilerle birincil anahtar çakışması oluştuğunda yeni içe aktarılan verilerin nasıl işleneceğini belirtmek için conflictMode parametresini yapılandırabilirsiniz:
conflictMode yalnızca birincil anahtarlara sahip tablolar için geçerlidir. Yazma mekanizması ve performansı hakkında daha fazla bilgi için bkz. Hologres'e veri yazma.
conflictMode parametresi Replace (tam satır güncelleme) olarak ayarlandığında, yeni veriler eski verilerin üzerine yazar. Satırdaki tüm sütunların üzerine yazılır. Sütun eşlemesine dahil edilmeyen sütunlar zorla NULL olarak ayarlanır.
conflictMode parametresi Update olarak ayarlandığında, yeni veriler eski verilerin üzerine yazar. Yalnızca sütun eşlemesine dahil edilen sütunların üzerine yazılır.
conflictMode parametresi Ignore olarak ayarlandığında, yeni veriler yoksayılır.
Veri kaynağı ekleme
DataWorks'te bir senkronizasyon görevi geliştirmeden önce, Veri kaynağı yapılandırması bölümündeki talimatları izleyerek gerekli veri kaynağını DataWorks'e eklemeniz gerekir. Bir veri kaynağı eklerken parametrelerin anlamlarını anlamak için DataWorks konsolunda parametre açıklamalarını görüntüleyebilirsiniz.
Veri senkronizasyon görevi geliştirme
Tek tablo toplu iş senkronizasyonu
Desteklenen veri kaynakları: Data Integration modülü tarafından desteklenen tüm veri kaynağı türleri.
Yapılandırma kılavuzu: Kodsuz kullanıcı arabiriminde toplu iş senkronizasyon görevi yapılandırma ve Kod düzenleyicisini kullanarak toplu iş senkronizasyon görevi yapılandırma. Kod düzenleyicide bulunan tam parametreler ve betik demoları için aşağıdaki Ek: Tam parametreler ve betik demoları bölümüne bakın.
Tek tablo gerçek zamanlı senkronizasyon
Desteklenen veri kaynakları: DataHub, Hologres, Kafka ve LogHub
Yapılandırma kılavuzu: Gerçek zamanlı senkronizasyon görevi yapılandırma.
Tam veritabanı toplu iş senkronizasyonu
Desteklenen veri kaynakları: AnalyticDB for MySQL 3,0, ClickHouse, Doris, Hologres, Oracle, PolarDB ve SQL Server
Yapılandırma kılavuzu: Tam veritabanı toplu iş senkronizasyon görevi yapılandırma
Tam veritabanı gerçek zamanlı senkronizasyon
Desteklenen veri kaynakları: AnalyticDB for OceanBase, MongoDB, MySQL, Oracle, PolarDB, PolarDB-X 2,0 ve PostgreSQL
Yapılandırma kılavuzu: Tek bir tablonun verilerini senkronize etmek için gerçek zamanlı senkronizasyon görevi yapılandırma
Serverless tam veritabanı gerçek zamanlı
Desteklenen veri kaynağı: MySQL
Yapılandırma kılavuzu: Serverless tam veritabanı gerçek zamanlı senkronizasyon görevi yapılandırma
Gerçek zamanlı senkronizasyon görevleriyle ilgili SSS: Gerçek zamanlı senkronizasyonla ilgili SSS .
Ek: Betik demoları ve parametre açıklaması
Kod düzenleyicisini kullanarak toplu iş senkronizasyon görevi yapılandırma
Kod düzenleyicisini kullanarak bir toplu iş senkronizasyon görevi yapılandırmak istiyorsanız, betikteki ilgili parametreleri birleşik betik biçimi gereksinimlerine göre yapılandırmanız gerekir. Daha fazla bilgi için bkz. Betik modu yapılandırması. Aşağıdaki bilgiler, kod düzenleyicisini kullanarak bir toplu iş senkronizasyon görevi yapılandırırken veri kaynakları için yapılandırmanız gereken parametreleri açıklar.
Reader betik demoları
-
Bölümlenmemiş tablo yapılandırma
-
Aşağıdaki örnekte, bir Hologres bölümlenmemiş tablosundan belleğe veri okumanın nasıl yapılandırıldığı gösterilmektedir.
{ "transform": false, "type": "job", "version": "2.0", "steps": [ { "stepType": "holo", "parameter": { "datasource": "holo_db", "envType": 1, "column": [ "tag", "id", "title", "body" ], "where": "", "table": "holo_reader_basic_src" }, "name": "Reader", "category": "reader" }, { "stepType": "stream", "parameter": { "print": false, "fieldDelimiter": "," }, "name": "Writer", "category": "writer" } ], "setting": { "executeMode": null, "failoverEnable": null, "errorLimit": { "record": "0" }, "speed": { "concurrent": 2, "throttle": false } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } } -
Hologres tablosunun DDL deyimi aşağıdaki gibidir.
begin; drop table if exists holo_reader_basic_src; create table holo_reader_basic_src( tag text not null, id int not null, title text not null, body text, primary key (tag, id)); call set_table_property('holo_reader_basic_src', 'orientation', 'column'); call set_table_property('holo_reader_basic_src', 'shard_count', '3'); commit;
-
-
Bölümlenmiş tablo yapılandırma
-
Bir Hologres bölümlenmiş tablosunun alt tablosundan belleğe veri okumayı yapılandırın.
Notpartition parametresinin yapılandırılmasına dikkat edin.
{ "transform": false, "type": "job", "version": "2.0", "steps": [ { "stepType": "holo", "parameter": { "selectedDatabase": "public", "partition": "tag=foo", "datasource": "holo_db", "envType": 1, "column": [ "tag", "id", "title", "body" ], "tableComment": "", "where": "", "table": "public.holo_reader_basic_part_src" }, "name": "Reader", "category": "reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0" }, "speed":{ "throttle":true, "concurrent":1, "mbps":"12" } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } } -
Hologres tablosunun DDL deyimi aşağıdaki gibidir.
begin; drop table if exists holo_reader_basic_part_src; create table holo_reader_basic_part_src( tag text not null, id int not null, title text not null, body text, primary key (tag, id)) partition by list( tag ); call set_table_property('holo_reader_basic_part_src', 'orientation', 'column'); call set_table_property('holo_reader_basic_part_src', 'shard_count', '3'); commit; create table holo_reader_basic_part_src_1583161774228 partition of holo_reader_basic_part_src for values in ('foo'); # Ensure that the child tables of the partitioned table have been created and data has been imported. postgres=# \d+ holo_reader_basic_part_src Table "public.holo_reader_basic_part_src" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+----------+--------------+------------- tag | text | | not null | | extended | | id | integer | | not null | | plain | | title | text | | not null | | extended | | body | text | | | | extended | | Partition key: LIST (tag) Indexes: "holo_reader_basic_part_src_pkey" PRIMARY KEY, btree (tag, id) Partitions: holo_reader_basic_part_src_1583161774228 FOR VALUES IN ('foo')
-
Reader betik parametreleri
Parametre | Açıklama | Gerekli | Varsayılan değer |
database | Hologres örneğindeki bir veritabanının adı. | Evet | Yok |
table | Hologres tablosunun adı. | Koşullu olarak gerekli | Yok |
querySql | Özel bir sorgu SQL deyimi. Bu parametre yapılandırılırsa table ve column parametreleri yoksayılır. Bu parametre | Koşullu olarak gerekli | Yok |
column | Okunacak sütunlar. | Evet | Yok |
partition | Bölümlenmiş tablolar için bölümlendirme sütununu ve değerini Önemli
| Hayır | Boş, bölümlenmemiş tabloyu ifade eder. |
where | SELECT deyiminin WHERE yan tümcesine eklenen filtre koşulu. Bu parametre yalnızca tablo modunda etkilidir. | Hayır | Boş |
useArrow | Yüksek performanslı veri senkronizasyonu için Arrow sütunlu biçiminin kullanılıp kullanılmayacağını belirtir. Etkinleştirildiğinde Reader, verileri okumak için COPY OUT Arrow protokolünü kullanır ve bunları daha iyi performans için sütunlu biçimde aşağı akış Writer'a iletir. Hologres 4,0,18 veya sonraki bir sürüm gerekir. Sürüm gereksinimi karşılanmazsa sistem otomatik olarak JDBC moduna geri döner. Arrow modu işlev sütunlarını veya sabit sütunları desteklemez. Şu anda bu mod, hem kaynak hem de hedef MaxCompute, Hologres veya Hive/OSS/HDFS (Parquet/ORC) olduğunda tam veritabanı toplu iş senkronizasyonunu ve tek tablo toplu iş senkronizasyonunu destekler. Daha fazla bilgi için bkz. Yüksek performanslı veri senkronizasyonu için Arrow biçimini kullanma. | Hayır | false |
compress | Arrow modunda veri aktarımı için LZ4 sıkıştırmasının etkinleştirilip etkinleştirilmeyeceğini belirtir. Bu parametre yalnızca | Hayır | true (sürüm gereksinimi karşılandığında otomatik olarak ayarlanır) |
fetchSize | JDBC modunda her istekte veritabanından alınan satır sayısı. | Hayır | 1000 |
jdbcReadTimeout | JDBC okuma zaman aşımı süresi. Birim: saniye. | Hayır | 60 |
enableServerlessComputing | Sorguları hızlandırmak için Hologres Serverless Computing özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Not: Bu parametre, Hologres örneğinin Serverless Computing özelliğini kontrol eder; bu özellik, bir DataWorks serverless kaynak grubundan farklıdır. | Hayır | false |
serverlessComputingQueryPriority | Hologres Serverless Computing için sorgu önceliği. Geçerli değerler: 1 ila 10. Daha büyük bir değer daha yüksek bir önceliği ifade eder. Bu parametre yalnızca | Hayır | 3 |
serverlessComputingRequiredCores | Hologres Serverless Computing için istenen çekirdek sayısı. Bu parametre yalnızca | Hayır | 5 |
Writer betik demosu
-
Bölümlenmemiş tablo yapılandırma
-
MySQL'den oluşturulan verilerin normal bir Hologres tablosuna aktarılmasını yapılandırın. Aşağıdaki örnekte INSERT modunda veri içe aktarmaya yönelik yapılandırma gösterilmektedir.
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "mysql", "parameter": { "envType": 0, "useSpecialSecret": false, "column": [ "<column1>", "<column2>", ......, "<columnN>" ], "tableComment": "", "connection": [ { "datasource": "<mysql_source_name>",//MySQL data source name "table": [ "<mysql_table_name>" ] } ], "where": "", "splitPk": "", "encoding": "UTF-8" }, "name": "Reader", "category": "reader" }, { "stepType": "holo", "parameter": { "selectedDatabase":"public", "schema": "public", "writeMode": "FIXED_COPY", "maxConnectionCount": 9, "truncate":true,//Cleanup rule "datasource": "<holo_sink_name>",//Hologres data source name "conflictMode": "ignore", "envType": 0, "column": [ "<column1>", "<column2>", ......, "<columnN>" ], "tableComment": "", "table": "<holo_table_name>", "reShuffleByDistributionKey":false }, "name": "Writer", "category": "writer" } ], "setting": { "executeMode": null, "errorLimit": { "record": "0" }, "locale": "zh_CN", "speed": { "concurrent": 2,//Job concurrency "throttle": false//Throttling } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } } -
Hologres tablosu için DDL deyimi aşağıdaki gibidir.
begin; drop table if exists mysql_to_holo_test; create table mysql_to_holo_test( tag text not null, id int not null, body text not null, brrth date, primary key (tag, id)); call set_table_property('mysql_to_holo_test', 'orientation', 'column'); call set_table_property('mysql_to_holo_test', 'distribution_key', 'id'); call set_table_property('mysql_to_holo_test', 'clustering_key', 'birth'); commit;
-
-
Bölümlenmiş tablo yapılandırma
NotHologres yalnızca LIST bölümlendirmelerini destekler. Yalnızca tek bir bölümlendirme sütunu desteklenir ve sütun INT4 veya TEXT türünde olmalıdır.
Bu parametrenin tablo DDL'sindeki bölüm yapılandırmasıyla eşleştiğinden emin olun.
-
MySQL'den oluşturulan verilerin bir Hologres bölümlenmiş tablosunun alt tablolarına senkronize edilmesini yapılandırın.
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "mysql", "parameter": { "envType": 0, "useSpecialSecret": false, "column": [ "<column1>", "<column2>", ......, "<columnN>" ], "tableComment": "", "connection": [ { "datasource": "<mysql_source_name>", "table": [ "<mysql_table_name>" ] } ], "where": "", "splitPk": "<mysql_pk>",//MySQL primary key field "encoding": "UTF-8" }, "name": "Reader", "category": "reader" }, { "stepType": "holo", "parameter": { "selectedDatabase": "public", "writeMode": "insert", "maxConnectionCount": 9, "partition": "ds=20201215",//Hologres partition key "truncate": "false", "datasource": "<holo_sink_name>",//Hologres data source name "conflictMode": "ignore", "envType": 0, "column": [ "<column1>", "<column2>", ......, "<columnN>" ], "tableComment": "", "table": "<holo_table_name>", "reShuffleByDistributionKey":false }, "name": "Writer", "category": "writer" } ], "setting": { "executeMode": null, "failoverEnable": null, "errorLimit": { "record": "0" }, "speed": { "concurrent": 2,//Job concurrency "throttle": false//Throttling } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } } -
Hologres tablosunun DDL deyimi aşağıdaki gibidir.
BEGIN; CREATE TABLE public.hologres_parent_table( a text , b int, c timestamp, d text, ds text, primary key(ds,b) ) PARTITION BY LIST(ds); CALL set_table_property('public.hologres_parent_table', 'orientation', 'column'); CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201215'); CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201216'); CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201217'); COMMIT;
Writer betik parametreleri
Temel parametreler
Parametre | Açıklama | Gerekli | Varsayılan değer |
database | Hologres örneğindeki veritabanının adı. | Evet | Yok |
table | Hologres tablosunun adı. Tablo adında şema adları desteklenir, örneğin | Evet | Yok |
writeMode | Yazma modu. Dört mod desteklenir: | Evet | Yok |
conflictMode | Çakışma çözümleme modu. Geçerli değerler: | Evet | Yok |
column | Hedef tablonun veri sütunları. Sütunlar, hedef tablonun birincil anahtar kümesini içermelidir (seri otomatik artan birincil anahtarlar ve oluşturulmuş sütunlar hariç). | Evet | Yok |
partition | Bölümlenmiş tablolar için bu parametre, bölümlendirme sütununu ve ilgili değerini Not
| Hayır | Boş, bölümlenmemiş tabloyu ifade eder |
reShuffleByDistributionKey | Hologres'te birincil anahtar tablolarına yapılan toplu içe aktarmalar varsayılan olarak tablo kilitlerini tetikler ve bu durum birden çok bağlantının eşzamanlı yazma kapasitesini sınırlar. reShuffle özelliğini etkinleştirmek, toplu senkronizasyon senaryolarındaki farklı görevlerin dağıtım anahtarlarına göre belirli Holo parçalarına veri yazmasına olanak tanır; bu da eşzamanlı toplu yazmayı etkinleştirir ve yazma performansını önemli ölçüde artırır. JDBC modundaki geleneksel gerçek zamanlı yazmalara kıyasla bu özellik Holo sunucusundaki yükü azaltır ve yazma verimliliğini daha da artırır. Önemli Bu özellik yalnızca serverless kaynak gruplarında kullanılabilir. | Hayır | false |
truncate | Hologres tablosuna veri yazmadan önce hedef tablonun temizlenip temizlenmeyeceğini belirtir.
| Hayır | false |
partitionFormat | Dinamik bölüm değerleri için biçimlendirme kuralı. Date türündeki kaynak veriler için | Hayır | Yok |
preSql | Veri yazmadan önce yürütülecek SQL deyimlerinin listesi. Bölümlenmiş bir tablonun üst tablosunda yürütme desteklenmez. | Hayır | Yok |
postSql | Veri yazdıktan sonra yürütülecek SQL deyimlerinin listesi. | Hayır | Yok |
Bağlantı ve performans parametreleri
Parametre | Açıklama | Gerekli | Varsayılan değer |
maxConnectionCount | Yazma için eşzamanlı bağlantı sayısı. Bu değer, gerçek görev eşzamanlılığına ( | Hayır | 3 |
maxRetryCount | Başarısızlık durumunda yeniden deneme sayısı. | Hayır | 10 |
jdbcReadTimeout | JDBC bağlantı zaman aşımı süresi. Birim: saniye. | Hayır | 120 |
maxCommitSize | Bayt cinsinden taahhüt başına maksimum bayt sayısı. | Hayır | 2097152 (2 MB) |
maxCommitCount | Taahhüt başına maksimum kayıt sayısı. | Hayır | 256 |
reShuffleByDistributionKey | Hologres'te birincil anahtar tablolarına yapılan toplu içe aktarmalar varsayılan olarak tablo kilitlerini tetikler ve bu durum birden çok bağlantı arasında eşzamanlı yazma kapasitesini sınırlar. reShuffle özelliğini etkinleştirmek, toplu senkronizasyon senaryolarında farklı görevlerin dağıtım anahtarına göre belirli Holo parçalarına veri yazmasına olanak tanır. Bu, eşzamanlı toplu yazmayı etkinleştirir ve yazma performansını önemli ölçüde artırır. JDBC modundaki geleneksel gerçek zamanlı yazmalara kıyasla bu özelliği etkinleştirmek Holo sunucusundaki yükü azaltır ve yazma verimliliğini daha da artırır. Önemli Bu özellik yalnızca serverless kaynak gruplarında kullanılabilir. | Hayır | false |
removeU0000InTextColumnValue | Metin sütunu değerlerinden | Hayır | true |
Hologres Serverless Computing parametreleri
Aşağıdaki parametreler bir Hologres örneğinin Serverless Computing özelliğini kontrol eder. Reader için sorgu okumalarını ve Writer için STAGE modunda INSERT FROM Stage işlemlerini hızlandırabilirler.
Not : Hologres Serverless Computing ve DataWorks serverless kaynak grupları farklı kavramlardır. İlki bir Hologres örneği içindeki esnek hesaplama özelliğini ifade ederken ikincisi DataWorks'ün senkronizasyon görevlerini çalıştırmak için kullandığı zamanlama kaynaklarını ifade eder.
Kullanım notları : Reader için tüm modlar desteklenir. Writer için yalnızca STAGE modu desteklenir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FIXED_COPY moduna özel parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STAGE moduna özel parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Gelişmiş parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|