クラウドネイティブデータウェアハウス AnalyticDB for PostgreSQL は、AIGC やベクトル検索などのベクトル分析シナリオ向けにベクトルエンジン最適化を提供します。このチュートリアルでは、AnalyticDB for PostgreSQL インスタンスの作成からベクトル分析の実行までの全プロセスについて説明します。
前提条件
-
Alibaba Cloud アカウントが必要です。お持ちでない場合は、Alibaba Cloud 公式 Web サイトでアカウントを登録してください。
-
AnalyticDB for PostgreSQL を初めて使用する場合は、コンソールでサービスリンクロールを承認する必要があります。 次の手順に従います。
- AnalyticDB for PostgreSQL コンソールにログインします。
-
ページの右上隅にある インスタンス作成 をクリックします。
-
サービス関連付けの役割を作成する ダイアログボックスで、OK をクリックします。
課金
インスタンスを作成すると、コンピューティングとストレージの料金が発生します。料金の詳細は、「製品価格」をご参照ください。
無料トライアル
Alibaba Cloud は、弾性ストレージモードのインスタンス向けに無料トライアルを提供しています。AnalyticDB for PostgreSQL の新規ユーザーである場合は、Alibaba Cloud 無料トライアル ページで申し込むことができます。無料トライアルの対象外である場合は、このトピックのプロシージャに従ってインスタンスを作成してください。
操作手順
インスタンスの作成
- AnalyticDB for PostgreSQL コンソールにログインします。
-
ページの右上隅にある インスタンス作成 をクリックして、購入ページに移動します。
-
購入ページで、インスタンスのコアパラメータを設定します。他のパラメータはデフォルト値のままにすることができます。パラメータの詳細については、「インスタンスの作成」をご参照ください。
パラメータ
説明
例
[リージョンとゾーン]
-
[サブスクリプション]:前払いの課金方法です。インスタンスを作成するときに支払います。長期的なワークロードに対して費用対効果が高くなります。サブスクリプション期間が長いほど、割引が大きくなります。
-
[従量課金]:時間単位で課金される後払いの課金方法です。短期的なワークロードに最適です。いつでもインスタンスをリリースしてコストを節約できます。
従量課金
[プロダクトタイプ]
インスタンスの地理的な場所を指定します。
インスタンスの作成後にリージョンを変更することはできません。接続したい ECS インスタンスと同じリージョンにインスタンスを作成することを推奨します。これにより、内部ネットワークを介して通信できます。
中国 (杭州): ゾーン J
インスタンスリソースタイプ
-
[貯蔵弾性モード]:ディスクの独立したスケーリングとスムーズなオンラインスケーリングをサポートします。
-
[serverlessPro]:ストレージリソースを事前にプロビジョニングせずに、必要なコンピューティングリソースのみを指定します。
ストレージ伸縮モード
[データベースエンジンバージョン]
より豊富な機能を利用するために、7.0 標準エディション を選択することを推奨します。6.0 標準エディション もサポートされています。
7.0 標準エディション
[インスタンスシリーズ]
-
High-performance (Basic Edition):ほとんどのビジネス分析ワークロードに適しています。
-
[高可用性バージョン]:企業のコアワークロードに推奨します。
High-performance (Basic Edition)
ベクトルエンジン最適化
有効化 を選択します。
Enable
VPC
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 文字である必要があります。
新しいパスワード と パスワード
パスワードは、次の要件を満たす必要があります。
-
大文字、小文字、数字、特殊文字の 4 種類のうち、3 種類以上の文字を含む必要があります。
-
サポートされている特殊文字は
!@#$%^&*()_+-=です。 -
長さは 8〜32 文字である必要があります。
重要データセキュリティのため、パスワードは定期的に変更し、以前のパスワードを再利用しないでください。
-
IP ホワイトリストの設定
DMS のみを使用してデータベースにアクセスする場合、このステップはスキップできます。ローカル IDE または ECS インスタンスを使用してデータベースにアクセスする場合は、IP ホワイトリストを設定する必要があります。クライアント IP アドレスを取得するには、「前提条件」をご参照ください。
-
インスタンス詳細ページの左側のナビゲーションペインで、セキュリティコントロール をクリックします。
-
グループの追加 をクリックし、次の情報を設定します。
パラメーター
説明
[ホワイトリスト名]
新しいホワイトリストグループの名前。名前は次の要件を満たす必要があります:
-
小文字、数字、またはアンダースコア (_) で構成する必要があります。
-
先頭は小文字、末尾は小文字または数字である必要があります。
-
名前の長さは 2〜32 文字である必要があります。
[IP アドレス]
ホワイトリストに追加する IP アドレス。次の点にご注意ください:
-
複数の IP アドレスはコンマ (,) で区切ります。重複した IP アドレスは指定できません。最大 999 個の IP アドレスを追加できます。
-
10.23.12.24形式の IP アドレスと、10.23.12.24/24形式の CIDR ブロックを使用できます。CIDR は Classless Inter-Domain Routing (クラスレス ドメイン間ルーティング) の略です。CIDR モードでは、/24 はアドレスのプレフィックス長を指定します。プレフィックス長は 1〜32 の整数です。 -
0.0.0.0/0や127.0.0.1/0のようにプレフィックス長を 0 に設定すると、任意の 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.gz -
psql ツールが配置されているディレクトリに移動します。
cd adbpg_client_package/bin
-
-
データベースにログインします。
-p 5432 -d -U ./psql -h接続エンドポイントを取得するには:
-
クライアントと AnalyticDB for PostgreSQL インスタンスが同じリージョンかつ同じネットワークタイプの ECS インスタンスにデプロイされている場合、プライベート IP アドレスを使用して接続できます。AnalyticDB for PostgreSQL コンソールにログインします。対象インスタンスの ID をクリックしてインスタンス詳細ページに移動します。左側のナビゲーションバーで 基本情報 をクリックし、データベース接続情報 セクションで 内部エンドポイント を確認します。
-
クライアントと AnalyticDB for PostgreSQL インスタンスが異なるリージョン、異なるネットワークタイプの ECS インスタンス、または Alibaba Cloud 以外のシステムにデプロイされている場合は、パブリック IP アドレスを申請して接続する必要があります。詳細については、「パブリック IP アドレスの管理」をご参照ください。
例:
psql -h gp-bp13zq652yy4p****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U testuserパスワードを入力して Enter キーを押すと、
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 -- ベクトルエンジン最適化が有効な場合、デフォルトでヒープエンジンが使用されます。 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)
内積 (コサイン類似度)
ベクトル分析を実行し、内積を計算します。ベクトルが正規化されている場合、内積はコサイン類似度と等価です。値が 1 に近いほど、2 つのベクトルが類似していることを示します。
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)
関連ドキュメント
ベクトル分析の詳細については、「ベクトル分析」をご参照ください。