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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——ROC曲线、PR曲线

一、ROC曲线简介 1.1 ROC曲线的构成 1.横轴(假正率,FPR): 表示负样本被错误分类为正的比例(越小越好) 2.纵轴(真正率,TPR,即召回率): 表示正样…

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__上

前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…

昂贵的DOM操作:一次DOM导致的性能问题排查记录

公司来了一个前端实习生,踏实,勤快,很快得到老大的认可,分配给她一个需求,大概如下:构建一个公司产品的评论展示页面,页面可以滚动加载新的内容,同时如果已经加载的内容发生变化&…

前端服务配置详解:从入门到实战

前端服务配置详解:从入门到实战 一、环境配置文件(.env) 1.1 基础结构 在项目根目录创建 .env 文件: # 开发环境 VUE_APP_API_BASE_URL http://localhost:3000/api VUE_APP_VERSION 1.0.0# 生产环境(.env.produc…

【学习笔记】计算机网络(七)—— 网络安全

第7章 网络安全 文章目录 第7章 网络安全7.1 网络安全问题概述7.1.1 计算机网络面临的安全性威胁7.1.2 安全的计算机网络7.1.3 数据加密模型 7.2 两类密码体制7.2.1 对称密钥密码体制7.2.2 公钥密码体制 7.3 鉴别7.3.1 报文鉴别7.3.2 实体鉴别 7.4 密钥分配7.4.1 对称密钥的分配…

我用Cursor + DeepSeek + Claude-3.7-Sonnet + DevBox,10分钟开发了一个系统

大家好,我是袁庭新。Cursor最近可谓是火的一塌糊涂,于是我深度体验了一波。我用的环境是Cursor Claude-3.7-Sonnet DevBox,整个过程我一行代码都没有写,10分钟帮我开发了一个系统,且前后端联调一把通过。惊出一身冷汗…

SpringBoot企业级开发之【用户模块-登录】

开发之前我们先看一下接口文档的要求: 开发思路: 开发实操: 因为我们之前开发注册的时候,就有了一些相关的操作,所以在这里我们只需要定义登录的controller即可: //用户登录PostMapping("/login"…

mysql 8.0.27-docker

安装 可以略过本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 镜像查询与安装 先查询: docker search mysql 明显会报错 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…

Pgvector的安装

Pgvector的安装 向量化数据的存储,可以为 PostgreSQL 安装 vector 扩展来存储向量化数据 注意:在安装vector扩展之前,请先安装Postgres数据库 vector 扩展的步骤 1、下载vs_BuildTools 下载地址: https://visualstudio.microso…

Python高阶函数-sorted(深度解析从原理到实战)

一、sorted()函数概述 sorted()是Python内置的高阶函数,用于对可迭代对象进行排序操作。与列表的sort()方法不同,sorted()会返回一个新的已排序列表,而不改变原数据。 基本语法 sorted(iterable, *, keyNone, reverseFalse)二、核心参数详…

ArcGIS Pro/GeoScene Pro AI 助手 2.1

引言 面对ArcGIS Pro/GeoScene Pro复杂的操作界面和脚本开发需求,你是否还在为功能定位、代码调试和效率优化而烦恼?今天,推出自制的Pro AI助手2.0版本,七大核心功能将革新你的GIS工作方式!无论是界面操作指引、一键生…

如何将本地更改的README文件同步到自己的GitHub项目仓库

如何将本地更改的 README 文件同步到 GitHub 仓库 在你 git clone 下来的工程目录下: 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 将你的更改Copy到你git下来的工程中(上面的命令会自动处理,例如只会C…

PostIn V1.0.8版本发布,IDEA 插件支持一键扫描上报,让接口定义不再繁琐

PostIn是一款国产开源免费的接口管理工具,包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块,支持常见的HTTP协议、websocket协议等,支持免登陆本地接口调试,同时可以对项目进行灵活的成员权限、消息通知管理等。本周Pos…

UE5学习笔记 FPS游戏制作36 UI动画

文章目录 目的效果创建动画UI准备制作动画 播放动画目的效果创建动画UI准备制作动画 播放动画注册播放事件 目的效果 我们要创建一个提示动画,文字先渐显,然后向上移动,同时渐隐 创建动画 UI准备 创建一个UI控件,然后创建一个…

HTTP 响应头 Strict-Transport-Security 缺失漏洞

HTTP 响应头 Strict-Transport-Security 缺失漏洞 这个漏洞就是说明网站的HTTP响应头中没有设置Strict-Transport-Security,没有设置则可以通过将https自己手动改成htttp的方式进行访问。不安全 解决方法 1.nginx配置 nginx中增加如下配置: location / …

代理模式的优缺点是什么?

什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对原始对象的访问。 这种模式在前端开发中广泛应用,特别是在需要控制对象访问、添加额外逻辑或优化性能的场景中。 ​​核心…

【嵌入式学习3】UDP发送端、接收端

目录 1、发送端 2、接收端 3、UDP广播 1、发送端 from socket import *udp_socket socket(AF_INET,SOCK_DGRAM) udp_socket.bind(("127.0.0.1",3333))data_str "UDP发送端数据" data_bytes data_str.encode("utf-8") udp_socket.sendto(d…

AI重构SEO关键词精准布局

内容概要 在传统SEO策略面临搜索场景碎片化、用户意图复杂化的挑战下,AI技术通过多维数据分析与算法建模,正在重构关键词布局的逻辑框架。基于自然语言处理(NLP)的语义分析能力,AI可精准识别搜索词背后的需求层级&…

谷歌发布网络安全AI新模型Sec-Gemini v1

谷歌近日宣布推出实验性AI模型Sec-Gemini v1,旨在通过人工智能技术革新网络安全防御体系。该模型由Sec-Gemini团队成员Elie Burzstein和Marianna Tishchenko共同研发,旨在帮助网络安全人员应对日益复杂的网络威胁。 攻防不对称的破局之道 Sec-Gemini团队…

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__下

前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…