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

Hologres:HGraph インデックスガイド (推奨)

最終更新日:Feb 07, 2026

Hologres のベクターコンピューティングは、類似検索、画像取得、シーン認識などのシナリオをサポートします。ベクターコンピューティングを使用して、データ処理と分析を改善し、より正確な検索および推奨機能を構築します。このトピックでは、Hologres でベクターコンピューティングを使用する方法について説明し、完全な例を提供します。

注意事項

  • Hologres V4.0 以降、HGraph ベクター取得アルゴリズムをサポートしています。

  • ベクターインデックスは、列指向テーブルと行列ハイブリッドテーブルでのみ作成できます。行指向テーブルはサポートされていません。

  • ベクターインデックスを持つテーブルを削除または再構築する場合 (例:`INSERT OVERWRITE` を使用)、ゴミ箱機能を有効にしないでください。ゴミ箱内のテーブルは、依然として一部のメモリを消費します。

  • ベクターインデックスを作成した後、インデックスファイルはデータインポート後の Compaction プロセス中に構築されます。

  • メモリテーブル (Mem Table) 内のデータにはベクターインデックスがありません。ベクター取得リクエストを実行すると、このデータは総当たり計算を使用して処理されます。

  • Serverless Computing リソースを使用して、バッチデータインポートを実行します。Serverless リソースは、データインポート中に Compaction とインデックス構築を同期的に完了します。詳細については、「Serverless Computing を使用した読み取り/書き込みタスクの実行」および「Serverless Computing を使用した Compaction タスクの実行」をご参照ください。

  • Serverless リソースを使用しない場合は、バッチでデータをインポートした後、またはインデックスを変更した後に、手動で次のコマンドを実行して Compaction をトリガーします。詳細については、「Compaction (ベータ版)」をご参照ください。

  • SELECT hologres.hg_full_compact_table('<SCHEMA_NAME>.<TABLE_NAME>', 'max_file_size_mb=4096');
  • Serverless Computing リソースを使用して、ベクター取得クエリを実行できます。

ベクターインデックスの管理

インデックスの作成

構文:テーブルを作成するときにベクターインデックスを作成します。

説明:Hologres では、ベクターは float4 配列で表されます。ベクターディメンションは、1 次元配列の長さで表され、次の構文では `array_length` になります。

CREATE TABLE <TABLE_NAME> (
    <VECTOR_COLUMN_NAME> float4[] CHECK (array_ndims(<VECTOR_COLUMN_NAME>) = 1 AND array_length(<VECTOR_COLUMN_NAME>, 1) = <DIM>)
)
WITH (
    vectors = '{
    "<VECTOR_COLUMN_NAME>": {
        "algorithm": "<ALGORITHM>",
        "distance_method": "<DISTANCE_METHOD>",
        "builder_params": {
            "<BUILDER_PARAMETERS_NAME>": <VALUE>
            [, ...]
        }
    }
    [ , "<VECTOR_COLUMN_NAME_2>": { ... } ]
  }'
);

パラメーターの説明:

パラメーター

説明

table_name

ターゲットテーブルの名前。

vector_column_name

ターゲットベクターフィールドの名前。

dim

ターゲット列のベクターディメンション。

ベクターインデックスパラメーター `vectors` の値は、次の要件を満たす必要があります:

  • JSON 形式の文字列のみがサポートされています。最上位レベルでは、`vector_column_name` キーが 1 つだけサポートされています。このキーは、ベクターインデックスを構築するベクターフィールドの名前を指定します。

  • `vector_column_name` キーの値は、ベクターインデックスパラメーターを構成するために使用される JSON オブジェクトです。次のキーがサポートされています。

キー

説明

algorithm

ベクターインデックスのアルゴリズム。このパラメーターは必須です。HGraph のみがサポートされています。

distance_method

ベクター距離計算メソッド。このパラメーターは必須です。次の値がサポートされています:

  • Euclidean:ユークリッド距離。昇順 (`ORDER BY distance ASC`) のみがサポートされています。

  • InnerProduct:内積距離。降順 (`ORDER BY distance DESC`) のみがサポートされています。

  • Cosine:コサイン距離。降順 (`ORDER BY distance DESC`) のみがサポートされています。

注:ベクター取得に使用される距離計算関数は、ベクターインデックスに使用される距離計算メソッドに対応し、ソート要件を満たす必要があります。そうでない場合、ベクターインデックスは使用できません。

builder_params

ベクターインデックス構築パラメーター。JSON 形式の文字列のみがサポートされています。パラメーターの詳細については、次のセクションをご参照ください。

  • max_degree

  • ef_construction

  • base_quantization_type

  • use_reorder

  • precise_quantization_type

  • precise_io_type

`builder_params` パラメーターは、次のパラメーターをサポートします:

パラメーター

説明

max_degree

インデックス構築プロセス中、各頂点は最も近い max_degree 個の頂点に接続しようとします。オプション。デフォルト値は 64 です。値を大きくすると、各頂点の検索範囲と検索効率が向上しますが、グラフ構築とストレージのコストも増加します。通常、96 を超えないようにすることを推奨します。

ef_construction

インデックス構築中の検索深度を制御します。このパラメーターはオプションです。デフォルト値は 400 です。値を大きくすると、インデックス構築中に頂点の隣接ベクターの候補が増えます。これにより、インデックスの精度が向上しますが、インデックス構築の時間と計算の複雑さも増加します。この値を 600 以下に設定することを推奨します。

base_quantization_type

HGraph 低精度インデックスの量子化メソッド。このパラメーターは必須です。次のメソッドがサポートされています:

  • sq8

  • sq8_uniform

  • fp16

  • fp32

  • rabitq

use_reorder

HGraph 高精度インデックスを使用するかどうかを指定します。このパラメーターはオプションです。デフォルト値は FALSE です。

precise_quantization_type

HGraph 高精度インデックスの量子化メソッド。このパラメーターはオプションで、`use_reorder` が TRUE の場合にのみ有効です。デフォルト値は fp32 です。この値を変更しないことを推奨します。次のメソッドがサポートされています。`base_quantization_type` よりも精度の高い量子化メソッドを選択することを推奨します。

  • sq8

  • sq8_uniform

  • fp16

  • fp32

precise_io_type

高精度と低精度の両方のインデックスを使用するハイブリッド HGraph インデックスの記憶媒体。このパラメーターはオプションで、`use_reorder` が TRUE の場合にのみ有効です。デフォルト値は `block_memory_io` です。次の値がサポートされています:

  • block_memory_io:低精度と高精度の両方のインデックスがメモリに保存されます。

  • reader_io:低精度インデックスはメモリに保存され、高精度インデックスはディスクに保存されます。

builder_thread_count

このパラメーターはオプションです。デフォルト値は 4 です。データ書き込み中にベクターインデックスを構築するためのスレッド数を制御します。通常、このパラメーターを調整する必要はありません。この値を大きくすると、CPU 使用率が高くなる可能性があります。したがって、ほとんどのシナリオでこのパラメーターを変更しないことを推奨します。このパラメーターを変更しても、インデックスの再作成はトリガーされません。

graph_storage_type

このパラメーターはオプションです。デフォルト値は `flat` です。メモリ内のグラフインデックスの圧縮を制御します。次の値がサポートされています:

  • flat (デフォルト):グラフインデックスを圧縮しません。

  • compressed:グラフインデックスを圧縮します。これにより、メモリを 50% 節約でき、最大 QPS は約 5% しか減少しません。

説明

このパラメーターは Hologres V4.0.10 以降で設定できます。

extra_columns

ベクターインデックスに列情報を付加します。この機能は V4.1.1 以降でサポートされています。このパラメーターはオプションです。INT、BIGINT、SMALLINT 型の列のみがサポートされています。取得中に、ターゲットテーブルの対応する列をクエリすることなく、インデックスから直接列の値を取得できます。これにより、ベクター取得のパフォーマンスが向上します。例:"extra_columns": "id"

インデックスの変更

構文:

ALTER TABLE <TABLE_NAME>
SET (
    vectors = '{
    "<VECTOR_COLUMN_NAME>": {
        "algorithm": "<ALGORITHM>",
        "distance_method": "<DISTANCE_METHOD>",
        "builder_params": {
            "<BUILDER_PARAMETERS_NAME>": <VALUE>
            [, ...]
        }
    }
  }'
);

インデックスの削除

-- テーブル内のすべての列のベクターインデックスを削除します。
ALTER TABLE <TABLE_NAME>
SET (
    vectors = '{}'
);

-- テーブルに col1 と col2 の両方の列にベクターインデックスが構築されており、col2 列のインデックスを削除する必要がある場合は、ALTER TABLE 文を実行して col1 列のインデックスのみを保持します。
ALTER TABLE <TABLE_NAME>
SET (
    vectors = '{
    "col1": { ... }
  }'
);

インデックスの表示

Hologres は `hologres.hg_table_properties` システムテーブルを提供します。このテーブルを使用して、作成されたベクターインデックスを表示できます。

SELECT
    *
FROM
    hologres.hg_table_properties
WHERE 
    table_name = '<TABLE_NAME>'
    AND property_key = 'vectors';

ベクターインデックスを使用したベクター取得

ベクター距離計算関数

Hologres のベクター取得は、近似取得と精密取得をサポートしています。作成されたベクターインデックスを使用してクエリを高速化できるのは、近似取得関数のみです。関数は、ベクターインデックスの `distance_method` に対応している必要があります。精密取得関数はベクターインデックスを使用できません。

注:ベクター距離計算関数は、すべて定数の入力パラメーターをサポートしていません。

関数

取得タイプ

入力パラメーター

戻り値

説明

approx_euclidean_distance

近似取得
















float4[], float4[]

float4

ユークリッド距離の近似取得関数。

approx_inner_product_distance

近似取得

float4[], float4[]

float4

内積距離の近似取得関数。

approx_cosine_distance

近似取得

float4[], float4[]

float4

コサイン距離の近似取得関数。

euclidean_distance

精密取得

float4[], float4[]

float4

ユークリッド距離の精密取得関数。

inner_product_distance

精密取得

float4[], float4[]

float4

内積距離の精密取得関数。

cosine_distance

精密取得

float4[], float4[]

float4

コサイン距離の精密取得関数。

ベクターインデックスの使用の確認

実行計画を表示して、SQL 文がベクターインデックスを使用しているかどうかを確認できます。計画に「Vector Filter」が含まれている場合、インデックスは正常に使用されています。詳細については、EXPLAIN と EXPLAIN ANALYZE をご参照ください。

  • SQL の例:

    SELECT
        id,
        approx_euclidean_distance (feature, '{0.1,0.2,0.3,0.4}') AS distance
    FROM
        feature_tb
    ORDER BY
        distance
    LIMIT 40;
  • 実行計画:

    Limit  (cost=0.00..182.75 rows=40 width=12)
      ->  Sort  (cost=0.00..182.75 rows=160 width=12)
            Sort Key: (VectorDistanceRef)
            ->  Gather  (cost=0.00..181.95 rows=160 width=12)
                  ->  Limit  (cost=0.00..181.94 rows=160 width=12)
                        ->  Sort  (cost=0.00..181.94 rows=40000 width=12)
                              Sort Key: (VectorDistanceRef)
                              ->  Local Gather  (cost=0.00..91.53 rows=40000 width=12)
                                    ->  Limit  (cost=0.00..91.53 rows=40000 width=12)
                                          ->  Sort  (cost=0.00..91.53 rows=40000 width=12)
                                                Sort Key: (VectorDistanceRef)
                                                ->  Project  (cost=0.00..1.12 rows=40000 width=12)
                                                      ->  Index Scan using Clustering_index on feature_tb  (cost=0.00..1.00 rows=40000 width=8)
                                                            Vector Filter: VectorCond => KNN: '40'::bigint distance_method: approx_euclidean_distance search_params: {NULL} args: {feature'{0.100000001,0.200000003,0.300000012,0.400000006}'::real[]}
    Query Queue: init_warehouse.default_queue
    Optimizer: HQO version 4.0.0

  • テーブルの作成

    -- Shard Count が 4 のテーブルグループを作成します。
    CALL HG_CREATE_TABLE_GROUP ('test_tg_shard_4', 4);
    
    -- テーブルを作成します。
    CREATE TABLE feature_tb (
        id bigint,
      	feature float4[] CHECK(array_ndims(feature) = 1 AND array_length(feature, 1) = 4)
    )
    WITH (
        table_group = 'test_tg_shard_4',
        vectors = '{
        "feature": {
            "algorithm": "HGraph",
            "distance_method": "Cosine",
            "builder_params": {
                "base_quantization_type": "rabitq",
                "graph_storage_type": "compressed",
                "max_degree": 64,
                "ef_construction": 400,
                "precise_quantization_type": "fp32",
                "use_reorder": true,
                "extra_columns": "id",
                "max_total_size_to_merge_mb" : 4096
            }
        }
        }'
    );
  • データのインポート

    -- (オプション) Serverless Computing を使用して、大規模なオフラインデータインポートと ETL タスクを実行します。インポート中に Compaction とインデックス構築が同期的に完了します。
    SET hg_computing_resource = 'serverless';
    SET hg_serverless_computing_run_compaction_before_commit_bulk_load = on;
    
    INSERT INTO feature_tb SELECT i, array[random(), random(), random(), random()]::float4[] FROM generate_series(1, 100000) i;
    
    -- 不要な SQL 文が Serverless リソースを使用しないように構成をリセットします。
    RESET hg_computing_resource;
  • 近似ベクター取得の実行

    -- コサイン距離の上位 40 件の結果を計算します。
    SELECT
        id,
        approx_cosine_distance (feature, '{0.1,0.2,0.3,0.4}') AS distance
    FROM
        feature_tb
    ORDER BY
        distance DESC
    LIMIT 40;
    説明

    ターゲットテーブルに "extra_columns": "id" パラメーターが設定されている場合、この近似ベクター検索の例では、ターゲットテーブルの id 列をクエリすることなく、ベクターインデックスから直接 id 列の値を取得できます。EXPLAIN ANALYZE の結果で vector_index_extra_columns_used パラメーターを確認して、`extra_columns` を使用して値を取得するベクターマニフェストファイルの数を確認できます。

  • 精密ベクター取得の実行

    -- 精密取得ではベクターインデックスを使用しないため、距離計算関数はベクターインデックスの distance_method と同じである必要はありません。
    SELECT
        id,
        cosine_distance (feature, '{0.1,0.2,0.3,0.4}') AS distance
    FROM
        feature_tb
    ORDER BY
        distance DESC
    LIMIT 40;

パフォーマンスチューニング

ベクターインデックスの効率的な使用

データ量が少ない場合 (たとえば、数万行) や、インスタンスに十分なコンピューティングリソースがある場合は、ベクターインデックスを設定せず、代わりに総当たり計算を使用してください。ベクターインデックスは、総当たり計算がレイテンシー、スループット、またはその他のメトリックの要件を満たせない場合にのみ使用してください。これは、次の理由によります:

  • ベクトルインデックスは損失があるため、精度 (取得率) は 100% に達しません。

  • ベクターインデックスは、要求された数よりも少ない項目を返す場合があります。たとえば、`LIMIT 1000` のクエリが 500 項目しか返さない場合があります。

ベクターインデックスを使用することを選択した場合、次のように構成します (単一の 768 ディメンションのベクターフィールドを持つ非パーティションテーブルを例として使用):

  • レイテンシーに敏感なシナリオ:メモリオンリーインデックスを使用します。インデックスの量子化メソッドには、`sq8_uniform` または `rabitq` を使用することを推奨します。推奨されるデータ量は、シャードあたり 500 万行以下です。

  • レイテンシーに敏感でない、またはデータ量が多いシナリオ:メモリ・ディスクハイブリッドインデックスを使用します。インデックスの量子化メソッドには、`rabitq` を使用することを推奨します。推奨されるデータ量は、シャードあたり 3,000 万から 5,000 万行以下です。

  • 注:複数の列にベクターインデックスを設定する場合、シャードあたりの推奨データ量を比例して減らす必要があります。ベクターディメンションもこの推奨に影響します。

例:

-- ハイブリッドインデックスの完全な例
CREATE TABLE feature_tb (
    id bigint,
  	feature float4[] CHECK(array_ndims(feature) = 1 AND array_length(feature, 1) = 4)
)
WITH (
    table_group = 'test_tg_shard_4',
    vectors = '{
    "feature": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "rabitq",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "precise_io_type": "reader_io",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);


-- メモリオンリーインデックスの完全な例
CREATE TABLE feature_tb (
    id bigint,
  	feature float4[] CHECK(array_ndims(feature) = 1 AND array_length(feature, 1) = 4)
)
WITH (
    table_group = 'test_tg_shard_4',
    vectors = '{
    "feature": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "sq8_uniform",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);

取得率の向上

このセクションでは、VectorDBBench データセットを例として、取得率を向上させる方法について説明します。

取得率には複数の要因が影響します。次のインデックスパラメーター設定を使用すると、システムのデフォルトの取得率は通常 95% 以上に達します:

  • インデックスパラメーター:

    • `base_quantization_type` は `rabitq` または `sq8_uniform`

    • `precise_quantization_type` は `fp32`

    • `max_degree` は `64`

    • `ef_construction` は `400`

  • クエリパラメーター (GUC):

    • `hg_vector_ef_search`:推奨値はデフォルト値の 80 です。このパラメーターは、取得中の候補リストのサイズを制御して、精度と速度のバランスを取ります。値を大きくすると精度が向上しますが、リソースのオーバーヘッドも増加します。

取得率をさらに 99% 以上に向上させるには、他のパラメーターを変更せずに SET hg_vector_ef_search = 400; を実行します。ただし、取得率を向上させると、クエリのレイテンシーとコンピューティングリソースの使用量が増加します。

取得率をさらに 99.5% から 99.7% に向上させるには、`max_degree`、`ef_construction`、および `hg_vector_ef_search` パラメーターを調整します。これにより、クエリのレイテンシー、クエリリソースの消費、インデックス構築時間、およびインデックス構築リソースの消費が増加します。例:

  • `max_degree` = 96。

  • `ef_construction` = 500 または 600。

  • `hg_vector_ef_search` = 500 または 600。

適切な Shard Count の設定

Shard Count が高いほど、構築されるインデックスファイルが多くなり、近似ベクタークエリのスループットが低下します。したがって、アプリケーションに適した Shard Count を設定してください。通常、次の手順に従うことができます:

  1. ベクターデータの量に基づいて、適切なインスタンス仕様を選択します。以下の例は 768 ディメンションのベクター用です。他のディメンションについては、「ベクターコンピューティングに推奨されるインスタンスタイプ」をご参照ください。

    1. メモリオンリーインデックス:ワーカーあたり 500 万ベクター。

    2. メモリ・ディスクハイブリッドインデックス:ワーカーあたり 1 億ベクター。

  2. インスタンスの仕様に基づいて Shard Count を決定します。通常、Shard Count はワーカーの数と同じに設定できます。たとえば、64 CU インスタンスの場合、`shard_count` を 4 に設定できます。

    以下は SQL の例です:

    -- ベクターテーブルを作成し、Shard Count が 4 のテーブルグループに配置します。
    CALL HG_CREATE_TABLE_GROUP ('test_tg_shard_4', 4);
    
    CREATE TABLE feature_tb (
        id bigint,
      	feature float4[] CHECK(array_ndims(feature) = 1 AND array_length(feature, 1) = 4)
    )
    WITH (
        table_group = 'test_tg_shard_4',
        vectors = '{
        "feature": {
            "algorithm": "HGraph",
            "distance_method": "Cosine",
            "builder_params": {
                "base_quantization_type": "sq8_uniform",
                "graph_storage_type": "compressed",
                "max_degree": 64,
                "ef_construction": 400,
                "precise_quantization_type": "fp32",
                "use_reorder": true,
                "max_total_size_to_merge_mb" : 4096
            }
        }
        }'
    );

ベクターとスカラーのハイブリッドクエリシナリオ

フィルター条件付きのベクター取得では、以下が一般的なフィルタリングシナリオです:

クエリシナリオ 1:文字列の列をフィルター条件として使用する

以下はクエリの例です。一般的なシナリオは、組織内で対応するベクターデータを見つけることです。たとえば、クラス内の顔データを見つけるなどです。

SELECT(feature, '{1,2,3,4}') AS d FROM feature_tb WHERE uuid = 'x' ORDER BY d LIMIT 10;

次の最適化を推奨します:

  • `uuid` を分散キーとして設定します。これにより、同じフィルター条件を持つデータが同じシャードに保存されることが保証されます。クエリは単一のシャードにのみアクセスします。

  • `uuid` をテーブルのクラスタリングキーとして設定します。データはクラスタリングキーに基づいてファイル内でソートされます。

クエリシナリオ 2:時間フィールドをフィルター条件として使用する

以下はクエリの例です。これは通常、時間フィールドに基づいてベクターデータをフィルタリングするために使用されます。時間フィールド `time_field` をテーブルのセグメントキーとして設定することを推奨します。これにより、データが存在するファイルを迅速に見つけることができます。

SELECT xx_distance(feature, '{1,2,3,4}') AS d FROM feature_tb WHERE time_field BETWEEN '2020-08-30 00:00:00' AND '2020-08-30 12:00:00' ORDER BY d LIMIT 10;

したがって、フィルター条件付きのベクター取得では、`CREATE TABLE` 文は通常次のようになります:

-- 注:時間でフィルタリングしない場合は、time_field に関連するインデックスを削除できます。
CREATE TABLE feature_tb (
    time_field timestamptz NOT NULL,
    uuid text NOT NULL,
    feature float4[] CHECK(array_ndims(feature) = 1 AND array_length(feature, 1) = 4)
)
WITH (
    distribution_key = 'uuid',
    segment_key = 'time_field',
    clustering_key = 'uuid',
    vectors = '{
    "feature": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "sq8_uniform",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);

Serverless リソースを使用したインデックスの再作成

テーブルのプロパティを変更すると、Compaction がトリガーされ、インデックスが再構築される可能性があり、大量の CPU リソースを消費します。次のテーブルプロパティを変更するには、以下の手順を実行してください:

  • `bitmap_columns`、`dictionary_encoding_columns`、またはベクターインデックスを変更すると、Compaction とインデックスの再作成がトリガーされます。したがって、`ALTER TABLE xxx SET` 構文を使用せず、代わりに次のコマンドを実行して、Serverless Computing リソースで `REBUILD` 構文を使用します。詳細については、「REBUILD」をご参照ください。

ASYNC REBUILD TABLE <table_name> 
WITH (
    rebuild_guc_hg_computing_resource = 'serverless'
)
SET (
    bitmap_columns = '<col1>,<col2>',
    dictionary_encoding_columns = '<col1>:on,<col2>:off',
    vectors = '{
    "<col_vector>": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "rabitq",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);
  • 列指向の JSONB 列またはフルテキストインデックス列を変更すると、Compaction とインデックスの再作成もトリガーされます。これらの変更には `REBUILD` 構文はサポートされていません。代わりに、次の手順に従って一時テーブルを作成します:

BEGIN ;
-- 潜在的な一時テーブルをクリーンアップします。
DROP TABLE IF EXISTS <table_new>;
-- 一時テーブルを作成します。
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
COMMIT ;

-- 対応する列の JSON 形式データの列指向ストレージを有効にします。
ALTER TABLE <table_new> ALTER COLUMN <column_name> SET (enable_columnar_type = ON);
-- 対応する列にフルテキストインデックスを作成します。
CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);

-- 一時テーブルにデータを挿入し、Serverless リソースを使用してタスクを実行し、インデックス構築を同期的に完了します。
SET hg_computing_resource = 'serverless';
INSERT INTO <table_new> SELECT * FROM <table>;
ANALYZE <table_new>;

BEGIN ;
-- 古いテーブルを削除します。
DROP TABLE IF EXISTS  <table>;
-- 一時テーブルの名前を変更します。
ALTER TABLE <table_new> RENAME TO <table>;
COMMIT ;
  • `distribution_key`、`clustering_key`、`segment_key`、ストレージフォーマットなどの他のプロパティを変更するには、Serverless Computing リソースで `REBUILD` 構文を使用します。

よくある質問

  • Q:「Writting column: feature with array size: 5 violates fixed size list (4) constraint declared in schema」というエラーが表示されます。

    A:このエラーは、feature ベクターフィールドに書き込まれたデータのディメンションが、テーブルで定義されたディメンションと一致しないために発生します。ダーティデータがないか確認してください。

  • Q:「The size of two array must be the same in DistanceFunction, size of left array: 4, size of right array: x」というエラーが表示されます。

    A:このエラーは、`xx_distance(left, right)` の `left` のディメンションが `right` のディメンションと異なるために発生します。

  • Q:Java を使用してベクターデータを書き込むにはどうすればよいですか?

    A:以下は Java コードの例です:

    private static void insertIntoVector(Connection conn) throws Exception {
        try (PreparedStatement stmt = conn.prepareStatement("INSERT INTO feature_tb VALUES(?,?);")) {
            for (int i = 0; i < 100; ++i) {
               stmt.setInt(1, i);
               Float[] featureVector = {0.1f,0.2f,0.3f,0.4f};
               Array array = conn.createArrayOf("FLOAT4", featureVector);
               stmt.setArray(2, array);
               stmt.execute();
            }
        }
    }
  • Q:Proxima Graph インデックスを HGraph インデックスに変更するにはどうすればよいですか?

    A:Proxima Graph インデックスを HGraph インデックスに変更するには、次の 2 つのステップを順番に実行します:

    • ステップ 1:テーブルから既存の Proxima Graph インデックスを削除します。SQL コマンドは次のとおりです:

    CALL set_table_property ('<TABLE_NAME>', 'proxima_vectors', '{}');
    `<TABLE_NAME>` を実際のテーブル名に置き換えてください。
    • ステップ 2:元の Proxima Graph インデックスが削除された後、新しい HGraph インデックスを作成します。詳細については、「インデックスの作成」をご参照ください。