向量引擎快速入门

更新时间:
复制为 MD 格式

云原生数据仓库AnalyticDB PostgreSQL针对AIGC、向量检索等向量分析场景,新增了向量引擎优化功能。本教程将为您介绍AnalyticDB PostgreSQL实例从创建到向量分析的完整操作。

准备工作

  • 已注册阿里云账号。若尚未注册,请前往阿里云官网进行注册。

  • 授权服务关联角色。如果您是首次使用AnalyticDB PostgreSQL,需要在控制台授权创建服务关联角色,操作方式如下:

    1. 登录云原生数据仓库AnalyticDB PostgreSQL版控制台
    2. 单击页面右上角的新建实例

    3. 在弹出的创建服务关联角色对话框中单击确定

费用信息

创建实例会产生计算与存储等相关费用,详情请参见产品定价

免费试用

阿里云提供存储弹性模式实例的免费试用活动,如果您是AnalyticDB PostgreSQL的新用户,您可以访问阿里云免费试用申请试用资格。如果没有免费试用资格,按照本文操作步骤在控制台创建实例。

使用流程

创建实例

  1. 登录云原生数据仓库AnalyticDB PostgreSQL版控制台
  2. 单击页面右上角的新建实例,进入实例购买页面。

  3. 在实例购买页面,配置核心参数快速完成实例选型,其他参数保持默认即可。如需了解更多参数信息,请参见创建实例

    配置项

    说明

    本教程示例

    商品类型

    • 包年包月:属于预付费,即在新建实例时需要支付费用。适合长期需求,价格比按量付费更实惠,且购买时长越长,折扣越多。

    • 按量付费:属于后付费,即按小时扣费。适合短期需求,用完可立即释放实例,节省费用。

    按量付费

    地域和可用区

    实例所在的地理位置。

    购买后无法更换,建议与需要连接的ECS实例创建于同一个地域,以实现内网互通。

    华东1(杭州):华东1可用区J

    实例资源类型

    • 存储弹性模式:支持独立磁盘扩容,支持在线平滑扩容。

    • Serverless Pro:只需指定需要的计算资源,无需预留存储资源。

    存储弹性模式

    引擎版本

    推荐选择7.0标准版,以获得更丰富的功能体验。同时支持6.0标准版

    7.0标准版

    实例系列

    • 高性能(基础版):适用于大部分业务分析场景。

    • 高可用版:建议企业核心业务采用高可用版本。

    高性能(基础版)

    向量引擎优化

    选择开启

    开启

    专有网络(VPC)

    选择专有网络VPCID。

    如需与同地域下的ECS实例内网互连,则需选择与ECS相同的VPC。可选择已有VPC或根据页面提示创建VPC和交换机

    vpc-xxxx

    专有网络交换机

    选择专有网络下的交换机。如果没有可选的交换机,说明该可用区暂无可用交换机资源。您可以考虑更换至其他可用区,或根据页面提示在当前可用区内创建交换机

    vsw-xxxx

  4. 单击立即购买,确认订单信息并单击立即开通

  5. 支付完成后,可单击管理控制台返回实例列表查看新建实例。

    说明

    AnalyticDB PostgreSQL实例初始化需要一定时间,待实例列表中的实例运行状态显示为运行中,才可进行后续操作。

创建初始账号

重要

AnalyticDB PostgreSQL提供了两类用户:

  • 高权限用户:初始账号属于高权限用户,具备RDS_SUPERUSER身份,具备数据库的所有操作权限。

  • 普通用户:默认不具备任何权限,需要高权限用户或具有GRANT权限的用户授予单个或多个数据库对象的操作权限。创建方法请参见创建和管理用户

  1. 在左侧导航栏中,单击账号管理

  2. 单击创建初始账号。在创建账号窗口中,填写账号名称并设置密码。然后单击确定

    配置

    说明

    数据库账号

    初始账号的名称,限制如下:

    • 由小写字母,数字和下划线组成。

    • 以小写字母开头,小写字母或数字结尾。

    • 不能以gp开头。

    • 长度为2~16个字符。

    新密码确认密码

    初始账号的密码,限制如下:

    • 由大写字母、小写字母、数字、特殊字符其中三种及以上组成。

    • 支持的特殊字符包括!@#$%^&*()_+-=

    • 长度为8~32个字符。

    重要

    为保障数据安全,建议您定期更换密码。不要使用曾经用过的密码。

设置白名单

说明

如果仅使用阿里云数据管理(DMS)访问,可跳过此步。通过本地IDE环境或ECS实例访问数据库时,需要设置IP白名单,获取客户端IP地址,请参见准备工作

  1. 在实例详情页的左侧导航栏中,单击数据安全性

  2. 单击添加白名单分组,配置以下信息:

    配置

    说明

    分组名称

    新建白名单分组的名称,限制如下:

    • 由小写字母、数字或下划线(_)组成。

    • 以小写字母开头,以小写字母或数字结尾。

    • 长度为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访问本实例。

  3. 单击确定

连接数据库

本节以psql工具为例介绍如何登录数据库,其他工具连接方法,请参见客户端连接

  1. 安装psql。

    1. 下载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 7CentOS 7版本。如需使用其他版本的psql工具,请参见客户端连接

    2. 解压psql工具。

      tar -xzvf adbpg_client_package.el7.x86_64.tar.gz
    3. 切换到psql工具所在的目录。

      cd adbpg_client_package/bin
  2. 登录数据库。

    ./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导入向量数据

  1. 确认已安装向量检索插件FastANN。

    您可以通过\dx fastann命令查看是否安装,如果返回FastANN插件的相关信息,表示已安装;如果没有返回任何信息,提交工单联系技术支持安装。

  2. 下载测试数据。

    为方便测试,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
  3. 导入数据。

    1. 创建并切换数据库。

      -- 创建一个名为testdb的数据库
      CREATE DATABASE testdb;
      
      -- 切换到该库
      \c testdb
    2. 根据测试数据创建一张包含向量列的表。

      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);
    3. 创建索引。

      本次教程将为汽车的上市时间、颜色、价格等字段创建结构化索引,为汽车照片特征向量创建向量索引。

      -- 修改向量列的存储格式为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');
    4. 将测试数据加载至数据表中。

      \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)

相关文档

关于向量分析的更多说明,请参见向量分析