外部表のベクトル
外部表はVECTOR
型の列を使用して作成できるため、外部ファイルに格納されているテキスト形式またはバイナリ形式で表されるベクトル埋込みをOracle DatabaseでVECTOR
データ型としてレンダリングできます。
VECTOR
データを外部表に格納する機能は、AIワークフローに関連する膨大な量のデータを考慮すると有益な場合があります。外部表を使用すると、データベースをセマンティック検索エンジンとして使用しながら、ベクトル埋込みおよびコンテキスト情報をデータベースの外部に格納する便利なオプションが提供されます。
VECTOR
列がサポートされます:
- CSV
- Parquet
- Avro
- ORC
- Dmp
VECTOR
列を含む外部表にアクセスするには、ORACLE_LOADER
、ORACLE_DATAPUMP
およびORACLE_BIGDATA
ドライバを使用します。選択したドライバによってファイル・データがデータベースにロードされたら、結合、SQL関数、集計などの任意のSQL操作(任意のSQLインタフェースでサポート)で外部表の行を操作できます。
任意の次元形式およびストレージ形式のベクトルがサポートされています。ベクトルがSPARSE
の場合、データは、配列またはリスト形式ではなくテキストとして指定する必要があります。
VECTOR
型の列は、明示的に作成された外部表と、SELECT
文の一部として作成されたインライン外部表の両方に含めることができます。この方法の利点は、データベースにロードする前に外部表のベクトルにアクセスするために、静的表を事前に定義する必要がないことです。外部表のマッピングは、SQL問合せで外部表が使用されている間のみ保持されます。例については、「インライン外部表の問合せ」を参照してください。SQL問合せ操作の一部として外部表マッピングがどのように作成されるかを示しています。問合せが完了すると、外部表のマッピングはデータベースから破棄されます。
また、row_limiting_clause
は、外部表を参照するSELECT
文で使用できます。内部表と外部表は、同じ問合せで参照できます。CREATE TABLE AS SELECT
文を使用すると、VECTOR
列を含む外部表から選択して内部表を作成できます。同様に、INSERT INTO SELECT
文を使用すると、SELECT
副問合せでコールされる外部表から内部表に値を挿入できます。
ノート:
- 現在、外部表はマルチベクトル類似検索ではサポートされていません。
- 現在、HNSW索引およびIVF索引は、外部表に格納されている
VECTOR
列には作成できません。
外部表のベクトル埋込みには、次の問合せのように、内部表を使用する場合と同じ方法で類似検索で使用するためにアクセスできます:
SELECT id, embedding
FROM external_table
ORDER BY VECTOR_DISTANCE(embedding, '[1,1]', COSINE)
FETCH APPROX FIRST 3 ROWS ONLY WITH TARGET ACCURACY 90;
次の例は、VECTOR
列を含む外部表を作成するために使用される構文をアクセス・ドライバごとに示しています:
ORACLE_LOADER
の使用:CREATE TABLE ext_vec_tab1( v1 VECTOR, v2 VECTOR ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY my_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ":" MISSING FIELD VALUES ARE NULL ) LOCATION('my_ext_vec_embeddings.csv') ) REJECT LIMIT UNLIMITED;
ORACLE_DATAPUMP
の使用:-- First create the table with the loader CREATE TABLE dp_ext_tab( country_code VARCHAR2(5), country_name VARCHAR2(50), country_language VARCHAR2(50), country_vector VECTOR(*,*) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY my_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ":" MISSING FIELD VALUES ARE NULL ( country_code CHAR(5), country_name CHAR(50), country_language CHAR(50), country_vector CHAR(10000) ) ) LOCATION ('ext_vectorcountries.dat') ) PARALLEL 5 REJECT LIMIT UNLIMITED; -- Then generate the dmp file CREATE TABLE ext_export_table ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY my_dir LOCATION ('ext.dmp') ) AS SELECT * FROM dp_ext_tab; -- Finally, create an external table with the datapump driver CREATE TABLE dp_ext_tab_final ( country_code VARCHAR2(5), country_name VARCHAR2(50), country_language VARCHAR2(50), country_vector VECTOR(3, INT8) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY my_dir LOCATION ('ext.dmp') ) PARALLEL 5 REJECT LIMIT UNLIMITED;
ORACLE_BIGDATA
の使用:CREATE TABLE bd_ext_tab ( COL1 vector(5,INT8), COL2 vector(5,INT8), COL3 vector(5,INT8), COL4 vector(5,INT8) ) ORGANIZATION external ( TYPE ORACLE_BIGDATA DEFAULT DIRECTORY my_dir ACCESS PARAMETERS ( com.oracle.bigdata.credential.name\=OCI_CRED com.oracle.bigdata.credential.schema\=PDB_ADMIN com.oracle.bigdata.fileformat=parquet com.oracle.bigdata.debug=true ) LOCATION ( 'https://swiftobjectstorage.<region>.oraclecloud.com/v1/<namespace>/<filepath>/basic_vec_data.parquet' ) ) REJECT LIMIT UNLIMITED PARALLEL 2;
- インライン外部表の問合せ
この例では、ベクトル検索の一部として外部表のORACLE_BIGDATA
型のベクトルに対して問合せが実行されます。 - 外部表を使用したセマンティック類似検索の実行
外部表をセマンティック類似検索のデータ・セットとして使用する方法を示すSQL計画の例を参照してください
関連項目:
- 外部表の詳細は、『Oracle Databaseユーティリティ』を参照してください。
親トピック: VECTORデータ型を使用する表の作成