すべてのプロダクト
Search
ドキュメントセンター

Hologres:デフォルト値

最終更新日:Jan 11, 2025

このトピックでは、さまざまなシナリオでデフォルト値がどのように使用されるか、および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はデータ型ベースのデフォルト値を入力します。次の表に、デフォルト値とデータ型のマッピングを示します。

INTEGERBIGINTDOUBLE PRECISIONCHAR(n)TEXTTIMESTAMPTIMEBYTEARoaringBitmapBIT(n)VARBIT(n)INTERVAL

データ型

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