外观
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=...) |
深入了解
- Lance 格式规范:这个格式是怎么工作的。
- 多模态数据与 blob:声明
lancedb.blob()列并按需读取 blob。 - 表版本管理:读取与管理表的各个版本。
- 计算列:为数据添加派生特征。
- 架构:LanceDB Embedded 与 Enterprise 如何在 Lance 之上构建。