雲原生資料倉儲AnalyticDB PostgreSQL版針對AIGC、向量檢索等向量分析情境,新增了向量引擎最佳化功能。本教程將為您介紹AnalyticDB PostgreSQL版執行個體從建立到向量分析的完整操作。
準備工作
登入阿里雲帳號。若尚未註冊,請前往阿里雲官網進行註冊。
授權服務關聯角色。如果您是首次使用AnalyticDB PostgreSQL版,需要在控制台授權建立服務關聯角色,操作方式如下:
單擊頁面右上方的新建實例。
在彈出的創建服務關聯角色對話方塊中單擊確定。
費用資訊
建立執行個體會產生計算與儲存等相關費用,詳情請參見產品定價。
免費試用
阿里雲提供儲存彈性模式執行個體的免費試用活動,如果您是AnalyticDB PostgreSQL版的新使用者,您可以訪問阿里雲免費試用申請試用資格。如果沒有免費試用資格,按照本文操作步驟在控制台建立執行個體。
使用流程
建立執行個體
單擊頁面右上方的新建實例,進入執行個體購買頁面。
在執行個體購買頁面,配置核心參數快速完成執行個體選型,其他參數保持預設即可。如需瞭解更多參數資訊,請參見建立執行個體。
配置項
說明
本教程樣本
商品類型
訂用帳戶:屬於預付費,即在建立執行個體時需要支付費用。適合長期需求,價格比隨用隨付更實惠,且購買時間長度越長,折扣越多。
隨用隨付:屬於後付費,即按小時計費。適合短期需求,用完可立即釋放執行個體,節省費用。
隨用隨付
地區和可用性區域
執行個體所在的地理位置。
購買後無法更換,建議與需要串連的ECS執行個體建立於同一個地區,以實現內網互連。
華東1(杭州):華東1可用性區域J
執行個體資源類型
儲存彈性模式:支援獨立磁碟擴容,支援線上平滑擴容。
Serverless Pro:只需指定需要的計算資源,無需預留儲存資源。
儲存彈性模式
引擎版本
推薦選擇7.0標準版,以獲得更豐富的功能體驗。同時支援6.0標準版。
7.0標準版
執行個體系列
高效能(基礎版):適用於大部分業務分析情境。
高可用版:建議企業核心業務採用高可用版本。
高效能(基礎版)
向量引擎最佳化
選擇開啟。
開啟
專用網路
選擇Virtual Private Cloud的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)相關文檔
關於向量分析的更多說明,請參見向量分析。