使用 DLF 数据探查体验 Paimon Global Index

更新时间:
复制 MD 格式

本文使用 DLF 共享搜索样例数据集,通过可视化探查、以图搜图和 SQL,体验 Paimon Global Index 的结构化查询加速、图片向量检索和混合检索能力。本文还介绍如何使用业务表体验 Bitmap 和多值索引查询。

前提条件

  • 权限配置: RAM 用户具备 DLF 相关 API 和数据权限。具体操作,请参见快速配置权限。

操作入口

  • 预览数据或以图搜图时,进入表详情页。

  • 执行 SQL 示例时,进入AI 中心 > 数据探查并选择计算资源。关于数据探查的页面操作和结果集导出方法,请参见数据探查。

使用共享样例数据体验 Global Index

开始前,按照使用 DLF 共享样例数据集创建只读样例 Catalog,并在数据目录中找到该 Catalog 下的 search_samples 数据库。

了解样例表

本文主要使用以下图片样例表:

search_samples.berkeley_deepdrive_100k_images

常用字段如下。

字段

说明

image_id

图片 ID

image

JPEG 图片的 BLOB 数据,可在查询结果中预览

event_time

图片采集时间

weather

天气,例如 clear、rainy

time_of_day

时间段,例如 daytime、night

road_scene

道路场景,例如 highway、city street

detected_objects

图片中的目标类型,例如车辆、交通灯

image_embedding

768 维图片向量

样例表已为 weather 创建 B-Tree 索引,并为 image_embedding 创建 IVF-PQ 向量索引。

使用可视化探查预览数据

可视化探查适用于查看图片内容、表结构和字段分布,无需编写 SQL。

  1. 在数据目录中定位 search_samples.berkeley_deepdrive_100k_images,进入表详情页。

  2. 打开数据预览页签,选择可视化探查模式。

  3. 选择需要展示的字段,例如 image_id、image、event_time、weather、time_of_day、road_scene 和 detected_objects。

  4. 按需设置筛选条件、排序方式和返回行数,然后选择计算资源并执行查询。

结果集会直接展示 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

包含摩托车的城市道路参考图片

  1. 在数据目录中定位 search_samples.berkeley_deepdrive_100k_images,进入表详情页。

  2. 打开数据预览页签,选择以图搜图模式。

  3. 上传本文提供的参考图片。

  4. 设置返回数量 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 执行成功不代表多值索引已生效,应结合当前环境提供的执行计划、扫描指标和查询耗时判断。组合查询也不保证两个索引同时参与。