
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 伺服器管理。
當使用者想要在本機檔案(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 伺服器管理。
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(從技能目錄) |
參考資料
- API 參考 — query/Session/connect 簽章
- 表格函式 — 所有 ClickHouse 表格函式
- SQL 函式 — 常用 SQL 函式
- 範例 — 9 個可執行範例及預期輸出
- 官方文件
注意:此技能教導如何使用 chdb SQL。
如需 pandas 風格的操作,請使用chdb-datastore技能。
如需貢獻 chdb 原始碼,請參閱專案根目錄的 CLAUDE.md。





