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

Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

文章目录

  • Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作
    • VECTOR 数据类型基本语法
    • Vector 维度限制和向量大小
    • 向量存储格式(DENSE vs SPARSE)
      • 1. DENSE存储
      • 2. SPARSE存储
      • 3. 内部存储与空间计算
    • Oracle VECTOR数据类型的声明格式
    • VECTOR基本操作
      • 创建包括VECTOR类型的表
      • 插入数据
      • 查询数据
    • VECTOR相关函数
      • 1. 向量创建函数
        • VECTOR() 与 TO_VECTOR()
      • 2. 向量属性相关函数
        • VECTOR_NORM()
        • VECTOR_DIMENSION_COUNT()
        • VECTOR_DIMENSION_FORMAT()
      • 3. 向量转换函数
        • VECTOR_SERIALIZE()与 FROM_VECTOR()
      • 4. 相似性计算函数
        • VECTOR_DISTANCE()
      • 5. 向量数据的分块管理​​
      • 6.​​生成向量嵌入
    • 参考

Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

Oracle Database 23ai 引入了 ​VECTOR 数据类型,用于存储高维数值向量(如文本、图像、音视频的嵌入向量)。

VECTOR 数据类型基本语法

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

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

其中各个​参数如下:

​dimensions​(可选):指定固定维度数(1-65535),*表示允许任意维度。
​format​(可选):INT8、FLOAT32、FLOAT64、BINARY,*表示允许任意格式。
​storage_type​(可选):DENSE(默认)或SPARSE。

例:

SQL> CREATE TABLE my_vectors (id NUMBER, embedding VECTOR);Table created.SQL> CREATE TABLE my_vectors2 (id NUMBER, embedding VECTOR(768, INT8)) ;Table created.SQL> 

参考:
SQL Language Reference
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/vector.html

VECTOR
VECTOR ( expr [ , number_of_dimensions [ , format ] ] )

Create Tables Using the VECTOR Data Type
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/create-tables-using-vector-data-type.html

Vector 维度限制和向量大小

Vector 维度和向量大小如下:

 - Oracle AI Vector Search 向量支持最多 ​65,535 个维度。- Oracle AI Vector Search 向量维度的​数值格式支持​BINARY、INT8、FLOAT32 和 ​FLOAT64 格式。- Oracle AI Vector Search 向量的大小等于维度数与每个维度的字节大小的乘积。向量大小 (字节)=维度数×单个维度的字节数​例如:
​       2,048 维度 + INT8 格式:2,048 维度 × 1 字节/维度 = ​2 KB​1,024 维度 + FLOAT32 格式:1,024 维度 × 4 字节/维度 = ​4 KB

向量存储格式(DENSE vs SPARSE)

1. DENSE存储

​特点:
每个维度值物理存储,无论是否为0。
默认存储格式。
​适用场景:维度值大部分非零的向量。

2. SPARSE存储

​特点:
仅存储非零维度值,节省空间。
​不支持BINARY格式。
​适用场景:维度值大部分为0的向量。

3. 内部存储与空间计算

​存储方式:使用Securefile BLOBs存储。
​空间估算公式:
​DENSE向量:
存储空间 = 向量数 × 维度数 × 单维度字节数
(如FLOAT32为4字节,INT8为1字节)。
​SPARSE向量:
存储空间 ≈ 向量数 × [(平均非零维度数 × 4字节) + (非零维度数 × 单维度字节数)]

Oracle VECTOR数据类型的声明格式

参考:
Create Tables Using the VECTOR Data Type
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/create-tables-using-vector-data-type.html

DENSE存储
在这里插入图片描述

SPARSE存储
在这里插入图片描述

VECTOR基本操作

创建包括VECTOR类型的表

SQL> CREATE TABLE my_vector_table (id NUMBER, embedding VECTOR);Table created.SQL> desc my_vector_tableName					   Null?    Type----------------------------------------- -------- ----------------------------ID						    NUMBEREMBEDDING					    VECTOR(*, *, DENSE)SQL> 

※VECTOR的声明格式表示向量可以具有任意数量的维度和格式。

插入数据

SQL>  INSERT INTO my_vector_table  VALUES (1,'[1, 2, 3]');1 row created.SQL> commit;Commit complete.

查询数据

SQL> select * from my_vector_table;ID
----------
EMBEDDING
--------------------------------------------------------------------------------1
[1.0E+000,2.0E+000,3.0E+000]SQL>

当然,和其他数据类型一样,VECTOR也支持增删改操作。

VECTOR相关函数

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

1. 向量创建函数

VECTOR() 与 TO_VECTOR()

VECTOR() 与 TO_VECTOR()用于将字符串转换为向量类型。
两者功能相同,支持指定维度数量和数据类型(如float32int8等)。

例:

SELECT VECTOR('[4,3]', 2, float32) FROM dual; -- 创建二维float32向量
SELECT TO_VECTOR('[34.6, 77.8]', 2, float64); -- Oracle 23c起可省略FROM dual
SQL> SELECT VECTOR('[4,3]', 2, float32) FROM dual; VECTOR('[4,3]',2,FLOAT32)
-----------------------------------------------------------------
[4.0E+000,3.0E+000]SQL> SELECT TO_VECTOR('[34.6, 77.8]', 2, float64);TO_VECTOR('[34.6,77.8]',2,FLOAT64)
-------------------------------------------------------------------------
[3.4600000000000001E+001,7.7799999999999997E+001]

使用 Oracle Client 23ai 库或 Thin 模式驱动程序的应用程序,可以直接以字符串或 CLOB 类型插入向量数据。

例:

INSERT INTO my_vector_table  VALUES (1,'[1, 2, 3]');

2. 向量属性相关函数

VECTOR_NORM()

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

例:

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

VECTOR_DIMS()和VECTOR_DIMENSION_COUNT()相同, 用于返回向量的维度数量。

例:

SELECT VECTOR_DIMENSION_COUNT(VECTOR('[34.6,77.8,9]', 3, float32)); -- 输出3
SQL> SELECT VECTOR_DIMENSION_COUNT(VECTOR('[34.6,77.8,9]', 3, float32)); VECTOR_DIMENSION_COUNT(VECTOR('[34.6,77.8,9]',3,FLOAT32))
---------------------------------------------------------3SQL> 
VECTOR_DIMENSION_FORMAT()

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

例:

SELECT VECTOR_DIMENSION_FORMAT(VECTOR('[34.6,77.8]', 2, float64)); -- 输出FLOAT64
SQL> SELECT VECTOR_DIMENSION_FORMAT(VECTOR('[34.6,77.8]', 2, float64));VECTOR_DIMENSION_FORMAT(VECTOR('[34.6,77.8]',2,FLO
--------------------------------------------------
FLOAT64SQL> 

3. 向量转换函数

VECTOR_SERIALIZE()与 FROM_VECTOR()

VECTOR_SERIALIZE()与 FROM_VECTOR()两者功能等价,用于将向量转换为字符串或CLOB类型,适用于不支持本地向量绑定的驱动(如JDBC)。

例:

SELECT VECTOR_SERIALIZE(VECTOR('[1.1,2.2,3.3]',3,float32) RETURNING VARCHAR2(1000)); 
-- 输出'[1.1,2.2,3.3]'
SQL>   SELECT VECTOR_SERIALIZE(VECTOR('[1.1,2.2,3.3]',3,float32) RETURNING VARCHAR2(1000)); VECTOR_SERIALIZE(VECTOR('[1.1,2.2,3.3]',3,FLOAT32)RETURNINGVARCHAR2(1000))
--------------------------------------------------------------------------------
[1.10000002E+000,2.20000005E+000,3.29999995E+000]

4. 相似性计算函数

VECTOR_DISTANCE()

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

例:

SELECT TO_NUMBER(VECTOR_DISTANCE(VECTOR('[0,0]', 2, float32), VECTOR('[4,3]', 2, float32), EUCLIDEAN
)) AS DISTANCE; -- 输出5.0
SQL> SELECT TO_NUMBER(VECTOR_DISTANCE(VECTOR('[0,0]', 2, float32), VECTOR('[4,3]', 2, float32), EUCLIDEAN)) AS DISTANCE;   2    3    4    5  DISTANCE
----------5SQL> 

5. 向量数据的分块管理​​

VECTOR_CHUNKS()函数主要用于​​向量数据的分块管理​​,适用于大规模向量数据集的高效存储、索引构建及查询优化。

参考:
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/vector_chunks.html

6.​​生成向量嵌入

VECTOR_EMBEDDING ()是Oracle 23ai中用于​​生成向量嵌入(Vector Embeddings)的核心函数​​,支持将非结构化数据(文本、图像等)转换为高维向量。

参考:
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/vector_embedding.html

更多参数可以参考如下官方文档。
SQL Language Reference

参考

https://www.oracle.com/database/ai-vector-search/
https://www.oracle.com/database/ai-vector-search/faq/

Create Tables Using the VECTOR Data Type
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/create-tables-using-vector-data-type.html

Oracle Database New Features
https://docs.oracle.com/en/database/oracle/oracle-database/23/nfcoa/ai_vector_search.html#GUID-ai_vector_search1

相关文章:

Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

文章目录 Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作VECTOR 数据类型基本语法Vector 维度限制和向量大小向量存储格式(DENSE vs SPARSE)1. DENSE存储2. SPARSE存储3. 内部存储与空间计算 Oracle VECTOR数据类型的声明格式VECTOR基本操…...

Java面试38-Dubbo是如何动态感知服务下线的?

首先,Dubbo默认采用Zookeeper实现服务注册与服务发现,就是多个Dubbo服务之间的通信地址,是使用Zookeeper来维护的。在Zookeeper上,会采用树形结构的方式来维护Dubbo服务提供端的协议地址,Dubbo服务消费端会从Zookeeper…...

C++day8

思维导图 牛客练习 练习 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> using namespace std; class user{ public: …...

MySQL的进阶语法8(SQL优化——insert、主键、order by、group by、limit、count和update)

目录 一、插入数据 1.1 insert 1.2 大批量插入数据 二、主键优化 2.1 数据组织方式 2.2 页分裂 2.2.1 主键顺序插入效果 2.2.2 主键乱序插入效果 2.3 页合并 2.4 索引设计原则 三、order by优化 3.1 执行以下两条语句&#xff08;无索引&#xff09; 3.2 创建索引…...

STM32 基础2

STM32中断响应过程 1、中断源发出中断请求。 2、判断处理器是否允许中断&#xff0c;以及该中断源是否被屏蔽。 3、中断优先级排队。 4、处理器暂停当前程序&#xff0c;保护断点地址和处理器的当前状态&#xff0c;根据中断类型号&#xff0c;查找中断向量表&#xff0c;转到…...

前端单页应用性能优化全指南:从加载提速到极致体验

一、SPA性能瓶颈深度剖析 1.1 核心性能指标解读 指标健康阈值测量工具优化方向FCP (首次内容渲染)< 1.8sLighthouse资源加载优化TTI (可交互时间)< 3.5sWebPageTestJavaScript优化LCP (最大内容渲染)< 2.5sChrome DevTools渲染性能优化CLS (布局偏移)< 0.1PageSp…...

自然语言处理利器NLTK:从入门到核心功能解析

文章目录 一、NLP领域的基石工具包二、NLTK核心模块全景解析1 数据获取与预处理2 语言特征发现3 语义与推理 三、设计哲学与架构优势1 四维设计原则2 性能优化策略 四、典型应用场景1 学术研究2 工业实践 五、生态系统与未来演进 一、NLP领域的基石工具包 自然语言工具包&…...

简述Unity对多线程的支持限制和注意事项

Unity是一个以单线程为核心设计的游戏引擎&#xff0c;其主线程负责渲染、物理模拟、脚本更新&#xff08;如Update和FixedUpdate&#xff09;等核心功能。虽然Unity允许开发者使用C#的多线程功能&#xff08;如System.Threading命名空间&#xff09;来创建和管理线程&#xff…...

Mysql 中有哪些日志结构?

在 MySQL 中&#xff0c;日志文件是非常重要的&#xff0c;它们用于记录数据库的各类活动&#xff0c;帮助管理员进行监控、调试、恢复、以及优化数据库性能。MySQL 提供了几种类型的日志&#xff0c;每种日志都有其特定的用途。以下是 MySQL 中常见的几种日志类型&#xff1a;…...

【第2月 day17】Matplotlib 新手设计的直方图与饼图学习内容

以下是专为Python新手设计的直方图与饼图学习内容&#xff0c;包含基础知识、代码演示及注意事项&#xff1a; 一、直方图&#xff08;Histogram&#xff09; 1. 直方图的作用 展示数据分布情况&#xff08;如年龄分布、成绩分布&#xff09;观察数据集中趋势、离散程度 2. …...

使用Docker安装及使用最新版本的Jenkins

1. 拉取镜像 通过Windows powerShell执行命令行&#xff08;2选1&#xff09;&#xff1a; -- 长期支持版 docker pull jenkins/jenkins:lts-- 最新版 docker pull jenkins/jenkins:latest 2. 创建并执行容器 你可以通过以下命令来运行Jenkins容器&#xff0c;执行命令&…...

在Spring Boot中配置数据库连接

今天我们要谈谈如何在Spring Boot项目中配置数据库连接。我们会创建两个Java类&#xff1a;DatabaseProperties.java和DataSourceConfig.java&#xff0c;并在我们的应用程序中注入这些配置。让我们一起乘风破浪&#xff0c;开始这段编码之旅吧&#xff01; 目录 创建DatabaseP…...

Tiktok 关键字 视频及评论信息爬虫(2) [2025.04.07]

&#x1f64b;‍♀️Tiktok APP的基于关键字检索的视频及评论信息爬虫共分为两期&#xff0c;希望对大家有所帮助。 第一期&#xff1a;基于关键字检索的视频信息爬取 第二期见下文。 1.Node.js环境配置 首先配置 JavaScript 运行环境&#xff08;如 Node.js&#xff09;&…...

关于深度学习中内部协变量偏移问题小记

内部协变量偏移问题 内部协变量偏移&#xff08;Internal Covariate Shift&#xff0c;简称ICS&#xff09;是深度学习中一个重要的概念&#xff0c;用来描述神经网络在训练过程中&#xff0c;各层输入分布发生变化的现象。这种分布偏移会导致训练不稳定、收敛变慢甚至失败。2…...

15-产品经理-维护需求

一、提研发需求 在产品–研发需求列表页&#xff0c;点击“提研发需求”按钮&#xff0c; 在提研发需求页面&#xff0c;可以选择已有的计划。也可以在计划页面里进行关联。 未编辑完的需求可以点击【存为草稿】按钮&#xff0c;保存为草稿状态&#xff0c;待编辑完成再选择提…...

JVM基础架构:内存模型×Class文件结构×核心原理剖析

&#x1f680;前言 “为什么你的Java程序总在半夜OOM崩溃&#xff1f;为什么某些代码性能突然下降&#xff1f;一切问题的答案都在JVM里&#xff01; 作为Java开发者&#xff0c;如果你&#xff1a; 对OutOfMemoryError束手无策看不懂GC日志里的神秘数字好奇.class文件如何变…...

js前端对时间进行格式处理

时间格式处理 通过js前端&#xff0c;使用dayjs库进行格式化 安装dayjs库 npm install dayjs 封装成日期格式化工具类 formatter.ts // 导入 dayjs&#xff0c;先安装依赖 npm install dayjs import dayjs from "dayjs"; import utc from "dayjs/plugin/utc…...

如何拿到iframe中嵌入的游戏数据

在 iframe 中嵌入的游戏数据是否能被获取&#xff0c;取决于以下几个关键因素&#xff1a; 1. 同源策略 浏览器的同源策略是核心限制。如果父页面和 iframe 中的内容同源&#xff08;即协议、域名和端口号完全相同&#xff09;&#xff0c;那么可以直接通过 JavaScript 访问 …...

Chrome 135 版本新特性

Chrome 135 版本新特性 一、Chrome 135 版本浏览器更新 ** 1. 第三方托管账户注册迁移到 OIDC 授权码流程** Chrome 135 将账户注册的登录页面从营销网站迁移到动态网站&#xff0c;同时也将 OpenID Connect (OIDC) 的隐式流程迁移到授权码流程。这样做的目的是进一步提升第…...

基于milvus安装--可视化工具 attu

说明:Attu是Milvus的可视化工具,用于方便地管理和查询向量数据。 1.安装docker 并配置国内镜像 配置国内镜像加速: 1.修改 /etc/docker/daemon.json,设置 registry mirror: sudo vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.1m…...

【Vue-组件】学习笔记

目录 <<回到导览组件1.项目1.1.Vue Cli1.2.项目目录1.3.运行流程1.4.组件的组成1.5.注意事项 2.组件2.1.组件注册2.2.scoped样式冲突2.3.data是一个函数2.4.props详解2.5.data和prop的区别 3.组件通信3.1.父子通信3.1.1.父传子&#xff08;props&#xff09;3.1.2.子传父…...

[蓝桥杯青少年组省赛 2024] 通关游戏的最少能量值

在 Python 中&#xff0c;可以通过以下步骤实现二维数组的输入&#xff0c;并根据数组的第一个元素进行排序&#xff1a; 读取输入&#xff1a;使用 input() 函数读取输入&#xff0c;并将其转换为整数。创建二维数组&#xff1a;将输入的任务的启动能量值和消耗能量值存储为二…...

预测函数控制(PFC)——理论、应用与实践

目录 预测函数控制(PFC)——理论、应用与实践一、引言二、预测函数控制的基本原理1. PFC 的核心思想2. 数学建模与公式推导3. 优势与局限优势局限三、典型案例分析案例一:一维动态系统控制案例描述分析案例二:温度调节系统案例描述分析案例三:机器人轨迹跟踪控制案例描述分…...

(PROFINET 转 EtherCAT)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

型号 协议转换通信网关 PROFINET 转 EtherCAT MS-GW31 概述 MS-GW31 是 PROFINET 和 EtherCAT 协议转换网关&#xff0c;为用户提供两种不同通讯协议的 PLC 进行数据交互的解决方案&#xff0c;可以轻松容易将 EtherCAT 网络接入 PROFINET 网络中&#xff0c;方便扩展&…...

关于sqlsugar实体多层List映射的问题

如上图所示&#xff0c;当一个主表&#xff08;crm_fina_pay_req&#xff09;的子表list<文件附件关系表>&#xff08; List<crm_fina_payreq_evidofpay_relation> &#xff09;中&#xff0c;还包含有sysfile&#xff08;SysFile SysFiles&#xff09;类型的文件信…...

STM32 HAL库 CANFD配置工具

用法说明&#xff1a; 该工具适用于STM32HAL库&#xff0c;可一键生成CANFD的HAL库配置代码。计算依据为HAL库&#xff0c;并参考ZLG标准。 软件界面&#xff1a; 仓库地址&#xff1a; HAL CANFD Init Gen: 适用于STM32控制器的HAL库 版本说明&#xff1a; V1.2.0 &#x…...

UIMeter-UI自动化软件(产品级)

前言&#xff1a;作为一个资深测试工程师&#xff0c;UI测试&#xff0c;webUI自动化测试是我们必备的技能&#xff0c;我们都知道常用的框架比如selenium、playwright、rebootframwork等等&#xff0c;但是无论哪一种框架&#xff0c;都需要测试人员去编写代码&#xff0c;进行…...

Java面试黄金宝典37

1. 转发与重定向的区别 定义 转发:服务器内部的一种请求处理方式,当客户端向服务器发送请求后,服务器将该请求转发到另一个资源(如 JSP、Servlet)进行处理,整个过程在服务器端完成,客户端并不知道请求被转发,且使用的是同一个请求对象和响应对象。重定向:服务器向客户…...

企业级Java开发工具MyEclipse v2025.1——支持AI编码辅助

MyEclipse一次性提供了巨量的Eclipse插件库&#xff0c;无需学习任何新的开发语言和工具&#xff0c;便可在一体化的IDE下进行Java EE、Web和PhoneGap移动应用的开发&#xff1b;强大的智能代码补齐功能&#xff0c;让企业开发化繁为简。 立即获取MyEclipse v2025.1正式版 具…...

【redis】简介及在springboot中的使用

redis简介 基本概念 Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 与MySQL数据库不…...