You need to enable JavaScript to run this app.
导航
Lance 概述
最近更新时间:2025.05.16 15:44:47首次发布时间:2025.04.22 20:05:02
我的收藏
有用
有用
无用
无用

Lance是什么

Lance是一种列式数据格式,可轻松快速地进行版本控制、查询和训练。它旨在用于图像、视频、3D 点云、音频,当然还有表格数据。它支持任何 POSIX 文件系统和云存储,如 AWS S3 和 Google Cloud Storage。

Image
Lance由三层组成,从底至上分别为:

  • 文件格式,类似于Parquet格式定位, Lance通过自研的文件存储格式,使得Lance能够有效的存储多模数据。
  • 数据湖格式,类似于Iceberg定位,通过数据湖管理的能力,提供多版本管理,快速结构变更的能力。
  • 应用层,Lance支持多种方式接入,可以使用单机的SDK操作,例如pylance,也可以通过分布式的引擎,例如spark和ray进行读写Lance数据,甚至能够通过lancedb的接口,将lance当做向量数据库使用。

Lance可以做什么

主要特点

Lance 的主要功能包括:

  • 高性能随机访问:比 Parquet 快 100 倍。
  • 向量搜索:在 1 毫秒内找到最近邻居,并将 OLAP 查询与向量搜索相结合。
  • 零拷贝、自动版本控制:自动管理数据版本,并使用内置的零拷贝逻辑减少冗余。
  • 生态系统集成: Apache-Arrow、DuckDB 以及更多正在开发中。

如何使用

这里介绍使用pylance sdk例子,详情可以参考快速入门

  • 创建一个Lance集。
import lance
import pyarrow as pa

table = pa.Table.from_pylist([{"name": "Alice", "age": 20},
                              {"name": "Bob", "age": 30}])
lance.write_dataset(table, "./alice_and_bob.lance")
  • 查询数据集。
dataset = lance.dataset("./alice_and_bob.lance")
# 查看dataset的行数
dataset.count_rows()

dataset.take([10])

# 查看dataset的schema
dataset.schema

# 查看全部的dataset内容
dataset.to_table()
 
# 根据条件扫描数据
dataset.scanner(filter="age > 25").to_table()
 
# 根据条件扫描数据,只返回name列
dataset.scanner(columns=["name"], filter="age > 25").to_table()
  • 修改数据集。
# 更新某些行
dataset.update({"name": "'Blob'"}, where="name = 'Bob'")

# 删除某些行
dataset.delete("name = 'Blob'")

# 写入新的一批数据
table = pa.Table.from_pylist([{"name": "Alice", "age": 20},
                              {"name": "Bob", "age": 30}])
lance.write_dataset(table, "./alice_and_bob.lance", mode = "append")