DuckDB¶
在 Python 中,Lance 数据集也可以通过 DuckDB(一个进程内 SQL OLAP 数据库)进行查询。这意味着您可以编写复杂的 SQL 查询来分析 Lance 中的数据。
此集成是通过 DuckDB SQL on Apache Arrow 完成的,它提供了 LanceDB 和 DuckDB 之间的零拷贝数据共享。DuckDB 能够将列选择和基本过滤器传递给 Lance,从而减少执行查询所需扫描的数据量。最后,该集成允许从 Lance 表流式传输数据,使您能够聚合不适合内存的表。所有这些都使用了 DuckDB 博客文章DuckDB quacks Arrow中描述的相同机制。
LanceDataset
可以通过 Arrow 兼容层直接访问 DuckDB。要在 DuckDB 中查询生成的 Lance 数据集,您只需在 SQL 查询中引用该数据集的名称即可。
例如,如果您有一个变量名为 my_lance_dataset
的 Lance 数据集
import duckdb # pip install duckdb
duckdb.query("SELECT * FROM my_lance_dataset")
# ┌─────────────┬─────────┬────────┐
# │ vector │ item │ price │
# │ float[] │ varchar │ double │
# ├─────────────┼─────────┼────────┤
# │ [3.1, 4.1] │ foo │ 10.0 │
# │ [5.9, 26.5] │ bar │ 20.0 │
# └─────────────┴─────────┴────────┘
duckdb.query("SELECT mean(price) FROM my_lance_dataset")
# ┌─────────────┐
# │ mean(price) │
# │ double │
# ├─────────────┤
# │ 15.0 │
# └─────────────┘