mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-10 22:02:58 +00:00
61 lines
1.7 KiB
Markdown
61 lines
1.7 KiB
Markdown
# SQL Querying
|
|
|
|
You can use DuckDB and Apache Datafusion to query your LanceDB tables using SQL.
|
|
This guide will show how to query Lance tables them using both.
|
|
|
|
We will re-use the dataset [created previously](./tables.md):
|
|
|
|
```python
|
|
import lancedb
|
|
|
|
db = lancedb.connect("data/sample-lancedb")
|
|
data = [
|
|
{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
|
|
{"vector": [5.9, 26.5], "item": "bar", "price": 20.0}
|
|
]
|
|
table = db.create_table("pd_table", data=data)
|
|
```
|
|
|
|
## Querying a LanceDB Table with DuckDb
|
|
|
|
The `to_lance` method converts the LanceDB table to a `LanceDataset`, which is accessible to DuckDB through the Arrow compatibility layer.
|
|
To query the resulting Lance dataset in DuckDB, all you need to do is reference the dataset by the same name in your SQL query.
|
|
|
|
```python
|
|
import duckdb
|
|
|
|
arrow_table = table.to_lance()
|
|
|
|
duckdb.query("SELECT * FROM arrow_table")
|
|
```
|
|
|
|
| vector | item | price |
|
|
| ----------- | ---- | ----- |
|
|
| [3.1, 4.1] | foo | 10.0 |
|
|
| [5.9, 26.5] | bar | 20.0 |
|
|
|
|
## Querying a LanceDB Table with Apache Datafusion
|
|
|
|
Have the required imports before doing any querying.
|
|
|
|
=== "Python"
|
|
|
|
```python
|
|
--8<-- "python/python/tests/docs/test_guide_tables.py:import-lancedb"
|
|
--8<-- "python/python/tests/docs/test_guide_tables.py:import-session-context"
|
|
--8<-- "python/python/tests/docs/test_guide_tables.py:import-ffi-dataset"
|
|
```
|
|
|
|
Register the table created with the Datafusion session context.
|
|
|
|
=== "Python"
|
|
|
|
```python
|
|
--8<-- "python/python/tests/docs/test_guide_tables.py:lance_sql_basic"
|
|
```
|
|
|
|
| vector | item | price |
|
|
| ----------- | ---- | ----- |
|
|
| [3.1, 4.1] | foo | 10.0 |
|
|
| [5.9, 26.5] | bar | 20.0 |
|