Add your description here
Project description
Bear Lake
A lightweight, file-based database built on Polars and Parquet, designed for fast analytics and easy data management.
Bear Lake provides a simple API for creating partitioned tables, inserting data, and running efficient queries using Polars' lazy evaluation. All data is stored as Parquet files with automatic partitioning support.
Usage
Quick Start
import polars as pl
import bear_lake as bl
# Connect to database
db = bl.connect("my_database")
# Create a table with schema and partitioning
schema = {
"date": pl.Date,
"ticker": pl.String,
"price": pl.Float64
}
db.create(
name="stocks",
schema=schema,
partition_keys=["ticker"],
primary_keys=["date", "ticker"],
mode="error"
)
# Insert data
data = pl.DataFrame({
"date": ["2024-01-01", "2024-01-02"],
"ticker": ["AAPL", "AAPL"],
"price": [150.0, 152.5]
})
db.insert("stocks", data, mode="append")
# Query data using Polars lazy evaluation
result = db.query(
bl.table("stocks")
.filter(pl.col("ticker") == "AAPL")
.select(["date", "price"])
)
print(result)
API Reference
Database Connection
db = bl.connect(path: str) -> Database
Connect to a database at the specified path. Creates the directory if it doesn't exist.
Creating Tables
db.create(
name: str,
schema: dict[str, pl.DataType],
partition_keys: list[str],
primary_keys: list[str],
mode: str = "error"
)
Parameters:
name: Table nameschema: Dictionary mapping column names to Polars data typespartition_keys: Columns to partition data by (creates hierarchical folder structure)primary_keys: Columns that form a unique identifier (used for deduplication)mode: How to handle existing tables -"error"(default),"replace", or"skip"
Inserting Data
db.insert(name: str, data: pl.DataFrame, mode: str = "append")
Parameters:
name: Table namedata: Polars DataFrame to insertmode: How to handle existing partitions -"append"(default),"overwrite", or"error"
Querying Data
result = db.query(expression: pl.LazyFrame) -> pl.DataFrame
Execute a lazy Polars query and return results. Use bl.table(name) to get a LazyFrame for a table.
# Get a LazyFrame for querying
lazy_df = bl.table("stocks")
# Build query with Polars operations
result = db.query(
lazy_df
.filter(pl.col("date") > "2024-01-01")
.group_by("ticker")
.agg(pl.col("price").mean())
)
Deleting Data
db.delete(name: str, expression: pl.Expr)
Delete rows matching the given expression from all partitions.
# Delete all rows where ticker is AAPL
db.delete("stocks", pl.col("ticker") == "AAPL")
Dropping Tables
db.drop(name: str)
Remove a table and all its data.
Table Metadata
# List all tables
tables = db.list_tables() -> list[str]
# Get table schema
schema = db.get_schema(name: str) -> dict[str, pl.DataType]
# Get partition keys
partition_keys = db.get_partition_keys(name: str) -> list[str]
# Get primary keys
primary_keys = db.get_primary_keys(name: str) -> list[str]
Optimizing Tables
db.optimize(name: str)
Deduplicate rows based on primary keys (keeping the last occurrence) and sort data. This compacts storage and improves query performance.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bear_lake-0.1.0.tar.gz.
File metadata
- Download URL: bear_lake-0.1.0.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7743a9602586d635b3ae3a5c6619c7c2809f3d4447adb2eca7d306b1c0cfde0d
|
|
| MD5 |
3b7647f495d1c7ac0f7cd8816596500b
|
|
| BLAKE2b-256 |
34c600bdb2fd7a41a6b5e5b32a586df9602037b9f4f22ffece9fc7bff26692ae
|
File details
Details for the file bear_lake-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bear_lake-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b095c921b25b502e0500a46932bbfa07f4b3f53d12da724d07e444848ac9dda
|
|
| MD5 |
b3d8c204b91f2ec52d161552d769b9ba
|
|
| BLAKE2b-256 |
c5826597f2cc6944428b05e30b50e6166c5fbbbf25db223717cfde6f342a8b99
|