このトピックでは、さまざまなシナリオにおけるデフォルト値の使用方法と、Holo Client が使用するデフォルト値について説明します。
SQL シナリオ
SQL シナリオでは、フィールドにデフォルト値が設定されており、データ書き込みまたは更新操作でそのフィールドに値が指定されていない場合、システムは自動的にそのフィールドにデフォルト値を入力します。以下の例をご参照ください。
default_test テーブルを作成し、列 a と b にデフォルト値を設定します。
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;例 1: 列 a と列 b に値を指定します。指定された値はデフォルト値を上書きします。
-- デフォルト値が設定されている列 a と列 b に値を指定します。 INSERT INTO default_test VALUES (1, NULL); -- テーブルからデータをクエリします。 SELECT * FROM default_test;以下の結果が返されます。
a b 1 \N例 2: 列 b に値を指定しません。システムは自動的に列 b にデフォルト値を入力します。
-- 列 b に値を指定しません。 INSERT INTO default_test (a) VALUES (2); -- テーブルからデータをクエリします。 SELECT * FROM default_test;以下の結果が返されます。
a b 1 \N 2 2023-11-17 10:11:33.276+08例 3:
INSERT ON DO NOTHING文を実行します。この文では、プライマリキー列である列 a に値が指定されていません。この場合、システムは指定されたデータを列 b に書き込み、列 a にデフォルト値を自動的に入力します。-- INSERT ON DO NOTHING 文を実行します。この文では、プライマリキー列である列 a に値が指定されていません。この場合、システムは指定されたデータを列 b に書き込み、列 a にデフォルト値を自動的に入力します。 INSERT INTO default_test (b) VALUES ('2023-11-18 10:11:33.276+08') ON CONFLICT (a) DO NOTHING; -- テーブルからデータをクエリします。 SELECT * FROM default_test;以下の結果が返されます。
a b 2 2023-11-17 10:11:33.276+08 2023 2023-11-18 10:11:33.276+08 1 \N例 4:
INSERT ON CONFLICT DO UPDATE文を実行します。この文では、列 a と列 b に値が指定されています。指定された値はデフォルト値を上書きします。-- INSERT ON CONFLICT DO UPDATE 文を実行します。この文では、列 a と列 b に値が指定されています。指定された値はデフォルト値を上書きします。 INSERT INTO default_test (a, b)VALUES (2,null ) ON CONFLICT (a) DO UPDATE SET (a,b) = ROW(EXCLUDED.*); -- テーブルからデータをクエリします。 SELECT * FROM default_test;以下の結果が返されます。
a b 1 \N 2023 2023-11-18 10:11:33.276+08 2 \N例 5:
INSERT ON CONFLICT DO UPDATE文を実行します。この文では、列 b に値が指定されており、指定された値はデフォルト値を上書きします。列 a の値は更新されません。-- INSERT ON CONFLICT DO UPDATE 文を実行します。この文では、列 b に値が指定されており、指定された値はデフォルト値を上書きします。列 a の値は更新されません。 INSERT INTO default_test (a, b) VALUES (2023,null)ON CONFLICT (a) DO UPDATE SET b = EXCLUDED.b; -- テーブルからデータをクエリします。 SELECT * FROM default_test;以下の結果が返されます。
a b 2 \N 1 \N 2023 \N
Flink を使用した Hologres へのデータ書き込み
JDBC モード
Flink のデータ書き込みプロシージャ中に、以下のデータは書き込まれませんでした。
Null 許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはそのフィールドに Null を入力します。
フィールドにデフォルト値が設定されており、`mutatetype` パラメーターが InsertOrUpdate に設定されている場合、システムはそのフィールドにデフォルト値を入力します。それ以外の場合、システムはそのフィールドに Null を入力します。
Null 非許容フィールド
デフォルト値が設定されていない場合:
`EnableDefaultForNotNullColumn` パラメーターが false に設定されている場合、システムはデフォルト値を入力する代わりにエラーメッセージを報告します。
`EnableDefaultForNotNullColumn` パラメーターが true に設定されている場合、Holo Client はデータの型に基づいたデフォルト値を入力します。例: 空の文字列
("")。
デフォルト値は:
`EnableDefaultForNotNullColumn` パラメーターが `false` に設定されている場合、Hologres エンジンはデフォルト値を計算して書き込みます。ただし、Hologres V2.0 以前のバージョンでは、これにより固定プランが使用されなくなり、パフォーマンスの問題が発生する可能性があります。
説明Hologres インスタンスを手動でスペックアップするか、Hologres DingTalk グループに参加してスペックアップを申請できます。詳細については、「インスタンスのアップグレード」の「手動スペックアップ」セクションと、「Hologres のオンラインサポートを受ける」をご参照ください。
`EnableDefaultForNotNullColumn` パラメーターが true に設定されている場合、Holo Client はデータの型に基づいたデフォルト値を入力します。
固定コピーモード
このモードでは、UPDATE および IGNORE 操作のみを実行できます。特定のフィールドを更新するように指定した場合、指定されたフィールドの値のみが更新されます。他のフィールドの値は変更されません。REPLACE 効果を実現したい場合は、Flink DDL 文ですべてのフィールドを宣言する必要があります。値が指定されていないフィールドには、以下のルールが適用されます。
Null 許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはそのフィールドに Null を入力します。
フィールドにデフォルト値が設定されている場合、システムはそのフィールドにデフォルト値を入力します。
Null 非許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはエラーメッセージを報告します。
デフォルト値が設定されています。
BulkLoad モード (HQEcopy)
このモードでは UPDATE 操作を実行できません。Hologres にデータを書き込む際に特定のフィールドにのみ値を指定した場合、値が指定されていないフィールドには以下のルールが適用されます。
Null 許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはそのフィールドに Null を入力します。
フィールドにデフォルト値が設定されている場合、システムはそのフィールドにデフォルト値を入力します。
Null 非許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはエラーメッセージを報告します。
フィールドにデフォルト値が設定されている場合、システムはデフォルト値を入力します。
Flink を使用した Hologres へのデータ書き込みでサポートされているモードの詳細については、「Hologres」をご参照ください。
DataWorks のデータ統合を使用して Hologres にデータを書き込む
DataX ベースのバッチ同期
Data Integration の DataX を使用して、テーブルまたはデータベースからのバッチ同期を実行できます。詳細については、「Hologres データソース」をご参照ください。DataWorks の Data Integration を使用する場合、JDBC モードが自動的に使用されます。Hologres にデータを書き込む際に特定のフィールドのみ値を指定した場合、値が指定されていないフィールドには以下のルールが適用されます:
ヌル許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはフィールドに Null を設定します。
デフォルト値がすでに設定されている場合。
`conflictMode` パラメーターが Replace に設定されている場合、システムはフィールドに Null を設定します。
`conflictMode` パラメーターが Update に設定されている場合、システムはフィールドにデフォルト値を設定します。
非ヌルフィールド
デフォルト値が設定されていない場合。
`default.enable` パラメーターがデフォルト値の true に設定されている場合、Holo Client はフィールドにデータ型に基づくデフォルト値を設定します。例: 空の文字列
("")または 0。`default.enable` パラメーターが false に設定されている場合、システムはエラーメッセージを報告します。
デフォルト値が設定されている場合。
`default.enable` パラメーターがデフォルト値の true に設定されている場合、システムはフィールドにデフォルト値を設定します。
`default.enable` パラメーターが false に設定されている場合、システムはフィールドにデフォルト値を設定します。Hologres V2.0 より前のバージョンでは、固定プランが使用できなくなり、パフォーマンスの問題が発生する可能性があります。
StreamX ベースのリアルタイム同期
データ統合の StreamX を使用して、テーブルからリアルタイム同期を実行できます。 詳細については、「Hologres データソース」をご参照ください。 DataWorks のデータ統合を使用する場合、JDBC モードが自動的に使用されます。 Hologres にデータを書き込むときに特定のフィールドに値を指定した場合、値が指定されていないフィールドには、次のルールが適用されます。
Nullable なフィールド
フィールドにデフォルト値が設定されていない場合、システムはそのフィールドに Null を入力します。
デフォルト値が事前に設定されています。
`conflictMode` パラメーターが Replace または Ignore に設定されている場合、システムはそのフィールドに Null を入力します。
`conflictMode` パラメーターが Update に設定されている場合、システムはそのフィールドにデフォルト値を入力します。
Nullable ではないフィールド
デフォルト値は設定されていません。
`default.enable` パラメーターがデフォルト値の true に設定されている場合、Holo Client はそのフィールドにデータの型に基づいたデフォルト値を入力します。例:空の文字列
("")または 0。`default.enable` パラメーターが false に設定されている場合、システムはエラーメッセージを返します。
デフォルト値が設定されています。
`default.enable` パラメーターがデフォルト値の true に設定されている場合、システムはそのフィールドにデフォルト値を入力します。
`default.enable` パラメーターが false に設定されている場合でも、システムはそのフィールドにデフォルト値を入力します。Hologres V2.0 より前のバージョンでは、固定実行計画が使用できなくなり、パフォーマンスの問題が発生する可能性があります。
説明Hologres インスタンスを手動でアップグレードするか、Hologres DingTalk グループに参加してアップグレードを申請できます。詳細については、「インスタンスのアップグレード」の「手動アップグレード」セクションおよび「Hologres のオンラインサポートの利用」をご参照ください。
ホロクライアント 既定 値 マッピングテーブル
Flink または Hologres コネクタを使用して接続された DataWorks のデータ統合を JDBC モードで使用して Hologres にデータを書き込む場合、Holo Client が使用されます。データを書き込む際に特定のフィールドに対して値を指定すると、default.enable パラメーターは自動的に true に設定されます(enableDefaultForNotNullColumn)。フィールドに対して値が指定されず、かつそのフィールドにデフォルト値が設定されていない場合、Holo Client はデータの型に基づくデフォルト値を入力します。以下の表では、デフォルト値とデータの型のマッピングについて説明します。
データ型 | 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 | デフォルト値を設定できません。 |
BYTEA | |
RoaringBitmap | |
BIT(n) | |
VARBIT(n) | |
INTERVAL |