ベクトルデータ型¶
このトピックでは、ベクトルデータ型について説明します。
データ型¶
Snowflakeは単一のベクトルデータ型 VECTOR をサポートしています。
注釈
VECTOR データ型は、 SQL、 Pythonコネクタ およびSnowpark Pythonライブラリでのみサポートされています。その他の言語には対応していません。
VECTOR¶
VECTOR データ型により、Snowflakeはベクトルを効率的にエンコードおよび処理します。このデータ型は、 RAG ベースのアプリケーションのような、セマンティックなベクトル検索および取得アプリケーションや、ベクトル処理アプリケーションにおけるベクトルに対する一般的な操作に対応します。
VECTOR 型を指定するには、次の構文を使用します。
VECTOR( <type>, <dimension> )
条件:
type
は要素のSnowflakeデータ型で、32ビット整数または32ビット浮動小数点数です。次のいずれかの型を指定できます。
INT
FLOAT
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 データ型のロードとアンロードの方法については、 半構造化データのロードの概要 をご参照ください。ベクトルの一般的な使用例は、 ベクトルの埋め込み を生成することです。
次の例は、 VECTOR 列を持つテーブルを mystage
という内部ステージにアンロードする方法を示しています。
CREATE TABLE mytable (a VECTOR(float, 3), b VECTOR(float, 3));
INSERT INTO mytable SELECT [1.1,2.2,3]::VECTOR(FLOAT,3), [1,1,1]::VECTOR(FLOAT,3);
INSERT INTO mytable 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 mytable);
次の例は、ステージからテーブルをロードし、 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 issues ADD COLUMN issue_vec VECTOR(FLOAT, 768);
UPDATE TABLE issues
SET issue_vec = SNOWFLAKE.CORTEX.EMBED_TEXT_768('e5-base-v2', issue_text);
制限事項¶
VECTOR データ型の言語サポートは限られています。このテーブルにない言語はサポートされていません。
Snowflake機能
Python
SQL
UDFs
✔
✔
UDTFs
✔
✔
ドライバー/コネクタ
✔
✔
Snowpark API
✔
VARIANT の列ではベクトルはサポートされていません。
クラスタリングキー としてベクターはサポートされていません。
サーバー側のバインディングはサポートされていません。つまり、Snowflakeドライバーを介して VECTOR 列に書き込む場合は、クエリを実行する前にクエリ内の VECTOR 値をキャストする必要があるということです。
ハイブリッド・テーブル ではベクターを使用できますが、プライマリ・キーやセカンダリ・インデックス・キーとしては使用できません。
VECTOR データ型は、以下のSnowflake機能での使用はサポートされていません。