AnalyticDB for PostgreSQL は、AIGC やベクトル取得などのベクトル分析シナリオ向けに、ベクトルエンジン最適化機能を提供します。このチュートリアルでは、AnalyticDB for PostgreSQL インスタンスの作成からベクトル分析の実行までの全プロセスを説明します。
事前準備
Alibaba Cloud アカウントが必要です。アカウントをお持ちでない場合は、Alibaba Cloud 公式サイトで登録できます。
サービスリンクロールを承認します。初めて AnalyticDB for PostgreSQL を使用する際は、コンソールでサービスリンクロールの作成を承認する必要があります。そのためには、次の手順を実行します。
- AnalyticDB for PostgreSQL コンソールにログインします。
ページの右上隅にある インスタンス作成 をクリックします。
表示される サービス関連付けの役割を作成する ダイアログボックスで、[OK] をクリックします。
課金
インスタンスを作成すると、そのコンピューティングリソースとストレージリソースに対して課金されます。詳細については、「料金」をご参照ください。
無料トライアル
Alibaba Cloud は、ストレージ弾力性モードのインスタンスに対して無料トライアルを提供しています。AnalyticDB for PostgreSQL を初めてご利用になる場合は、Alibaba Cloud 無料トライアル にアクセスして無料トライアルを申請できます。無料トライアルの対象でない場合は、このトピックの手順に従ってコンソールでインスタンスを作成してください。
操作手順
インスタンスの作成
- AnalyticDB for PostgreSQL コンソールにログインします。
ページの右上隅にある インスタンス作成 をクリックして購入ページを開きます。
インスタンス購入ページで、コアパラメーターを設定してインスタンスタイプを迅速に選択します。その他のパラメーターはデフォルト値のままでかまいません。パラメーターの詳細については、「インスタンスの作成」をご参照ください。
設定項目
説明
このチュートリアルの例
製品タイプ
サブスクリプション:これはサブスクリプション課金方法です。インスタンス作成時に前払いします。この方法は長期利用に適しており、従量課金よりもコスト効率が高いです。サブスクリプション期間が長いほど、割引率が高くなります。
従量課金:これは後払いの課金方法です。時間単位で課金されます。この方法は短期利用に適しています。使用後すぐにインスタンスをリリースしてコストを節約できます。
従量課金
リージョンとゾーン
インスタンスの地理的な場所です。
インスタンス作成後にリージョンとゾーンを変更することはできません。接続したい ECS インスタンスと同じリージョンにインスタンスを作成してください。これにより、イントラネット経由でのサービス相互接続が可能になります。
中国 (杭州): ゾーン J
インスタンスリソースタイプ
伸縮ストレージモード: 独立したディスクのスケールアウトおよびスムーズなオンラインスケールアウトをサポートします。
Serverless Pro:必要なコンピューティングリソースのみを指定します。ストレージリソースを予約する必要はありません。
ストレージ弾力性モード
データベースエンジンバージョン
より豊富な機能を利用するには、7.0 Standard Edition を選択してください。6.0 Standard Edition もサポートされています。
7.0 Standard Edition
インスタンスエディション
高パフォーマンス (Basic Edition):ほとんどのビジネス分析シナリオに適しています。
高可用性エディション:コアビジネスサービスに推奨されます。
高パフォーマンス (Basic Edition)
ベクトルエンジン最適化
[有効化] を選択します。
有効化
Virtual Private Cloud
VPC の ID を選択します。
同じリージョン内の ECS インスタンスとイントラネット経由で相互接続するには、ECS インスタンスと同じ VPC を選択します。既存の VPC を選択するか、ページ上のプロンプトに従って VPC と vSwitch を作成できます。
vpc-xxxx
vSwitch
VPC 内の vSwitch を選択します。利用可能な vSwitch がない場合、そのゾーンに利用可能な vSwitch リソースはありません。別のゾーンに切り替えるか、ページ上のプロンプトに従って現在のゾーンに vSwitch を作成 できます。
vsw-xxxx
[今すぐ購入] をクリックし、注文情報を確認して [今すぐ有効化] をクリックします。
支払いが完了したら、[管理コンソール] をクリックしてインスタンスリストに移動し、新しいインスタンスを表示します。
説明AnalyticDB for PostgreSQL インスタンスの初期化には時間がかかります。次の手順に進む前に、インスタンスのステータスが [実行中] に変わるまでお待ちください。
初期アカウントの作成
AnalyticDB for PostgreSQL は 2 種類のユーザーを提供します。
特権ユーザー:初期アカウントは、RDS_SUPERUSER ロールを持つ特権ユーザーです。このロールは、データベースに対するすべての操作権限を付与します。
一般ユーザー:デフォルトでは、一般ユーザーには権限がありません。特権ユーザー、または GRANT 権限を持つ別のユーザーが、データベースオブジェクトに対する権限を一般ユーザーに明示的に付与する必要があります。一般ユーザーの作成方法の詳細については、「ユーザーの作成と管理」をご参照ください。
左側のナビゲーションウィンドウで、[アカウント管理] をクリックします。
初期アカウントの作成 をクリックします。アカウントの作成 ウィンドウで、アカウント名を入力し、パスワードを設定してから OK をクリックします。
パラメーター
説明
アカウント
初期アカウントの名前です。
小文字、数字、アンダースコア (_) を含める必要があります。
小文字で始まり、小文字または数字で終わる必要があります。
gp で始めることはできません。
長さは 2~16 文字である必要があります。
[新しいパスワード] と [パスワードの確認]
初期アカウントのパスワードです。
次の文字タイプのうち、少なくとも 3 種類を含める必要があります:大文字、小文字、数字、特殊文字。
特殊文字には
! @ # $ % ^ & * ( ) _ + - =が含まれます。長さは 8~32 文字である必要があります。
重要セキュリティのため、パスワードは定期的に変更し、古いパスワードの再利用は避けてください。
ホワイトリストの設定
Data Management (DMS) のみを使用してインスタンスにアクセスする場合は、この手順をスキップできます。ローカルの統合開発環境 (IDE) または ECS インスタンスからデータベースにアクセスする場合は、IP アドレスのホワイトリストを設定する必要があります。クライアントの IP アドレスを取得するには、「事前準備」をご参照ください。
インスタンス詳細ページの左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。
グループの追加 をクリックし、次のパラメーターを設定します。
設定
説明
ホワイトリスト名
新しいホワイトリストグループの名前です。名前は次の要件を満たす必要があります。
小文字、数字、アンダースコア (_) で構成されていること。
小文字で始まり、小文字または数字で終わること。
長さが 2~32 文字であること。
IP アドレス
ホワイトリストに追加する IP アドレスです。次の点にご注意ください。
複数の IP アドレスはカンマ (,) で区切ります。最大 999 個の一意の IP アドレスを追加できます。
サポートされている形式は、10.23.12.24 のような特定の IP アドレスと、10.23.12.24/24 のような CIDR ブロックです。CIDR は Classless Inter-Domain Routing の略です。スラッシュ (/) の後の数字はプレフィックス長を示し、1 から 32 の範囲で指定できます。
プレフィックス長を 0 に設定した場合 (例:0.0.0.0/0 または 127.0.0.1/0)、すべての IP アドレスがインスタンスにアクセスできます。これは高いセキュリティリスクをもたらすため、この設定は慎重に使用してください。
IP アドレス 127.0.0.1 は、すべての外部 IP アドレスからのアクセスをブロックします。
OK をクリックします。
データベースへの接続
このセクションでは、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.gzpsql ツールが格納されているディレクトリに移動します。
cd adbpg_client_package/bin
データベースにログインします。
./psql -h <Endpoint of the AnalyticDB for PostgreSQL instance> -p 5432 -d <Database to connect to> -U <Account of the AnalyticDB for PostgreSQL instance>エンドポイントを取得するには:
クライアントが AnalyticDB for PostgreSQL インスタンスと同じリージョン、同じネットワークタイプの ECS インスタンスにデプロイされている場合、内部エンドポイントを使用して接続できます。AnalyticDB for PostgreSQL コンソールにログインし、対象インスタンスの ID をクリックしてインスタンス詳細ページを開きます。左側のナビゲーションウィンドウで [基本情報] をクリックします。データベース接続情報 セクションで、内部エンドポイント を表示できます。
クライアントと AnalyticDB for PostgreSQL インスタンスが異なるリージョン、異なるネットワークタイプの ECS インスタンス、または Alibaba Cloud 以外のシステムにデプロイされている場合は、パブリックエンドポイントをリクエストして接続する必要があります。詳細については、「パブリックエンドポイントの管理」をご参照ください。
以下は接続コマンドの例です。
psql -h gp-bp13zq652yy4p****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U testuserEnter キーを押し、パスワードを入力します。システムに
postgres=>と表示されたら、接続は成功です。
SQL を使用したベクトルデータのインポート
FastANN ベクトル取得拡張機能がインストールされていることを確認します。
\dx fastannコマンドを実行して、拡張機能がインストールされているかどうかを確認できます。FastANN 拡張機能に関する情報が返された場合、拡張機能はインストールされています。情報が返されない場合は、チケットを送信してインストールをリクエストしてください。テストデータをダウンロードできます。
テスト目的で、AnalyticDB for PostgreSQL はサンプルデータを提供しています。データをダウンロードするには、vector_sample_data.csv をクリックしてください。
サンプルデータテーブルのスキーマは次のとおりです。
フィールド
タイプ
説明
id
bigint
ID。
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)参考
ベクトル分析の詳細については、「ベクトル分析」をご参照ください。