apache / apache/datafusion

Avoid re-evaluating expressions in filters and projections

Ouverte
#17,599 6 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.