全部产品
Search
文档中心

Hologres:Nilai default

更新时间:Jul 06, 2025

Topik ini menjelaskan penggunaan nilai default dalam berbagai skenario serta nilai default yang digunakan oleh Holo Client.

Skenario SQL

Dalam skenario SQL, jika nilai default dikonfigurasi untuk suatu kolom dan tidak ada nilai yang ditentukan untuk kolom tersebut dalam operasi penulisan atau pembaruan data, sistem secara otomatis mengisi nilai default. Berikut adalah contoh untuk referensi:

Contoh-contoh ini menggunakan tabel bernama default_test, dengan nilai default dikonfigurasi untuk Kolom a dan Kolom b. Contoh kode:

BEGIN;
CREATE TABLE default_test (
    a int NOT NULL DEFAULT 2023,
    b timestamptz DEFAULT '2023-11-17 10:11:33.276+08',
    PRIMARY KEY (a)
);
COMMIT;
  • Contoh 1: Menentukan nilai untuk Kolom a dan Kolom b. Nilai yang ditentukan akan menimpa nilai default.

    -- Tentukan nilai untuk Kolom a dan Kolom b yang memiliki nilai default.
    INSERT INTO default_test VALUES (1, NULL);
    -- Kueri data dari tabel.
    SELECT * FROM default_test;

    Hasil berikut dikembalikan:

    a	b
    1	\N
  • Contoh 2: Tidak menentukan nilai untuk Kolom b. Sistem secara otomatis mengisi nilai default untuk Kolom b.

    -- Jangan tentukan nilai untuk Kolom b.
    INSERT INTO default_test (a) VALUES (2);
    -- Kueri data dari tabel.
    SELECT * FROM default_test;

    Hasil berikut dikembalikan:

    a	 b
    1	 \N
    2	 2023-11-17 10:11:33.276+08
  • Contoh 3: Menjalankan pernyataan INSERT ON DO NOTHING. Dalam pernyataan ini, tidak ada nilai yang ditentukan untuk Kolom a yang merupakan kolom kunci utama. Dalam hal ini, sistem menulis data yang ditentukan ke Kolom b dan mengisi nilai default di Kolom a.

    -- Jalankan pernyataan INSERT ON DO NOTHING. Dalam pernyataan ini, tidak ada nilai yang ditentukan untuk Kolom a yang berfungsi sebagai kolom kunci utama. Dalam hal ini, sistem menulis data yang ditentukan ke Kolom b dan secara otomatis mengisi nilai default di Kolom a. 
    INSERT INTO default_test (b) VALUES ('2023-11-18 10:11:33.276+08') ON CONFLICT (a) DO NOTHING;
    -- Kueri data dari tabel.
    SELECT * FROM default_test;

    Hasil berikut dikembalikan:

    a	b
    2	2023-11-17 10:11:33.276+08
    2023	2023-11-18 10:11:33.276+08
    1	\N
  • Contoh 4: Menjalankan pernyataan INSERT ON CONFLICT DO UPDATE. Dalam pernyataan ini, nilai ditentukan untuk Kolom a dan Kolom b. Nilai yang ditentukan menimpa nilai default.

    -- Jalankan pernyataan INSERT ON CONFLICT DO UPDATE. Dalam pernyataan ini, nilai ditentukan untuk Kolom a dan Kolom b. Nilai yang ditentukan menimpa nilai default. 
    INSERT INTO default_test (a, b)VALUES (2,null ) ON CONFLICT (a) DO UPDATE SET (a,b) = ROW(EXCLUDED.*);
    -- Kueri data dari tabel.
    SELECT * FROM default_test;

    Hasil berikut dikembalikan:

    a	b
    1	\N
    2023	2023-11-18 10:11:33.276+08
    2	\N
  • Contoh 5: Menjalankan pernyataan INSERT ON CONFLICT DO UPDATE. Dalam pernyataan ini, nilai ditentukan untuk Kolom b dan nilai tersebut menimpa nilai default. Nilai di Kolom a tidak diperbarui.

    -- Jalankan pernyataan INSERT ON CONFLICT DO UPDATE. Dalam pernyataan ini, nilai ditentukan untuk Kolom b dan nilai yang ditentukan menimpa nilai default. Nilai di Kolom a tidak diperbarui. 
    INSERT INTO default_test (a, b) VALUES (2023,null)ON CONFLICT (a) DO UPDATE SET b = EXCLUDED.b;
    -- Kueri data dari tabel.
    SELECT * FROM default_test;

    Hasil berikut dikembalikan:

    a	b
    2	\N
    1	\N
    2023	\N

Gunakan Flink untuk menulis data ke Hologres

Mode JDBC

Ketika menggunakan Flink untuk menulis data ke Hologres, aturan berikut berlaku untuk kolom tanpa nilai yang ditentukan:

  • Kolom nullable:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem mengisi Null untuk kolom tersebut.

    • Jika nilai default dikonfigurasi dan parameter mutatetype diatur ke InsertOrUpdate, sistem mengisi nilai default. Jika tidak, sistem mengisi Null.

  • Kolom non-null:

    • Jika tidak ada nilai default yang dikonfigurasi, aturan berikut berlaku:

      • Jika parameter EnableDefaultForNotNullColumn diatur ke false, sistem melaporkan pesan kesalahan.

      • Jika parameter EnableDefaultForNotNullColumn diatur ke true, Holo Client mengisi nilai default berdasarkan tipe data, seperti string kosong ("").

    • Jika nilai default dikonfigurasi, aturan berikut berlaku:

      • Jika parameter EnableDefaultForNotNullColumn diatur ke false, sistem mengisi nilai default yang dikonfigurasi. Di versi sebelum Hologres V2.0, rencana tetap mungkin gagal digunakan dan masalah kinerja dapat terjadi.

        Catatan

        Anda bisa memutakhirkan instance Hologres Anda secara manual atau bergabung dengan grup DingTalk Hologres untuk mengajukan pemutakhiran. Untuk informasi lebih lanjut, lihat bagian "Pemutakhiran Manual" di Pemutakhiran Instance dan Dapatkan dukungan online untuk Hologres.

      • Jika parameter EnableDefaultForNotNullColumn diatur ke true, Holo Client mengisi nilai default berdasarkan tipe data.

Mode salinan tetap

Hanya operasi UPDATE dan IGNORE yang dapat dilakukan dalam mode ini. Jika Anda menentukan untuk memperbarui kolom tertentu, hanya nilai dari kolom tersebut yang diperbarui. Nilai dari kolom lainnya tetap tidak berubah. Untuk mencapai efek REPLACE, deklarasikan semua kolom dalam pernyataan Flink DDL. Aturan berikut berlaku untuk kolom tanpa nilai yang ditentukan:

  • Kolom nullable:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem mengisi Null.

    • Jika nilai default dikonfigurasi, sistem mengisi nilai default.

  • Kolom non-null:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem melaporkan pesan kesalahan.

    • Jika nilai default dikonfigurasi, sistem mengisi nilai default.

Mode BulkLoad (HQEcopy)

Operasi UPDATE tidak dapat dilakukan dalam mode ini. Jika Anda hanya menentukan nilai untuk kolom tertentu saat menulis data ke Hologres, aturan berikut berlaku untuk kolom tanpa nilai yang ditentukan:

  • Kolom nullable:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem mengisi Null.

    • Jika nilai default dikonfigurasi, sistem mengisi nilai default.

  • Kolom non-null:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem melaporkan pesan kesalahan.

    • Jika nilai default dikonfigurasi, sistem mengisi nilai default.

Catatan

Untuk informasi lebih lanjut tentang mode yang didukung untuk menulis data ke Hologres menggunakan Flink, lihat Konektor Hologres.

Gunakan Data Integration dari DataWorks untuk menulis data ke Hologres

Sinkronisasi batch berbasis DataX

Anda dapat menggunakan DataX dari Data Integration untuk melakukan sinkronisasi batch dari tabel atau database. Untuk informasi lebih lanjut, lihat Sumber data Hologres. Saat menggunakan Data Integration dari DataWorks, mode JDBC digunakan secara otomatis. Jika Anda hanya menentukan nilai untuk kolom tertentu saat menulis data ke Hologres, aturan berikut berlaku untuk kolom tanpa nilai yang ditentukan:

  • Kolom nullable:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem mengisi Null.

    • Jika nilai default dikonfigurasi, aturan berikut berlaku:

      • Jika parameter conflictMode diatur ke Replace, sistem mengisi Null.

      • Jika parameter conflictMode diatur ke Update, sistem mengisi nilai default.

  • Kolom non-null:

    • Jika tidak ada nilai default yang dikonfigurasi, aturan berikut berlaku:

      • Jika parameter default.enable diatur ke nilai default true, Holo Client mengisi nilai default berdasarkan tipe data, seperti string kosong ("") atau 0.

      • Jika parameter default.enable diatur ke false, sistem melaporkan pesan kesalahan.

    • Jika nilai default dikonfigurasi, aturan berikut berlaku:

      • Jika parameter default.enable diatur ke nilai default true, sistem mengisi nilai default.

      • Jika parameter default.enable diatur ke false, sistem juga mengisi nilai default. Di versi sebelum Hologres V2.0, rencana tetap mungkin gagal digunakan dan masalah kinerja dapat terjadi.

Sinkronisasi real-time berbasis StreamX

Anda dapat menggunakan StreamX dari Data Integration untuk melakukan sinkronisasi real-time dari tabel. Untuk informasi lebih lanjut, lihat Sumber data Hologres. Saat menggunakan Data Integration dari DataWorks, mode JDBC digunakan secara otomatis. Jika Anda menentukan nilai untuk kolom tertentu saat menulis data ke Hologres, aturan berikut berlaku untuk kolom tanpa nilai yang ditentukan:

  • Kolom nullable:

    • Jika tidak ada nilai default yang dikonfigurasi, sistem mengisi Null.

    • Jika nilai default dikonfigurasi, aturan berikut berlaku:

      • Jika parameter conflictMode diatur ke Replace atau Ignore, sistem mengisi Null.

      • Jika parameter conflictMode diatur ke Update, sistem mengisi nilai default.

  • Kolom non-null:

    • Jika tidak ada nilai default yang dikonfigurasi, aturan berikut berlaku:

      • Jika parameter default.enable diatur ke nilai default true, Holo Client mengisi nilai default berdasarkan tipe data, seperti string kosong ("") atau 0.

      • Jika parameter default.enable diatur ke false, sistem melaporkan pesan kesalahan.

    • Jika nilai default dikonfigurasi, aturan berikut berlaku:

      • Jika parameter default.enable diatur ke nilai default true, sistem mengisi nilai default.

      • Jika parameter default.enable diatur ke false, sistem juga mengisi nilai default. Di versi sebelum Hologres V2.0, rencana tetap mungkin gagal digunakan dan masalah kinerja dapat terjadi.

        Catatan

        Anda bisa memutakhirkan instance Hologres Anda secara manual atau bergabung dengan grup DingTalk Hologres untuk mengajukan pemutakhiran. Untuk informasi lebih lanjut, lihat bagian "Pemutakhiran Manual" di Pemutakhiran Instance dan Dapatkan dukungan online untuk Hologres.

Pemetaan antara nilai default dan tipe data Holo Client

Jika Anda menggunakan Flink atau Data Integration dari DataWorks yang terhubung menggunakan konektor Hologres untuk menulis data ke Hologres dalam mode JDBC, Holo Client digunakan. Jika Anda menentukan nilai untuk kolom tertentu saat menulis data, parameter default.enable secara otomatis diatur ke true (enableDefaultForNotNullColumn). Jika tidak ada nilai yang ditentukan untuk kolom dan tidak ada nilai default yang dikonfigurasi, Holo Client mengisi nilai default berdasarkan tipe data. Tabel berikut menjelaskan pemetaan antara nilai default dan tipe data.

Tipe data

Nilai default Holo Client

SMALLINT

0

INTEGER

BIGINT

REAL

0.0

DOUBLE PRECISION

DECIMAL

0

BOOLEAN

false

VARCHAR(n)

""

CHAR(n)

TEXT

TIMESTAMPTZ

1970-01-01 08:00:00

TIMESTAMP

DATE

1970-01-01

TIMETZ

08:00:00

TIME

JSON and JSONB

Tidak didukung

BYTEA

RoaringBitmap

BIT(n)

VARBIT(n)

INTERVAL