Avoid re-evaluating expressions in filters and projections
- Langage dominant
- Rust
- Étoiles
- 9.3k
- Forks
- 2.4k
- Merge moyen
- 3 j 11 h
- PR mergées (30 j)
- 360
Description
This patterns shows up pretty often:
```sql
select expensive(col)
from t
where expensive(col)
```
A pathological case is variant / json:
```sql
select variant_get(col, 'key')
from t
from variant_get(col, 'key')
```
There's two issues here:
1. Until we solve projection pushdown (https://github.com/apache/datafusion/issues/14993) if `key` is not shredded we materialize the entire `col` and then extract `key` in a `ProjectionExec`.
2. Even once that is resolved, or in the case that `key` is not shredded evaluating `variant_get(col, 'key')` itself is expensive we still re-compute `variant_get(col, 'key')` twice: once for the filter and once for the projection.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par lire le comportement du filtrage et de la projection décrit dans les exemples SQL, notamment ProjectionExec et le problème de projection-pushdown #14993. Déterminez comment les expressions répétées telles que variant_get(col, 'key') sont représentées et évaluées, puis définissez la complétion comme le fait d’éviter l’évaluation en double tout en préservant les résultats de la requête.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rust, sql
- Domaine
- data-engineering, databases
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100