Gunakan sumber data Hologres untuk membaca dari dan menulis ke Hologres. Topik ini menjelaskan kemampuan sinkronisasi data yang disediakan DataWorks untuk Hologres.
Batasan
Tugas sinkronisasi data untuk sumber data Hologres memerlukan Serverless resource group.
Baca dan tulis offline
Writer Hologres tidak mendukung penulisan data ke tabel eksternal Hologres.
Sumber data Hologres memperoleh titik akhir (endpoint) menggunakan logika berikut:
Untuk instans Hologres di wilayah yang sama, titik akhir diperoleh dengan urutan prioritas berikut: any Tunnel > Single Tunnel > Public.
Untuk instans Hologres di wilayah berbeda, titik akhir diperoleh dengan urutan prioritas berikut: Public > Single Tunnel.
Baca real-time tabel tunggal
Versi Hologres harus 2.1 atau lebih baru.
Sinkronisasi inkremental tidak didukung untuk tabel partisi Hologres.
Sinkronisasi pesan perubahan Data Definition Language (DDL) dari tabel Hologres tidak didukung.
Sinkronisasi inkremental dari Hologres mendukung tipe data berikut:
INTEGER, BIGINT, TEXT, CHAR(n), VARCHAR(n), REAL, JSON, SERIAL, OID, INT4[], INT8[], FLOAT8[], BOOLEAN[], dan TEXT[].
Untuk melakukan sinkronisasi real-time pada satu tabel Hologres, Anda harus mengaktifkan Hologres Binlog untuk tabel sumber. Untuk informasi selengkapnya, lihat Subscribe to Hologres Binlog.
Tulis real-time seluruh database
Tugas sinkronisasi data real-time tidak mendukung tabel tanpa kunci primer.
Saat melakukan sinkronisasi real-time seluruh database dari MySQL ke Hologres, Anda hanya dapat menulis data ke tabel anak dari tabel partisi, bukan ke tabel induk.
Tipe bidang yang didukung
Type | Baca offline | Tulis offline | Penulisan Real-Time |
UUID | Tidak didukung | Tidak didukung | Tidak didukung |
CHAR | Didukung | Didukung | Didukung |
NCHAR | Didukung | Didukung | Didukung |
VARCHAR | Didukung | Didukung | Didukung |
LONGVARCHAR | Didukung | Didukung | Didukung |
NVARCHAR | Didukung | Didukung | Didukung |
LONGNVARCHAR | Didukung | Didukung | Didukung |
CLOB | Didukung | Didukung | Didukung |
NCLOB | Didukung | Didukung | Didukung |
SMALLINT | Didukung | Didukung | Didukung |
TINYINT | Didukung | Didukung | Didukung |
INTEGER | Didukung | Didukung | Didukung |
BIGINT | Didukung | Didukung | Didukung |
NUMERIC | Didukung | Didukung | Didukung |
DECIMAL | Didukung | Didukung | Didukung |
FLOAT | Didukung | Didukung | Didukung |
REAL | Didukung | Didukung | Didukung |
DOUBLE | Didukung | Didukung | Didukung |
TIME | Didukung | Didukung | Didukung |
DATE | Didukung | Didukung | Didukung |
TIMESTAMP | Didukung | Didukung | Didukung |
BINARY | Didukung | Didukung | Didukung |
VARBINARY | Didukung | Didukung | Didukung |
BLOB | Didukung | Didukung | Didukung |
LONGVARBINARY | Didukung | Didukung | Didukung |
BOOLEAN | Didukung | Didukung | Didukung |
BIT | Didukung | Didukung | Didukung |
JSON | Didukung | Didukung | Didukung |
JSONB | Didukung | Didukung | Didukung |
Cara kerja
Baca offline
Reader Hologres menggunakan PSQL untuk membaca data dari tabel Hologres, memulai beberapa tugas SELECT konkuren berdasarkan jumlah shard tabel tersebut.
Saat membuat tabel di Hologres, Anda dapat mengonfigurasi jumlah shard tabel dengan menjalankan perintah
CALL set_table_property('table_name', 'shard_count', 'xx')dalam transaksiCREATE TABLEyang sama.Secara default, Hologres menggunakan jumlah shard database. Nilai spesifiknya tergantung pada konfigurasi instans Anda.
Pernyataan SELECT menyaring data berdasarkan shard menggunakan kolom bawaan hg_shard_id.
Tulis offline
Writer Hologres memperoleh data protokol dari reader dan menggunakan parameter conflictMode untuk menangani konflik data selama operasi penulisan.
Konfigurasikan parameter conflictMode untuk menentukan cara menangani data baru saat terjadi konflik kunci primer:
Parameter conflictMode hanya berlaku untuk tabel yang memiliki kunci primer. Untuk informasi selengkapnya tentang mekanisme penulisan dan performa, lihat Technical principles.
Jika Anda mengatur conflictMode ke Replace (pembaruan baris penuh), data baru akan menimpa data yang ada. Semua kolom dalam baris tersebut diganti. Kolom yang tidak dipetakan diatur ke NULL.
Jika Anda mengatur conflictMode ke Update, data baru akan menimpa data yang ada. Hanya kolom yang dipetakan yang diperbarui.
Jika Anda mengatur conflictMode ke Ignore, data baru dibuang.
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Data source management. Anda dapat melihat deskripsi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Tugas sinkronisasi data
Satu-tabel offline
Sumber data yang didukung: Semua jenis sumber data yang didukung oleh Data Integration.
Panduan konfigurasi: Konfigurasi UI tanpa kode dan Konfigurasi Mode Skrip. Untuk daftar lengkap parameter dan contoh skrip Mode Skrip, lihat Lampiran: Kode dan parameter.
Real-time tabel tunggal
Sumber data yang didukung: DataHub, Hologres, Kafka, dan LogHub.
Panduan konfigurasi: Konfigurasikan tugas sinkronisasi real-time untuk satu tabel.
Offline seluruh database
Sumber data yang didukung: AnalyticDB for MySQL 3.0, ClickHouse, Doris, Hologres, Oracle, PolarDB, dan SQL Server.
Panduan konfigurasi: Konfigurasikan tugas sinkronisasi offline seluruh database.
Real-time seluruh database
Sumber data yang didukung: AnalyticDB for OceanBase, MongoDB, MySQL, Oracle, PolarDB, PolarDB-X 2.0, dan PostgreSQL.
Panduan konfigurasi: Konfigurasikan tugas sinkronisasi real-time untuk seluruh database.
Real-time seluruh database Serverless
Sumber data: MySQL.
Panduan konfigurasi: Konfigurasikan tugas sinkronisasi Serverless.
Untuk pertanyaan umum tentang sinkronisasi real-time, lihat FAQ about real-time synchronization to Hologres.
Lampiran: Kode dan parameter
Konfigurasikan tugas sinkronisasi batch menggunakan editor kode
Jika ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi selengkapnya, lihat Use the code editor. Informasi berikut menjelaskan parameter yang harus dikonfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Skrip reader
Konfigurasikan tabel non-partisi
Skrip berikut menunjukkan cara membaca data dari tabel Hologres non-partisi ke memori.
{ "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" } ] } }Kode berikut menunjukkan pernyataan DDL untuk tabel Hologres.
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;
Konfigurasikan tabel partisi
Skrip berikut menunjukkan cara membaca data dari tabel anak tabel partisi Hologres ke memori.
CatatanPerhatikan konfigurasi parameter partition.
{ "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" } ] } }Kode berikut menunjukkan pernyataan DDL untuk tabel Hologres.
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'); # Pastikan bahwa tabel anak telah dibuat dan data telah diimpor. 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')
Parameter skrip reader
Parameter | Deskripsi | Wajib | Default |
database | Nama database Hologres. | Ya | Tidak ada |
table | Nama tabel Hologres. Untuk tabel partisi, tentukan nama tabel induk. | Ya | Tidak ada |
column | Kolom tempat membaca data. Contoh: | Ya | Tidak ada |
partition | Untuk tabel partisi, menentukan kolom partisi dan nilainya. Format: Penting
| Tidak | Kosong. Ini menunjukkan tabel non-partisi. |
Skrip writer
Konfigurasikan tabel non-partisi
Skrip berikut menunjukkan cara menulis data dari database MySQL ke tabel Hologres non-partisi menggunakan mode JDBC.
{ "type": "job", "version": "2.0", "steps": [ { "stepType": "mysql", "parameter": { "envType": 0, "useSpecialSecret": false, "column": [ "<column1>", "<column2>", ......, "<columnN>" ], "tableComment": "", "connection": [ { "datasource": "<mysql_source_name>",// Nama sumber data MySQL "table": [ "<mysql_table_name>" ] } ], "where": "", "splitPk": "", "encoding": "UTF-8" }, "name": "Reader", "category": "reader" }, { "stepType": "holo", "parameter": { "selectedDatabase":"public", "schema": "public", "maxConnectionCount": 9, "truncate":true,// Aturan pembersihan "datasource": "<holo_sink_name>",// Nama sumber data Hologres "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,// Konkurensi pekerjaan "throttle": false// Pengendalian aliran } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }Kode berikut menunjukkan pernyataan DDL untuk tabel Hologres.
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;
Konfigurasikan tabel partisi
CatatanHologres hanya mendukung partisi list. Kunci partisi harus berupa satu kolom bertipe INT4 atau TEXT.
Nilai ini harus sesuai dengan konfigurasi partisi dalam pernyataan DDL tabel.
Skrip berikut menunjukkan cara menyinkronkan data dari database MySQL ke tabel anak tabel partisi Hologres.
{ "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>",// Kolom kunci primer tabel MySQL "encoding": "UTF-8" }, "name": "Reader", "category": "reader" }, { "stepType": "holo", "parameter": { "selectedDatabase": "public", "maxConnectionCount": 9, "partition": "<partition_key>",// Kunci partisi tabel Hologres "truncate": "false", "datasource": "<holo_sink_name>",// Nama sumber data Hologres "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,// Konkurensi pekerjaan "throttle": false// Pengendalian aliran } }, "order": { "hops": [ { "from": "Reader", "to": "Writer" } ] } }Kode berikut menunjukkan pernyataan DDL untuk tabel Hologres.
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;
Parameter skrip writer
Parameter | Deskripsi | Wajib | Default |
database | Nama database Hologres. | Ya | Tidak ada |
table | Nama tabel Hologres. Anda dapat menyertakan nama skema dalam nama tabel. Contoh: | Ya | Tidak ada |
conflictMode | conflictMode mencakup Replace, Update, atau Ignore. Untuk informasi selengkapnya, lihat Implementation principles. | Ya | Tidak ada |
column | Kolom tujuan untuk ditulis. Anda harus menyertakan semua kolom kunci primer. Contoh: | Ya | Tidak ada |
partition | Untuk tabel partisi, menentukan kolom partisi dan nilainya. Format: Catatan
| Tidak | Kosong. Ini menunjukkan tabel non-partisi. |
reShuffleByDistributionKey | Mengaktifkan penulisan batch konkuren ke tabel dengan kunci primer, melewati penguncian tabel default. Dalam tugas offline, fitur ini mengarahkan data ke shard tertentu berdasarkan kunci distribusi, yang meningkatkan performa penulisan dan mengurangi beban server dibandingkan penulisan JDBC standar. Penting Fitur ini hanya tersedia saat Anda menggunakan Serverless resource group. | Tidak | false |
truncate | Menentukan apakah akan memotong (truncate) tabel tujuan sebelum data ditulis ke dalamnya.
| Tidak | false |