本文使用 DLF 共享搜索样例数据集,通过可视化探查、以图搜图和 SQL,体验 Paimon Global Index 的结构化查询加速、图片向量检索和混合检索能力。本文还介绍如何使用业务表体验 Bitmap 和多值索引查询。
前提条件
-
权限配置: RAM 用户具备 DLF 相关 API 和数据权限。具体操作,请参见快速配置权限。
操作入口
-
预览数据或以图搜图时,进入表详情页。
-
执行 SQL 示例时,进入AI 中心 > 数据探查并选择计算资源。关于数据探查的页面操作和结果集导出方法,请参见数据探查。
使用共享样例数据体验 Global Index
开始前,按照使用 DLF 共享样例数据集创建只读样例 Catalog,并在数据目录中找到该 Catalog 下的 search_samples 数据库。
了解样例表
本文主要使用以下图片样例表:
search_samples.berkeley_deepdrive_100k_images
常用字段如下。
|
字段 |
说明 |
|
|
图片 ID |
|
|
JPEG 图片的 BLOB 数据,可在查询结果中预览 |
|
|
图片采集时间 |
|
|
天气,例如 |
|
|
时间段,例如 |
|
|
道路场景,例如 |
|
|
图片中的目标类型,例如车辆、交通灯 |
|
|
768 维图片向量 |
样例表已为 weather 创建 B-Tree 索引,并为 image_embedding 创建 IVF-PQ 向量索引。
使用可视化探查预览数据
可视化探查适用于查看图片内容、表结构和字段分布,无需编写 SQL。
-
在数据目录中定位
search_samples.berkeley_deepdrive_100k_images,进入表详情页。 -
打开数据预览页签,选择可视化探查模式。
-
选择需要展示的字段,例如
image_id、image、event_time、weather、time_of_day、road_scene和detected_objects。 -
按需设置筛选条件、排序方式和返回行数,然后选择计算资源并执行查询。
结果集会直接展示 JPEG 图片、采集时间、天气、道路场景和目标类型等信息。
查看 B-Tree 和 IVF-PQ 索引
执行以下 SQL,查看样例表已经生成的 Global Index:
SELECT
index_type,
index_field_name,
row_count
FROM `search_samples`.`berkeley_deepdrive_100k_images$table_indexes`
WHERE index_type IN ('btree', 'ivf-pq')
ORDER BY index_type, index_field_name;
查询结果中应包含以下记录:
-
weather对应btree。 -
image_embedding对应ivf-pq。 -
row_count大于 0,表示索引中已经包含可查询的数据。
查询 table_indexes 系统表可以确认已提交的索引文件,但不能单独证明查询命中了索引。
使用 B-Tree 按天气查询
以下 SQL 查询 rainy 天气的驾驶场景。weather 上的 B-Tree 索引可减少不必要的数据扫描。
SELECT
image_id,
image,
event_time,
weather,
time_of_day,
road_scene,
detected_objects
FROM search_samples.berkeley_deepdrive_100k_images
WHERE weather = 'rainy'
LIMIT 20;
您可以修改天气条件,查看不同天气下的驾驶场景。
使用以图搜图查找相似驾驶场景
以图搜图适用于快速验证图片检索效果,无需准备查询向量或搭建向量检索服务。本文提供一张包含摩托车的城市道路图片作为参考图片。
参考图片:motorcycle__000f8d37-d4c09a0f.jpg

-
在数据目录中定位
search_samples.berkeley_deepdrive_100k_images,进入表详情页。 -
打开数据预览页签,选择以图搜图模式。
-
上传本文提供的参考图片。
-
设置返回数量 Top N 和计算资源,然后执行查询。
系统会计算本次查询所需的图片向量,并通过 image_embedding 上的 IVF-PQ 索引返回相似驾驶场景。结果按照相似度从高到低展示,可直接查看图片及其采集时间、天气和道路场景等信息。
使用 SQL 查询相似图片
以下 SQL 先按图片 ID 从样例表读取现有图片的 image_embedding,再通过 CROSS JOIN LATERAL 将该向量直接传给 vector_search,无需填写或复制 768 维向量。
本节及下文混合检索示例以 Catalog 名称 dlf_samples 为例。执行 SQL 前,在 DLF 数据探查页面选择实际 Catalog,并将 vector_search 表名中的 dlf_samples 替换为实际 Catalog 名称。
WITH query_image AS (
SELECT image_id, image_embedding
FROM search_samples.berkeley_deepdrive_100k_images
WHERE image_id = 'c6459d6c-2a477f42'
)
SELECT
q.image_id AS query_image_id,
r.image_id,
r.image,
r.event_time,
r.weather,
r.time_of_day,
r.road_scene,
r.detected_objects
FROM query_image q
CROSS JOIN LATERAL vector_search(
'dlf_samples.search_samples.berkeley_deepdrive_100k_images',
'image_embedding',
q.image_embedding,
10
) AS r;
使用 B-Tree 和 IVF-PQ 进行混合检索
混合检索同样直接使用样例表中现有图片的 image_embedding,并通过 r.weather = 'rainy' 将 B-Tree 条件下推到向量 Top-K 之前,在雨天驾驶场景中返回相似图片 Top 10。
WITH query_image AS (
SELECT image_id, image_embedding
FROM search_samples.berkeley_deepdrive_100k_images
WHERE image_id = 'c6459d6c-2a477f42'
)
SELECT
q.image_id AS query_image_id,
r.image_id,
r.image,
r.event_time,
r.weather,
r.time_of_day,
r.road_scene,
r.detected_objects
FROM query_image q
CROSS JOIN LATERAL vector_search(
'dlf_samples.search_samples.berkeley_deepdrive_100k_images',
'image_embedding',
q.image_embedding,
10
) AS r
WHERE r.weather = 'rainy';
该查询同时使用:
-
weather上的 B-Tree 索引,筛选rainy天气。 -
image_embedding上的 IVF-PQ 索引,检索相似图片。
该查询将 weather 条件应用于向量 Top-K 之前,在 rainy 天气的数据中返回相似图片。
使用业务表体验 Bitmap 和多值索引查询
本节以业务表 my_db.my_table 为例,演示 Bitmap 和多值索引查询。
数据探查默认禁止数据写入。准备数据和构建索引需在支持写入的计算环境中完成;完成后,再使用数据探查执行本节查询。
准备数据
参考PyPaimon访问DLF中的建表和数据写入语句准备 Paimon 表。
示例表需至少包含 time_of_day 字段和 detected_objects ARRAY<STRING> 字段。
构建索引
按照构建 Paimon Global Index为 time_of_day 创建 Bitmap 索引、为 detected_objects(ARRAY<STRING>)创建多值索引,并等待索引生成和提交。
完成后,在数据探查页面选择业务表所在的实际 Catalog 和计算资源,将下文 SQL 中的 my_db.my_table 替换为实际表名。多值筛选使用 SQL 模式执行。
检查索引
SELECT index_type, index_field_name, SUM(row_count) AS indexed_rows
FROM `my_db`.`my_table$table_indexes`
WHERE index_type IN ('bitmap', 'multivalue')
GROUP BY index_type, index_field_name;
结果应包含 time_of_day 对应的 bitmap 和 detected_objects 对应的 multivalue。该结果用于确认已提交的索引文件,不能单独证明查询命中了索引。
查询示例
按低基数字段筛选夜间图片:
SELECT image_id, event_time, time_of_day, detected_objects
FROM my_db.my_table
WHERE time_of_day = 'night'
LIMIT 20;
筛选 detected_objects 数组中包含完整元素 car 的图片:
SELECT image_id, event_time, time_of_day, detected_objects
FROM my_db.my_table
WHERE ARRAY_CONTAINS(detected_objects, 'car')
LIMIT 20;
组合标量条件与数组元素条件:
SELECT image_id, event_time, time_of_day, detected_objects
FROM my_db.my_table
WHERE time_of_day = 'night'
AND ARRAY_CONTAINS(detected_objects, 'car')
LIMIT 20;
验证查询结果
分别检查结果中的 time_of_day 是否为 night、detected_objects 是否包含元素 car。组合查询应同时满足两个条件。ARRAY_CONTAINS 是数组元素匹配,不是字符串子串匹配。
执行前需确认所选计算资源支持 ARRAY_CONTAINS 及对应的 Paimon 谓词下推。SQL 执行成功不代表多值索引已生效,应结合当前环境提供的执行计划、扫描指标和查询耗时判断。组合查询也不保证两个索引同时参与。