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

Hologres:デフォルト値

最終更新日:Mar 13, 2026

このトピックでは、さまざまなシナリオにおけるデフォルト値の使用方法と、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