对输入的文本或图片计算一个固定维度的连续向量。
前提条件
在使用之前,请前往 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。支持模型来源为托管模型、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-v1 | 托管模型 | 1,536 | 支持 | 不支持 | 不支持 |
text-embedding-v2 | 1,536 | 支持 | 不支持 | 不支持 | |
text-embedding-v3 | 2,048 / 1,536 / 1,024(默认)/ 768 / 512 / 256 / 128 / 64 | 支持 | 不支持 | 不支持 | |
text-embedding-v4 | 1,024(默认)/ 768 / 512 / 256 / 128 / 64 | 支持 | 不支持 | 不支持 | |
tongyi-embedding-vision-plus | 1,152 | 支持中、英、日、韩等超30种主流语言 | JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI(支持URL或Base64) | MP4, MPEG, MOV, MPG, WEBM, AVI, FLV, MKV(仅支持URL) | |
tongyi-embedding-vision-flash | 768 | 支持 | JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI(支持URL或Base64) | MP4, MPEG, MOV, MPG, WEBM, AVI, FLV, MKV(仅支持URL) | |
multimodal-embedding-v1 | 1,024 | 中文与英文 | JPG, PNG, BMP(支持URL或Base64) | 一次请求中传入内容元素总数不超过 20;图片、视频各最多 1 条,文本最多 20 条,共享总条数上限。 | |
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) | |
qwen2.5-vl-embedding | 2,048 / 1,024(默认)/ 768 / 512 | 支持中、英、日、韩、法、德等11种主流语言 | — | — | |
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 不支持,会报错。
如果图片格式非法或损坏,模型会返回错误。