跳到内容

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 │
# └─────────────┘