All Products
Search
Document Center

DataWorks:Sumber data Hologres

Last Updated:Mar 07, 2026

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 transaksi CREATE TABLE yang 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:

Penting

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

Real-time tabel tunggal

Offline seluruh database

Real-time seluruh database

Real-time seluruh database 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.

      Catatan

      Perhatikan 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: ["*"] menentukan semua kolom.

Ya

Tidak ada

partition

Untuk tabel partisi, menentukan kolom partisi dan nilainya. Format: column=value.

Penting
  • Hologres 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.

  • Tabel anak yang sesuai harus telah dibuat dan berisi data yang diimpor.

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

    Catatan
    • Hologres 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: schema_name.table_name.

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: ["*"] menentukan semua kolom.

Ya

Tidak ada

partition

Untuk tabel partisi, menentukan kolom partisi dan nilainya. Format: column=value.

Catatan
  • Hologres 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.

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.

  • true: Memotong tabel tujuan.

    Catatan
    • Anda hanya dapat memotong tabel non-partisi dan tabel partisi statis. Mencoba memotong tabel partisi dinamis menyebabkan tugas gagal.

    • Untuk tabel partisi statis, mengatur nilai ini ke true hanya memotong tabel anak yang ditentukan. Tabel induk tidak terpengaruh.

  • false: Tidak memotong tabel tujuan.

Tidak

false