Ibis & Substrait & ADBC, how does all that play along together? #6617
-
today I saw that one can use Polars to query Snowflake directly using ADBC https://pola-rs.github.io/polars/py-polars/html/reference/api/polars.read_database.html and started thinking what should be the relationship between ADBC and Ibis. I saw various closed PRs on the Ibis side (#5010, #4267) so initially this was not clear to me. Digging a bit more, I also came across Substrait and initially it was not obvious to me what the relationship between Substrait and ADBC was. I finally found this:
https://substrait.io/community/powered_by/ Do you have any more insight on what are the overall plans and roadmap in this space of the whole Ibis -> Backend -> Substrait -> ADBC -> Database tower? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 5 replies
-
I'm on mobile but I can write more on this when I'm back at a keyboard. I don't think we understand the boundaries yet of where ibis, substrait and ADBC interact, just yet. We have ibis-substrait, which compiles ibis expressions into substrait plans, and these plans can (usually) be consumed and executed by DuckDB and Acero (pyarrow.compute). ADBC and Substrait are both efforts to avoid the many-to-many translation efforts that currently make up a lot of Ibis' backend code (and similarly, Trino's pile of connectors). I don't think using both ADBC and Substrait in the same execution pipeline makes sense for Ibis, but I could be wrong about that. I suspect we'll end up with an ADBC "backend" and a Substrait "backend". These will be a bit different than the existing backends, though, as they aren't an engine by themselves, so it would always be e.g. ADBC+snowflake or Substrait+DuckDB. One difference that comes to mind is that ADBC is (in my understanding) a provider of a more "direct" connection. You connect to an engine via ADBC and it handles communication and translation. CC @lidavidm who can correct anything I've said that's totally wrong on the ADBC front |
Beta Was this translation helpful? Give feedback.
I'm on mobile but I can write more on this when I'm back at a keyboard.
I don't think we understand the boundaries yet of where ibis, substrait and ADBC interact, just yet.
We have ibis-substrait, which compiles ibis expressions into substrait plans, and these plans can (usually) be consumed and executed by DuckDB and Acero (pyarrow.compute).
ADBC and Substrait are both efforts to avoid the many-to-many translation efforts that currently make up a lot of Ibis' backend code (and similarly, Trino's pile of connectors).
I don't think using both ADBC and Substrait in the same execution pipeline makes sense for Ibis, but I could be wrong about that.
I suspect we'll end up with an ADBC "backend…