跳到主要内容
版本:0.10

向量数据类型

概述

在人工智能领域,向量是一种重要的数据类型,用于表示数据集中的特征或者样本。向量可以用于许多机器学习和深度学习算法中,如推荐系统、自然语言处理和图像识别。引入向量类型后,GreptimeDB 可以更有效地支持这些 AI 应用,提供强大的向量存储和计算能力。

基本介绍

在 GreptimeDB 中,向量表示为固定维度的 Float32(32位浮点数)数组。创建向量类型列时,必须指定向量的维度,并且维度在定义后不能更改。

定义向量类型列

在 SQL 中,可以通过以下语法来定义包含向量类型的表。需要注意的是,维度 <dim> 必须是一个正整数,用于定义向量的长度。

CREATE TABLE <table_name> (
...
<vec_col> VECTOR(<dim>)
);

例如,定义一个具有维度 3 的向量类型列的表:

CREATE TABLE vecs (
ts TIMESTAMP TIME INDEX,
vec_col VECTOR(3)
);

向量写入

在 GreptimeDB 中,你可以通过多种方式将向量数据写入数据库。最简单的方法是使用字符串形式,并通过隐式转换将其存储为向量。字符串需要用方括号 [] 包围。以下是使用隐式转换的 SQL 示例:

INSERT INTO <table> (<vec_col>) VALUES
('[<float32>, <float32>, ...]'),
('[<float32>, <float32>, ...]'),
...
('[<float32>, <float32>, ...]');

例如,插入 3 个三维向量:

INSERT INTO vecs (ts, vec_col) VALUES
('2024-11-18 00:00:01', '[1.0, 2.0, 3.0]'),
('2024-11-18 00:00:02', '[4.0, 5.0, 6.0]'),
('2024-11-18 00:00:03', '[7.0, 8.0, 9.0]');

如果你希望更明确地控制数据转换,可以使用 parse_vec 函数来显式地解析字符串为向量:

INSERT INTO vecs (ts, vec_col) VALUES
('2024-11-18 00:00:01', parse_vec('[1.0, 2.0, 3.0]')),
('2024-11-18 00:00:02', parse_vec('[4.0, 5.0, 6.0]')),
('2024-11-18 00:00:03', parse_vec('[7.0, 8.0, 9.0]'));

向量计算

GreptimeDB 支持多种向量函数,用于计算向量之间的相似度,包括 vec_l2sq_distancevec_cos_distancevec_dot_product。这些函数在 AI 应用中用于搜索最接近的内容。

可以使用以下 SQL 格式执行向量计算:

SELECT <distance_function>(<vec_col>, <target_vec>) FROM <table>;

例如,若要查找与给定向量 [5.0, 5.0, 5.0] 具有最小平方欧几里得距离的向量,并显示它们之间的距离,可以使用如下查询:

SELECT vec_to_string(vec_col), vec_l2sq_distance(vec_col, '[5.0, 5.0, 5.0]') AS distance 
FROM vecs
ORDER BY distance;

执行此查询后,您将得到类似以下的结果:

+-----------------------------+----------+
| vec_to_string(vecs.vec_col) | distance |
+-----------------------------+----------+
| [4,5,6] | 2 |
| [1,2,3] | 29 |
| [7,8,9] | 29 |
+-----------------------------+----------+
3 rows in set (0.01 sec)

通过这种方式,GreptimeDB 可以帮助你快速识别和查找相似的数据向量,为 AI 应用提供强大的支持。

更多关于向量计算函数的信息,请参阅向量函数参考文档