数据库管理156期 2024-02-27
- 数据库管理-第156期 Oracle Vector DB & AI-07(20240227)
- 1 Vector相关DDL操作
- 可以在现有的表上新增vector数据类型的字段:
- 可以删除包含vector数据类型的列:
- 可以使用CTAS的方式,从其他有vector数据的表创建新表:
- 2 Vector上的操作限制
- 3 Vector Distance
- 创建向量的函数
- 使用vector_distance()函数
- 总结
数据库管理-第156期 Oracle Vector DB & AI-07(20240227)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
国内某科技公司 DBA总监
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家,OCM讲师
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭。
昨天换了换心情,换了换内容,今天继续。
1 Vector相关DDL操作
可以在现有的表上新增vector数据类型的字段:
CREATE TABLE IF NOT EXISTS t5
(
id NUMBER NOT NULL,
name VARCHAR2(32),
PRIMARY KEY (id)
);
ALTER TABLE t5 ADD v1 VECTOR;
ALTER TABLE t5 ADD v2 VECTOR(2, float32);
DESC t5;
可以删除包含vector数据类型的列:
ALTER TABLE t5 DROP COLUMN v2;
DESC t5;
DROP TABLE IF EXISTS t5;
可以使用CTAS的方式,从其他有vector数据的表创建新表:
CREATE TABLE IF NOT EXISTS t6
AS SELECT * FROM t2;
DESC t6;
SELECT * FROM t6;
2 Vector上的操作限制
Vector之间无法执行对比操作。因此下面语句都将失败:
SELECT id, name FROM t2 WHERE v1 = '[2.9]';
SELECT id, name FROM t2 WHERE v1 = vector('[2.9, 0]', 2, float32);
3 Vector Distance
vector_distance() 函数是最重要的向量函数,通过该函数进行相近搜索。
创建向量的函数
vector()函数可以创建向量:
SELECT VECTOR('[0,0]');
SELECT VECTOR('[10,0]');
SELECT VECTOR('[0,5]', 2, float32);
SELECT VECTOR('[4,3]');
SELECT VECTOR('[5,-2]');
SELECT VECTOR('[-3,-4]');
SELECT VECTOR('[3.14,2.718]');
SELECT VECTOR('[-5.3,4.2]');
SELECT VECTOR('[-7,-9]');
使用vector_distance()函数
1.使用vector_distance()返回两个向量之间的距离
例如,(0,0)和(10,0_之间的距离为10,即垂直偏移为0,水平偏移为10。
SELECT VECTOR_DISTANCE(
VECTOR('[0, 0]'),
VECTOR('[10, 0]'),
EUCLIDEAN) DISTANCE;
2.可以使用to_number()函数来提升结果的可读性
SELECT TO_NUMBER(VECTOR_DISTANCE(
VECTOR('[0, 0]'),
VECTOR('[10, 0]'),
EUCLIDEAN)) DISTANCE;
3.(0,0)和(0,5)之间的距离就是5,即水平偏移为0,垂直偏移为5。
SELECT TO_NUMBER(VECTOR_DISTANCE(
VECTOR('[0, 0]', 2, FLOAT32),
VECTOR('[0, 5]',2, FLOAT32),
EUCLIDEAN)) DISTANCE;
4.(0,0)和(4,3)距离为5,即水平偏移为4,垂直偏移为3。加上简单的勾股定理,勾三股四弦五
SELECT TO_NUMBER(VECTOR_DISTANCE(
VECTOR('[0, 0]', 2, FLOAT32),
VECTOR('[4, 3]', 2, FLOAT32),
EUCLIDEAN)) DISTANCE;
总结
本期介绍了vector相关的DDL操作及操作限制,vector_distance()函数的基本使用。
老规矩,知道写了些啥。