Skip to content

Lance 格式 ​

LanceDB 底层那个面向多模态数据的开放格式。

Lance 格式概览 ​

Lance 是一个为多模态 AI 设计的开源列式格式,它定义了数据如何被存储、如何被组织成带版本的表。

LanceDB Embedded 与 LanceDB Enterprise 都以 Lance 作为存储基础。这个格式是一个独立的开源项目,有自己的一套规范和工具。

多模态数据 ​

一张 Lance 表可以同时存放图像、视频、音频、文本、向量与结构化元数据。比如一个视频数据集,可以把每个片段与它的字幕、标签和向量存在一起,让应用能够把这些字段放在一起检索和使用。

数据访问、版本与列更新 ​

  • 高效的数据访问。 可以按行读取单条记录用于召回和训练,也可以按列扫描用于分析。
  • 带版本的数据。 只要某个版本还在保留期内,你就能读取它,用来复现一次实验或查看之前的结果。
  • 独立的列更新。 新增向量或其他派生特征时,不需要重写已有的图像、视频或文本列。

在 Python 中打开 Lance 数据集 ​

任何 .lance 数据集目录就是一张 LanceDB 表。把它的父目录传给 lancedb.connect(),再用目录名打开这张表:

python
import lancedb

db = lancedb.connect("/data")  # pass storage_options=... for S3, GCS or Azure
tbl = db.open_table("frames")  # opens /data/frames.lance; version=N pins a version

检索、召回、数据整理、多模态 blob 访问与应用代码请用 lancedb。只有当你要构建查询引擎或连接器、直接调用格式层的 fragment API,或者用 to_pandas() 转换普通扫描的惰性列 / 遗留 blob 列时,才需要安装 pylance(import lance)(不需要 pylance 的转换方式见多模态数据与 blob)。

pylance(import lance)lancedb(import lancedb)
lance.dataset("/data/frames.lance")lancedb.connect("/data").open_table("frames")
lance.write_dataset(data, "/data/frames.lance")lancedb.connect("/data").create_table("frames", data)
lance.vector.vec_to_table(mat)db.create_table(name, pa.table({"vector": list(mat)}))
lance.blob_field("video")lancedb.blob("video")
ds.take_blobs("video", ids=row_ids)tbl.fetch_blob_files("video", row_ids)(可 seek 的句柄)或 tbl.fetch_blobs("video", row_ids)(pa.LargeBinaryArray)
ds.to_table(columns=cols, filter=expr, limit=n)tbl.search().where(expr).select(cols).limit(n).to_arrow()
ds.to_batches(batch_size=k)tbl.search().to_batches(k)
ds.take(offsets)tbl.__getitems__(offsets)(保持偏移顺序)或 tbl.take_offsets(offsets).to_arrow()(无序)
ds.versions(), ds.checkout_version(v), ds.restore()tbl.list_versions(), tbl.checkout(v), tbl.restore()
ds.optimize.compact_files(...), ds.cleanup_old_versions(...)tbl.optimize(compaction_options=..., cleanup_older_than=...)

深入了解 ​