向量数据类型

本主题介绍向量数据类型。

数据类型

Snowflake 支持单一向量数据类型 VECTOR。

备注

VECTOR 数据类型仅在 SQL、Python Connector 和 Snowpark Python 库中受支持。不支持其他语言。

VECTOR

通过 VECTOR 数据类型,Snowflake 可以高效地编码和处理向量。此数据类型支持语义向量搜索和检索应用程序,如基于 RAG 的应用程序,以及向量处理应用程序中对向量的常见操作。

若要指定 VECTOR 类型,请使用以下语法:

VECTOR( <type>, <dimension> )
Copy

其中:

  • type 是元素的 Snowflake 数据类型,可以是 32 位整数或 32 位浮点数。

    可以指定以下类型中的一个:

    • INT

    • FLOAT

  • dimension 是向量的维数(长度)。该值必须是一个最大值为 4096 的正整数值。

备注

直接向量比较(例如,提供的 v1 < v2) are byte-wise lexicographic and, while deterministic, won't produce results that you'd expect from number comparisons. So while you can use VECTOR columns in ORDER BY clauses, for vector comparisons, use the vector similarity functions)。

以下是向量的有效定义的示例:

  • 定义一个包含 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 值可以显式和隐式转换为以下类型:

VECTOR 值由 Snowflake 自动隐式转换为相同的类型。

加载和卸载向量数据

不支持直接加载和卸载 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);
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 issues ADD COLUMN issue_vec VECTOR(FLOAT, 768);

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

限制

  • 对 VECTOR 数据类型的语言支持有限。未在本表中列出的语言不受支持。

    Snowflake 功能

    Python

    SQL

    UDFs

    UDTFs

    驱动程序/连接器

    Snowpark API

  • VARIANT 列不支持向量。

  • 除了通过用户定义函数 (UDFs) 之外,不支持对向量进行算术运算。

  • 不支持服务器端绑定。这意味着通过 Snowflake 驱动程序写入 VECTOR 列时,必须在运行查询之前转换查询中的 VECTOR 值。

  • 允许在 混合表 中使用向量,但不允许将其作为主键和外键。

  • 以下 Snowflake 功能不支持使用 VECTOR 数据类型:

语言: 中文