Sumber data Hologres menyediakan saluran dua arah untuk membaca dan menulis data ke Hologres. Topik ini menjelaskan kemampuan sinkronisasi data dari sumber data Hologres di DataWorks.
Batasan
Baca dan tulis offline
Sumber data Hologres mendukung kelompok sumber daya Serverless (disarankan) dan grup sumber daya eksklusif untuk Integrasi Data.
Hologres Writer tidak mendukung penulisan data ke tabel eksternal Hologres.
Sumber data Hologres memperoleh titik akhir Hologres berdasarkan logika berikut:
Untuk instans Hologres di wilayah saat ini, titik akhir diperoleh dengan urutan berikut: .
Untuk instans Hologres lintas wilayah, titik akhir diperoleh dengan urutan berikut: .
Tulisan basis data penuh secara real-time
Tugas sinkronisasi data real-time hanya mendukung kelompok sumber daya Serverless (disarankan) dan grup sumber daya eksklusif untuk Integrasi Data.
Tugas sinkronisasi data real-time tidak mendukung tabel tanpa kunci primer.
Jenis bidang yang didukung
Jenis bidang | Baca offline (Hologres Reader) | Tulis offline (Hologres Writer) | 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 | Dukungan |
SMALLINT | Didukung | Didukung | Dukungan |
TINYINT | Didukung | Didukung | Didukung |
INTEGER | Didukung | Didukung | Dukungan |
BIGINT | Dukungan | Didukung | Didukung |
NUMERIC | Didukung | Dukungan | Didukung |
DECIMAL | Didukung | Didukung | Didukung |
FLOAT | Didukung | Didukung | Didukung |
REAL | Didukung | Didukung | Didukung |
DOUBLE | Didukung | Didukung | Didukung |
TIME | Didukung | Dukungan | Didukung |
DATE | Didukung | Didukung | Didukung |
TIMESTAMP | Didukung | Didukung | Didukung |
BINARY | Didukung | Dukungan | Didukung |
VARBINARY | Didukung | Didukung | Didukung |
BLOB | Didukung | Didukung | Didukung |
LONGVARBINARY | Dukungan | Didukung | Didukung |
BOOLEAN | Didukung | Didukung | Didukung |
BIT | Didukung | Didukung | Didukung |
JSON | Didukung | Didukung | Didukung |
JSONB | Didukung | Didukung | Didukung |
Cara kerja
Baca offline
Hologres Reader menggunakan PSQL untuk membaca data dari tabel Hologres. Reader ini memulai beberapa tugas konkuren berdasarkan jumlah shard pada tabel tersebut. Setiap shard berkorespondensi dengan satu tugas SELECT konkuren.
Saat membuat tabel di Hologres, Anda dapat mengonfigurasi jumlah shard-nya dengan menjalankan pernyataan
CALL set_table_property('table_name', 'shard_count', 'xx')dalam transaksiCREATE TABLEyang sama.Secara default, jumlah shard basis data digunakan. Nilai spesifiknya bergantung pada konfigurasi instans Hologres.
Pernyataan SELECT menggunakan kolom bawaan hg_shard_id pada tabel untuk memfilter data berdasarkan shard.
Tulis offline
Hologres Writer memperoleh data protokol yang dihasilkan oleh reader melalui kerangka kerja sinkronisasi data. Writer kemudian menentukan kebijakan resolusi konflik untuk penulisan data berdasarkan pengaturan conflictMode (kebijakan konflik).
Anda dapat mengonfigurasi parameter conflictMode untuk menentukan cara menangani data baru ketika terjadi konflik kunci primer antara data baru dan data yang sudah ada:
conflictMode hanya berlaku untuk tabel yang memiliki kunci primer. Untuk informasi lebih lanjut tentang prinsip penulisan dan kinerja, lihat Prinsip Teknis.
Jika conflictMode diatur ke Replace (pembaruan seluruh baris), data baru akan menimpa data lama. Semua kolom dalam baris tersebut ditimpa. Kolom yang tidak dipetakan akan dipaksa diatur menjadi NULL.
Jika conflictMode diatur ke Update, data baru akan menimpa data lama. Hanya kolom yang dipetakan yang ditimpa.
Jika conflictMode diatur ke Ignore, data baru akan diabaikan.
Tambahkan sumber data
Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen sumber data. Anda dapat melihat infotips parameter di konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.
Kembangkan tugas sinkronisasi data
Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.
Panduan konfigurasi tugas sinkronisasi offline untuk satu tabel
Untuk informasi lebih lanjut tentang prosedurnya, lihat Konfigurasi UI tanpa kode atau Konfigurasi editor kode.
Untuk daftar lengkap parameter dan contoh kode dalam mode skrip, lihat Lampiran: Kode dan parameter.
Panduan konfigurasi tugas sinkronisasi real-time untuk satu tabel
Untuk informasi lebih lanjut tentang alur operasi, lihat Konfigurasikan tugas sinkronisasi real-time di DataStudio dan Konfigurasikan tugas sinkronisasi real-time di Integrasi Data.
Panduan konfigurasi tugas sinkronisasi basis data penuh offline dan real-time
Untuk informasi lebih lanjut tentang prosedurnya, lihat Konfigurasikan tugas sinkronisasi basis data penuh offline dan Konfigurasi tugas sinkronisasi basis data penuh real-time.
Lampiran: Contoh skrip dan deskripsi 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 lebih lanjut, lihat Konfigurasikan tugas di editor kode. Informasi berikut menjelaskan parameter yang harus dikonfigurasi untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.
Contoh skrip Reader
Konfigurasikan tabel non-partisi
Kode berikut menunjukkan cara mengonfigurasi tugas yang 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
Anda dapat mengonfigurasi tugas untuk membaca data dari tabel anak dari tabel Hologres berpartisi 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 dari tabel berpartisi 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 | Diperlukan | Nilai default |
database | Nama basis data dalam instans Hologres. | Ya | Tidak ada |
table | Nama tabel Hologres. Jika tabel merupakan tabel partisi, tentukan nama tabel induk. | Ya | Tidak ada |
column | Kolom dari mana Anda ingin membaca data. Nilainya harus mencakup kolom kunci primer dari tabel sumber. Contoh: | Ya | Tidak ada |
partition | Untuk tabel partisi, parameter ini menentukan kolom partisi dan nilainya. Formatnya adalah Penting
| Tidak | Kosong. Ini menunjukkan tabel non-partisi. |
Contoh skrip Writer
Konfigurasikan tabel non-partisi
Contoh ini menunjukkan konfigurasi untuk mengimpor data dari MySQL ke tabel standar Hologres dalam 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,// Jumlah pekerjaan konkuren. "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. Hanya satu kolom yang dapat digunakan sebagai kolom partisi, dan kolom tersebut harus bertipe INT4 atau TEXT.
Pastikan parameter ini konsisten dengan konfigurasi partisi dalam pernyataan DDL tabel.
Anda dapat mengonfigurasi tugas untuk menyinkronkan data dari tabel MySQL ke tabel anak dari tabel Hologres berpartisi.
{ "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,// Jumlah pekerjaan konkuren. "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 | Diperlukan | Nilai default |
database | Nama basis data dalam instans 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, dan Ignore. Untuk informasi lebih lanjut, lihat Cara kerja. | Ya | Tidak ada |
column | Kolom yang ingin Anda tulis datanya. Nilainya harus mencakup kolom kunci primer dari tabel tujuan. Contoh: | Ya | Tidak ada |
partition | Untuk tabel partisi, parameter ini menentukan kolom partisi dan nilainya. Formatnya adalah Catatan
| Tidak | Kosong. Ini menunjukkan tabel non-partisi. |
reShuffleByDistributionKey | Di Hologres, mengimpor data batch ke tabel yang memiliki kunci primer secara default memicu penguncian tabel. Hal ini membatasi kemampuan penulisan konkuren dari beberapa koneksi. Anda dapat mengaktifkan fitur reShuffle dalam skenario sinkronisasi offline. Fitur ini memungkinkan tugas berbeda menulis data ke shard Holo tertentu berdasarkan kunci sharding data. Hal ini memungkinkan penulisan batch konkuren dan secara signifikan meningkatkan kinerja penulisan. Dibandingkan dengan penulisan real-time dalam mode JDBC tradisional, fitur ini mengurangi muatan pada server Holo dan meningkatkan efisiensi penulisan. Penting Fitur ini hanya dapat diaktifkan untuk kelompok sumber daya Serverless. | Tidak | false |
truncate | Menentukan apakah akan menghapus data dari tabel tujuan sebelum menulis data ke dalamnya.
| Tidak | false |