[EPIC] Improving cost calculations and cost based optimizations
- Lenguaje dominante
- Rust
- Estrellas
- 9.3k
- Forks
- 2.4k
- Merge medio
- 3 d 11 h
- PR fusionados (30 d)
- 360
Descripción
Design document: https://docs.google.com/document/d/1M4mmV7KA1LSj-D-WJA338B4ydlm-8A8D5OPuDE5_SD4/edit
This is a meta issue for improving cost calculations and cost-based optimizations in DataFusion. We already have some statistics collected (mainly from the table sources) and there are estimations for statistics by some of the execution plan nodes, and the overall idea is to improve these as well as possible CBOs.
### Main Goals
- Have enough statistics to start nested join optimizations (#3843). This involves being able to estimate the weight of a join side, and do global re-ordering between join sides to minimize the overall cost of parent joins by reducing the output as much as possible at the bottom levels.
- Provide a more reliable static analysis phase for physical execution operators (so that range based pruning/predicate pruning can leverage the existing infrastructure on their implementations)
- What else?
### Work in Progress
- [x] https://github.com/apache/arrow-datafusion/issues/3898
- [x] https://github.com/apache/arrow-datafusion/issues/3845
- [ ] https://github.com/apache/arrow-datafusion/issues/4158
- [ ] https://github.com/apache/arrow-datafusion/issues/4159
- What else?
### Planned
- [ ] Estimating join cardinalities when the underlying table does not have any statistics (https://github.com/apache/arrow-datafusion/issues/3813#issuecomment-1276643214).
- What else?
### Future
- Support for histograms, so better value distribution when working with cardinality estimations / filter selectivity. Currently, none of the providers we use can directly pass it to us, so we either have to take a peek at the data or only expose the API for other services (like ballista) which can actually collect it and pass to us.
P.S.: feel free to update the text directly or let me know (and I can update it myself)
Guía de contribución
Línea de trabajo
Comienza con el documento de diseño enlazado y, después, revisa las issues completadas y abiertas que aparecen en Work in Progress y Planned, especialmente #3843, #4158, #4159 y #3813. La issue no tiene un único punto de entrada para la implementación ni un criterio de finalización; el progreso consiste en abordar los objetivos de optimización estadística y basada en costes enumerados y actualizar esta meta issue.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- rust
- Área
- data, databases, performance
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 20/100