Ibis:一个 API 打通 20 多种数据引擎的 Python 库
Ibis:一个 API 打通 20 多种数据引擎的 Python 库
最近在整理数据分析工具时,发现一个项目叫 Ibis。它拿到了 6,500 多 Star,定位是可移植的 Python dataframe 库。简单理解就是,写同样的 Python 代码,底层可以跑在 DuckDB、PostgreSQL、BigQuery、Snowflake 等 20 多种引擎上。

它解决了一个老问题
做数据分析的人经常遇到这种场景:本地用 pandas 或 Polars 跑小数据很顺,但数据量一大就得换到数据库或数仓。这时候问题来了,每个引擎的 API 都不一样。从 pandas 切到 Spark 或 BigQuery,代码基本要重写。
Ibis 的思路是提供统一的 dataframe API,分组、过滤、聚合这些操作的写法不变,只改一行 ibis.set_backend() 就能切换底层引擎。本地迭代用 DuckDB,上线部署切到 Snowflake,逻辑代码不用动。
这个设计意图很明确:降低多后端切换的迁移成本。
核心能力
从文档来看,Ibis 有几个实用的特性:
Python 和 SQL 混写
Ibis 会把 dataframe 表达式编译成 SQL。你可以在 Python 里写 group_by 和 agg,然后调用 ibis.to_sql() 查看生成的 SQL。反过来也能在 Python 代码里直接嵌入 SQL 字符串,Ibis 会把它包装成 dataframe 继续链式操作。
惰性求值
默认是惰性执行,不会每次操作都触发计算,适合构建复杂的数据管道。也支持交互模式,探索数据时能看到即时结果。
覆盖够广的后端
支持 20 多个后端,从本地引擎到云数仓都有:
- 本地/嵌入式:DuckDB、Polars、DataFusion、SQLite
- 云数仓:BigQuery、Snowflake、Databricks
- 传统数据库:PostgreSQL、MySQL、Oracle、SQL Server
- 流处理:Apache Flink
- 其他:ClickHouse、Trino、Athena 等

实际怎么用
安装很简单,带 DuckDB 和示例数据:
pip install 'ibis-framework[duckdb,examples]'
然后就能用了:
import ibis
ibis.options.interactive = True
t = ibis.examples.penguins.fetch()
g = t.group_by("species", "island").agg(count=t.count()).order_by("count")
想切到别的后端,比如 Polars:
ibis.set_backend("polars")
或者连到 PostgreSQL:
con = ibis.postgres.connect(host="...", database="...")
切换后前面的 dataframe 操作代码基本不用改。
适合谁用
如果你是数据工程师或分析师,工作中需要在本地开发和生产环境之间频繁切换,Ibis 能帮你减少不少重复代码。如果你已经在用 DuckDB 或 Polars 做本地分析,偶尔需要把同样逻辑丢到云数仓跑,这个库很对胃口。
不过也要注意,Ibis 覆盖的后端虽多,但不同引擎的 SQL 方言有差异,某些复杂查询可能无法完全通用。建议先在目标后端做充分测试。
这个项目还在活跃开发中,代码以 Apache 2.0 协议开源。对统一 dataframe API 感兴趣的人可以看看。
浙公网安备 33010602011771号