Avoid masking errors and producing suboptimal plans
- Lingua principale
- Rust
- Stelle
- 9.3k
- Fork
- 2.4k
- Merge medio
- 3g 11h
- PR unite (30g)
- 360
Descrizione
### Is your feature request related to a problem or challenge?
`Optimizer` returns early when a rewrite produces a certain plan for the second time.
Producing same plan again is considered a problem. Returning early is to prevent (avoidable) failure for the user, however
- it can masks actual problems (we don't know when optimization finishes early)
- it can lead to suboptimal plan being executed, which may be very expensive -- for example containing cross join because predicates weren't pushed into the join yet
### Describe the solution you'd like
Do not mask problems. Let the code fail fast, so that bugs are clear.
As interim solution, we can have a flag allowing user to recover by restoring current lenient behavior.
This can be modelled after existing `datafusion.optimizer.skip_failed_rules` config which serves similar purpose.
### Describe alternatives you've considered
_No response_
### Additional context
originates from https://github.com/apache/datafusion/pull/5623#discussion_r1664186593
cc @mslapek @alamb
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia individuando il percorso di Optimizer che restituisce in anticipo quando una riscrittura produce due volte lo stesso piano, quindi confronta il suo comportamento con la configurazione esistente datafusion.optimizer.skip_failed_rules. Il lavoro è completo quando i piani ripetuti non nascondono più silenziosamente gli errori di ottimizzazione per impostazione predefinita e un opt-out documentato preserva il comportamento permissivo attuale.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- databases
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100