Lance表写入并预览多媒体文件
更新时间:2026-06-26
前提条件
- 已开通BOS、OOS、BLS权限。
- 已完成资源环境准备。
- CSV、PDF、图片、MP3 音频、MP4 视频需提前准备。
场景概览
本场景基于 Lance 高性能向量/结构化存储,支持将数据卷内图片、音频、视频、PDF、CSV 等多媒体二进制文件批量写入数据表,通过自定义表属性配置多媒体预览字段,在控制台直接实现文件在线查看、播放,打通多模态文件存储、结构化入库、可视化预览全流程,依托 Ray 分布式算力完成批量文件读写任务。
操作步骤
步骤一:创建Lance表,并设置需要预览的多媒体列、多媒体格式
- 登录百度胜算控制台,进入已经创建好的工作空间。在侧边导航栏选择元数据。
- 单击新建按钮,选择创建数据目录,配置数据目录名称为test。

- 选择已创建好的数据目录test,依次单击default>立即创建>创建数据表。

- 根据下图对数据表进行配置。通过 databuilder.preview.columns 表属性,指定那些BINARY类型的列需要以多媒体方式预览,并指定大致的多媒体类型:

SQL
1CREATE TABLE lance_multi_modal (
2 column1 STRING COMMENT '字符串',
3 column2 BINARY COMMENT 'csv',
4 column3 BINARY COMMENT 'pdf',
5 column4 BINARY COMMENT '图片',
6 column5 BINARY COMMENT '音频',
7 column6 BINARY COMMENT '视频'
8)
9USING LANCE
10TBLPROPERTIES (
11 'databuilder.preview.columns'='column2,csv;column3,pdf;column4,image;column5,audio;column6,video'
12);
配置说明:
databuilder.preview.columns为多媒体预览核心属性,仅 BINARY 类型字段支持配置,支持 csv/pdf/image/audio/video 五类多媒体格式。
步骤二:创建数据卷并上传多媒体文件
数据卷为平台统一多模态文件存储载体,后续 Ray 脚本将从本数据卷指定目录读取文件二进制流写入 Lance 表;需提前准备 CSV、PDF、图片、MP3 音频、MP4 视频五类测试文件并统一上传,完整验证多媒体预览能力。具体操作步骤如下所示:
- 在步骤一创建好的数据目录test,依次单击default>立即创建>创建数据卷。

-
单击右上角的上传按钮,将提前准备好的CSV、PDF、图片、MP3 音频、MP4 视频五类测试文件统一上传。

- 单文件建议控制在 10MB 以内,防止 Ray 读取二进制流超时;
- 文件格式需严格匹配 Lance 表预览配置(csv/pdf/image/audio/video),否则控制台无法正常渲染预览组件;
步骤三:读取数据卷中的多媒体文件并写入 lance 表
数据卷文件上传完成后,Ray 分布式 Notebook 读取数据卷内各类文件二进制流,组装成规范结构化数据批量写入 Lance 表,生成带完整多模态二进制字段的测试样本。具体操作步骤如下:
- 左侧导航栏选择工作台,选择已经创建好的项目或单击创建按钮新建项目文件。
- 在项目页面,单击右上角创建>Notebook。

- 在Notebook页面,修改名称为test_lance_preview,连接Ray计算实例,运行如下代码读取 volume 中的多媒体文件并写入 lance 表:

Python
1import ray
2import lance
3import lance_namespace as ln
4import pyarrow as pa
5import uuid
6from databuilder.fs.vfs import VolumeFileSystem
7from databuilder.catalog.client.config import CatalogClientConfig
8
9@ray.remote
10def write_lance_multi_modal():
11
12 fs = VolumeFileSystem(CatalogClientConfig())
13
14 # --- 定义 Schema ---
15 schema = pa.schema([
16 ("column1", pa.string()),
17 ("column2", pa.binary()),
18 ("column3", pa.binary()),
19 ("column4", pa.binary()),
20 ("column5", pa.binary()),
21 ("column6", pa.binary()),
22 ])
23
24 # --- 准备数据,读取各文件内容为字节流 ---
25 csv_data = fs.open("/Volumes/zhengyafei/default/test/test.csv", "rb").read()
26 pdf_data = fs.open("/Volumes/zhengyafei/default/test/test.pdf", "rb").read()
27 img_data = fs.open("/Volumes/zhengyafei/default/test/test.jpg", "rb").read()
28 audio_data = fs.open("/Volumes/zhengyafei/default/test/test.mp3", "rb").read()
29 video_data = fs.open("/Volumes/zhengyafei/default/test/test.mp4", "rb").read()
30
31 rows = []
32 for _ in range(10):
33 rows.append({
34 "column1": str(uuid.uuid4()), # 随机字符串
35 "column2": csv_data,
36 "column3": pdf_data,
37 "column4": img_data,
38 "column5": audio_data,
39 "column6": video_data
40 })
41
42 # 将数据列表转换为 PyArrow Table
43 table = pa.Table.from_pylist(rows, schema=schema)
44
45 namespace = ln.connect("rest", properties={})
46 # --- 写入 lance 表 ---
47 lance.write_dataset(
48 table,
49 namespace=namespace,
50 table_id=["zhengyafei", "lance", "lance_multi_modal"],
51 mode="overwrite" # 或者 "append"
52 )
53
54 return "csv_data:\n" + csv_data.decode("utf-8")
55
56print(ray.get(write_lance_multi_modal.remote()))
步骤四:预览 lance 表中的多媒体数据
- 运行完成后,左侧导航栏单击元数据,选中步骤一创建的lance表。
- 单击lance表的数据预览页签即可预览多媒体数据:

- 单击具体单元格可预览详情,如下播放视频内容:

评价此篇文章
