Map for SQL-on-DataFrame after work: Polars SQL, SQLGlot, DuckDB, SQLFrame, Ibis. Anchored on Polars 1.44.2 + SQLGlot 30.18 freshness—not DuckDB 2.0 / Polars Iceberg / Polars 2.0 RC retreads. Educational only. Not investment advice.
After-work analysts often think in SQL but live in notebooks. This listicle is a five-tool map for SQL-on-DataFrame / dataframe SQL on a laptop—not a warehouse ops guide, not trading signals, and not investment advice. Freshness anchors: Polars 1.44 SQL correlated-subquery work (blog 26 Aug 2026) carried by Polars 1.44.2 (PyPI 9 Sep 2026), plus SQLGlot 30.18.0 (3 Sep 2026).
Different angle from existing Hub deep dives: this is not a DuckDB 2.0 feature dump, not a Polars Iceberg / rate-limit article, and not a Polars 2.0 RC streaming post. Stick to stable Polars 1.44.2 here—not an RC.
The only course CTA is Introduction to Python Programming.
Role: Native SQL over LazyFrame / DataFrame (pl.sql / SQLContext).
Why now: 1.44’s SQL rewrite adds correlated subqueries / decorrelation; patterns that raised SQLSyntaxError on 1.43.
Try: run one SELECT with a correlated EXISTS / IN on a small LazyFrame.
Links: pola.rs · SQL Python API · PyPI 1.44.2 · GitHub
Role: Parse / optimize / transpile SQL across dialects—the shared compiler many tools sit on.
Why now: 30.18.0 (3 Sep 2026) keeps the dialect layer fresh for notebook ETL.
Try: sqlglot.transpile("SELECT ...", read="postgres", write="duckdb") once.
Links: sqlglot.com · PyPI 30.18.0 · GitHub
Role: In-process SQL engine; query Parquet / pandas / Polars frames without standing up a server.
Version note: list as the embedded SQL staple (PyPI duckdb 1.5.5, 22 Jul 2026)—do not rehash a DuckDB 2.0 Hub deep dive; here it is one slot in a five-tool map.
Try: duckdb.sql("SELECT * FROM df LIMIT 5") on a pandas/Polars frame.
Links: duckdb.org · Python client · GitHub duckdb-python
Role: PySpark-shaped DataFrame API that compiles via SQLGlot onto DuckDB / BigQuery / Snowflake / etc.—useful when tutorials assume Spark but the laptop does not.
Version: sqlframe 4.4.0 (31 Jul 2026).
Try: mirror one Spark-style chain locally on DuckDB.
Links: GitHub eakmanrq/sqlframe · PyPI
Role: One dataframe API → many backends (DuckDB / Polars / DataFusion / …); expressions compile through SQLGlot.
Honesty: ibis-framework 12.0.0 on PyPI dates 7 Feb 2026—include as the portability staple, not the Sep freshness hook.
Try: write one expression, execute on DuckDB tonight.
Links: ibis-project.org · PyPI · GitHub
| Need | Start here |
|---|---|
| SQL already in your head, frames in Polars | Polars SQL |
| Dialect A → dialect B | SQLGlot |
| Query files / frames with classic SQL | DuckDB |
| Spark-tutorial API on a laptop | SQLFrame |
| Same logic, swap backends later | Ibis |
Pick one tool for one evening. No fake rankings or search-volume claims—usefulness angles only.
Install Polars 1.44.2 or DuckDB, run one SQL-on-frame query, then stop. Environments fighting you? Introduction to Python Programming.