So for example using DuckDB with the Substrait extension, if you create a table
create table t(a int);
CALL get_substrait_json('select * from t'); {"relations":[{"root":{"input":{"project":{"input":{"read":{"baseSchema":{"names":["a"],"struct":{"types":[{"i32":{"nullability":"NULLABILITY_NULLABLE"}}],...
https://duckdb.org/docs/extensions/substrait
Some other related discussions and links that i've collected over the years
https://news.ycombinator.com/item?id=37415494
https://news.ycombinator.com/item?id=34233697
https://news.ycombinator.com/item?id=31981568
https://datastation.multiprocess.io/blog/2022-04-11-sql-pars...
https://tomassetti.me/parsing-sql/