ベクトルデータ型¶
このトピックでは、ベクトルデータ型について説明します。
データ型¶
Snowflakeは単一のベクトルデータ型 VECTOR をサポートしています。
注釈
データ型 VECTOR は SQL、 Pythonコネクタ、およびSnowpark Pythonライブラリでのみサポートされています。その他の言語には対応していません。
VECTOR¶
VECTOR データ型により、Snowflakeはベクトルを効率的にエンコードおよび処理します。このデータ型は、 RAG ベースのアプリケーションのような、セマンティックなベクトル検索および取得アプリケーションや、ベクトル処理アプリケーションにおけるベクトルに対する一般的な操作に対応します。
VECTOR 型を指定するには、次の構文を使用します。
条件:
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ビット浮動小数点値からなるベクトルを定義します。
16個の32ビット整数値からなるベクトルを定義します。
以下の定義は無効なベクトル定義の例です。
無効な値の型を使用したベクトル定義。
無効なベクトルサイズを使用したベクトル定義。
ベクトル変換¶
このセクションでは、 VECTOR 値への、またその値からの変換方法について説明します。キャスティングの詳細については、 データ型の変換 を参照してください。
値の VECTOR 値への変換¶
VECTOR 値は、以下の型から明示的または暗黙的にキャストすることができます。
VECTOR 値からの値の変換¶
VECTOR 値は、明示的または暗黙的に以下の型にキャストすることができます。
VECTOR型とARRAY型の間で変換する場合、配列内の要素の数はベクトルのディメンションと一致する必要があり、配列要素のデータ型はベクトルのデータ型と一致する必要があります。たとえば、VECTOR(FLOAT, 3)の値を3つのFLOAT値のARRAYに変換できますが、2つのFLOAT値のARRAYや3つのINT値のARRAYには変換できません。
Parquetデータのロードとアンロード¶
VECTOR 列の直接ロードおよびアンロードはサポートされていません。VECTOR 列の場合は、 ARRAY としてデータのロードとアンロードを行い、使用時に VECTOR にキャストする必要があります。ARRAY データ型のロードとアンロードの方法については、 Introduction to loading semi-structured data をご参照ください。ベクトルの一般的な使用例は、 ベクトルの埋め込み を生成することです。
次の例は、 VECTOR 列を持つテーブルを mystage という内部ステージにアンロードする方法を示しています。
次の例は、ステージからテーブルをロードし、 ARRAY 列を VECTOR 列としてキャストする方法を示しています。
例¶
定数 ARRAY をキャストして VECTOR を構築します。
VECTOR データ型の列を追加します。
制限事項¶
VECTOR データには以下の制限が適用されます。
VECTOR データ型は言語サポートに制限があります。このテーブルにない言語はサポートされていません。
Snowflake機能
Python
SQL
UDFs
✔
✔
UDTFs
✔
✔
ドライバー/コネクタ
✔
✔
Snowpark API
✔
VARIANT の列ではベクトルはサポートされていません。
ベクトルは、 クラスタリングキー としてはサポートされていません。
サーバー側のバインドはサポートされていません。つまり、Snowflakeドライバーを介して VECTOR 列に書き込む場合は、クエリを実行する前にクエリ内の VECTOR 値をキャストする必要があるということです。
ハイブリッドテーブル ではベクトルを使用できますが、プライマリキーやセカンダリインデックスキーとしては使用できません。
VECTOR データ型は、以下のSnowflake機能での使用はサポートされていません。