全部产品
Search
文档中心

Hologres:Tabel sink Hologres

更新时间:Feb 05, 2026

Hologres terintegrasi secara mendalam dengan Real-time Compute for Flink dalam mode eksklusif, memungkinkan Anda menulis data ke tabel sink Hologres melalui konektor dan langsung mengkueri data tersebut. Topik ini menjelaskan cara menulis data ke tabel sink Hologres dari Real-time Compute for Flink dalam mode eksklusif.

Batasan

  • Versi berbeda dari Real-time Compute for Flink dalam mode eksklusif memiliki semantik developer yang berbeda. Sebelum memulai, pastikan versi yang digunakan dan rujuk contoh untuk versi tersebut.

  • Untuk mencegah kegagalan koneksi, pastikan layanan Real-time Compute for Flink dan instans Hologres berada di Wilayah yang sama.

  • Versi Real-time Compute for Flink dalam mode eksklusif sebelum 3.6 tidak menyertakan konektor Hologres bawaan. Untuk menulis data ke Hologres secara real-time, Anda harus mereferensikan file JAR. Untuk troubleshooting, lihat Kesalahan umum saat persiapan upgrade gagal. Anda juga dapat bergabung ke grup DingTalk Hologres untuk memberikan masukan. Untuk informasi lebih lanjut tentang cara bergabung ke grup, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

    Catatan

    Disarankan untuk melakukan upgrade ke versi 3.6 atau yang lebih baru untuk menjalankan pekerjaan.

  • Versi 3.7 Real-time Compute for Flink dalam mode eksklusif mendukung pembuatan otomatis tabel partisi Hologres. Namun, Anda harus mengonfigurasi createparttable='true' dalam pekerjaan Anda. Saat menggunakan tabel partisi, perhatikan poin-poin berikut:

    • Hologres saat ini hanya mendukung list partitioning.

    • Saat membuat tabel partisi, Anda harus secara eksplisit menentukan kolom kunci partisi. Saat ini, hanya tipe text dan int4 yang didukung untuk kolom kunci partisi. Nilai partisi tidak boleh mengandung tanda hubung (-), seperti 2020-09-12.

    • Jika tabel partisi memiliki primary key, kolom kunci partisi harus menjadi bagian dari primary key tersebut.

    • Saat membuat tabel anak partisi, nilai bidang statis harus digunakan untuk kolom kunci partisi pada tabel anak.

    • Nilai kolom kunci partisi dari data yang ditulis ke tabel anak partisi harus persis sesuai dengan nilai yang ditentukan saat tabel anak dibuat. Jika tidak, error akan dilaporkan.

    • Fitur partisi DEFAULT tidak didukung.

  • Jika tabel Hologres tujuan memiliki primary key, semantik default untuk penulisan real-time tidak memperbarui data berdasarkan primary key tersebut. Data dengan primary key duplikat akan dibuang.

  • Hologres menulis data secara asinkron. Anda harus menambahkan konfigurasi blink.checkpoint.fail_on_checkpoint_error=true ke pekerjaan Anda. Ini memastikan bahwa failover dipicu jika pekerjaan gagal. Parameter ini tidak diperlukan untuk versi 3.7.6 dan yang lebih baru dari Real-time Compute for Flink dalam mode eksklusif.

Semantik DDL

Gunakan pernyataan berikut untuk membuat tabel sink Hologres.

create table Hologres_sink(
  name varchar,
  age BIGINT,
  birthday BIGINT
) with (
  type='hologres',
  dbname='<yourDbname>', --Nama database Hologres.
  tablename='<yourTablename>', --Nama tabel yang menerima data di Hologres.
  username='<yourUsername>', --ID AccessKey Akun Alibaba Cloud Anda.
  password='<yourPassword>', --Rahasia AccessKey Akun Alibaba Cloud Anda.
  endpoint='<yourEndpoint>'); --Titik akhir jaringan VPC untuk instans Hologres.

Parameter WITH

Parameter

Deskripsi

Contoh

type

Tipe tabel sink. Nilainya tetap hologres.

hologres

endpoint

Alamat jaringan VPC dari instans Hologres.

Buka Konsol Manajemen Hologres. Di halaman produk instans tujuan, dapatkan Endpoint dari bagian Network Information. Endpoint harus mencakup nomor Port dalam format ip:port.

demo-cn-hangzhou-vpc.hologres.aliyuncs.com:80

username

ID AccessKey

Klik Manajemen AccessKey untuk mendapatkan ID AccessKey.

xxxxm3FMWaxxxx

password

Rahasia AccessKey

Klik Manajemen AccessKey untuk mendapatkan Rahasia AccessKey.

xxxxm355fffaxxxx

dbname

Nama database Hologres.

Holodb

tablename

Nama tabel di database Hologres.

blink_test

arraydelimiter

Sink Hologres mendukung pemisahan bidang STRING menjadi array berdasarkan field_delimiter dan mengimpor array tersebut ke Hologres.

Nilai default adalah \u0002.

\u0002

mutatetype

Mode penulisan data. Untuk informasi selengkapnya, lihat Tabel sink Hologres.

Nilai default adalah insertorignore.

insertorignore

ignoredelete

Menentukan apakah pesan retraction diabaikan atau tidak.

  • true: Mengabaikan pesan retraction.

  • false: Tidak mengabaikan pesan retraction.

Catatan

Parameter ini hanya berlaku saat menggunakan semantik streaming.

Nilai default adalah false.

Umumnya, operasi Groupby Flink menghasilkan pesan retraction. Saat pesan ini dikirim ke konektor Hologres, mereka menghasilkan permintaan DELETE.

false

partitionrouter

Menentukan apakah data ditulis ke tabel partisi.

  • true: Menulis data ke tabel partisi.

  • false: Tidak menulis data ke tabel partisi.

Nilai default adalah false.

false

createparttable

Saat menulis ke tabel partisi, menentukan apakah tabel anak partisi dibuat secara otomatis berdasarkan nilai partisi. Fitur ini didukung di Blink exclusive mode V3.7 dan yang lebih baru.

Nilai default adalah false.

Penting

Gunakan fitur ini dengan hati-hati. Pastikan nilai partisi tidak mengandung data kotor, karena dapat menyebabkan pembuatan tabel partisi yang salah.

false

Catatan

Parameter arraydelimiter, mutatetype, ignoredelete, partitionrouter, dan createparttable tidak disertakan dalam contoh pernyataan DDL. Untuk menggunakan parameter ini dalam aplikasi Anda, rujuk deskripsinya pada tabel di atas.

Menulis data ke tabel sink Hologres biasa secara real-time

  1. Buat tabel di Hologres.

    Buat tabel di Hologres untuk menerima data. Kode berikut memberikan contoh pernyataan SQL pembuatan tabel.

     create table blink_test (a int, b text, c text, d float8, e bigint);
  2. Buat pekerjaan Real-time Compute for Flink.

    1. Masuk ke Konsol Real-time Compute for Flink.

    2. Buat pekerjaan Real-time Compute for Flink.

      • Real-time Compute for Flink dalam mode eksklusif V3.6 dan yang lebih baru mendukung sumber data Hologres. Anda dapat memanggilnya secara langsung. Kode berikut memberikan contoh pernyataan SQL.

        create table randomSource (a int, b VARCHAR, c VARCHAR, d DOUBLE, e BIGINT) with (type = 'random');
        
        create table test (
          a int,
          b VARCHAR,
          c VARCHAR,
          PRIMARY KEY (a)
        ) with (
          type = 'hologres',
          `endpoint` = '$ip:$port', --Alamat jaringan VPC dan nomor port instans Hologres.
          `username` = 'ID AccessKey Akun Alibaba Cloud Anda',
          `password` = 'Rahasia AccessKey Akun Alibaba Cloud Anda',
          `dbname` = 'Nama database Hologres',
          `tablename` = 'blink_test'--Nama tabel yang menerima data di Hologres.
        );
        
        insert
          into test
        select
          a,b,c
        from
          randomSource;
  3. Terbitkan pekerjaan.

    1. Setelah membuat pekerjaan, klik Syntax Check di editor. Jika muncul Successful, berarti sintaks sudah benar.

    2. Klik Save untuk menyimpan pekerjaan.

    3. Klik Publish untuk mengirimkan pekerjaan ke lingkungan produksi. Konfigurasikan pengaturan penerbitan pekerjaan sesuai kebutuhan.4

  4. Jalankan pekerjaan.

    Setelah mengirimkan pekerjaan ke lingkungan produksi, Anda harus menjalankannya secara manual.

    Di pojok kanan atas bilah menu pada halaman Real-time Compute for Flink Platform for Developers, klik O&M. Di halaman O&M, pilih pekerjaan yang ingin dijalankan lalu klik Start di pojok kanan atas.6

  5. Kueri data di Hologres secara real-time.

    Kueri tabel yang menerima data di Hologres untuk mengambil data yang telah ditulis secara real-time. Kode berikut memberikan contoh pernyataan SQL kueri.

    select * from blink_test;

Cara menggunakan fitur merge/pembaruan parsial tabel lebar

Untuk menulis data dari beberapa aliran ke satu tabel lebar Hologres—yang merupakan skenario umum—ikuti langkah-langkah berikut:

Asumsikan Hologres memiliki tabel lebar bernama WIDE_TABLE dengan kolom A, B, C, D, dan E. Kolom A adalah primary key. Satu aliran Flink berisi data untuk kolom A, B, dan C, sedangkan aliran lain berisi data untuk kolom A, D, dan E.

  1. Gunakan Flink SQL untuk mendeklarasikan dua tabel sink Hologres. Satu tabel hanya mendeklarasikan bidang A, B, dan C, sedangkan yang lain hanya mendeklarasikan bidang A, D, dan E. Kedua tabel dipetakan ke WIDE_TABLE.

  2. Atur properti mutatetype kedua tabel sink ke insertorupdate.

  3. Atur properti ignoredelete kedua tabel sink ke true untuk mencegah pesan retraction menghasilkan permintaan DELETE.

  4. Masukkan data dari kedua aliran ke tabel sink masing-masing.

Batasan berikut berlaku untuk skenario ini:

  1. Tabel lebar harus memiliki primary key.

  2. Data dari setiap aliran harus mencakup semua bidang primary key secara lengkap.

  3. Dalam skenario merge tabel lebar untuk tabel berorientasi kolom, jumlah catatan per detik (RPS) yang tinggi dapat menyebabkan penggunaan CPU tinggi. Anda dapat menonaktifkan Dictionary encoding untuk bidang-bidang dalam tabel.

Menulis data ke tabel sink Hologres partisi secara real-time

Hologres mendukung penulisan data langsung ke tabel induk partisi dengan memanggil API data real-time. Data akan secara otomatis diarahkan ke tabel anak partisi yang sesuai. Untuk informasi lebih lanjut tentang API data real-time, lihat API data real-time.

Batasan berikut berlaku:

  • Hologres hanya mendukung list partitioning.

  • Saat membuat tabel partisi, Anda harus secara eksplisit menentukan kolom kunci partisi. Hanya tipe text dan int4 yang didukung untuk kolom kunci partisi.

  • Jika primary key ditetapkan, kolom kunci partisi harus menjadi bagian dari primary key tersebut.

  • Saat membuat tabel anak partisi, nilai bidang statis harus digunakan untuk kolom kunci partisi pada tabel anak.

  • Nilai kolom kunci partisi dari data yang ditulis ke tabel anak partisi harus persis sesuai dengan nilai yang ditentukan saat tabel anak dibuat. Jika tidak, error akan dilaporkan.

  • Hologres tidak mendukung partisi default.

  1. Buat tabel partisi di Hologres.

    Buat tabel partisi di Hologres untuk menerima data dan buat tabel anak partisi yang sesuai. Kode berikut memberikan contoh pernyataan SQL pembuatan tabel.

    --Buat tabel induk partisi test_message dan tabel anak partisi yang sesuai.
    
    drop table if exists test_message;
    
    begin;
    create table test_message (
     "bizdate" text NOT NULL,
     "tag" text NOT NULL,
     "id" int4 NOT NULL,
     "title" text NOT NULL,
     "body" text,
    PRIMARY KEY (bizdate,tag,id)
    )
    PARTITION BY LIST (bizdate);
    commit;
    Catatan
    • Saat mengeksekusi perintah, ganti parameter ${bizdate} dengan nilai aktual.

    • Versi 3.7 Real-time Compute for Flink dalam mode eksklusif adalah versi pertama yang mendukung pembuatan partisi otomatis. Jika Anda menggunakan versi sebelum 3.7, Anda harus membuat tabel anak partisi di Hologres terlebih dahulu. Jika tidak, impor data akan gagal.

  2. Buat pekerjaan di Real-time Compute for Flink dalam mode eksklusif.

    Kode berikut memberikan contoh pernyataan untuk membuat pekerjaan di Real-time Compute for Flink dalam mode eksklusif.

    Catatan

    Contoh berikut berlaku untuk Real-time Compute for Flink dalam mode eksklusif V3.7 dan yang lebih baru. Jika Anda menggunakan versi sebelum 3.7, Anda harus melakukan upgrade ke V3.7 atau yang lebih baru, atau hapus konfigurasi pembuatan otomatis tabel anak partisi: `createparttable` = 'true'.

    create table test_message_src(
      tag VARCHAR,
      id INTEGER,
      title VARCHAR,
      body VARCHAR
    ) with (
      type = 'random',
      `interval` = '10',
      `count` = '100'
    );
    
    create table test_message_sink (
      bizdate VARCHAR,
      tag VARCHAR,
      id INTEGER,
      title VARCHAR,
      body VARCHAR
    ) with (
      type = 'hologres',
      `endpoint` = '$ip:$port', --Alamat jaringan VPC instans Hologres.
      `username` ='<AccessID>', --ID AccessKey Akun Alibaba Cloud Anda.
      `password` = '<AccessKey>', --Rahasia AccessKey Akun Alibaba Cloud Anda.
      `dbname` = '<DBname>', --Nama database Hologres.
      `tablename` = '<Tablename>', --Nama tabel di database Hologres.
      `partitionrouter` = 'true', --Tulis data ke tabel partisi di Hologres.
      `createparttable` = 'true' --Buat otomatis tabel anak partisi di Hologres.
    );
    
    insert into test_message_sink select "20200327",* from test_message_src;
    insert into test_message_sink select "20200328",* from test_message_src;
  3. Terbitkan dan jalankan pekerjaan.

    Untuk informasi selengkapnya, lihat langkah Terbitkan pekerjaan dan Jalankan pekerjaan pada bagian Menulis data ke tabel sink Hologres biasa secara real-time.

  4. Kueri data di Hologres secara real-time.

    Kueri tabel yang menerima data di Hologres untuk mengambil data yang telah ditulis secara real-time. Kode berikut memberikan contoh pernyataan SQL kueri.

    select * from test_message;
    select * from test_message where bizdate = '20200327';

Pemetaan tipe data

Untuk informasi lebih lanjut tentang pemetaan tipe data antara Real-time Compute for Flink dalam mode eksklusif dan Hologres, lihat Ringkasan tipe data.