Hi, Would you think a high-level list of items planned for development might be a good addition to the project?
From what I understood from Mark's CMU talk on DuckDB, these are some of the major milestones/themes underway or planned:
I would be curious if this is about right, even if you end up thinking a public roadmap isn't interesting.
Thanks!
Perhaps it would be a good idea to make it more public! I can detail at least my plans on what I'm personally going to work on next:
After that I am going to start working on optimizing the query execution engine, in particular optimizing the parallel join HT and aggregates, as well as optimizations surrounding string aggregates and subqueries.
But this is more my personal to-do list for now :) A more distant road-map would be:
Happy to hear suggestions as well :)
Hey Folks!
We just pushed a DuckDB feature into git for our self-service analytics platform today, so I felt like now I could reach out with some questions about your roadmap! First of all, I want to recognize that you have built and are building a great product. We are seeing a 3-25x improvement over SQLite in our workloads - truly a game changer. Second of all, I really love a few items that are already on your roadmap: parallel execution, query optimization, and incremental checkpoints. I talked with my team and we had a few other thoughts!
Would you be open to supporting Postgres's JSON data types and operators? That would open the door to hybrid relational/object oriented use cases. Postgres's JSON aggregations also allow for a very flexible pivoting operation.
Postgres's grouping sets, cube, and rollup functions would be very useful for OLAP style workloads. Ex: "Give me all possible averages for these 5 levels of aggregation". They were added in Postgres 9.5, and searching through your copy of the parser, I believe it already has cases for them. My hope is that they would be a small add - I believe they are just a convenience wrapper around several group by's and union all's. Since our platform is self-service, any simplified syntax helps our user base!
Do you happen to already have plans to export to the Apache Arrow or Parquet format? We aren't ready to use that feature today, but we are headed in that direction.
Similarly, we are exploring options to scale beyond memory for data frame style operations and are considering the Dask and Vaex libraries (in addition to the great DuckDB Python API!). Have you already considered integrating with a larger-than-memory dataframe library in some way? The existing Pandas API could be used in some kind of chunking process, or maybe Parquet/Arrow would facilitate fast copying. The individual libraries might also support a more direct mapping.
Thanks!
-Alex
Would you be open to supporting Postgres's JSON data types and operators? That would open the door to hybrid relational/object oriented use cases. Postgres's JSON aggregations also allow for a very flexible pivoting operation.
It's hard to get JSON operations fast, what would be required is translation to our native LIST/STRUCT types. But that requires that the schema of the JSON values (?) is somewhat consistent within a column. Is this generally the case for you?
Postgres's grouping sets, cube, and rollup functions would be very useful for OLAP style workloads. Ex: "Give me all possible averages for these 5 levels of aggregation". They were added in Postgres 9.5, and searching through your copy of the parser, I believe it already has cases for them. My hope is that they would be a small add - I believe they are just a convenience wrapper around several group by's and union all's. Since our platform is self-service, any simplified syntax helps our user base!
I don't see why not, TPC-DS has them and we are currently using alternative query formulations to work around this.
Do you happen to already have plans to export to the Apache Arrow or Parquet format? We aren't ready to use that feature today, but we are headed in that direction.
Export to Parquet definitely, Arrow is also possible, see #151
Similarly, we are exploring options to scale beyond memory for data frame style operations and are considering the Dask and Vaex libraries (in addition to the great DuckDB Python API!). Have you already considered integrating with a larger-than-memory dataframe library in some way? The existing Pandas API could be used in some kind of chunking process, or maybe Parquet/Arrow would facilitate fast copying. The individual libraries might also support a more direct mapping.
We have not looked into that yet. Its a bit unclear what the benefits there would be.
Maybe off topic, but found this new project ugrep (BSD License) which seems to put a lot of work in to pattern matching, regex, optimizations and parallel operations. Not sure how complete duckdb is in this area, but could be of interest or hint of improvement directions.
It's hard to get JSON operations fast, what would be required is translation to our native LIST/STRUCT types. But that requires that the schema of the JSON values (?) is somewhat consistent within a column. Is this generally the case for you?
@hannesmuehleisen Out of curiosity, what does your reference to LIST/STRUCT mean here? Is it possible to support JSON/document-style datatypes, as long as they have a schema? Are you imagining a solution where this structure is actually just flattened to a set of columns? How would arrays work? Is LIST related to Postgres' array column type?
Feature request (sorry if they exist already), and informed entirely by my selfish desires :):
Recently, I find myself with GCS cloud firing up pre-emptible instances. What makes DuckDB useful in the cloud context is especially is that DuckDB is self-contained and even easier than all the Apache stuff.
However, when firing up a pre-emptible instance, I mount a gcs bucket and am stuck with BigQuery's really stupid output formats, such as csv / json /Avro, so there is some pathway to conversion to Parquet. What makes Drill really useful is I can give it anything (Avro + json.gz + csv.gz) and it does a quick read job.
Most helpful comment
Perhaps it would be a good idea to make it more public! I can detail at least my plans on what I'm personally going to work on next:
After that I am going to start working on optimizing the query execution engine, in particular optimizing the parallel join HT and aggregates, as well as optimizations surrounding string aggregates and subqueries.
But this is more my personal to-do list for now :) A more distant road-map would be:
Happy to hear suggestions as well :)