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

慈云数据 2024-04-11 技术支持 59 0

数据库管理160期 2024-03-12

  • 数据库管理-第160期 oracle Vector DB & AI-11(20240312)
    • 1 向量的函数操作
      • to_vector()
      • 将vector转换为标准值
        • vector_norm()
        • vector_dimension_count()
        • vector_dimension_format()
        • 2 将向量转换为字符串或CLOB
          • vector_serialize()
          • from_vector()
          • 总结

            数据库管理-第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的功能。

            老规矩,知道写了些啥。

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon