全部产品
Search
文档中心

DataWorks:Sumber data Hologres

更新时间:Nov 10, 2025

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: any Tunnel > single Tunnel > Public (Internet).

    • Untuk instans Hologres lintas wilayah, titik akhir diperoleh dengan urutan berikut: Public (Internet) > single Tunnel.

Tulisan basis data penuh secara real-time

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

Penting

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

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.

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

Ya

Tidak ada

partition

Untuk tabel partisi, parameter ini menentukan kolom partisi dan nilainya. Formatnya adalah column=value.

Penting
  • Hologres hanya mendukung partisi LIST. Hanya satu kolom yang didukung sebagai kolom partisi, dan kolom tersebut harus bertipe INT4 atau TEXT.

  • Pastikan parameter ini konsisten dengan konfigurasi partisi dalam pernyataan DDL tabel.

  • Pastikan tabel anak yang sesuai telah dibuat dan data telah diimpor.

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

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

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

Ya

Tidak ada

partition

Untuk tabel partisi, parameter ini menentukan kolom partisi dan nilainya. Formatnya adalah column=value.

Catatan
  • Hologres hanya mendukung partisi LIST. Hanya satu kolom yang didukung sebagai kolom partisi, dan kolom tersebut harus bertipe INT4 atau TEXT.

  • Pastikan parameter ini konsisten dengan konfigurasi partisi dalam pernyataan DDL tabel.

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.

  • true: Menghapus data dari tabel tujuan.

    Catatan
    • Anda hanya dapat menghapus data dari tabel non-partisi dan tabel partisi statis. Anda tidak dapat menghapus data dari tabel partisi dinamis. Jika Anda menggunakan tabel partisi dinamis dan mengatur parameter ini ke true, tugas sinkronisasi akan keluar secara tak terduga.

    • Jika Anda menggunakan tabel partisi statis dan mengatur parameter ini ke true, data dalam tabel partisi anak akan dihapus, tetapi data dalam tabel induk tidak.

  • false: Tidak menghapus data dari tabel tujuan.

Tidak

false