EMR Serverless StarRocks 支持存储、索引和检索高维向量数据。您可以使用标准 SQL 在一套系统中完成向量近邻检索、结构化数据过滤和 OLAP 分析,无需将数据复制到独立的向量数据库。同时支持内表向量索引和 DLF Paimon 湖表向量检索,适用于语义搜索、推荐、RAG、多媒体相似度检索等场景。
背景信息
文本、图片、音频和视频等非结构化数据不能直接通过传统等值、范围条件表达语义相似性。通常需要先使用 Embedding 模型将对象编码为固定长度的特征向量,再根据向量间的距离或相似度查找语义相近的对象。
EMR Serverless StarRocks 在实时分析能力基础上扩展了两条向量检索路径:
内表向量检索:在 StarRocks 内表的
ARRAY<FLOAT>列上创建 HNSW 或 IVFPQ 索引。向量索引扩展到存算分离架构,索引文件与 Segment 一一对应并独立存储在共享存储中,由计算节点按需加载和缓存。DLF 湖表向量检索:在 DLF 中创建 Paimon 表并为向量列创建向量索引,然后在 StarRocks 中通过 DLF Catalog 查询该表完成向量检索。查询时优化器将 TopK 和可下推的结构化过滤条件发送到 Paimon 向量 Global Index,在数据湖侧完成候选召回后再读取命中的数据。DLF 索引创建方式请参见构建 Paimon Global Index。
产品优势
检索与分析一体化:向量、业务属性和事实指标可以在同一条 SQL 中参与过滤、关联、聚合和排序,减少多系统间的数据复制与结果拼接。
湖仓原生检索:支持直接查询 DLF Paimon 湖表上的 Global Index,向量数据无需先导入内表,降低数据冗余和链路维护成本。
精度与成本可调:存算分离内表提供 HNSW 和 IVFPQ 两种索引,DLF Paimon 湖表使用 DiskANN 索引。查询时可通过 ann_params 调整召回率、延迟和资源开销。
可用性保障:当内表 Segment 数据量低于建索引阈值、索引文件缺失或不可用时,查询回退为向量距离逐行计算。DLF Paimon 湖表在向量索引不可用时同样回退为逐行距离计算,优先保证结果可返回。
可观测、可验证:可以通过
EXPLAIN检查向量索引是否命中,并通过 Query Profile 查看索引加载、缓存命中、检索耗时、候选行数和过滤行数等指标。
向量检索简介
名词解释
特征向量(Embedding):向量是一种将实体和应用代数化的一种表示,其将实体间的关系抽象成向量空间中的距离,而距离的远近代表着形似程度。例如:身高、年龄、性别、地域。
向量索引:用于缩小候选范围、避免对全部向量逐行计算距离的索引结构。
向量检索:在特征向量数据集合中进行快速搜索和匹配的方法,常涉及到的问题有KNN和RNN。
KNN(K-Nearest Neighbor):返回与查询向量最相近的 K 条记录,在 SQL 中通常表示为按向量距离或相似度排序并指定
LIMIT K。RNN(Radius Nearest Neighbor):返回距离小于阈值或相似度大于阈值的记录。
精确检索:扫描候选数据并逐行计算距离,结果精确,但数据量较大时计算成本较高。
近似检索(ANN/ANNS):利用向量索引快速返回高召回率的近似结果,在性能、召回率和资源开销之间进行平衡。
预过滤(Prefilter):先使用结构化索引筛选候选行,再进行向量召回。DLF Paimon 湖表可将匹配的 Bitmap/BTree Global Index 条件作为向量检索预过滤条件。
后过滤(Postfilter):先进行向量召回,再对召回结果应用结构化过滤条件。不满足索引下推条件的谓词会作为后过滤执行,可能导致最终返回行数少于 LIMIT,或增加扫描开销。
向量概念与实现映射
向量概念 | StarRocks 中的实现 | 说明 |
特征向量 | 内表 | 查询向量必须与索引维度一致。 |
内表向量索引 |
| 每张表最多创建一个向量索引。 |
湖表向量索引 | Paimon Global Index,当前支持DiskANN | 索引在湖表侧构建,StarRocks 负责识别和查询下推。 |
精确距离函数 |
| 不依赖向量索引。 |
近似距离函数 |
| 满足查询形态和索引条件时使用向量索引。 |
KNN 查询 |
| L2 使用升序,余弦相似度和内积使用降序。 |
支持的数据源与索引
数据源 | 索引类型 | 距离度量 | 典型特点 |
StarRocks 内表 | HNSW | L2、余弦相似度 | 低延迟、高召回;索引体积和内存占用相对较高。 |
StarRocks 内表 | IVFPQ | L2、余弦相似度 | 通过聚类和乘积量化降低索引体积;通常需要精排以提高最终精度。 |
DLF Paimon 湖表 | Lumina(底层基于 DiskANN) | L2、余弦相似度、内积 | 数据保留在湖表;支持分片并行召回及结构化 Global Index 预过滤。 |
查询示例
内表 TopK 向量检索
以下示例按 L2 距离从小到大返回最相近的 10 条记录:
SELECT
id,
approx_l2_distance(
embedding,
CAST('[0.12, 0.34, 0.56, 0.78]' AS ARRAY<FLOAT>)
) AS distance
FROM item_embeddings
ORDER BY distance ASC
LIMIT 10;使用余弦相似度时,值越大表示越相似,因此需要降序排序:
SELECT
id,
approx_cosine_similarity(
embedding,
CAST('[0.12, 0.34, 0.56, 0.78]' AS ARRAY<FLOAT>)
) AS score
FROM item_embeddings
ORDER BY score DESC
LIMIT 10;DLF Paimon 湖表标量与向量联合检索
以下示例对满足业务条件的数据使用内积进行 TopK 检索。只有过滤列上存在兼容的 Global Index 时,过滤条件才会作为 Prefilter 下推;其他条件仍会在召回后执行 Postfilter。
SELECT
item_id,
approx_inner_product(
embedding,
[0.12, 0.34, 0.56, 0.78]
) AS score
FROM dlf_catalog.multimodal.item_embeddings
WHERE category = 'document'
ORDER BY score DESC
LIMIT 10;检查索引是否生效
对查询执行 EXPLAIN。内表查询计划中出现 VECTORINDEX: ON 表示命中向量索引;DLF Paimon 湖表需要确认查询计划包含 Global Index 扫描阶段。若未命中,请优先检查距离函数、排序方向、常量查询向量、维度、LIMIT、索引可用状态和过滤条件形态。
使用限制
内表
每张表最多创建一个向量索引。
向量索引列必须为非空
ARRAY<FLOAT>,且表模型必须为 Duplicate Key 或 Primary Key。索引支持 HNSW、IVFPQ,索引度量支持
l2_distance和cosine_similarity。查询向量必须是可在优化阶段确定的常量浮点数组,维度需要与索引的
dim一致。要命中 TopK 向量索引,
ORDER BY仅能包含一个匹配的近似距离表达式,且必须指定LIMIT。L2 使用升序,余弦相似度使用降序。向量索引能力受 FE 配置项
enable_experimental_vector控制。实例如未默认开启,需要由管理员启用。BE 默认在单个 Segment 达到 10000 行后构建向量索引。可以在索引属性中使用
index_build_threshold调整阈值;低于阈值的 Segment 查询时回退为逐行计算。IVFPQ 的阈值建议不低于nlist所需的训练样本数。
DLF Paimon 湖表
湖表需要预先构建向量索引,索引构建方式请参见构建 Paimon Global Index。
TopK 索引优化当前仅支持一个排序评分表达式,评分函数必须为
approx_l2_distance、approx_cosine_similarity或approx_inner_product,查询向量必须为常量浮点数组。使用 CAST(string AS ARRAY<FLOAT>) 等表达式可能导致表达式序列化不兼容、维度校验失败或索引未生效。
只有具备兼容 Bitmap/BTree Global Index 的结构化条件才能进入 Prefilter;不满足下推条件的谓词作为 Postfilter 执行,可能影响召回效果或增加扫描开销。
查询参数可通过会话变量
ann_params覆盖 Lumina 搜索选项,可配置参数请参见 Apache Paimon Vector Index。参数值会影响召回率、延迟和资源使用,建议基于代表性数据集进行评测后再用于生产。