メイン コンテンツをスキップする 補完的コンテンツへスキップ

Oracleをベクトルデータベースとして使用

以下のジョブは、Oracle Database 23aiに接続し、類似検索用のテーブルを作成し、名言に関するデータをそこに挿入して、ベクトルタイプによる類似検索を実行することを目的としています。

始める前に

このシナリオでは、OracleのAIベクトル検索機能を使用します。詳細は、該当するOracleのドキュメンテーションをご覧ください。

コンポーネントをリンク

Procedure

  1. [Palette] (パレット)から、tPrejobtOracleConnectiontFileInputDelimitedtLogRowを2つ、tMaptOracleOutputtOracleInputtPostjobtOracleCloseというコンポーネントをドラッグ&ドロップします。
  2. ここではデータが処理されないため、OnComponentOk接続を使ってtPrejobtOracleConnectionに、tPostjobtOracleCloseにリンクさせます。
  3. [Row] (行) > [Main] (メイン)接続を使って他のコンポーネントを接続させます。
  4. OnSubjobOkトリガーリンクを使って、メインジョブをサブジョブに接続させます。
    Studioにおけるジョブの概要。

コンポーネントを設定

Procedure

  1. tOracleConnectionコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
  2. Oracle 23aiデータベースへの接続を設定します。
    tOracleConnectionの設定。
  3. tFileInputDelimitedコンポーネントをダブルクリックして[Component] (コンポーネント)ビューを表示させます。
  4. Oracleデータベースに挿入したいサンプルファイルのパスとプロパティを設定します。
    tFileInputDelimitedの設定
    このシナリオでは、作者、年、国が含まれている名言のTXTサンプルが使用されます。
    名言、作者、年号、国名が表示されているファイル。
  5. 最初のtLogRowコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
    必要であれば[Sync column] (カラムを同期)をクリックし、前のコンポーネントからスキーマストラクチャーを取得します。
    [Mode] (モード)エリアで[Table] (テーブル)を選択し、[Print content with log4j] (log4jでコンテンツを入力)をクリックすると、コンソールにジョブの結果が表示されます。
  6. tMapコンポーネントをダブルクリックして、[Map Editor] (マップエディター)を開きます。
  7. 入力テーブルからout1テーブルに、idstatementauthoryearcountryという各カラムをドラッグします。
    out1テーブルの最後にstatement_cloneカラムを追加し、入力テーブルからこのカラムにstatementカラムをドラッグします。この新しいカラムは、Oracleのベクターテーブルの参照カラムとして使用されます。
    tMapの設定。
  8. [OK]をクリックして変更を確定し、エディターを閉じます。
  9. tOracleOutputコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
  10. [Basic settings] (基本設定)ビューで、ベクトルテーブルとして使われるOracleテーブルの名前(このユースケースではvectableと呼ばれます)を入力します。
    [Action on table] (テーブルでのアクション)リストで[Drop table if exists and create] (テーブルが存在する場合はドロップして作成)を選択して、[Action on data] (データでのアクション)[Insert] (挿入)を選択します。
    ベクターテーブルの詳細は、該当するOracleのドキュメンテーションをご覧ください。
    tOracleOutput設定の基本設定ビュー。
  11. [Advanced settings] (詳細設定)ビューで、[Additional Columns] (追加のカラム)テーブルに行を追加し、選択したベクトルカラムにサンプルデータを挿入できるようにするためのSQL式を入力します。
    [Data type] (データ型)VECTORに設定し、[Reference column] (参照カラム)としてstatement_cloneを選択し、[Position] (位置)リストで[Replace] (置換)を選択して、次のSQL式を入力します:
    "TO_VECTOR(VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING ? as data))"
    tOracleOutput設定の詳細設定ビュー。
  12. tOracleInputコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
  13. [Basic settings] (基本設定)ビューで、[Query] (クエリー)フィールドに次のクエリーを入力し、先に作成したベクターテーブルからサンプルデータをフェッチします:
    "
    SELECT statement 
    FROM vectable 
    ORDER BY VECTOR_DISTANCE(vec, TO_VECTOR(VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING '" + context.query + "' as data)), EUCLIDEAN_SQUARED)
    FETCH FIRST 5 ROWS ONLY
    "
  14. [Advanced settings] (詳細設定)ビューで、[Trim column] (カラムをトリミング)テーブルにresultというカラムを追加します。このカラムは、ジョブ実行時にコンソールに表示されます。
  15. 2番目のtLogRowコンポーネントをダブルクリックして、[Component] (コンポーネント)ビューを開きます。
    必要であれば[Sync column] (カラムを同期)をクリックし、前のコンポーネントからスキーマストラクチャーを取得します。
    [Mode] (モード)エリアで[Table] (テーブル)を選択し、[Print content with log4j] (log4jでコンテンツを入力)をクリックすると、コンソールにジョブの結果が表示されます。

ジョブを実行

Procedure

  1. [Ctrl+S]を押してジョブを保存します。
  2. F6を押して実行します。

Results

[Run] (実行)コンソールに、ベクトルテーブルからサンプルデータを取得するSQLクエリーの結果が表示されます。クエリー結果の最初の5行のみが表示されます。

ベクターテーブルが作成されたら、そのテーブルで類似検索を行うことができます。たとえば"Matter of work"というクエリーでは、次のような結果が得られます:
.-----------------------------------------------------.
|                      tLogRow_2                      |
|=---------------------------------------------------=|
|result                                               |
|=---------------------------------------------------=|
|The only way to do great work is to love what you do.|
|The only way to do great work is to love what you do.|
|Knowledge is power.                                  |
|To do nothing is the way to be nothing.              |
|With great power comes great responsibility.         |
'-----------------------------------------------------'

Oracleでベクター検索を実行する方法については、該当するOracleのドキュメンテーションをご覧ください。

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。