向量引擎快速入门
云原生数据仓库AnalyticDB PostgreSQL版针对AIGC、向量检索等向量分析场景,新增了向量引擎优化功能。本教程将为您介绍AnalyticDB PostgreSQL版实例从创建到向量分析的完整操作。
准备工作
已注册阿里云账号。若尚未注册,请前往阿里云官网进行注册。
授权服务关联角色。如果您是首次使用AnalyticDB PostgreSQL版,需要在控制台授权创建服务关联角色,操作方式如下:
- 登录云原生数据仓库AnalyticDB PostgreSQL版控制台。
单击页面右上角的新建实例。
在弹出的创建服务关联角色对话框中单击确定。
费用信息
创建实例会产生计算与存储等相关费用,详情请参见产品定价。
免费试用
阿里云提供存储弹性模式实例的免费试用活动,如果您是AnalyticDB PostgreSQL版的新用户,您可以访问阿里云免费试用申请试用资格。如果没有免费试用资格,按照本文操作步骤在控制台创建实例。
使用流程
创建实例
- 登录云原生数据仓库AnalyticDB PostgreSQL版控制台。
单击页面右上角的新建实例,进入实例购买页面。
在实例购买页面,配置核心参数快速完成实例选型,其他参数保持默认即可。如需了解更多参数信息,请参见创建实例。
配置项
说明
本教程示例
商品类型
包年包月:属于预付费,即在新建实例时需要支付费用。适合长期需求,价格比按量付费更实惠,且购买时长越长,折扣越多。
按量付费:属于后付费,即按小时扣费。适合短期需求,用完可立即释放实例,节省费用。
按量付费
地域和可用区
实例所在的地理位置。
购买后无法更换,建议与需要连接的ECS实例创建于同一个地域,以实现内网互通。
华东1(杭州):华东1可用区J
实例资源类型
存储弹性模式:支持独立磁盘扩容,支持在线平滑扩容。
Serverless Pro:只需指定需要的计算资源,无需预留存储资源。
存储弹性模式
引擎版本
推荐选择7.0标准版,以获得更丰富的功能体验。同时支持6.0标准版。
7.0标准版
实例系列
高性能(基础版):适用于大部分业务分析场景。
高可用版:建议企业核心业务采用高可用版本。
高性能(基础版)
向量引擎优化
选择开启。
开启
专有网络(VPC)
选择专有网络VPC的ID。
如需与同地域下的ECS实例内网互连,则需选择与ECS相同的VPC。可选择已有VPC或根据页面提示创建VPC和交换机。
vpc-xxxx
专有网络交换机
选择专有网络下的交换机。如果没有可选的交换机,说明该可用区暂无可用交换机资源。您可以考虑更换至其他可用区,或根据页面提示在当前可用区内创建交换机。
vsw-xxxx
单击立即购买,确认订单信息并单击立即开通。
支付完成后,可单击管理控制台返回实例列表查看新建实例。
说明AnalyticDB PostgreSQL版实例初始化需要一定时间,待实例列表中的实例运行状态显示为运行中,才可进行后续操作。
创建初始账号
AnalyticDB PostgreSQL版提供了两类用户:
高权限用户:初始账号属于高权限用户,具备RDS_SUPERUSER身份,具备数据库的所有操作权限。
普通用户:默认不具备任何权限,需要高权限用户或具有GRANT权限的用户授予单个或多个数据库对象的操作权限。创建方法请参见创建和管理用户。
在左侧导航栏中,单击账号管理。
单击创建初始账号。在创建账号窗口中,填写账号名称并设置密码。然后单击确定。
配置
说明
数据库账号
初始账号的名称,限制如下:
由小写字母,数字和下划线组成。
以小写字母开头,小写字母或数字结尾。
不能以gp开头。
长度为2~16个字符。
新密码、确认密码
初始账号的密码,限制如下:
由大写字母、小写字母、数字、特殊字符其中三种及以上组成。
支持的特殊字符包括
!@#$%^&*()_+-=。长度为8~32个字符。
重要为保障数据安全,建议您定期更换密码。不要使用曾经用过的密码。
设置白名单
如果仅使用阿里云数据管理(DMS)访问,可跳过此步。通过本地IDE环境或ECS实例访问数据库时,需要设置IP白名单,获取客户端IP地址,请参见准备工作。
在实例详情页的左侧导航栏中,单击数据安全性。
单击添加白名单分组,配置以下信息:
配置
说明
分组名称
新建白名单分组的名称,限制如下:
由小写字母、数字或下划线(_)组成。
以小写字母开头,以小写字母或数字结尾。
长度为2~32个字符。
组内白名单
设置需要添加的白名单IP地址,说明如下:
IP地址以英文逗号(,)分隔,不可重复,最多999个。
支持格式为10.23.12.24(具体IP地址)、10.23.12.24/24(CIDR模式,即无类域间路由,/24表示地址中前缀的长度,范围为1~32)。
地址中的前缀长度设置为0(例如0.0.0.0/0、127.0.0.1/0)表示允许所有IP地址访问该实例,存在高安全风险,请谨慎设置。
127.0.0.1表示禁止任何外部IP访问本实例。
单击确定。
连接数据库
本节以psql工具为例介绍如何登录数据库,其他工具连接方法,请参见客户端连接。
安装psql。
下载psql工具。
wget https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/181125/cn_zh/1598426198114/adbpg_client_package.el7.x86_64.tar.gz以上下载命令仅适用于客户端的操作系统为RHEL 7或CentOS 7版本。如需使用其他版本的psql工具,请参见客户端连接。
解压psql工具。
tar -xzvf adbpg_client_package.el7.x86_64.tar.gz切换到psql工具所在的目录。
cd adbpg_client_package/bin
登录数据库。
./psql -h <AnalyticDB PostgreSQL版实例的连接地址> -p 5432 -d <需要连接的数据库> -U <AnalyticDB PostgreSQL版实例的账号>连接地址获取方法:
客户端与AnalyticDB PostgreSQL版实例部署在同一地域且网络类型相同的ECS上,则可以使用内网地址进行连接。登录云原生数据仓库AnalyticDB PostgreSQL版控制台,单击目标实例ID,进入实例详情页,在左侧导航栏单击基本信息,找到数据库连接信息区域,即可查看内网地址。
客户端与AnalyticDB PostgreSQL版实例部署在不同地域、网络类型不同的ECS或者阿里云以外的系统上,则需要申请外网地址后使用外网地址进行连接。具体方法,请参见管理外网地址。
连接示例如下:
psql -h gp-bp13zq652yy4p****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U testuser按回车后输入密码,系统显示为
postgres=>表示连接成功。
通过SQL导入向量数据
确认已安装向量检索插件FastANN。
您可以通过
\dx fastann命令查看是否安装,如果返回FastANN插件的相关信息,表示已安装;如果没有返回任何信息,提交工单联系技术支持安装。下载测试数据。
为方便测试,AnalyticDB PostgreSQL版提供了测试数据,下载链接,请参见vector_sample_data.csv。
测试数据的表结构如下。
字段
类型
说明
id
bigint
编号。
market_time
timestamp
汽车上市时间。
color
varchar(10)
汽车的颜色。
price
int
汽车的价格。
feature
float4[]
汽车照片的特征向量。
Linux系统的服务器下载测试数据的命令如下。
wget https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230606/uzkx/vector_sample_data.csv导入数据。
创建并切换数据库。
-- 创建一个名为testdb的数据库 CREATE DATABASE testdb; -- 切换到该库 \c testdb根据测试数据创建一张包含向量列的表。
CREATE SCHEMA IF NOT EXISTS vector_test; CREATE TABLE IF NOT EXISTS vector_test.car_info ( id bigint NOT NULL, market_time timestamp, color varchar(10), price int, feature float4[], PRIMARY KEY(id) ) USING heap -- 若创建实例时已开启向量检索引擎优化,则默认为heap引擎 DISTRIBUTED BY(id);创建索引。
本次教程将为汽车的上市时间、颜色、价格等字段创建结构化索引,为汽车照片特征向量创建向量索引。
-- 修改向量列的存储格式为PLAIN ALTER TABLE vector_test.car_info ALTER COLUMN feature SET STORAGE PLAIN; -- 创建结构化索引 CREATE INDEX ON vector_test.car_info(market_time); CREATE INDEX ON vector_test.car_info(color); CREATE INDEX ON vector_test.car_info(price); -- 创建向量索引 CREATE INDEX ON vector_test.car_info USING ann(feature) WITH (dim='10', pq_enable='0');将测试数据加载至数据表中。
\COPY vector_test.car_info FROM '/DATA_PATH/vector_sample_data.csv';请将示例中的
/DATA_PATH/vector_sample_data.csv替换为测试数据所在的路径,例如,测试数据下载到了/home目录下,那么此处应该为/home/vector_sample_data.csv。导入成功后,系统会返回
COPY 10000。
向量分析
本教程以获取欧氏距离(平方)、点积距离或者余弦相似度为例介绍向量分析方法。
获取欧式距离
使用向量分析,并获取欧氏距离(平方值)。
SELECT id, l2_squared_distance(feature, array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]) AS distance
FROM vector_test.car_info
ORDER BY feature <-> array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]
LIMIT 10;返回示例如下。
id | distance
------+--------------------
2 | 0
1331 | 0.0677967891097069
1543 | 0.079616591334343
5606 | 0.0892329216003418
6423 | 0.0894578248262405
1667 | 0.0903968289494514
8215 | 0.0936210229992867
7801 | 0.0952572822570801
2581 | 0.0965127795934677
2645 | 0.0987173467874527
(10 rows)获取点积距离(余弦相似度)
使用向量分析,并获取点积距离(在归一化时,点积距离等于余弦相似度)。
SELECT id, dp_distance(feature, array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]) AS similarity
FROM vector_test.car_info
ORDER BY feature <-> array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]
LIMIT 10;返回示例如下。
id | similarity
------+-------------------
2 | 1
1331 | 0.966101586818695
1543 | 0.960191607475281
5606 | 0.955383539199829
6423 | 0.955271065235138
1667 | 0.954801559448242
8215 | 0.953189492225647
7801 | 0.95237135887146
2581 | 0.951743602752686
2645 | 0.950641334056854
(10 rows)融合检索查询
如需进行结构化与非结构化的融合,可以采用如下SQL进行查询。
SELECT id, dp_distance(feature, array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]) AS similarity
FROM vector_test.car_info
WHERE market_time >= '2020-10-30 00:00:00'
AND market_time < '2021-01-01 00:00:00'
AND color in ('red', 'white', 'blue')
AND price < 100
ORDER BY feature <-> array[0.495181661387,0.108697291209,0.181728549067,0.109680543346,0.19713082404,0.0197809514512,0.534227452778,0.442411970815,0.409909873031,0.0975687394505]::float4[]
LIMIT 10;返回示例如下。
id | similarity
------+-------------------
7645 | 0.922723233699799
8956 | 0.920517802238464
8219 | 0.91210675239563
8503 | 0.895939946174622
5113 | 0.895431876182556
7680 | 0.893448948860168
8433 | 0.893425941467285
3604 | 0.89293098449707
3945 | 0.891274154186249
7153 | 0.891128540039062
(10 rows)相关文档
关于向量分析的更多说明,请参见向量分析。