Db2 v12.1.2でベクトルデータが入るようになりました!
「Db2 v12.1.2でベクトルデータが入るようになったので、LangChainから使ってみた」では、LangChainでいろいろやってみたのですが、この記事ではDb2の正統派(?)SQLからいろいろやってみます。
SQLでいろいろやってみる割には、現在SQLのみで文字をベクトル化することができないので(Roadmap上はwatsonx.aiと連携してそのうちできるようになるらしいです)、バリバリPythonな感じです。もちろんベクトル化やSQL実行はpythonでなくともできますので、一例として参考にしていただければと思います。なおJupyter Notebookでの実行を前提としています。
なお、この記事のコードのJupyter Notebookはこちらにあります: https://github.com/kyokonishito/qiita_db2_vector_sql
1. (前準備)テーブル準備
まずはSQLでいろいろやるために、操作するテーブルを準備します。この時点でベクトルデータはまだはいっていないテーブルでよいです。
なんでもいいのですが、ベクトル検索のユースケースからいくと、似ているものを検索したくなるようなテーブルがいいです。
ここでは季節柄(これ書いたのは2025年9月8日です)、あこがれの(?)大阪万博パビリオンデータのテーブルにしてみました。
ググったらいつまで公開してくれるのかはわかりませんが、Xより @takacho_01 さんが公開している
【大阪万博のパビリオンまとめ表】
(2025.07.29更新/完成版)
- https://x.com/takacho_01/status/1950160001059672529
- https://x.com/takacho_01/status/1950181115446071371
というとても親切で素敵なデータがありましたので、こちらを使わせていただくことにしました。
なお、個人の方が公開しているファイルのため、今後(万博終了後?)取得できなく可能性が高いですので、公開終了後は適当なデータでテーブル作ってやってみてください。
こちらのExcelファイルは、見やすさ重視なので、そのままテーブルにImportができないので、フラットな表になるよう、加工してCSVを作成しました。
EXCELのGUIでゴリゴリ編集しても問題ないのですが、一応pythonで加工して、csvファイルにしました。
詳細の説明は本題と関係ないので省きます。コードはこちらです: https://github.com/kyokonishito/qiita_db2_vector_sql/blob/main/01_create_expo_data.ipynb
csvファイルに合わせてテーブルを作成し、csvをロードします。
こちらもベクトルデータとは関係ないので、DDLだけ以下にのせておきます。
コードはこちらです: https://github.com/kyokonishito/qiita_db2_vector_sql/blob/main/02_insert_expo_data.ipynb
CREATE TABLE VECTEST.EXPO_INFO(
"ID" CHAR(5) NOT NULL,
"カテゴリー" VARCHAR(54),
"パビリオン名" VARCHAR(255),
"主観評価" VARCHAR(54),
"事前予約" VARCHAR(24),
"見学タイプ" VARCHAR(24),
"混雑度" VARCHAR(24),
"見どころ" VARCHAR(255),
"詳細" VARCHAR(1200),
"おとな向け評価" VARCHAR(12),
"おとなコメント" VARCHAR(255),
"中高生向け評価" VARCHAR(12),
"中高生コメント" VARCHAR(255),
"子連れ向け評価" VARCHAR(12),
"子連れコメント" VARCHAR(255),
PRIMARY KEY ("ID")
);
カラム名もほぼオリジナルからいただきまして、日本語列名にしてみました!
2. ALTER TABLEして、カラムのデータをベクトル化して追加
ここからが「ベクトルデータをSQLでいろいろやってみる」本題です!
1では普通にテーブルを作ってデータロードしました。
この1行中のいくつかのカラムは、パビリオンの特徴を示しています。なので、特徴を類似検索できるように、ベクトル列を追加し、特徴がわかる列をベクトル化してベクトルデータとして入れます。
カラムをまとめてベクトル化するため、今回はカラムと値の組み合わせをJSON形式にして、ベクトル化することにしました。
ではやってみます!
次のセクションからのコードはこちらにあります: https://github.com/kyokonishito/qiita_db2_vector_sql/blob/main/03_add_vector_col.ipynb
2-1. Embeddingモデルを作成
現状はSQLだけではベクトルデータが作成できません。よって何らかのベクトル化する手段が必要です。ここではpythonでHuggingFaceのEmbeddingsモデルを使います。
-
HuggingFaceのEmbeddingsモデル
intfloat/multilingual-e5-large
を使います
from langchain_huggingface import HuggingFaceEmbeddings
from tqdm import tqdm
embeddings = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-large")
2-2. Jupyter NotebookでDb2 Magic Commands拡張機能を有効にする
Jupyter NotebookからSQLをわかりやすく打てるように、Db2 Magic Commands拡張機能を有効にします。(Db2 ベクトルデータとは関係ないです。)
参考: Jupyter NotebookからDb2に簡単アクセス
import os
# Jupyter NotebookでDb2 Magic Commands拡張機能を有効にする
if not os.path.isfile('db2.ipynb'):
os.system('wget https://raw.githubusercontent.com/IBM/db2-jupyter/master/db2.ipynb')
%run db2.ipynb
2-3. Db2へ接続
.envファイル(または環境変数)から必要情報を読み取って、Db2に接続します。
.envファイルの中身は以下のように設定し、動作フォルダーに置いておきます。
database=<db名>
hostname=<host名またはIPアドレス>
port=<port番号>
uid=<Db2接続userid>
pwd=<password>
Db2へ接続
from dotenv import dotenv_values
# .envファイルを読み込む
# 事前にsample_env を 参考に .envを作成しておく
con_str = dotenv_values(".env")
database = con_str.get("database")
user=con_str.get("uid")
password=con_str.get("pwd")
host=con_str.get("hostname")
port=con_str.get("port")
# SSL接続の場合はSSL TRUEを最後に付与する
%sql CONNECT TO {database} USER {user} USING {password} HOST {host} port {port}
2-4. SELECTで確認: VECTEST.EXPO_INFO
SELECT文でVECTEST.EXPO_INFOの中身を確認してみます
%sql SELECT * FROM VECTEST.EXPO_INFO
2-5. VECTEST.EXPO_INFO に VECTOR
列の追加
ベクトルデータを入れる列はデータ型VECTORで定義します。
VECTOR (< ベクトルデータの次元数 > ,< coordinate-type FLOAT32 または INT8 >)
SQLのALTER TABLEコマンドで追加します(DBeaverなどで直接SQLを実行してもOK):
%%sql
ALTER TABLE VECTEST.EXPO_INFO
ADD COLUMN EMBEDDING VECTOR(1024, FLOAT32);
確認(DBeaverなどで直接SQLを実行してもOK):
%sql SELECT * FROM VECTEST.EXPO_INFO FETCH FIRST 3 ROWS ONLY
無事EMBEDDING列ができました。
テーブル構成の確認(DBeaverでは動作しません、Db2 CLPであればOK):
%sql DESCRIBE TABLE VECTEST.EXPO_INFO
2-6. VECTEST.EXPO_INFO から 特徴を表す列をベクトル化する
ここでは以下の列をJSON化して、ベクトル化します:
- 見どころ
- 詳細
- おとな向け評価
- おとなコメント
- 中高生向け評価
- 中高生コメント
- 子連れ向け評価
- 子連れコメント
2-6-1. 特徴を表す列をJSONに加工する
JSON_OBJECT関数を使ってSQLでJSONにします。
JSON_OBJECT関数がDb2 Magic Commandでは使えなかったため、sqlalchemyでSQLを実行しています。
import pandas as pd
from sqlalchemy import create_engine
from urllib.parse import quote_plus
# DB2の接続情報を設定
password_q = quote_plus(password)
# SQLAlchemyのエンジンを作成
url = f"ibm_db_sa://{user}:{password_q}@{host}:{port}/{database}"
engine = create_engine(url)
sql_str = """
SELECT
ID,
JSON_OBJECT(
'見どころ' VALUE 見どころ,
'詳細' VALUE 詳細,
'おとな向け評価' VALUE おとな向け評価,
'おとなコメント' VALUE おとなコメント,
'中高生向け評価' VALUE 中高生向け評価,
'中高生コメント' VALUE 中高生コメント,
'子連れ向け評価' VALUE 子連れ向け評価,
'子連れコメント' VALUE 子連れコメント
) AS JSON_RESULT
FROM VECTEST.EXPO_INFO;
"""
# pandas.read_sql() を使用してpandas Dataframe型のdf_vecにSELECTの結果を入れる
df_vec_text = pd.read_sql(sql_str, engine)
# 最初の1行のJSON表示
print( df_vec_text.at[0,'json_result'])
# DataFrame表示
df_vec_text
2-6-2. df_vec_textのjson_result列をベクトル化
「2-1. Embeddingモデルを作成」で作成したembeddingsを使います。
id(主キー)とjson_result列をベクトル化したデータEMBEDDING列の2列のDataFrameを作ります。
# json_result列をベクトル化してEMBEDDING列を作り、
# id(主キー)とjson_result列をベクトル化したデータEMBEDDING列の2列のDataFrameを作ります。
list_vec_text = df_vec_text['json_result'].tolist()
expo_vectors = embeddings.embed_documents(texts=list_vec_text)
df_vec_text['EMBEDDING'] = expo_vectors
df_vec_text['EMBEDDING'] =df_vec_text['EMBEDDING'].apply(lambda x: '[' + ', '.join(map(str, x)) + ']')
df_vec_text.drop(columns=['json_result'], inplace=True)
df_vec_text
2-5-3. ベクトル化した値でEMBEDDING列を更新
更新はibm_dbライブラリを使用し、SQLのMERGE文で実施します。
DataFrameの値を使用した更新は、MERGE文が速いとのことです。
# そして今度は更新用にibm_dbで接続を取得します ....
import pandas as pd
import ibm_db
# Db2への接続(接続情報は適宜変更してください)
conn_str = f"DATABASE={database};HOSTNAME={host};PORT={port};PROTOCOL=TCPIP;UID={user};PWD={password};"
DB_connection_I = ibm_db.connect(conn_str, "", "")
# MERGE文のVALUES部分を構築(行数に応じて ? を繰り返す)
values_clause = ",".join(["(?, ?)"] * len(df_vec_text))
# print(f"values_clause: {values_clause}")
# MERGE文の定義
sql = f"""
MERGE INTO VECTEST.EXPO_INFO AS T1
USING (VALUES {values_clause}) AS T2(ID, EMBEDDING)
ON T1.ID = T2.ID
WHEN MATCHED THEN
UPDATE SET T1.EMBEDDING = VECTOR(T2.EMBEDDING, 1024, FLOAT32)
"""
# プレースホルダーに渡す値をフラットなリストに変換
params = [item for row in df_vec_text.itertuples(index=False) for item in row]
# ステートメント準備と実行
stmt = ibm_db.prepare(DB_connection_I, sql)
ibm_db.execute(stmt, tuple(params))
確認(DBeaverなどで直接SQLを実行してもOK):
%sql SELECT * FROM VECTEST.EXPO_INFO FETCH FIRST 3 ROWS ONLY
03. SQLでベクトル検索
データができましたので、SQLでベクトル検索してみましょう!
SQLでベクトル検索(==類似検索)するには、VECTOR_DISTANCE関数を使って、ベクトル間の距離を出し、距離が近いもの(値が0に近いもの)ほど似ているとして検索します。
VECTOR_DISTANCE(vector1,vector2, <距離metric>)
-
vector1,vector2
- 比較するVECTOR型のデータ
-
距離metricは以下から選択します:
- COSINE
- EUCLIDEAN
- EUCLIDEAN_SQUARED
- DOT
- HAMMING
- MANHATTAN
またpythonなどで作成したベクトルデータ配列の「文字列」をDb2のVECTORタイプのデータにするためにVECTOR関数 を使います。
VECTOR(<ベクトルデータ配列の文字列>, < ベクトルデータの次元数 > ,< coordinate-type FLOAT32 または INT8 >)
使用例
VECTOR('[0.123, -0.456, 0.789]', 3, FLOAT32)
次のセクションからのコードはこちらにあります: https://github.com/kyokonishito/qiita_db2_vector_sql/blob/main/04_Db2_sql_vector_search.ipynb
3-1. 人気のイタリア館、人気すぎて入れそうにないので、似たパビリオンないかな?
→ イタリア館のEMBEDDINGとの距離が近いレコードを検索
既に入っているEMBEDDING同士を比較するなら、再度ベクトル化不要!
WHERE文で条件も付加(以下ではカテゴリー = '海外パビリオン'
を追加)
SQL:
SELECT
ID, カテゴリー, パビリオン名, 主観評価, 事前予約, 見学タイプ, 混雑度, 見どころ, 詳細, おとな向け評価, おとなコメント, 中高生向け評価, 中高生コメント, 子連れ向け評価, 子連れコメント,
VECTOR_DISTANCE(
(SELECT EMBEDDING FROM VECTEST.EXPO_INFO WHERE パビリオン名 = 'イタリア バチカン'),
EMBEDDING,
COSINE
) AS DISTANCE
FROM
VECTEST.EXPO_INFO
WHERE
カテゴリー = '海外パビリオン'
ORDER BY
DISTANCE ASC
FETCH FIRST 5 ROWS ONLY
実行(DBeaverなどで直接SQLを実行してもOK):
sql_str = f"""
SELECT
ID, カテゴリー, パビリオン名, 主観評価, 事前予約, 見学タイプ, 混雑度, 見どころ, 詳細, おとな向け評価, おとなコメント, 中高生向け評価, 中高生コメント, 子連れ向け評価, 子連れコメント,
VECTOR_DISTANCE(
(SELECT EMBEDDING FROM VECTEST.EXPO_INFO WHERE パビリオン名 = 'イタリア バチカン'),
EMBEDDING,
COSINE
) AS DISTANCE
FROM
VECTEST.EXPO_INFO
WHERE
カテゴリー = '海外パビリオン'
/* AND 混雑度 NOT LIKE '%混雑%' */
ORDER BY
DISTANCE ASC
FETCH FIRST 5 ROWS ONLY
"""
%sql {sql_str}
"""
%sql {sql_str}
たぶんイタリア館に似てる海外パビリオンが出てきました!
イタリア館自身も出ていて、DISTANCEはそのものなので0になってます。DISTANCE値が近いほど「似ている」となります。
3-2. 「砂漠の砂に座りたい」ので、万博情報から「砂漠の砂に座りたい」で検索
-「砂漠の砂に座りたい」という文字をベクトル化して、そのデータとEXPO_INFOのEMBEDDING列との距離を出して、その距離が近いものが”似ている”ということになります。
- VECTOR_DISTANCE を使います
またpythonで作成したベクトルデータ配列の「文字列」をDb2のVECTORタイプのデータにするために
- VECTOR を使います
基本のSQL:
SELECT <取得したい列名1>, <取得したい列名2> ......
VECTOR_DISTANCE(<ベクトルデータが入った列名>,
VECTOR('<ベクトル配列の文字列>',<ベクトル次元数>, <ベクトル値のデータタイプ>), <距離メトリック>) as distance
FROM <テーブル名>
ORDER BY distance
FETCH FIRST <取得したい最大行数> ROWS ONLY;
「砂漠の砂に座りたい」という文字をベクトル化するのは、今回はpythonでやります。
3-2-1. 文字列をベクトル化してクリップボードに貼り付ける関数
SQLではベクトル化できないので、以下を使います
import pyperclip
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"
def get_vector_data(query_str):
vec_data = embeddings.embed_query(query_str)
pyperclip.copy(vec_data) # クリップボードに貼り付け
print("copied!")
return vec_data # ベクトルデータを戻す
3-2-2. 「砂漠の砂に座りたい」という文字をベクトル化
クリップボードにコピーされ、変数vecdataに値が入ります
# ベクトル化された文字列が、クリップボードにコピーされます
vecdata = get_vector_data("砂漠の砂に座りたい")
DBeaverなどSQLが実行できるツールでやってみましょう!
SELECT ID, カテゴリー, パビリオン名, 主観評価,
事前予約, 見学タイプ, 混雑度, 見どころ, 詳細,
おとな向け評価, おとなコメント, 中高生向け評価, 中高生コメント, 子連れ向け評価, 子連れコメント,
VECTOR_DISTANCE(EMBEDDING,
VECTOR('<ベクトル配列の文字列をコピペ>',1024, FLOAT32), COSINE) as distance
FROM VECTEST.EXPO_INFO
ORDER BY distance
FETCH FIRST 4 ROWS ONLY;
せっかくなので pythonでもqueryしてみます。
まずはSQLを見てみます:
# SQLはこんな感じ
sql_str = f"""
SELECT ID, カテゴリー, パビリオン名, 主観評価,
事前予約, 見学タイプ, 混雑度, 見どころ, 詳細,
おとな向け評価, おとなコメント, 中高生向け評価, 中高生コメント, 子連れ向け評価, 子連れコメント,
VECTOR_DISTANCE(EMBEDDING,
VECTOR('{vecdata}',1024, FLOAT32), COSINE) as distance
FROM VECTEST.EXPO_INFO
ORDER BY distance
FETCH FIRST 4 ROWS ONLY;
"""
print(sql_str)
出力されたSQL:
SELECT ID, カテゴリー, パビリオン名, 主観評価,
事前予約, 見学タイプ, 混雑度, 見どころ, 詳細,
おとな向け評価, おとなコメント, 中高生向け評価, 中高生コメント, 子連れ向け評価, 子連れコメント,
VECTOR_DISTANCE(EMBEDDING,
VECTOR('[0.030682723969221115, -0.003491786075755954, -0.04419334605336189, -0.05064229294657707, 0.013029562309384346, -0.029879268258810043, -0.017970429733395576, 0.03991352766752243, 0.051915399730205536, -0.0216689296066761, 0.02636873722076416, 0.0023782155476510525, -0.05823395028710365, -0.03317636996507645, 0.00014122386346571147, -0.01982584223151207, 0.015403088182210922, 0.020658500492572784, 0.03649144992232323, -0.00940946489572525, 0.025803260505199432, -0.02949240244925022, -0.02265838161110878, -0.026837058365345, -0.025558851659297943, 0.018825817853212357, -0.034050751477479935, -0.01777593605220318, -0.029167329892516136, -0.04316703602671623, 0.014834590256214142, 0.02027416229248047, -0.019357649609446526, -0.019233345985412598, -0.00921986997127533, 0.041257601231336594, 0.0666969045996666, 0.03962372988462448, -0.0007139877998270094, 0.043128594756126404, -0.04144850745797157, 0.028192833065986633, 0.0039885398000478745, -0.018292110413312912, -0.03958318009972572, 0.00181523896753788, 0.037396591156721115, 0.003425388131290674, -0.005812142509967089, 0.028716109693050385, 0.024636417627334595, -0.01990368776023388, 0.032455116510391235, -0.03823798522353172, -0.054384540766477585, 0.013423889875411987, -0.03655398637056351, 0.018666042014956474, -0.03365617245435715, -0.019693443551659584, -0.05012889578938484, -0.00023811444407328963, 0.014508148655295372, -0.042768120765686035, -0.034792300313711166, 0.011845429427921772, 0.040871813893318176, 0.0003302432887721807, -0.053857963532209396, 0.041801817715168, -0.029674507677555084, 0.0038551862817257643, -0.02425631694495678, -0.018307585269212723, -0.015794917941093445, -0.017370322719216347, 0.04374706745147705, -0.016794120892882347, 0.009164227172732353, -0.017930593341588974, 0.06774893403053284, -0.026565318927168846, 0.03602344170212746, -0.0045753829181194305, 0.02902640402317047, -0.004035938996821642, 0.018348800018429756, 0.06424468755722046, 0.04606803506612778, 0.017472228035330772, -0.0036307114642113447, 0.032827865332365036, 0.042356036603450775, -0.03099875897169113, -0.024883829057216644, 0.020237069576978683, 0.020030153915286064, 0.04059272259473801, -0.008824029937386513, 0.02134109102189541, -0.041888266801834106, -0.028366154059767723, 0.01343296468257904, -0.04737448692321777, -0.035235147923231125, 0.03647368773818016, 0.012151911854743958, 0.026809532195329666, -0.017882194370031357, 0.01942591369152069, 0.06111077591776848, 0.05919308587908745, 0.008524368517100811, -0.024277562275528908, -0.044766467064619064, -0.028620781376957893, -0.007096603512763977, -0.009669728577136993, -0.0013955525355413556, 0.03301209956407547, 0.021381884813308716, 0.023699462413787842, 0.0051666987128555775, -0.03973641246557236, 0.019591625779867172, -0.017020458355545998, 0.008206426165997982, 0.036570362746715546, -0.011766140349209309, 0.02872699871659279, 0.04101043567061424, 0.039321206510066986, -0.037829361855983734, -0.012560640461742878, -0.06756173074245453, -0.04858732596039772, -0.022985586896538734, -0.0019499605987221003, -0.0418630950152874, 0.004357954952865839, -0.019994061440229416, 0.03772387281060219, 0.06928065419197083, -0.05553817376494408, -0.011114845052361488, -0.042801301926374435, -0.05631660670042038, -0.0011399452341720462, -0.011057409457862377, 0.0010856010485440493, -0.021785935387015343, -0.025134531781077385, 0.0002988045453093946, 0.038495566695928574, 0.02584782801568508, -0.028786668553948402, 0.011322060599923134, 0.059564486145973206, 0.01258482038974762, 0.025111300870776176, -0.01972273737192154, -0.04776732623577118, -0.02699260786175728, 0.012001573108136654, 0.003335365327075124, -0.03427562490105629, 0.04177997261285782, 0.05295500531792641, 0.00788081530481577, -0.04040520638227463, -0.022526878863573074, -0.05400337278842926, 0.027135884389281273, -0.04785623028874397, -0.008807732723653316, 0.022548966109752655, 0.020478662103414536, 0.003836294636130333, 0.03966664522886276, -0.030542170628905296, 0.017484033480286598, 0.04197124019265175, 0.07544760406017303, 0.002600160427391529, -0.022883987054228783, 0.04599351808428764, 0.03210654854774475, 0.020254066213965416, 0.008701175451278687, 0.05106930434703827, 0.03154976665973663, -0.022996699437499046, -0.02359512634575367, 0.03240504860877991, -0.042931705713272095, 0.04977620020508766, 0.030002927407622337, 0.046090029180049896, -0.041644103825092316, -0.019544951617717743, 0.006351760122925043, -0.00543519901111722, -0.04161830618977547, 0.023669108748435974, 0.024041758850216866, -0.02731907181441784, -0.04078783839941025, -0.006580797489732504, 0.018278013914823532, -0.08358591794967651, -0.059757571667432785, -0.0002965867461171001, 0.033483538776636124, 0.02686218172311783, -0.04018741473555565, -0.026222502812743187, -0.021772844716906548, 0.0014838260831311345, 0.027760520577430725, 0.01638045907020569, 0.008376440964639187, 0.0321536511182785, 0.02264522761106491, 0.04115421324968338, 0.01997740939259529, 0.015117207542061806, -0.0028177376370877028, 0.02387179620563984, 0.023493414744734764, 0.002619287697598338, -0.00391506589949131, 0.03411858156323433, -0.030333010479807854, -0.03699222579598427, 0.0030308805871754885, -0.030568601563572884, -0.03404740244150162, -0.03096487745642662, 0.022700687870383263, 0.02634773962199688, -0.06357423961162567, -0.0003474656550679356, 0.044457096606492996, -0.035089533776044846, -0.006194098852574825, -0.04711935669183731, 0.022587956860661507, -0.043428100645542145, 0.036620255559682846, 0.003263910301029682, 0.012873489409685135, 0.05290719121694565, -0.020200062543153763, -0.05355602875351906, 0.048098206520080566, 0.031501322984695435, 0.029919855296611786, 6.819240661570802e-05, -0.013658495619893074, -0.001817604061216116, 0.0002650886308401823, 0.02950628288090229, -0.0048620630986988544, 0.019093820825219154, -0.013151600956916809, 0.018365954980254173, 0.0049607777036726475, -0.014085687696933746, -0.020508477464318275, -0.048900481313467026, -0.028953509405255318, -0.02408367581665516, -0.045367203652858734, -0.0385301299393177, -0.0215285811573267, 0.004588786046952009, -0.04035275802016258, -0.03066934458911419, 0.002837051870301366, 0.0012130752438679338, -0.0327710285782814, -0.033976975828409195, 0.035172805190086365, -0.022815849632024765, 0.03926768898963928, 0.017529070377349854, 0.013968423008918762, -0.018420303240418434, 0.0019402852049097419, 0.0015570269897580147, 0.023450642824172974, -0.025617998093366623, 0.06067018583416939, 0.017388172447681427, 0.012765418738126755, 0.00028755905805155635, -0.00994393602013588, -0.10834766924381256, -0.02000725455582142, 0.022219566628336906, -0.019385013729333878, -0.05372261255979538, 0.00970003753900528, -0.019478382542729378, -0.042152632027864456, -0.03573374077677727, -0.023857614025473595, 0.010723501443862915, -0.0726669654250145, -0.0033469118643552065, 0.060439497232437134, 0.05104103684425354, 0.013343487866222858, -0.05701351910829544, -0.039702389389276505, -0.018248306587338448, -0.014458977617323399, 0.018893780186772346, -0.001569748972542584, 0.015736225992441177, -0.027056844905018806, -0.03419078513979912, -0.03379382938146591, 0.0025047501549124718, 0.049177125096321106, -0.011598055250942707, 0.006800467148423195, 0.0022970945574343204, 0.0070787291042506695, -0.030269397422671318, 0.027986643835902214, -0.01757350191473961, -0.007222402840852737, 0.04039282724261284, -0.012095225043594837, 0.03816128149628639, -0.02568974159657955, -0.0017789354315027595, 0.03896031156182289, 0.007063091266900301, 0.02575470507144928, -0.02730039693415165, -0.051295697689056396, -0.038686465471982956, 0.014860403724014759, -0.05697227269411087, 0.015274516306817532, -0.021970460191369057, 0.031252387911081314, 0.0161102544516325, -0.02128344215452671, -0.020258313044905663, 0.020130271092057228, 0.04267669469118118, -0.012214049696922302, 0.054974306374788284, 0.011333485133945942, -0.02121487818658352, 0.010481326840817928, -0.014005517587065697, 0.047921743243932724, 0.015828093513846397, 0.05019082501530647, -0.018452787771821022, -0.004986979998648167, 0.017840607091784477, -0.011635296046733856, -0.031437866389751434, -0.03851795196533203, -0.04271424934267998, 0.034324634820222855, 0.016682971268892288, -0.013103818520903587, 0.0395473949611187, -0.0169803686439991, -0.018477732315659523, -0.06707064807415009, -0.014409150928258896, 0.010296004824340343, -0.04409720003604889, -0.014373420737683773, -0.03485872596502304, -0.007062247488647699, -0.04410770162940025, -0.008575184270739555, -0.037589237093925476, 0.15236958861351013, 0.02780311182141304, 0.0595582090318203, -0.036685068160295486, -0.024445274844765663, 0.005935018416494131, 0.029009798541665077, 0.023822300136089325, 0.03889570012688637, 0.045519422739744186, -0.027105769142508507, -0.021336505189538002, 0.01666352152824402, -0.031144946813583374, 0.02002665586769581, 0.06022779643535614, 0.01251552440226078, 0.03796914592385292, 0.014712539501488209, 0.005965961143374443, 0.05669458955526352, -0.07619263976812363, -0.00779119785875082, -0.014393915422260761, -0.06129509210586548, -0.04058955982327461, -0.026885367929935455, 0.02539028413593769, -0.05611532926559448, 0.006659608334302902, -0.03181380406022072, 0.014312668703496456, -0.046588700264692307, 0.008792459033429623, 0.010644180700182915, -0.017696458846330643, 0.00785541720688343, -0.009122125804424286, 0.027396563440561295, -0.02995516173541546, -0.015349021181464195, 0.014054764993488789, -0.018224099650979042, 0.041545819491147995, 0.03319869190454483, 0.05391879007220268, 0.031002158299088478, -0.04091238975524902, -0.024944184347987175, 0.05034174397587776, 0.021748609840869904, 0.02696874365210533, -0.02547607384622097, -0.031950514763593674, 0.013516786508262157, -0.042994774878025055, -0.028681041672825813, -0.026559993624687195, 0.0033250167034566402, 0.015517782419919968, 0.05011748895049095, 0.0180148184299469, -0.015541690401732922, -0.021220309659838676, 0.026416821405291557, 0.025517310947179794, 0.006134574301540852, -0.00964969489723444, -0.040567707270383835, -0.008502332493662834, -0.06165387108922005, -0.013701306656002998, -0.031128523871302605, 0.018601642921566963, 0.012637926265597343, -0.000691547233145684, -0.012250860221683979, 0.07392356544733047, 0.04670616239309311, 0.005068706814199686, 0.04933636263012886, -0.015267452225089073, -0.02434276044368744, -0.009761195629835129, 0.048431646078825, 0.00038139979005791247, 0.04563732445240021, 0.001743059721775353, -0.03575665131211281, 0.02347641997039318, 0.033041175454854965, 0.026225293055176735, -0.0382322296500206, 0.027463972568511963, 0.061597757041454315, -0.08350066095590591, 0.005294536240398884, 0.005161189008504152, -0.03831767290830612, -0.020318230614066124, -0.007888035848736763, -0.012409569695591927, -0.028246184810996056, -0.05209499970078468, 0.005644189193844795, -0.05712748318910599, -0.014729870483279228, 0.019229473546147346, 0.02873384952545166, -0.03653118014335632, 0.05201897770166397, 0.004124586470425129, 0.006666120607405901, -0.01654013991355896, 0.017075911164283752, 0.018096160143613815, 0.027409760281443596, -0.047505997121334076, -0.0030474388040602207, 0.012357426807284355, -0.03395265340805054, 0.061360519379377365, -0.020055249333381653, 0.07097302377223969, -0.03736231476068497, 0.06575927138328552, -0.020843690261244774, 0.00909935962408781, 0.003904534736648202, 0.011950097046792507, 0.015731019899249077, -0.0248393751680851, -0.047126784920692444, 0.030502688139677048, 0.04665699601173401, -0.01901630312204361, 0.07101640105247498, -0.0015853289514780045, -0.016710028052330017, 0.06670568138360977, -0.0013097228948026896, 0.0532933808863163, -0.04785666614770889, 0.03092893771827221, 0.01168064121156931, 0.025828156620264053, -0.0286409854888916, -0.049457695335149765, -0.02822733111679554, -0.0060345749370753765, 0.049391645938158035, -0.020271992310881615, 0.011598121374845505, 0.02450096420943737, -0.012872249819338322, -0.019640859216451645, 0.011583450250327587, -0.0024639619514346123, 0.027185101062059402, -0.031334295868873596, -0.021035755053162575, -0.011241956613957882, 0.022793661803007126, 0.09277942776679993, 0.0322975218296051, 0.07208598405122757, -0.04741746187210083, -0.00025038441526703537, 0.04621746763586998, 0.01045044045895338, -0.030683360993862152, -0.02455333061516285, -0.0008657287689857185, 0.03052428551018238, 0.03309573233127594, -0.021150482818484306, -0.002916767029091716, 0.02361127734184265, -0.034272439777851105, -0.008001494221389294, -0.01989465393126011, 0.012849653139710426, 0.04816095530986786, -0.0124614667147398, -0.018567167222499847, 0.0019796499982476234, -0.0015067427884787321, -0.04112939164042473, -0.021847369149327278, -0.006949930917471647, -0.02340695448219776, 0.05557934567332268, 0.00039417899097315967, 0.0199745986610651, -0.02846440300345421, -0.00033286050893366337, 0.05266217514872551, 0.024328434839844704, -0.041894473135471344, -0.029888436198234558, -0.004839118104428053, -0.05497582256793976, -0.03503432497382164, -0.03170682117342949, -0.01866181753575802, -0.016502657905220985, 0.041052695363759995, 0.017633650451898575, 0.02399490587413311, 0.031486496329307556, -0.004411222878843546, -0.03978019207715988, 0.012815290130674839, 0.0058373031206429005, 0.051866836845874786, 0.027405191212892532, 0.003246155334636569, 0.02883070521056652, -0.004270980600267649, -0.00109697540756315, 0.003957570530474186, 0.0074428715743124485, 0.03480580449104309, -0.02618478424847126, -0.0022861191537231207, -0.028219742700457573, 0.0331762321293354, 0.008862566202878952, 0.009178648702800274, -0.05327028036117554, 0.002326049143448472, 0.002910189563408494, -0.021680301055312157, -0.0499243289232254, -0.03785698860883713, -0.03111463412642479, 0.016278496012091637, 0.030080463737249374, 0.0626835897564888, -0.029722314327955246, 0.033561185002326965, -0.0339251309633255, 0.030894558876752853, -0.006936965975910425, -0.0014790321001783013, 0.036746006458997726, -0.0443001464009285, -0.009237591177225113, 0.040869176387786865, 0.022042011842131615, 0.006036902777850628, -0.03545394167304039, 0.030262978747487068, 0.04391920194029808, -0.004797938279807568, -0.03600911796092987, 0.005176296457648277, -0.05030554160475731, -0.02610049955546856, -0.03179395943880081, -0.012343009933829308, 0.025983760133385658, -0.010877737775444984, 0.025165513157844543, 0.013237792998552322, 0.0035553944762796164, 0.019972961395978928, -0.03422214835882187, 0.00903738010674715, -0.038284387439489365, 0.013446281664073467, -0.014791282825171947, -0.03196549415588379, -0.0330355167388916, 0.08762707561254501, 0.031151670962572098, -0.028105465695261955, -0.04815012589097023, -0.030244911089539528, -0.05220837518572807, -0.043302327394485474, 0.022452684119343758, -0.0066250343807041645, -0.03266038000583649, 0.021213939413428307, 0.03409885615110397, -0.04987471178174019, 0.02031698077917099, 0.006207275204360485, -0.04701841250061989, -0.028608955442905426, 0.03175531327724457, -0.01616043411195278, -0.015732184052467346, -0.05898546800017357, -0.04621262475848198, -0.03193175792694092, -0.04652949795126915, -0.008478567004203796, -0.025156531482934952, 0.014206207357347012, -0.015251360833644867, -0.03715168684720993, -0.03517989069223404, -0.005162504967302084, 0.015277594327926636, -0.021156592294573784, -0.0014002601383253932, 0.01544069405645132, 0.02461579442024231, 0.01203597616404295, -0.046299438923597336, 0.02095138281583786, 0.03746591880917549, 0.011504225432872772, -0.01445740181952715, -0.009576643817126751, -0.011267011053860188, -0.03069218620657921, 0.06423246115446091, -0.04789945110678673, -0.005382382310926914, -0.01262375246733427, -0.0018565893406048417, 0.013498877175152302, 0.021692391484975815, 0.02301861345767975, 0.02824486419558525, 0.001651898492127657, 0.010399817489087582, 0.004676351323723793, 0.011711683124303818, -0.04420909658074379, -0.02443714253604412, -0.030177053064107895, -0.02776937559247017, 0.003758389502763748, -0.008224518969655037, -0.035500574856996536, -0.02534056082367897, -0.008049292489886284, 0.04228171706199646, 0.02761286124587059, -0.04113972932100296, 0.05621102452278137, -0.0032498324289917946, -0.019055329263210297, -0.003038716036826372, -0.018821870908141136, 0.01910911314189434, -0.01382935419678688, 0.020155785605311394, -0.011984535492956638, -0.008247065357863903, -0.022892415523529053, 0.010538971051573753, -0.032452959567308426, 0.016330862417817116, 0.0302093718200922, -0.046107664704322815, -0.03295847773551941, -0.018849199637770653, 0.03969366475939751, -0.01750371791422367, -0.011574776843190193, 0.047199547290802, -0.02083214931190014, 0.02722875401377678, -0.02938443049788475, 0.022757776081562042, 0.017382433637976646, 0.03524835780262947, -0.037278912961483, -0.017599033191800117, -0.020278766751289368, 0.0428590327501297, -0.03284171223640442, 0.03762730583548546, 0.018351329490542412, 0.03262694180011749, 0.014208133332431316, -0.05883168801665306, -0.033323436975479126, -0.03449905291199684, 0.01999320462346077, -0.02922767587006092, 0.0035501415841281414, 0.031804848462343216, 0.011372150853276253, 0.032035116106271744, -0.01668711006641388, 0.052745431661605835, -0.01717931590974331, 0.02686191163957119, -0.08155276626348495, 0.01637021265923977, 0.002690100111067295, -0.032067179679870605, -0.024836601689457893, -0.01079862006008625, -0.04425512254238129, 0.008863447234034538, 0.014376094564795494, -0.04715045168995857, 0.022012006491422653, 0.034524135291576385, 0.01476067304611206, -0.003018110990524292, 0.009589447639882565, 0.012909937649965286, 0.04081076756119728, 0.01679656282067299, 0.01857644133269787, 0.023267436772584915, 0.03881782293319702, -0.025144711136817932, 0.012904977425932884, 0.005408230237662792, 0.01834176853299141, 0.014797350391745567, 0.021860606968402863, 0.005292779300361872, -0.007595468778163195, -0.08980602771043777, -0.003997635096311569, -0.020424453541636467, 0.025190964341163635, 0.03326313570141792, -0.01494002528488636, 0.018593477085232735, -0.029886310920119286, -0.018984241411089897, -0.02943914569914341, 0.035028859972953796, -0.033741116523742676, 0.012398000806570053, -0.029711991548538208, 0.02732262946665287, -0.0029687867499887943, 0.041981808841228485, -4.790767707163468e-05, -0.02771553210914135, 0.023223422467708588, -0.034636612981557846, -0.020517131313681602, -0.023946257308125496, 0.03429649397730827, 0.054849471896886826, -0.009010124020278454, 0.03612359240651131, 0.026874933391809464, 0.0010698859114199877, 0.0234404057264328, 0.03573616221547127, 0.008759134449064732, -0.013475801795721054, -0.008427154272794724, 0.011179963126778603, -0.061445996165275574, -0.009945730678737164, -0.0762694850564003, -0.003515424905344844, -0.012678668834269047, 0.04775388911366463, -0.009983361698687077, -0.05292331427335739, 0.028875714167952538, -0.008458397351205349, 0.04350230097770691, -0.018690869212150574, -0.048590440303087234, -0.020880112424492836, 0.021656613796949387, -0.018307579681277275, 0.0025755474343895912, -0.021538427099585533, 0.04868775233626366, 0.0016061544883996248, -0.03060515969991684, 0.025404570624232292, -0.035154201090335846, -0.032133977860212326, -0.014998516999185085, 0.025546832010149956, -0.03666745498776436, 0.003662045346572995, -0.002958506578579545, 0.0021406514570116997, -0.027357008308172226, -0.051769230514764786, -0.021256694570183754, -0.01811046712100506, -0.018129168078303337, 0.0073060570284724236, -0.03593812510371208, -0.02317146211862564, 0.007508720271289349, -0.019175173714756966, 0.018028561025857925, 0.02590983919799328, 0.0678691491484642, -0.0035984378773719072, 0.04089009761810303, -0.03721227869391441, -0.05905606597661972, -0.025844257324934006, -0.035997938364744186, -0.012761792168021202, -0.0644429475069046, 0.01679375022649765, -0.005122812930494547, 0.033958058804273605, -0.026008576154708862, -0.005148055963218212, -0.0004075405595358461, -0.03462905064225197, 0.03376900777220726, -0.010961201973259449, 0.05901508778333664, -0.0010181157849729061, 0.02597314678132534, -0.03269120305776596, 0.004709900822490454, -0.04971494898200035, 0.014705135487020016, -0.05783829465508461, 0.04716746136546135, 0.007365645840764046, -0.02842850424349308, -0.028617961332201958, -0.025446878746151924, 0.05666687339544296, -0.0005087261088192463, 0.018258877098560333, -0.015736643224954605, -0.01930360682308674, -0.05062349513173103, -0.02612209878861904, -0.04369990900158882, 0.03877098485827446, -0.047675132751464844, -0.019969115033745766, -0.017398206517100334, -0.014309079386293888, 0.012351341545581818, -0.03139972314238548, -0.03110441192984581, 0.009986687451601028, 0.010030392557382584, -0.005356484092772007, 0.0014921643305569887, -0.004095111973583698, 0.018172191455960274, 0.02692941389977932, -0.005892608780413866, 0.023764366284012794, -0.035168737173080444, 0.028048314154148102, -0.008447308093309402, -0.01995547115802765, 0.013856658712029457, 0.026149600744247437, -0.023373885080218315, -0.007050440646708012, 0.010142365470528603, 0.02220313623547554, -0.02940743789076805, 0.03189998120069504, 0.023235518485307693, -0.014555135741829872, 0.0629112720489502, 0.03828873857855797, 0.024188091978430748, 0.028657304123044014, 0.0027420474216341972, 0.010320425033569336, -0.014338220469653606, 0.022702684625983238, 0.028078515082597733, 0.054338812828063965, 0.018224377185106277, 0.008518334478139877, -0.029161160811781883, 0.02917461283504963, -0.03267455846071243, 0.016266772523522377, -0.05666012689471245, 0.01926613599061966, 0.040627166628837585, -0.025926386937499046, -0.016973577439785004, 0.01905021443963051, -0.009767833165824413, -0.020017392933368683, 0.015213650651276112, -0.02006976120173931, 0.03670825436711311, -0.008188016712665558, -0.027230653911828995, -0.009929311461746693, -0.018975740298628807, 0.00824764370918274, 0.023898886516690254, 0.03881634399294853, 0.03714318573474884, 0.0015049973735585809, 0.006764435209333897, 0.038533251732587814, 0.014551335014402866, 0.008588410913944244, 0.022103074938058853, -0.04594729095697403, 0.006349697709083557, 0.03446238860487938, 0.008296284824609756, 0.02828970178961754, -0.02693919651210308, -0.0072644781321287155, -0.012627581134438515, 0.016147874295711517, -0.02193288505077362, 0.0370025634765625, -0.03357245400547981, -0.02372044138610363, 0.026677850633859634, 0.023225119337439537, 0.030391087755560875, -0.0015592119889333844, 0.009090591222047806, -0.01965860091149807, 0.06672515720129013, 0.00965743139386177, 0.007792595308274031, 0.01665988378226757, 0.01445496454834938, 0.007991435006260872, -0.054505299776792526, 0.016073554754257202]',1024, FLOAT32), COSINE) as distance
FROM VECTEST.EXPO_INFO
ORDER BY distance
FETCH FIRST 4 ROWS ONLY;
SQL実行:
%sql {sql_str}
こちらも無事DBeaver出力と同じになりました!
4. まとめ
ここでは以下のVECTORデータに関するデータ型や関数をSQLで使いました
ぜひ、みなさんのテーブルにもVECTOR型の列を追加して、ベクトル検索してみてください!
最初にも書きましたが、この記事のコードのJupyter Notebookはこちらにあります:
https://github.com/kyokonishito/qiita_db2_vector_sql
参考: