数据库管理-第160期 Oracle Vector DB & AI-11(20240312)

数据库管理-第160期 Oracle Vector DB & AI-11(20240312)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
国内某科技公司 DBA总监
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家,OCM讲师
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭。

来到了Oracle Vector DB基础介绍的最后阶段了,本期讲一下其他的vector函数,包含向量的函数操作、向量转换和绑定操作。

1 向量的函数操作

to_vector()

to_vector()函数是将一个字符串转换为向量,和vector()函数一样。

SELECT to_vector('[34.6, 77.8]', 2, float32) FROM dual;

SELECT to_vector('[34.6, 77.8, -89.34]', 3, float32);

image.png
注: 这里也演示了Oracle DB 23c中的新特性,可以不用from dual。

将vector转换为标准值

vector_norm()

vector_norm()函数输出原点到向量点的的距离:

SELECT vector_norm(vector('[4, 3]', 2, float32) );

SELECT vector_norm(vector('[4, 3]', 2, float64) );

SELECT vector_norm(vector('[4, 3]', 2, int8) );

image.png

vector_dimension_count()

vector_dimension_count()函数输出向量的维度数量:

SELECT vector_dimension_count(vector('[34.6, 77.8]', 2, float64));

SELECT vector_dimension_count(vector('[34.6, 77.8, 9]', 3, float32));

SELECT vector_dimension_count(vector('[34.6, 77.8, 9, 10]', 3, int8));

image.png

vector_dimension_format()

vector_dimension_format()函数输出向量的维度类型:

SELECT vector_dimension_format(vector('[34.6, 77.8]', 2, float64));

SELECT vector_dimension_format(vector('[34.6, 77.8, 9]', 3, float32));

SELECT vector_dimension_format(vector('[34.6, 77.8, 9, 10]', 3, int8));

image.png

2 将向量转换为字符串或CLOB

目前,python-oracledb和node-oracledb SQL驱动程序支持输入和输出向量的本地绑定(即直接使用向量)。其他SQL驱动程序,如JDBC和ODP.NET SQL只允许将向量绑定为字符串或CLOB。当Oracle 23.4提供Oracle AI Vector Search时,所有Oracle SQL驱动程序都应支持本地向量量绑定
较旧的SQL驱动程序[21c及之前版本]要求您通过使用vector()或to_vector()函数显式转换向量输入,并通过from_vector()或vector_serialize()将向量输出转换为字符串或CLOB。
注意: 如果您在SQL*Plus、sqlcl或SQL Developer中运行此实验室,您将不会在输出中看到明显的差异,但您可以确信Vector转换已经执行。

vector_serialize()

vector_serialize()函数可以将向量转换为字符串或CLOB:

SELECT vector_serialize(vector('[1.1, 2.2, 3.3]', 3, float32));

SELECT vector_serialize(vector('[1.1, 2.2, 3.3]', 3, float32)
       returning varchar2(1000));

SELECT vector_serialize(vector('[1.1, 2.2, 3.3]', 3, float32)
       returning clob);

image.png

from_vector()

from_vector()函数可以将向量转换为字符串或CLOB,等同与vector_serialize()函数:

SELECT from_vector(vector('[1.1, 2.2, 3.3]', 3, float32));

SELECT from_vector(vector('[1.1, 2.2, 3.3]', 3, float32) returning varchar2(1000));

SELECT from_vector(vector('[1.1, 2.2, 3.3]', 3, float32) returning clob);

image.png

总结

本期简单演示了vector相关的其他函数。
下一期可能需要等待一段时间,将自己做一个演示DEMO来更直观展示Oracle Vector DB和AI Vector Search的功能。
老规矩,知道写了些啥。

猜你喜欢

转载自blog.csdn.net/yhw1809/article/details/136649695