ベクトルデータ型

このトピックでは、ベクトルデータ型について説明します。

データ型

Snowflakeは単一のベクトルデータ型 VECTOR をサポートしています。

注釈

データ型 VECTOR は SQL、 Pythonコネクタ、およびSnowpark Pythonライブラリでのみサポートされています。その他の言語には対応していません。

VECTOR

VECTOR データ型により、Snowflakeはベクトルを効率的にエンコードおよび処理します。このデータ型は、 RAG ベースのアプリケーションのような、セマンティックなベクトル検索および取得アプリケーションや、ベクトル処理アプリケーションにおけるベクトルに対する一般的な操作に対応します。

VECTOR 型を指定するには、次の構文を使用します。

VECTOR( <type>, <dimension> )
Copy

条件:

  • type は要素のSnowflakeデータ型で、32ビット整数または32ビット浮動小数点数です。

    次のいずれかの型を指定できます。

    • INT

    • FLOAT

    注釈

    これらの型は、/sql-reference/data-types-numeric`で説明されている同じ名前の型とは異なり、それぞれ ``NUMBER(38, 0)` と倍精度 IEEE 754の浮動小数点数を表します。

  • dimension は、ベクトルのディメンション(長さ)です。これは正の整数値で、最大値は4096です。

注釈

直接的なベクトル比較(例えば、v1 < v2)はバイト単位の辞書的比較であり、決定論的ではありますが、数値比較から期待されるような結果は得られません。そのため、VECTOR の列を ORDER BY の句で使用することができますが、ベクトルの比較には、提供される ベクトル類似関数 を使用します。

以下の定義は、有効なベクトル定義の例です。

  • 256個の32ビット浮動小数点値からなるベクトルを定義します。

    VECTOR(FLOAT, 256)
    
    Copy
  • 16個の32ビット整数値からなるベクトルを定義します。

    VECTOR(INT, 16)
    
    Copy

以下の定義は無効なベクトル定義の例です。

  • 無効な値の型を使用したベクトル定義。

    VECTOR(STRING, 256)
    
    Copy
  • 無効なベクトルサイズを使用したベクトル定義。

    VECTOR(INT, -1)
    
    Copy

ベクトル変換

このセクションでは、 VECTOR 値への、またその値からの変換方法について説明します。キャスティングの詳細については、 データ型の変換 を参照してください。

値の VECTOR 値への変換

VECTOR 値は、以下の型から明示的または暗黙的にキャストすることができます。

VECTOR 値からの値の変換

VECTOR 値は、明示的または暗黙的に以下の型にキャストすることができます。

Parquetデータのロードとアンロード

VECTOR 列の直接ロードおよびアンロードはサポートされていません。VECTOR 列の場合は、 ARRAY としてデータのロードとアンロードを行い、使用時に VECTOR にキャストする必要があります。ARRAY データ型のロードとアンロードの方法については、 Introduction to loading semi-structured data をご参照ください。ベクトルの一般的な使用例は、 ベクトルの埋め込み を生成することです。

次の例は、 VECTOR 列を持つテーブルを mystage という内部ステージにアンロードする方法を示しています。

CREATE OR REPLACE TABLE myvectortable (a VECTOR(float, 3), b VECTOR(float, 3));
INSERT INTO myvectortable SELECT [1.1,2.2,3]::VECTOR(FLOAT,3), [1,1,1]::VECTOR(FLOAT,3);
INSERT INTO myvectortable SELECT [1,2.2,3]::VECTOR(FLOAT,3), [4,6,8]::VECTOR(FLOAT,3);

COPY INTO @mystage/unload/
  FROM (SELECT TO_ARRAY(a), TO_ARRAY(b) FROM myvectortable);
Copy

次の例は、ステージからテーブルをロードし、 ARRAY 列を VECTOR 列としてキャストする方法を示しています。

CREATE OR REPLACE TABLE arraytable (a ARRAY, b ARRAY);

COPY INTO arraytable
  FROM @mystage/unload/mydata.csv.gz;

SELECT a::VECTOR(FLOAT, 3), b::VECTOR(FLOAT, 3)
  FROM arraytable;
Copy

定数 ARRAY をキャストして VECTOR を構築します。

SELECT [1, 2, 3]::VECTOR(FLOAT, 3) AS vec;
Copy

VECTOR データ型の列を追加します。

ALTER TABLE myissues ADD COLUMN issue_vec VECTOR(FLOAT, 768);

UPDATE TABLE myissues
  SET issue_vec = SNOWFLAKE.CORTEX.EMBED_TEXT_768('e5-base-v2', issue_text);
Copy

制限事項

VECTOR データには以下の制限が適用されます。

  • VECTOR データ型は言語サポートに制限があります。このテーブルにない言語はサポートされていません。

    Snowflake機能

    Python

    SQL

    UDFs

    UDTFs

    ドライバー/コネクタ

    Snowpark API

  • VARIANT の列ではベクトルはサポートされていません。

  • ベクトルは、 クラスタリングキー としてはサポートされていません。

  • サーバー側のバインドはサポートされていません。つまり、Snowflakeドライバーを介して VECTOR 列に書き込む場合は、クエリを実行する前にクエリ内の VECTOR 値をキャストする必要があるということです。

  • ハイブリッドテーブル ではベクトルを使用できますが、プライマリキーやセカンダリインデックスキーとしては使用できません。

  • VECTOR データ型は、以下のSnowflake機能での使用はサポートされていません。