胖头鱼的鱼缸

26ai新特性实战:新向量生成函数

胖头鱼的技术专栏-438 26ai新特性实战:新向量生成函数(20260702)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10年+数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)

全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

继续Oracle AI Database 26ai的新特性实战,今天带来的同样是23.26.2版本新增的特性:向量生成函数。

特性介绍

Oracle AI Database 23.26.2 新增了三个向量生成 SQL 函数,极大地方便了向量数据的原型开发和测试:

  1. VECTOR_ORIGIN(n)
    创建一个所有维度值均为零的向量,表示 n 维向量空间的原点。作为原型开发中的绑定变量,它始终适用于任何向量数据集——无需提前知道表中的向量维度或格式即可进行查询测试。
  2. VECTOR_RANDOM(n)
    生成一个包含随机值的向量。该值在一条 SQL 语句的所有行中保持不变(即所有行获得相同的随机向量)。适用于需要单一查询向量的场景。
  3. VECTOR_RANDOM_PER_ROW(n)
    为每一行生成不同的随机向量值。适用于批量生成随机向量测试数据,快速填充向量表以进行性能测试或功能验证。

这三个函数使开发者能够快速生成随机向量数据和向量绑定变量。

前置条件:数据库初始化参数 COMPATIBLE >= 23.6.0

适用场景

  • 概念验证(PoC):快速生成测试向量数据,无需依赖外部嵌入模型
  • 性能测试:使用 VECTOR_RANDOM_PER_ROW 批量生成数万条向量记录,测试向量索引(HNSW/IVC)的查询性能
  • 原型开发:使用 VECTOR_ORIGIN 作为查询向量进行相似度搜索测试,因为零向量对任何维度都有效,无需关心目标表的向量维度
  • 数据库迁移验证:从其他向量数据库迁移后,使用随机向量验证查询逻辑
  • 教学演示:在培训或演示中快速展示向量搜索功能

实战演示

同上一期一样使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。

测试1:VECTOR_ORIGIN向量生成

SELECT VECTOR_ORIGIN(3)  AS v3,
       VECTOR_ORIGIN(8)  AS v8,
       VECTOR_ORIGIN(10) AS v10
FROM dual;
image.png

测试2:VECTOR_RANDOM向量生成

SELECT rownum AS rn, VECTOR_RANDOM(3) AS same_for_all
FROM dual CONNECT BY level <= 3;
image.png

测试3:VECTOR_RANDOM_PER_ROW向量生成

SELECT rownum AS rn, VECTOR_RANDOM_PER_ROW(3) AS different_per_row
FROM dual CONNECT BY level <= 5;
image.png

测试4:模拟应用

-- 创建测试表
CREATE TABLE vec_test (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  embedding VECTOR(4, FLOAT32)
);

-- 插入5条包含随机向量的行记录
INSERT INTO vec_test
SELECT rownum, 'Item ' || rownum, VECTOR_RANDOM_PER_ROW(4)
FROM dual CONNECT BY level <= 5;

COMMIT;

-- 检查生成数据
SELECT id, name, embedding FROM vec_test ORDER BY id;

-- 使用VECTOR_ORIGIN生成的值作为查询向量查询和原点最接近的3行数据
SELECT id, name,
       VECTOR_DISTANCE(embedding, VECTOR_ORIGIN(4), EUCLIDEAN) AS dist
FROM vec_test
ORDER BY dist ASC
FETCH FIRST 3 ROWS ONLY;
image.png

测试5:VECTOR_RANDOM和VECTOR_RANDOM_PER_ROW对比

SELECT rownum AS rn,
       VECTOR_RANDOM(3)             AS same_for_all,
       VECTOR_RANDOM_PER_ROW(3)     AS different_per_row
FROM dual CONNECT BY level <= 3;
image.png

总结

本期对Oracle AI Database 26ai,23.26.2版本新引入的向量生成函数进行了完整介绍与实战演示,这是一个非常便捷的测试与模拟方法。

老规矩,知道写了些啥。