0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle DB 23aiでVectorデータを扱ってみる

Posted at

はじめに

Orace Database 23aiでは、一つのデータベース内で他の型のデータと同じようにベクトル型のデータを扱うことができます。以下のリンク先の記事で作成したBase DB 23aiを利用して、ベクトル型のデータを格納するテーブルを作成し、ベクトルデータの簡単な操作をしてみましょう。

Base Database Serviceへのログイン

1.SSH端末の起動
アクセス先のIPはOCIのコンソールから確認可能です。Resourcesのノードの項目を押下し、パブリックIPアドレスを確認してください。

スクリーンショット 2024-06-03 183301.png

SSH端末を起動し、上記のパブリックIPアドレスを入力してください。
image.png

作成時に利用したSSHキーでBase DBのサーバにログインします。
login.png

2.Base Database Serviceへのログイン

login2.png

3.データベースへのログイン
まずCDBへログインします。

login3.png

PDBへセッションを変更しましょう

login4.png

※PDB名はResources欄のプラガブル・データベースの項目から確認します。

gamen3.png

ベクトルデータベースの操作

1.ベクトルテーブル用のユーザーズ表領域の作成

SQL> CREATE TABLESPACE users_vector
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

Tablespace created.

2.テーブルの作成

SQL> CREATE TABLE IF NOT EXISTS vt1
         (id   NUMBER NOT NULL,
          v    VECTOR(2, FLOAT32),
               PRIMARY KEY (id)
         )tablespace users_vector;
         
Table created.

3.テーブル構造の確認

SQL> DESC vt1;

 Name                 Null?    Type
 ------------------ ----------- --------------------
 ID                   NOT NULL   NUMBER
 V                               VECTOR(2, FLOAT32)

4.データの挿入

SQL> INSERT INTO vt1 VALUES (1, '[3, 3]'),  (2, '[5, 3]'),  (3, '[7, 3]'),
                       (4, '[3, 5]'),  (5, '[5, 5]'),  (6, '[7, 5]'),
                       (7, '[3, 7]'),  (8, '[5, 7]'),  (9, '[7, 7]');

SQL> COMMIT;

Commit complete.

ベクトル型のデータを操作する

※データを表示させる前に、SQLplusのコマンドを使って画面を整形しておくと表示が見やすくなります。

SET LINESIZE 150
SET PAGESIZE 50
COLUMN  ID FORMAT 99999
COLUMN  V FORMAT A50

5.データの検索①
前のステップでinsertしたデータを見てみましょう。

SQL> select * from vt1;

 ID V
--- ---------------------------------------------------------------------------------------------------
  1 [3.0E+000,3.0E+000]
  2 [5.0E+000,3.0E+000]
  3 [7.0E+000,3.0E+000]
  4 [3.0E+000,5.0E+000]
  5 [5.0E+000,5.0E+000]
  6 [7.0E+000,5.0E+000]
  7 [3.0E+000,7.0E+000]
  8 [5.0E+000,7.0E+000]
  9 [7.0E+000,7.0E+000]

9 rows selected.

V列にベクトル型のデータが格納されていることを確認できましたね。

6.データの検索② 類似性検索

次に、VECTOR_DISTANCE関数を利用して類似性検索を実施してみましょう。
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/vector_distance.html
※VECTOR_DISTANCE関数はベクトル間の距離を計算する関数です。

以下のSQLは二次元ベクトル間の距離を計算し、二次元ベクトル[3,7]に近い順でid列を取得しています。

SQL> select id from vt1 order by vector_distance(vector('[3,7]'),v,EUCLIDEAN);

 ID
---
  7
  8
  4
  5
  9
  1
  6
  2
  3

9 rows selected.

SQL>

9 rows selected.
SQL>

まとめ

これで初歩的なOracle DB 23aiでのVectorデータの扱いは終わりです。
より詳細なチュートリアルは以下を参考にしてください。

Oracle AI Vector Search - Basics
https://apexapps.oracle.com/pls/apex/f?p=133:180:107575359445892::::wid:1070

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?