このトピックでは、さまざまなシナリオでデフォルト値がどのように使用されるか、および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を使用してHologresにデータを書き込む場合、値が指定されていないフィールドには次のルールが適用されます。
NULL許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはフィールドにNULLを入力します。
フィールドにデフォルト値が設定されていて、mutatetypeパラメーターがInsertOrUpdateに設定されている場合、システムはフィールドにデフォルト値を入力します。それ以外の場合、システムはフィールドにNULLを入力します。
NULL非許容フィールド
フィールドにデフォルト値が設定されていない場合、次のルールが適用されます。
EnableDefaultForNotNullColumnパラメーターがfalseに設定されている場合、システムはデフォルト値を入力するのではなく、エラーメッセージを報告します。
EnableDefaultForNotNullColumnパラメーターがtrueに設定されている場合、Holo Clientはデータ型ベースのデフォルト値を入力します。例:空の文字列
("")
。
フィールドにデフォルト値が設定されている場合、次のルールが適用されます。
EnableDefaultForNotNullColumnパラメーターがfalseに設定されている場合、システムはフィールドに設定されたデフォルト値を入力します。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ベースのバッチ同期
データ統合のDataXを使用して、テーブルまたはデータベースからバッチ同期を実行できます。詳細については、「Hologresデータソース」をご参照ください。DataWorksのデータ統合を使用する場合、JDBCモードが自動的に使用されます。Hologresにデータを書き込むときに特定のフィールドの値のみを指定した場合、値が指定されていないフィールドには次のルールが適用されます。
NULL許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはフィールドにNULLを入力します。
フィールドにデフォルト値が設定されている場合、次のルールが適用されます。
conflictModeパラメーターがReplaceに設定されている場合、システムはフィールドにNULLを入力します。
conflictModeパラメーターがUpdateに設定されている場合、システムはフィールドにデフォルト値を入力します。
NULL非許容フィールド
フィールドにデフォルト値が設定されていない場合、次のルールが適用されます。
default.enableパラメーターがデフォルト値trueに設定されている場合、Holo Clientはフィールドにデータ型ベースのデフォルト値を入力します。例:空の文字列
("")
または 0。default.enableパラメーターがfalseに設定されている場合、システムはエラーメッセージを報告します。
フィールドにデフォルト値が設定されている場合、次のルールが適用されます。
default.enableパラメーターがデフォルト値trueに設定されている場合、システムはフィールドにデフォルト値を入力します。
default.enableパラメーターがfalseに設定されている場合、システムはフィールドにデフォルト値も入力します。Hologres V2.0より前のバージョンでは、固定プランが使用できなくなり、パフォーマンスの問題が発生する可能性があります。
StreamXベースのリアルタイム同期
データ統合のStreamXを使用して、テーブルからリアルタイム同期を実行できます。詳細については、「Hologresデータソース」をご参照ください。DataWorksのデータ統合を使用する場合、JDBCモードが自動的に使用されます。Hologresにデータを書き込むときに特定のフィールドの値を指定した場合、値が指定されていないフィールドには次のルールが適用されます。
NULL許容フィールド
フィールドにデフォルト値が設定されていない場合、システムはフィールドにNULLを入力します。
フィールドにデフォルト値が設定されている場合、次のルールが適用されます。
conflictModeパラメーターがReplaceまたはIgnoreに設定されている場合、システムはフィールドにNULLを入力します。
conflictModeパラメーターがUpdateに設定されている場合、システムはフィールドにデフォルト値を入力します。
NULL非許容フィールド
フィールドにデフォルト値が設定されていない場合、次のルールが適用されます。
default.enableパラメーターがデフォルト値trueに設定されている場合、Holo Clientはフィールドにデータ型ベースのデフォルト値を入力します。例:空の文字列
("")
または 0。default.enableパラメーターがfalseに設定されている場合、システムはエラーメッセージを報告します。
フィールドにデフォルト値が設定されている場合、次のルールが適用されます。
default.enableパラメーターがデフォルト値trueに設定されている場合、システムはフィールドにデフォルト値を入力します。
default.enableパラメーターがfalseに設定されている場合、システムはフィールドにデフォルト値も入力します。Hologres V2.0より前のバージョンでは、固定プランが使用できなくなり、パフォーマンスの問題が発生する可能性があります。
説明Hologresインスタンスを手動でアップグレードするか、Hologres DingTalkグループに参加してアップグレードを申請できます。詳細については、「インスタンスのアップグレード」の「手動アップグレード」セクションとHologresのオンラインサポートを受ける」をご参照ください。
Holo Clientのデフォルト値とデータ型のマッピング
Hologresコネクタを使用して接続されたFlinkまたはDataWorksのデータ統合を使用してJDBCモードでHologresにデータを書き込む場合、Holo Clientが使用されます。データを書き込むときに特定のフィールドの値を指定すると、default.enableパラメーターは自動的にtrue (enableDefaultForNotNullColumn) に設定されます。フィールドに値が指定されておらず、フィールドにデフォルト値が設定されていない場合、Holo Clientはデータ型ベースのデフォルト値を入力します。次の表に、デフォルト値とデータ型のマッピングを示します。
データ型 | Holo Clientのデフォルト値 |
SMALLINT | 0 |
0 | |
0 | |
REAL | 0.0 |
0.0 | |
DECIMAL | 0 |
BOOLEAN | false |
VARCHAR(n) | "" |
"" | |
"" | |
TIMESTAMPTZ | 1970-01-01 08:00:00 |
1970-01-01 08:00:00 | |
DATE | 1970-01-01 |
TIMETZ | 08:00:00 |
00:00:00 | |
JSON and JSONB | サポートされていません |
NULL | |
NULL | |
NULL | |
NULL | |
NULL |