Bu konu, Hologres'in SQL, Flink ve DataWorks Veri Entegrasyonu gibi farklı senaryolarda veri yazarken varsayılan değerleri nasıl işlediğini açıklar.
Temel kural: Bir alan için varsayılan değer yapılandırılmamışsa ve yazma işlemi sırasında bir değer sağlanmamışsa sistem NULL değeri atar. Aşağıdaki tablolar ve bölümler, bu temel davranışın yazma yoluna ve parametrelere bağlı olarak nasıl değiştiğini açıklar.
Davranış özeti
Aşağıdaki tablo, tüm yazma yollarındaki varsayılan değer davranışını özetler. Detaylara inmeden önce beklenen davranışı hızlıca belirlemek için bu tabloyu kullanabilirsiniz.
| Yazma yolu | Alan türü | Varsayılan değer yapılandırılmış mı? | Davranış |
|---|---|---|---|
| SQL | Null kabul eden | Evet | Varsayılan değeri atar (alan belirtilmemişse) |
| SQL | Null kabul eden | Hayır | NULL atar |
| SQL | Null kabul etmeyen | Evet | Varsayılan değeri atar (alan belirtilmemişse) |
| Flink — JDBC modu | Null kabul eden | Hayır | NULL atar |
| Flink — JDBC modu | Null kabul eden | Evet | mutatetype=InsertOrUpdate ise varsayılan değeri atar; aksi takdirde NULL atar |
| Flink — JDBC modu | Null kabul etmeyen | Hayır | EnableDefaultForNotNullColumn=false ise hata döndürür; true ise veri türüne dayalı bir varsayılan değer atar |
| Flink — JDBC modu | Null kabul etmeyen | Evet | Varsayılan değeri atar (Hologres motoru hesaplar); V2.0 öncesi sürümlerde bu durum sabit planların kullanılmasını engelleyebilir |
| Flink — Sabit kopyalama modu | Null kabul eden | Hayır | NULL atar |
| Flink — Sabit kopyalama modu | Null kabul eden | Evet | Varsayılan değeri atar |
| Flink — Sabit kopyalama modu | Null kabul etmeyen | Hayır | Hata döndürür |
| Flink — Sabit kopyalama modu | Null kabul etmeyen | Evet | Varsayılan değeri atar |
| Flink — BulkLoad modu (HQEcopy) | Null kabul eden | Hayır | NULL atar |
| Flink — BulkLoad modu (HQEcopy) | Null kabul eden | Evet | Varsayılan değeri atar |
| Flink — BulkLoad modu (HQEcopy) | Null kabul etmeyen | Hayır | Hata döndürür |
| Flink — BulkLoad modu (HQEcopy) | Null kabul etmeyen | Evet | Varsayılan değeri atar |
| DataWorks — DataX toplu iş | Null kabul eden | Hayır | NULL atar |
| DataWorks — DataX toplu iş | Null kabul eden | Evet, conflictMode=Replace |
NULL atar |
| DataWorks — DataX toplu iş | Null kabul eden | Evet, conflictMode=Update |
Varsayılan değeri atar |
| DataWorks — DataX toplu iş | Null kabul etmeyen | Hayır, default.enable=true (varsayılan) |
Veri türüne dayalı bir varsayılan değer atar (örneğin, "" veya 0) |
| DataWorks — DataX toplu iş | Null kabul etmeyen | Hayır, default.enable=false |
Hata döndürür |
| DataWorks — DataX toplu iş | Null kabul etmeyen | Evet, default.enable=true (varsayılan) |
Varsayılan değeri atar |
| DataWorks — DataX toplu iş | Null kabul etmeyen | Evet, default.enable=false |
Varsayılan değeri atar; V2.0 öncesi sürümlerde sabit planlar başarısız olabilir |
| DataWorks — StreamX gerçek zamanlı | Null kabul eden | Hayır | NULL atar |
| DataWorks — StreamX gerçek zamanlı | Null kabul eden | Evet, conflictMode=Replace veya Ignore |
NULL atar |
| DataWorks — StreamX gerçek zamanlı | Null kabul eden | Evet, conflictMode=Update |
Varsayılan değeri atar |
| DataWorks — StreamX gerçek zamanlı | Null kabul etmeyen | Hayır, default.enable=true (varsayılan) |
Veri türüne dayalı bir varsayılan değer atar (örneğin, "" veya 0) |
| DataWorks — StreamX gerçek zamanlı | Null kabul etmeyen | Hayır, default.enable=false |
Hata döndürür |
| DataWorks — StreamX gerçek zamanlı | Null kabul etmeyen | Evet, default.enable=true (varsayılan) |
Varsayılan değeri atar |
| DataWorks — StreamX gerçek zamanlı | Null kabul etmeyen | Evet, default.enable=false |
Varsayılan değeri atar; V2.0 öncesi sürümlerde sabit planlar başarısız olabilir |
SQL senaryoları
Bir alan için varsayılan değer yapılandırılmışsa ve yazma veya güncelleme işlemi sırasında bir değer belirtilmemişse Hologres o alan için varsayılan değeri otomatik olarak atar.
Aşağıdaki örneklerde şu tablo kullanılır:
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;
Örnek 1: Her iki sütun için de değer belirtin. Belirtilen değerler varsayılanların üzerine yazılır.
-- Specify values for column a and column b.
INSERT INTO default_test VALUES (1, NULL);
-- Query the table.
SELECT * FROM default_test;
Sonuç:
a b
1 \N
Örnek 2: b sütununu atlayın. Sistem b sütunu için varsayılan değeri atar.
-- Omit column b.
INSERT INTO default_test (a) VALUES (2);
-- Query the table.
SELECT * FROM default_test;
Sonuç:
a b
1 \N
2 2023-11-17 10:11:33.276+08
Örnek 3: a sütununu (birincil anahtar) belirtmeden INSERT ON CONFLICT DO NOTHING çalıştırın. Sistem b sütununun değerini yazar ve a sütunu için varsayılan değeri atar.
-- Column a is omitted; the system fills the default value (2023).
INSERT INTO default_test (b) VALUES ('2023-11-18 10:11:33.276+08') ON CONFLICT (a) DO NOTHING;
-- Query the table.
SELECT * FROM default_test;
Sonuç:
a b
2 2023-11-17 10:11:33.276+08
2023 2023-11-18 10:11:33.276+08
1 \N
Örnek 4: Her iki sütun için açık değerlerle INSERT ON CONFLICT DO UPDATE çalıştırın. Belirtilen değerler varsayılanların üzerine yazılır.
-- Specify values for both columns; specified values take precedence.
INSERT INTO default_test (a, b) VALUES (2, null) ON CONFLICT (a) DO UPDATE SET (a,b) = ROW(EXCLUDED.*);
-- Query the table.
SELECT * FROM default_test;
Sonuç:
a b
1 \N
2023 2023-11-18 10:11:33.276+08
2 \N
Örnek 5: Yalnızca b sütununu güncelleyen INSERT ON CONFLICT DO UPDATE çalıştırın. a sütunu güncellenmez.
-- Only column b is updated; column a remains unchanged.
INSERT INTO default_test (a, b) VALUES (2023, null) ON CONFLICT (a) DO UPDATE SET b = EXCLUDED.b;
-- Query the table.
SELECT * FROM default_test;
Sonuç:
a b
2 \N
1 \N
2023 \N
Flink kullanarak veri yazma
Flink yazma modları hakkında daha fazla bilgi için bkz. Hologres.
JDBC modu
Değer belirtilmeyen alanlar için aşağıdaki kurallar geçerlidir.
Null kabul eden alanlar
Varsayılan değer yapılandırılmamışsa sistem NULL atar.
Varsayılan değer yapılandırılmışsa
mutatetypeparametresiInsertOrUpdateolarak ayarlandığında sistem varsayılan değeri atar; aksi takdirde sistem NULL atar.
Null kabul etmeyen alanlar
-
Varsayılan değer yapılandırılmamışsa:
EnableDefaultForNotNullColumn=falseise sistem hata döndürür.EnableDefaultForNotNullColumn=trueise Holo Client veri türüne dayalı bir varsayılan değer atar (örneğin, boş dize"").
-
Varsayılan değer yapılandırılmışsa:
EnableDefaultForNotNullColumn=falseise Hologres motoru varsayılan değeri hesaplar ve yazar. Hologres V2.0 öncesi sürümlerde bu durum sabit planların kullanılmasını engelleyebilir ve performans sorunlarına neden olabilir.EnableDefaultForNotNullColumn=trueise Holo Client veri türüne dayalı bir varsayılan değer atar.
Hologres örneğinizi manuel olarak yükseltebilir veya yükseltme başvurusunda bulunmak üzere Hologres DingTalk grubuna katılabilirsiniz. Daha fazla bilgi için Örnek yükseltme konusundaki "Manuel yükseltme" bölümüne bakın. Çevrimiçi destek almak için Hologres için çevrimiçi destek alma konusuna bakın.
Sabit kopyalama modu
Bu modda yalnızca UPDATE ve IGNORE işlemleri desteklenir. Belirli alanları güncellediğinizde yalnızca bu alanlar güncellenir; diğer tüm alanlar değişmeden kalır. REPLACE etkisi elde etmek için Flink DDL ifadesinde tüm alanları bildirin.
Değer belirtilmeyen alanlar için aşağıdaki kurallar geçerlidir.
Null kabul eden alanlar
Varsayılan değer yapılandırılmamışsa sistem NULL atar.
Varsayılan değer yapılandırılmışsa sistem varsayılan değeri atar.
Null kabul etmeyen alanlar
Varsayılan değer yapılandırılmamışsa sistem hata döndürür.
Varsayılan değer yapılandırılmışsa sistem varsayılan değeri atar.
BulkLoad modu (HQEcopy)
Bu modda UPDATE işlemleri desteklenmez. Değer belirtilmeyen alanlar için aşağıdaki kurallar geçerlidir.
Null kabul eden alanlar
Varsayılan değer yapılandırılmamışsa sistem NULL atar.
Varsayılan değer yapılandırılmışsa sistem varsayılan değeri atar.
Null kabul etmeyen alanlar
Varsayılan değer yapılandırılmamışsa sistem hata döndürür.
Varsayılan değer yapılandırılmışsa sistem varsayılan değeri atar.
DataWorks Veri Entegrasyonu kullanarak veri yazma
DataX tabanlı toplu eşitleme
Veri Entegrasyonunun DataX bileşeni, bir tablodan veya veritabanından toplu eşitlemeyi destekler. Daha fazla bilgi için bkz. Hologres veri kaynağı. JDBC modu otomatik olarak kullanılır. Değer belirtilmeyen alanlar için aşağıdaki kurallar geçerlidir.
Null kabul eden alanlar
Varsayılan değer yapılandırılmamışsa sistem NULL atar.
-
Varsayılan değer yapılandırılmışsa:
conflictMode=Replaceise sistem NULL atar.conflictMode=Updateise sistem varsayılan değeri atar.
Null kabul etmeyen alanlar
-
Varsayılan değer yapılandırılmamışsa:
default.enable=true(varsayılan) ise Holo Client veri türüne dayalı bir varsayılan değer atar (örneğin, boş dize""veya0).default.enable=falseise sistem hata döndürür.
-
Varsayılan değer yapılandırılmışsa:
default.enable=true(varsayılan) ise sistem varsayılan değeri atar.default.enable=falseise sistem yine de varsayılan değeri atar. Hologres V2.0 öncesi sürümlerde sabit planlar kullanılamayabilir ve performans sorunları oluşabilir.
StreamX tabanlı gerçek zamanlı eşitleme
Veri Entegrasyonunun StreamX bileşeni, bir tablodan gerçek zamanlı eşitlemeyi destekler. Daha fazla bilgi için bkz. Hologres veri kaynağı. JDBC modu otomatik olarak kullanılır. Değer belirtilmeyen alanlar için aşağıdaki kurallar geçerlidir.
Null kabul eden alanlar
Varsayılan değer yapılandırılmamışsa sistem NULL atar.
-
Varsayılan değer yapılandırılmışsa:
conflictMode=ReplaceveyaconflictMode=Ignoreise sistem NULL atar.conflictMode=Updateise sistem varsayılan değeri atar.
Null kabul etmeyen alanlar
-
Varsayılan değer yapılandırılmamışsa:
default.enable=true(varsayılan) ise Holo Client veri türüne dayalı bir varsayılan değer atar (örneğin, boş dize""veya0).default.enable=falseise sistem hata döndürür.
-
Varsayılan değer yapılandırılmışsa:
default.enable=true(varsayılan) ise sistem varsayılan değeri atar.default.enable=falseise sistem yine de varsayılan değeri atar. Hologres V2.0 öncesi sürümlerde sabit planlar kullanılamayabilir ve performans sorunları oluşabilir.
Hologres örneğinizi manuel olarak yükseltebilir veya yükseltme başvurusunda bulunmak üzere Hologres DingTalk grubuna katılabilirsiniz. Daha fazla bilgi için Örnek yükseltme konusundaki "Manuel yükseltme" bölümüne bakın. Çevrimiçi destek almak için Hologres için çevrimiçi destek alma konusuna bakın.
Holo Client varsayılan değer eşlemesi
Flink veya DataWorks Veri Entegrasyonu ile JDBC modunda veri yazdığınızda yazma katmanını Holo Client yönetir. Veri yazarken belirli alanlar için değerler belirtirseniz default.enable parametresi otomatik olarak true değerine (enableDefaultForNotNullColumn=true ile eşdeğer) ayarlanır. Bir alan için değer yoksa ve yapılandırılmış bir varsayılan değer bulunmuyorsa Holo Client veri türüne dayalı bir varsayılan değeri otomatik olarak atar. Aşağıdaki tabloda bu varsayılan değerler listelenmiştir.
| Tür | Holo Client tarafından atanan varsayılan |
|---|---|
| SMALLINT | 0 |
| INTEGER | 0 |
| BIGINT | 0 |
| REAL | 0,0 |
| DOUBLE PRECISION | 0,0 |
| DECIMAL | 0 |
| BOOLEAN | false |
| VARCHAR(n) | "" (boş dize) |
| CHAR(n) | "" (boş dize) |
| TEXT | "" (boş dize) |
| TIMESTAMPTZ | 1970-01-01 08:00:00 |
| TIMESTAMP | 1970-01-01 08:00:00 |
| DATE | 1970-01-01 |
| TIMETZ | 08:00:00 |
| TIME | 08:00:00 |
| JSON ve JSONB | Varsayılan değer yazılamaz |
| BYTEA | Varsayılan değer yazılamaz |
| RoaringBitmap | Varsayılan değer yazılamaz |
| BIT(n) | Varsayılan değer yazılamaz |
| VARBIT(n) | Varsayılan değer yazılamaz |
| INTERVAL | Varsayılan değer yazılamaz |