SQL*Loaderを使用したバイナリ・ベクトル・データのロードの例

この例では、SQL*Loaderを使用してバイナリ・ベクトル・データ・ファイルをロードする方法を確認できます。

バイナリ(fvec)ファイルのベクトルは、32ビットのリトル・エンディアンのRAW形式で格納されます。

各ベクトルは、.fvecsファイルで4+d*4バイトを占有します。ここで、最初の4バイトはベクトルの次元(d)を示し(つまり、ベクトルの次元数)、その後にベクトル・データを表すd*4バイトが続きます(次の表を参照)。

表5-2 ベクトルの次元および成分のフィールド

フィールド フィールド型 説明

d

int ベクトルの次元

成分

浮動小数点数の配列

ベクトルの成分

バイナリfvecファイルの場合、次のように定義する必要があります。

  • LOBFILEを指定する必要があります。
  • データ・ファイルにバイナリの次元が含まれていることを示すには、構文形式fvecsを指定する必要があります。
  • データ・ファイルに生のバイナリ・データ(raw)が含まれていることを指定する必要があります。

次に、「Hierarchical Navigable Small World索引の理解」で説明されている銀河ベクトルの例を使用して、バイナリ浮動小数点配列からVECTOR列をロードするために使用される制御ファイルの例を示します。ただし、この場合、制御ファイル構文format "fvecs"を使用してfvecsデータをインポートします。

ノート:

SQL*Loaderでは、文字データおよびバイナリ浮動小数点配列のfvecファイルからVECTOR列をロードすることがサポートされています。fvecファイルの形式では、各バイナリの32ビットの浮動小数点配列の前に4バイトの値(ベクトルの要素数)があります。ファイル内に複数のベクトルが存在することがあり、次元が異なる可能性があります。

LOAD DATA
infile 'galaxies_vec.csv'
INTO TABLE galaxies
fields terminated by ':'
trailing nullcols
(
id,
name char (50),
doc  char (500),
embedding lobfile (constant '/u01/data/vector/embedding.fvecs' format "fvecs")  raw
)

この場合、galaxies_vec.csvに含まれるデータにはベクトル・データがありません。かわりに、ベクトル・データは、/u01/data/vectorディレクトリ(/u01/data/vector/embedding.fvecs)のセカンダリLOBFILEから読み取られます。このファイルには、float32浮動小数点の2進数に同じ情報が含まれていますが、fvecs形式です。

1:M31:Messier 31 is a barred spiral galaxy in the Andromeda constellation which has a lot of barred spiral galaxies.:
2:M33:Messier 33 is a spiral galaxy in the Triangulum constellation.:
3:M58:Messier 58 is an intermediate barred spiral galaxy in the Virgo constellation.:
4:M63:Messier 63 is a spiral galaxy in the Canes Venatici constellation.:
5:M77:Messier 77 is a barred spiral galaxy in the Cetus constellation.:
6:M91:Messier 91 is a barred spiral galaxy in the Coma Berenices constellation.:
7:M49:Messier 49 is a giant elliptical galaxy in the Virgo constellation.:
8:M60:Messier 60 is an elliptical galaxy in the Virgo constellation.:
9:NGC1073:NGC 1073 is a barred spiral galaxy in Cetus constellation.: