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.pswp.cn/pingmian/75937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75937.shtml
英文地址,請注明出處:http://en.pswp.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功能&…