
chdb-sql
热门当用户希望对本地文件(parquet/csv/json)、URL、S3路径或远程数据库(Postgres、MySQL、MongoDB、ClickHouse Cloud、Iceberg、Delta Lake)运行SQL(尤其是分析型SQL),而无需搭建服务器时使用。提供chDB——嵌入Python的ClickHouse SQL,支持1000+函数、用于有状态多步骤管道的Session、参数化查询,以及通过`s3()`、`mysql()`、`postgresql()`、`iceberg()`、`deltaLake()`、`remoteSecure()`表函数实现的跨源JOIN。触发条件:用户希望对parquet/csv/文件或跨远程分析源使用SQL;使用ClickHouse SQL特性(窗口函数、windowFunnel、geoToH3、JSON路径操作、Session、参数化查询);导入`chdb`或调用`chdb.query()`。跳过此技能:用于pandas风格的DataFrame方法链(请使用chdb-datastore)或ClickHouse服务器管理。
Use when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse Cloud, Iceberg, Delta Lake) without setting up a server. Provides chDB — embedded ClickHouse SQL in Python with 1000+ functions, Session for stateful multi-step pipelines, parametrized queries, and cross-source joins via `s3()`, `mysql()`, `postgresql()`, `iceberg()`, `deltaLake()`, `remoteSecure()` table functions. TRIGGER when: user wants SQL on parquet/csv/files or across remote analytical sources; uses ClickHouse SQL features (window functions, windowFunnel, geoToH3, JSON path ops, Session, parametrized queries); imports `chdb` or calls `chdb.query()`. SKIP this skill for pandas-style DataFrame method-chaining (use chdb-datastore instead) or ClickHouse server administration.
chdb SQL — 嵌入Python的ClickHouse
直接在Python中运行ClickHouse SQL——无需服务器。查询本地文件、远程数据库和云存储,拥有完整的ClickHouse SQL能力。
pip install chdb
决策树:选择合适的API
1. 对文件或数据库的一次性查询 → chdb.query()
2. 多步骤分析(带表) → Session
3. DB-API 2.0连接 → chdb.connect()
4. Pandas风格的DataFrame操作 → 改用chdb-datastore技能
chdb.query() — 一行代码,任意数据
import chdb
chdb.query("SELECT * FROM file('data.parquet', Parquet) WHERE price > 100 LIMIT 10") # 本地文件
chdb.query("SELECT * FROM mysql('db:3306', 'shop', 'orders', 'root', 'pass')") # 数据库
chdb.query("SELECT * FROM s3('s3://bucket/data.parquet', NOSIGN) LIMIT 10") # 云存储
chdb.query("SELECT * FROM deltaLake('s3://bucket/delta/table', NOSIGN) LIMIT 10") # 数据湖
# 跨源JOIN
chdb.query("""
SELECT u.name, o.amount FROM mysql('db:3306', 'crm', 'users', 'root', 'pass') AS u
JOIN file('orders.parquet', Parquet) AS o ON u.id = o.user_id ORDER BY o.amount DESC
""")
data = {"name": ["Alice", "Bob"], "score": [95, 87]}
chdb.query("SELECT * FROM Python(data) ORDER BY score DESC") # Python数据
df = chdb.query("SELECT * FROM numbers(10)", "DataFrame") # 输出格式
chdb.query("SELECT toDate({d:String}) + number FROM numbers({n:UInt64})",
"DataFrame", params={"d": "2025-01-01", "n": 30}) # 参数化查询
表函数 → table-functions.md | SQL函数 → sql-functions.md | 完整API → api-reference.md
Session — 有状态分析管道
from chdb import session as chs
sess = chs.Session("./analytics_db") # 持久化;Session()为内存模式
sess.query("CREATE TABLE users ENGINE=MergeTree() ORDER BY id AS SELECT * FROM mysql('db:3306','crm','users','root','pass')")
sess.query("CREATE TABLE events ENGINE=MergeTree() ORDER BY (ts,user_id) AS SELECT * FROM s3('s3://logs/events/*.parquet',NOSIGN)")
sess.query("""
SELECT u.country, count() AS cnt, uniqExact(e.user_id) AS users
FROM events e JOIN users u ON e.user_id = u.id
WHERE e.ts >= today() - 7 GROUP BY u.country ORDER BY cnt DESC
""", "Pretty").show()
sess.close()
连接API(DB-API 2.0)
from chdb import dbapi
conn = dbapi.connect()
cur = conn.cursor()
cur.execute("SELECT * FROM file('data.parquet', Parquet) WHERE value > 100")
print(cur.fetchall())
cur.close()
conn.close()
故障排除
| 问题 | 解决方法 |
|---|---|
ImportError: No module named 'chdb' |
pip install chdb |
DB::Exception: FILE_NOT_FOUND |
检查文件路径;使用绝对路径或确认当前工作目录 |
DB::Exception: Unknown table function |
检查函数名拼写(例如deltaLake而非deltalake) |
| 远程数据库连接被拒绝 | 检查host:port格式;确保远程数据库允许连接 |
| 环境检查 | 运行python scripts/verify_install.py(从技能目录) |
参考
注意:本技能教授如何使用chdb SQL。
对于pandas风格的操作,请使用chdb-datastore技能。
如需为chdb源代码做贡献,请参见项目根目录下的CLAUDE.md。





