全部產品
Search
文件中心

Hologres:AI_EMBED

更新時間:Aug 08, 2026

對輸入的文本或圖片計算一個固定維度連續向量。

前提條件

在使用之前,請前往 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節點模型。

  • 若 content 參數值為 NULL 或者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-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 不支援,會報錯。

    • 如果圖片格式非法或損壞,模型會返回錯誤。