ベクトルデータ型¶
このトピックでは、ベクトルデータ型について説明します。
データ型¶
Snowflakeは単一のベクトルデータ型 VECTOR をサポートしています。
注釈
データ型 VECTOR は SQL、 Pythonコネクタ、およびSnowpark Pythonライブラリでのみサポートされています。その他の言語には対応していません。
VECTOR¶
VECTOR データ型により、Snowflakeはベクトルを効率的にエンコードおよび処理します。このデータ型は、 RAG ベースのアプリケーションのような、セマンティックなベクトル検索および取得アプリケーションや、ベクトル処理アプリケーションにおけるベクトルに対する一般的な操作に対応します。
VECTOR 型を指定するには、次の構文を使用します。
VECTOR( <type>, <dimension> )
条件:
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)
16個の32ビット整数値からなるベクトルを定義します。
VECTOR(INT, 16)
以下の定義は無効なベクトル定義の例です。
無効な値の型を使用したベクトル定義。
VECTOR(STRING, 256)
無効なベクトルサイズを使用したベクトル定義。
VECTOR(INT, -1)
ベクトル変換¶
このセクションでは、 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);
次の例は、ステージからテーブルをロードし、 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;
例¶
定数 ARRAY をキャストして VECTOR を構築します。
SELECT [1, 2, 3]::VECTOR(FLOAT, 3) AS vec;
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);
制限事項¶
VECTOR データには以下の制限が適用されます。
VECTOR データ型は言語サポートに制限があります。このテーブルにない言語はサポートされていません。
Snowflake機能
Python
SQL
UDFs
✔
✔
UDTFs
✔
✔
ドライバー/コネクタ
✔
✔
Snowpark API
✔
VARIANT の列ではベクトルはサポートされていません。
ベクトルは、 クラスタリングキー としてはサポートされていません。
サーバー側のバインドはサポートされていません。つまり、Snowflakeドライバーを介して VECTOR 列に書き込む場合は、クエリを実行する前にクエリ内の VECTOR 値をキャストする必要があるということです。
ハイブリッドテーブル ではベクトルを使用できますが、プライマリキーやセカンダリインデックスキーとしては使用できません。
VECTOR データ型は、以下のSnowflake機能での使用はサポートされていません。