| Language / runtime | Python (optional Rust tokenizer) | Java (JDK 8+) and .NET — in-process, no Python runtime |
| License | MIT open source | Commercial, with a 90-day free trial |
| Dialect-to-dialect transpilation | Yes — the headline feature (e.g. Snowflake → DuckDB), and better at it than GSP | No. GSP parses, validates, formats, rewrites and analyses; it is not a transpiler |
| Dialects | 30+ dialects, one shared grammar with per-dialect overrides | 42 dialects, each with a dedicated grammar — including IBM Db2, Informix, Netezza, Sybase, SAP HANA, Vertica, N1QL, SOQL, GaussDB, Dameng, OceanBase and Power Query M (15 of them on .NET) |
| Query-level lineage on cloud warehouses | Strong. DataHub reports 97–99% accuracy for query lineage built on sqlglot — for SELECT/CTAS/INSERT on Snowflake, BigQuery and Databricks this is the correct default | Equivalent for this workload. Buying GSP for it alone is not a good reason |
| Stored procedures / procedural SQL | Procedural blocks generally fall back to opaque Command nodes; production T-SQL stored procedures remain a known open gap | Fully parsed ASTs: PL/SQL packages, types and triggers; T-SQL blocks, TRY/CATCH, EXECUTE; Db2 SQL PL cursors; Teradata procedures and BTEQ |
| Dynamic SQL | Not evaluated | Evaluated — GSP constant-folds EXEC(’…’) strings and parameter bindings to recover lineage from dynamic SQL |
| Multi-statement scripts | Not a supported unit of analysis | Parsed as a script, with lineage carried across statements |
| Syntax validation | Best-effort — a tolerant parser by design | Offline validation with error positions, no database connection |
| SQL formatting | A pretty-print flag | Dedicated formatter, 72+ style options |