Labsco
clickhouse logo

chdb-datastore

✓ Official482

by clickhouse · part of clickhouse/agent-skills

DataStore is a lazy, ClickHouse-backed pandas replacement . Your existing pandas code works unchanged — but operations compile to optimized SQL and execute only when results are needed (e.g., print() , len() , iteration).

🔥🔥🔥🔥✓ VerifiedFreeAdvanced setup
🧩 One of 7 skills in the clickhouse/agent-skills package — works on its own, and pairs well with its siblings.

DataStore is a lazy, ClickHouse-backed pandas replacement . Your existing pandas code works unchanged — but operations compile to optimized SQL and execute only when results are needed (e.g., print() , len() , iteration).

Inspect the full instructions your agent will receiveExpand

This is the exact playbook injected into your agent when the skill activates — shown here so you can audit it before installing. You don't need to read it to use the skill.

by clickhouse

DataStore is a lazy, ClickHouse-backed pandas replacement . Your existing pandas code works unchanged — but operations compile to optimized SQL and execute only when results are needed (e.g., print() , len() , iteration). npx skills add https://github.com/clickhouse/agent-skills --skill chdb-datastore Download ZIPGitHub482

chdb DataStore — It's Just Faster Pandas

The Key Insight

Copy & paste — that's it
# Change this:
import pandas as pd
# To this:
import chdb.datastore as pd
# Everything else stays the same.

DataStore is a lazy, ClickHouse-backed pandas replacement. Your existing pandas code works unchanged — but operations compile to optimized SQL and execute only when results are needed (e.g., print(), len(), iteration).

Copy & paste — that's it
pip install chdb

Decision Tree: Pick the Right Approach

Copy & paste — that's it
1. "I have a file/database and want to analyze it with pandas"
 → DataStore.from_file() / from_mysql() / from_s3() etc.
 → See references/connectors.md

2. "I need to join data from different sources"
 → Create DataStores from each source, use .join()
 → See examples/examples.md #3-5

3. "My pandas code is too slow"
 → import chdb.datastore as pd — change one line, keep the rest

4. "I need raw SQL queries"
 → Use the chdb-sql skill instead

Connect to Any Data Source — One Pattern

Copy & paste — that's it
from datastore import DataStore

# Local file (auto-detects .parquet, .csv, .json, .arrow, .orc, .avro, .tsv, .xml)
ds = DataStore.from_file("sales.parquet")

# Database
ds = DataStore.from_mysql(host="db:3306", database="shop", table="orders", user="root", password="pass")

# Cloud storage
ds = DataStore.from_s3("s3://bucket/data.parquet", nosign=True)

# URI shorthand — auto-detects source type
ds = DataStore.uri("mysql://root:pass@db:3306/shop/orders")

All 16+ sources and URI schemes → connectors.md

After Connecting — Full Pandas API

Copy & paste — that's it
result = ds[ds["age"] > 25] # filter
result = ds[["name", "city"]] # select columns
result = ds.sort_values("revenue", ascending=False) # sort
result = ds.groupby("dept")["salary"].mean() # groupby
result = ds.assign(margin=lambda x: x["profit"] / x["revenue"]) # computed column
ds["name"].str.upper() # string accessor
ds["date"].dt.year # datetime accessor
result = ds1.join(ds2, on="id") # join
result = ds.head(10) # preview
print(ds.to_sql()) # see generated SQL

209 DataFrame methods supported. Full API → api-reference.md

Cross-Source Join — The Killer Feature

Copy & paste — that's it
from datastore import DataStore

customers = DataStore.from_mysql(host="db:3306", database="crm", table="customers", user="root", password="pass")
orders = DataStore.from_file("orders.parquet")

result = (orders
 .join(customers, left_on="customer_id", right_on="id")
 .groupby("country")
 .agg({"amount": "sum", "rating": "mean"})
 .sort_values("sum", ascending=False))
print(result)

More join examples → examples.md

Writing Data

Copy & paste — that's it
source = DataStore.from_mysql(host="db:3306", database="shop", table="orders", user="root", password="pass")
target = DataStore("file", path="summary.parquet", format="Parquet")

target.insert_into("category", "total", "count").select_from(
 source.groupby("category").select("category", "sum(amount) AS total", "count() AS count")
).execute()

References

Note: This skill teaches how to use chdb DataStore. For raw SQL queries, use the chdb-sql skill. For contributing to chdb source code, see CLAUDE.md in the project root.