当前位置: 首页 > news >正文

13-Oracle 23ai Vector Search VECTOR数据类型和实操

一、Vector数据类型梗概

Oracle 23ai引入的 VECTOR数据类型是AI向量搜索的核心基础,专为存储高维数值向量设计(如文本/图像/音视频的嵌入向量)。
相比传统数据类型,它具有:
  • 多维度支持​:维度数(1-65535),*表示任意维度
  • 多种数值格式​:INT8/FLOAT32/FLOAT64/BINARY,
  • 智能存储优化​:支持DENSE/SPARSE存储格式,storage_type​:DENSE(默认)或SPARSE
  • 毫秒级检索​:原生集成相似性搜索算法
Oracle 23ai 的 VECTOR 数据类型主要分为以下 ​ 4 大类别 ,根据维度定义、数值格式和存储方式的不同组合:

1.1 基础分类(按维度定义)

类型

语法

特点

适用场景

任意维度型

VECTOR

不限制维度数量

开发初期、原型验证

固定维度型

VECTOR(n)

固定 n 个维度(1≤n≤65535)

生产环境(如 768 维文本向量)

动态维度型

VECTOR(*, *)

运行时确定维度

多源异构数据集成 

1.2 按数值格式分类 

类型

语法

精度

空间占用

适用场景

浮点向量

VECTOR(n, FLOAT32)

单精度

4字节/维度

AI 模型嵌入(主流)

VECTOR(n, FLOAT64)

双精度

8字节/维度

科学计算

整型向量

VECTOR(n, INT8)

8位整型

1字节/维度

量化模型、边缘计算

二进制向量

VECTOR(n, BINARY)

位存储

1位/维度

指纹/哈希值存储

1.3 按存储结构分类 

类型

语法

存储原理

优势

适用场景

密集存储

​VECTOR(n, FORMAT, DENSE)

全维度物理存储

读取速度快

常规向量(默认)

稀疏存储

VECTOR(n, FORMAT, SPARSE)

仅存非零值

空间节省 70%+

推荐系统、用户画像

向量存储格式(DENSE vs SPARSE)

1. DENSE存储

​特点:

每个维度值物理存储,无论是否为0。

默认存储格式。

​适用场景:维度值大部分非零的向量。

2. SPARSE存储

​特点:

仅存储非零维度值,节省空间。

​不支持BINARY格式。

​适用场景:维度值大部分为0的向量。

3. 内部存储与空间计算

​存储方式:使用Securefile BLOBs存储。

4.空间计算公式示例:

​DENSE​:向量数 × 维度数 × 单维度字节数

密集:VECTOR(1024, FLOAT32) = 1024×4 = 4KB

​SPARSE​:向量数 × [(平均非零维度×4) + (非零维度数×单维度字节数)]

稀疏:VECTOR(10000, FLOAT32, SPARSE)(假设 5% 非零)= (10000×0.05)×4 + 10000×0.05×4 ≈ 4KB

1.4 混合类型(生产常用组合) 

类型

示例语法

典型应用

文本嵌入型

VECTOR(768, FLOAT32)

存储 BERT/LLM 文本嵌入

图像特征型

VECTOR(2048, FLOAT32)

ResNet 视觉特征提取

稀疏推荐型

VECTOR(10000, FLOAT32, SPARSE)

用户-商品交互矩阵

二进制指纹型

VECTOR(256, BINARY)

图片/视频哈希指纹

1.5 数据类型选择决策树 

 

二、数据类型实操

2.1 按照VECTOR 数据类型建表

创建Oracle VECTOR 数据类型列的基本语法如下:

VECTOR([dimensions], [format], [storage_type])

SYS@FREE> show pdbs;CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------3 FREEPDB1                       READ WRITE NO
--基础表(任意维度/格式)
SYS@FREE> create table vector_demo1 (id number,embedding VECTOR);表已创建。SYS@FREE> select * from vector_demo1;未选定行
--指定维度表
SYS@FREE> CREATE TABLE VECTOR_DEMO2 (ID NUMBER,EMBEDDING VECTOR(1024,INT8));表已创建。

 

2.2 模拟真实数据操作

建表

-- 基础表(任意维度/格式)
CREATE TABLE products (id NUMBER PRIMARY KEY,name   VARCHAR2(100),embedding VECTOR);
-- 指定维度表(商品特征),固定1024维
CREATE TABLE fashion_items (item_id NUMBER,features VECTOR(1024, FLOAT32, DENSE));
表已创建。
-- 固定1024维
CREATE TABLE fashion_items (item_id NUMBER,features VECTOR(1024, FLOAT32, DENSE));
--任意维度2
CREATE TABLE fashion_items2 (item_id NUMBER,features VECTOR);
表已创建。SYS@FREE>

增删改查数据 

-- 插入向量(JSON数组格式)
INSERT INTO products VALUES (1, '心外科手术刀', '[0.12, 0.24, 0.35]');
-- 使用VECTOR()函数插入
INSERT INTO fashion_items2 VALUES (1001, VECTOR('[0.8,0.2,0.75]', 1024, FLOAT32));--报错
INSERT INTO fashion_items2 VALUES (1001, VECTOR('', 1024, FLOAT32));
-- 更新向量
UPDATE products SET embedding = '[0.9,0.1,0.3]' WHERE id=1;
-- 删除向量
DELETE FROM fashion_items WHERE item_id=1001;SYS@FREE> INSERT INTO products VALUES (1, '心外科手术刀', '[0.12, 0.24, 0.35]');
已创建 1 行。
SYS@FREE> INSERT INTO fashion_items2 VALUES (1001, VECTOR('', 1024, FLOAT32));
已创建 1 行。
SYS@FREE> UPDATE products SET embedding = '[0.9,0.1,0.3]' WHERE id=1;
已更新 1 行。
SYS@FREE> DELETE FROM fashion_items2 WHERE item_id=1001;
已删除 1 行。
SYS@FREE>

三、VECTOR相关函数

Oracle AI Vector提供了一系列向量相关函数,用于向量的创建、转换、属性计算及相似性搜索。

3.1 向量创建函数

VECTOR() 与 TO_VECTOR()

VECTOR() 与 TO_VECTOR()用于将字符串转换为向量类型。

两者功能相同,支持指定维度数量和数据类型(如float32、int8等)。

 

-- SELECT 创建二维float32向量
-- Oracle 23 AI 优化后不用FROM dual了
SYS@FREE> SELECT VECTOR('[4,3]', 2, float32) FROM dual;
VECTOR('[4,3]',2,FLOAT32)
-----------------------------------------------------------------
[4.0E+000,3.0E+000]SYS@FREE> SELECT TO_VECTOR('[34.6, 77.8]', 2, float64);TO_VECTOR('[34.6,77.8]',2,FLOAT64)
-------------------------------------------------------------------------
[3.4600000000000001E+001,7.7799999999999997E+001]SYS@FREE>

3.2 向量属性相关函数

VECTOR_NORM()

VECTOR_NORM()用于计算向量的欧氏距离(原点到向量点的距离),结果类型与输入向量一致。

-- 输出5.0(勾股定理)
SYS@FREE> SELECT VECTOR_NORM(VECTOR('[4,3]', 2, float32));VECTOR_NORM(VECTOR('[4,3]',2,FLOAT32))
--------------------------------------5.0E+000SYS@FREE>

3.2 VECTOR_DIMENSION_FORMAT()

VECTOR_DIMENSION_FORMAT()用于返回向量元素的数据类型。

-- 输出FLOAT64
SYS@FREE> SELECT VECTOR_DIMENSION_FORMAT(VECTOR('[11.22,33.44]', 2, float64));VECTOR_DIMENSION_FORMAT(VECTOR('[11.22,33.44]',2,F
--------------------------------------------------
FLOAT64

3.3 向量转换函数

VECTOR_SERIALIZE()与 FROM_VECTOR()

VECTOR_SERIALIZE()与 FROM_VECTOR()两者功能等价,

用于将向量转换为字符串或CLOB类型,适用于不支持本地向量绑定的驱动比如JDBC或类似。

SYS@FREE> SELECT VECTOR_SERIALIZE(VECTOR('[11.11,22.22,33.33]',3,float32) RETURNING VARCHAR2(1000));VECTOR_SERIALIZE(VECTOR('[11.11,22.22,33.33]',3,FLOAT32)RETURNINGVARCHAR2(1000))
------------------------------------------------------------------------------------------------------------------------
[1.11099997E+001,2.22199993E+001,3.33300018E+001]

3.4 相似性计算函数

VECTOR_DISTANCE()

VECTOR_DISTANCE()用于计算两个向量之间的数学距离,支持多种距离度量(如EUCLIDEAN欧氏距离)。常用于相似性搜索(如近邻查询)。

--还是勾股定理,结果为5
SYS@FREE> SELECT TO_NUMBER(VECTOR_DISTANCE(VECTOR('[0,0]', 2, float32),VECTOR('[4,3]', 2, float32),EUCLIDEAN)) AS DISTANCE;DISTANCE
----------5

 3.5 向量函数列表

 

函数类型

函数名

描述

示例

创建

VECTOR()

创建向量

SELECT VECTOR('[1,2]',2,FLOAT32) FROM dual

→ [1.0,2.0]

属性

VECTOR_NORM()

欧氏距离

SELECT VECTOR_NORM(VECTOR('[3,4]'))

→ 5.0

VECTOR_DIMENSION_COUNT()

维度计数

SELECT VECTOR_DIMENSION_COUNT(embedding)

→ 3

VECTOR_DIMENSION_FORMAT()

数值格式

SELECT VECTOR_DIMENSION_FORMAT(features)

→ FLOAT32

转换

VECTOR_SERIALIZE()

向量转字符串

SELECT VECTOR_SERIALIZE(embedding)→ '[0.12,0.24,0.35]'

搜索

VECTOR_DISTANCE()

相似度计算

SELECT VECTOR_DISTANCE(v1, v2, EUCLIDEAN)

→ 0.65

AI集成

VECTOR_EMBEDDING()

生成文本嵌入

SELECT VECTOR_EMBEDDING(USING model, 'Oracle AI')

→ [0.2,0.7,...]

 

 

相关文章:

  • 计算机组成原理:计算机发展历程
  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • 基于IDA的bindiff使用
  • BeckHoff(倍福) PLC 顺控器执行超时故障在北尔触摸屏显示的实现
  • gis geoserver 地图发布
  • “硅仙人”吉姆·凯勒(Jim Keller)
  • Riverpod与GetX的优缺点对比
  • iview框架主题色的应用
  • OGG 23ai for DAA 部署与补丁升级
  • C++常用的自动化测试库
  • 从游戏到自动驾驶:互联网时代强化学习如何让机器学会自主决策?
  • Android 相对布局管理器(RelativeLayout)
  • 自然语言处理 目录篇
  • STM32开发,创建线程栈空间大小判断
  • 深圳SMT贴片工艺优化关键步骤
  • IDEA黑色主题,控制台日志为黑色(看不清),问题解决 配置Grep Console
  • 在 Win10 上 WSL 安装 Debian 12 后,Linux 如何启动 SMTP 服务?
  • 计算机组成与体系结构:补码数制二(Complementary Number Systems)
  • SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
  • 如何在c/c++中定义和使用宏
  • 郑州网站建设seo优化/建设网站推广
  • 网站系统下载不了文件/seo还有前景吗
  • 前端网页/seo服务价格表
  • 做好网站建设通知/品牌运营公司
  • 有创意的图文广告店名/苏州优化排名seo
  • 开一个二手车销售网站怎么做/奶盘seo伪原创工具