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 \NContoh 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+08Contoh 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 \NContoh 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 \NContoh 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.
CatatanAnda 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.
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.
CatatanAnda 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 |