對輸入的文本或圖片計算一個固定維度連續向量。
前提條件
在使用之前,請前往 Hologres 控制台部署相關模型,詳情請參見託管模型。
文法
對輸入的文本或圖片計算一個固定維度連續向量。
-- 計算文本向量
SELECT ai_embed([model], content);
-- 計算圖片向量(通過 FILE 對象)
SELECT ai_embed([model], file);
-- 計算圖片向量(通過 BYTEA/BLOB 位元據)
SELECT ai_embed(model_name TEXT, binary BYTEA, file_format TEXT);
參數說明
|
參數 |
類型 |
是否必填 |
版本要求 |
說明 |
|
model |
TEXT |
可選 |
Hologres V3.2 及以上版本 |
部署的 embedding 模型名。 |
|
content |
TEXT |
文本 embedding 必填 |
Hologres V3.2 及以上版本 |
輸入的文本,需要是字元類型(char/varchar/text)。如果 content 是 null 或者Null 字元串,則返回 null。支援模型來源為託管模型、AI 節點內建模型,參考託管模型。 |
|
file |
FILE |
圖片 embedding 必填 |
Hologres V4.0 及以上版本 |
FILE 類型,一般是輸入 image 的 FILE 對象。如果 file 是 null,則返回 null。支援模型來源為託管模型,參考託管模型列表。 |
|
binary_data |
BYTEA |
圖片 embedding 必填 |
Hologres V4.2 及以上版本 |
圖片的位元據,支援 Holo 內部表的 BYTEA 類型或 Paimon 外表的 BLOB 類型。模型來源為託管模型。 |
|
file_format |
TEXT |
圖片 embedding 必填 |
Hologres V4.2 及以上版本 |
圖片格式,輸入 binary_data 類型時必須指定,當前支援 'jpg'、'png'、'webp'、'gif'、'bmp'、'heic' 等格式。 |
傳回值
支援的模型列表
文本和圖片的模型可以是託管模型和 AI 節點內建模型,BYTEA 類型只能來源於託管模型。當模型為託管模型時,相關的格式如下,更多使用限制見託管模型。
-
下表中模型名使用連字號格式(如
qwen3-vl-embedding)。在 SQL 中調用時,需將連字號替換為底線(如qwen3_vl_embedding)。 -
視頻類模型不支援非北京/新加坡 region。AI節點模型需 Hologres V3.2 及以上版本(CLIP 系列及 Qwen3-Embedding 系列需 V3.2+)。
|
模型 |
模型來源 |
維度 |
文本 |
圖片 |
視頻 |
|
text-embedding-v4 |
託管模型 |
1,024(預設)/ 768 / 512 / 256 / 128 / 64 |
支援 |
不支援 |
不支援 |
|
qwen3-vl-embedding |
2,560(預設)/ 2,048 / 1,536 / 1,024 / 768 / 512 / 256 |
支援中、英、日、韓、法、德等33種主流語言 |
JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI(支援URL或Base64) |
MP4, AVI, MOV(僅支援URL) |
|
|
iic/nlp_gte_sentence-embedding_chinese-base |
AI節點模型 |
768 |
支援 |
不支援 |
不支援 |
|
iic/nlp_gte_sentence-embedding_chinese-large |
1,024 |
支援 |
不支援 |
不支援 |
|
|
iic/nlp_gte_sentence-embedding_chinese-small |
512 |
支援 |
不支援 |
不支援 |
|
|
Qwen/Qwen3-Embedding-0.6B |
— |
支援 |
不支援 |
不支援 |
|
|
Qwen/Qwen3-Embedding-4B |
— |
支援 |
不支援 |
不支援 |
|
|
Qwen/Qwen3-Embedding-8B |
— |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-base-en-v1.5 |
768 |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-base-zh-v1.5 |
768 |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-large-en-v1.5 |
1,024 |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-large-zh-v1.5 |
1,024 |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-small-en-v1.5 |
384 |
支援 |
不支援 |
不支援 |
|
|
BAAI/bge-small-zh-v1.5 |
512 |
支援 |
不支援 |
不支援 |
|
|
clip-ViT-B-16 |
512 |
支援 |
支援 |
不支援 |
|
|
clip-ViT-B-32-multilingual-v1 |
512 |
支援 |
支援 |
不支援 |
|
|
clip-ViT-B-32 |
512 |
支援 |
支援 |
不支援 |
|
|
clip-ViT-L-14 |
768 |
支援 |
支援 |
不支援 |
使用樣本
文本 Embedding
以下樣本省略了模型名參數。省略模型名時,需先執行 set_ai_function_info 設定預設模型,否則會報錯。也可以直接在函數中指定模型名,例如 ai_embed('text_embedding_v4', 'your text')。
-- 文本 embedding
SELECT ai_embed('Hologres是阿里巴巴自主研發的一站式即時數倉引擎,支援海量資料即時寫入、即時更新、即時加工、即時分析.');
-- 結果(1024維向量樣本)
{-0.020090256,-0.009496426,-0.01584659,0.014317295,...}
圖片 Embedding(FILE 對象方式)
Hologres V4.0 及以上版本支援此功能。
-- 圖片 embedding,通過 OSS 上的 FILE 對象
SELECT ai_embed('qwen3_vl_embedding', to_file('oss://****', 'oss-cn-hangzhou-internal.aliyuncs.com', 'acs:ram::****'));
-- 結果(2560維向量)
{-0.000733634,-0.00160808,0.0354091,...}
圖片 Embedding(BYTEA 二進位方式)
Hologres V4.2 及以上版本支援此功能。
方式一:直接傳入位元據
-- 將圖片轉為 BYTEA 後 embedding(支援 webp、jpg、png 等多種格式)
SELECT ai_embed('qwen3_vl_embedding',
decode('/9j/4AAQSkZJRgABAQEAYABgAAD...', 'base64'),
'jpg');
方式二:從 Holo 內部表讀取 BYTEA 資料
-- 建立圖片儲存表
CREATE TABLE image_table (
image_name TEXT,
image_bin BYTEA
);
-- 插入圖片資料
INSERT INTO image_table VALUES
('concert.webp', decode('...webp_binary...', 'base64')),
('cat.png', decode('...png_binary...', 'base64'));
-- 使用 ai_embed 產生向量
SELECT image_name,
ai_embed('qwen3_vl_embedding', image_bin,
CASE
WHEN image_name LIKE '%.webp' THEN 'webp'
WHEN image_name LIKE '%.png' THEN 'png'
WHEN image_name LIKE '%.jpg' THEN 'jpg'
END) as embedding
FROM image_table;
方式三:從 Paimon 外部表格讀取 BLOB 資料(Hologres V4.2 及以上版本)
-- Paimon 外部表格(含 BLOB 列)
CREATE EXTERNAL TABLE paimon_db.image_blob_table (
id INT,
image_name TEXT,
picture BYTEA -- Paimon BLOB 映射為 BYTEA
)
WITH (...);
-- 使用 ai_embed 直接對 Paimon BLOB 資料產生向量
SELECT id, image_name,
ai_embed('qwen3_vl_embedding', picture, 'jpg') as embedding
FROM paimon_db.image_blob_table;
典型業務情境使用樣本
情境一:Holo 內部表圖片向量檢索
本情境中部署 qwen3-vl-embedding 模型,並且使用向量檢索實現圖片的 embed 和圖片相似檢索、文本檢索圖片的全流程。
Hologres V4.2 及以上版本支援此功能。
步驟1:準備資料
-- 0. 建立源圖片表(儲存原始圖片位元據)
CREATE TABLE source_image_table (
image_id SERIAL PRIMARY KEY,
image_name TEXT,
image_bin BYTEA,
image_format TEXT
);
-- 插入圖片資料(樣本:從本地檔案讀取並插入)
INSERT INTO source_image_table (image_name, image_bin, image_format) VALUES
('concert.webp', decode('UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASo...', 'base64'), 'webp'),
('cat.png', decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==', 'base64'), 'png'),
('dog.jpg', decode('/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODAp', 'base64'), 'jpg');
-- 1. 建立帶向量索引的目標表
CREATE TABLE image_search_table (
image_id SERIAL PRIMARY KEY,
image_name TEXT,
image_bin BYTEA,
image_format TEXT,
embedding float4[] CHECK (array_ndims(embedding) = 1 AND array_length(embedding, 1) = 2560)
) WITH (
vectors = '{ "embedding": { "algorithm": "HGraph", "distance_method": "Euclidean", "builder_params": { "base_quantization_type": "sq8_uniform", "max_degree": 64, "ef_construction": 400 } } }'
);
-- 2. 從源表插入圖片並產生向量
INSERT INTO image_search_table (image_name, image_bin, image_format, embedding)
SELECT image_name, image_bin, image_format,
ai_embed('qwen3_vl_embedding', image_bin, image_format)
FROM source_image_table;
步驟2:圖片相似檢索
-- 3. 圖圖相似性檢索(近似檢索)
SELECT a.image_name as query_image,
b.image_name as result_image,
approx_euclidean_distance(a.embedding, b.embedding) as distance
FROM image_search_table a,
image_search_table b
WHERE a.image_id = 1
ORDER BY distance ASC;
-- 返回結果樣本
-- query_image | result_image | distance
-- --------------+--------------+----------
-- concert.webp | concert.webp | 0
-- concert.webp | cat.png | 15.23457
-- concert.webp | dog.jpg | 18.45679
步驟3:文本搜圖
-- 4. 文本搜圖片(多模態檢索)
SELECT image_id, image_name,
approx_euclidean_distance(
embedding,
ai_embed('qwen3_vl_embedding', '演唱會照片')
) as text_img_distance
FROM image_search_table
ORDER BY text_img_distance ASC;
-- 返回結果樣本
-- image_id | image_name | text_img_distance
-- ----------+--------------+-------------------
-- 1 | concert.webp | 8.123456
-- 3 | dog.jpg | 22.345678
-- 2 | cat.png | 25.678901
情境二:Paimon 外表圖片向量離線構建
本情境樣本讀取 Paimon 的 Blob 類型,實現對 Paimon Blob 類型的 embedding 和檢索全流程,助力非結構化資料的加速查詢。
Hologres V4.2 及以上版本支援此功能。
Paimon 中的 Blob 類型可以通過 Flink 或者 Spark 寫入,這裡不再介紹。
步驟1:準備資料
-- 0. 建立 External Database 串連 Paimon 資料來源
CREATE EXTERNAL DATABASE paimon_blob_bj
WITH (
catalog_type 'paimon'
metastore_type 'dlf-rest'
dlf_catalog 'paimon_bj'
dlf_access_id 'xxxx'
dlf_access_key '***'
);
-- 建立 external schema
CREATE EXTERNAL SCHEMA paimon_blob_bj.test_paimon_db;
-- 1. 建立 Paimon 外部表格(含 BLOB 列)
CREATE EXTERNAL TABLE paimon_blob_bj.test_paimon_db.image_table (
id INT,
image_name TEXT,
picture BYTEA -- Paimon BLOB 映射為 BYTEA
)
WITH (
"table_format" = 'paimon',
"file_format" = 'orc',
"bucket" = '1',
"bucket-key" = 'id'
);
-- 2. 建立 Hologres 目標向量表(帶向量索引)
CREATE TABLE public.image_vector_table (
id SERIAL PRIMARY KEY,
image_name TEXT,
picture BYTEA,
image_format TEXT,
embedding float4[] CHECK (array_ndims(embedding) = 1 AND array_length(embedding, 1) = 2560)
) WITH (
vectors = '{
"embedding": {
"algorithm": "HGraph",
"distance_method": "Euclidean",
"builder_params": {
"base_quantization_type": "sq8_uniform",
"max_degree": 64,
"ef_construction": 400
}
}
}'
);
步驟2:將 Paimon 外表資料寫入 Holo 向量表(可選)
這一步是可選操作,可以根據業務需求,將 Paimon 資料匯入 Holo 中加速查詢,也可以直接查詢 Paimon 表。
-- 3. 從 Paimon 外表讀取 BLOB,產生向量並寫入
INSERT INTO image_vector_table (id,image_name, picture,image_format, embedding)
SELECT
id,
image_name,
picture,
'jpg',
ai_embed('qwen3_vl_embedding', picture, 'jpg')
FROM paimon_blob_bj.test_paimon_db.image_table;
步驟3:圖片相似檢索
SELECT
a.id as query_id,
a.image_name as query_image,
b.id as result_id,
b.image_name as result_image,
approx_euclidean_distance(a.embedding, b.embedding) as distance
FROM image_vector_table a,
image_vector_table b
WHERE a.id = 1
ORDER BY distance ASC
LIMIT 5;
-- 返回結果樣本
-- query_id | query_image | result_id | result_image | distance
-- ----------+--------------+-----------+--------------+----------
-- 1 | concert.webp | 1 | concert.webp | 0
-- 1 | concert.webp | 3 | dog.jpg | 15.23457
-- 1 | concert.webp | 2 | cat.png | 18.45679
步驟4:文本檢索圖片
SELECT
id,
image_name,
approx_euclidean_distance(
embedding,
ai_embed('qwen3_vl_embedding', '演唱會現場照片')
) as text_img_distance
FROM image_vector_table
ORDER BY text_img_distance ASC
LIMIT 5;
-- 返回結果樣本
-- id | image_name | text_img_distance
-- ----+--------------+-------------------
-- 1 | concert.webp | 8.123456
-- 3 | dog.jpg | 22.345678
-- 2 | cat.png | 25.678901
注意事項
-
模型選擇
-
圖片 embedding 需要使用多模態模型,如
qwen3_vl_embedding(2560 維)或tongyi_embedding_vision_plus(1152 維)。 -
文本 embedding 使用文本模型,如
text_embedding_v4(1024 維)。
-
-
向量維度
-
不同模型返回的向量維度不同,建表時 CHECK 條件約束需要與模型維度匹配。
-
qwen3_vl_embedding:2560 維。
-
tongyi_embedding_vision_plus:1152 維。
-
text_embedding_v4:1024 維。
-
-
效能最佳化
-
建議為向量列建立 HGraph 向量索引,支援近似檢索。
-
大批量資料建議使用 INSERT...SELECT 離線構建向量。
-
-
錯誤處理
-
如果 binary_data 為 null,返回 null。
-
如果 file_format 不支援,會報錯。
-
如果圖片格式非法或損壞,模型會返回錯誤。
-