AI_EMBED

更新时间:
复制 MD 格式

对输入的文本或图片计算一个固定维度的连续向量。

前提条件

在使用之前,请前往 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节点模型

  • 若 content 参数值为 NULL 或者空字符串,则返回 NULL。

  • 如果 FILE 是 NULL,则返回 NULL。

支持的模型列表

文本和图片的模型可以是托管模型和 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(支持URLBase64)

MP4, MPEG, MOV, MPG, WEBM, AVI, FLV, MKV(仅支持URL)

tongyi-embedding-vision-flash

768

支持

JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI(支持URLBase64)

MP4, MPEG, MOV, MPG, WEBM, AVI, FLV, MKV(仅支持URL)

multimodal-embedding-v1

1,024

中文与英文

JPG, PNG, BMP(支持URLBase64)

一次请求中传入内容元素总数不超过 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(支持URLBase64)

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 不支持,会报错。

    • 如果图片格式非法或损坏,模型会返回错误。