Null-aware hash join loses `NOT IN` semantics when converted to `SymmetricHashJoinExec`
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
- #27226 par @shehabgamin — fermée sans fusion
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 35/100
Piste de recherche
Start by reading JoinSelection and SymmetricHashJoinExec in DataFusion’s Rust source, then trace the null_aware handling for HashJoinExec. Add or use a regression test that builds the null-aware LeftAnti join described in the issue and runs JoinSelection. Done means optimization keeps it as HashJoinExec; an open linked pull request already addresses this issue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
JoinSelection turns a HashJoinExec into a SymmetricHashJoinExec when both inputs are unbounded. It does this without checking null_aware. SymmetricHashJoinExec has no null-aware mode, so the flag is dropped and a NOT IN join becomes a plain anti join. A NULL in the subquery, or a NULL outer value, no longer gives SQL NOT IN semantics, so the query can return rows it should not.
To Reproduce
Build a null-aware LeftAnti HashJoinExec over two unbounded inputs and run JoinSelection on it. The result is a SymmetricHashJoinExec, and the null-aware behavior is gone.
let join = HashJoinExec::try_new(
left, right, on, None, &JoinType::LeftAnti, None,
PartitionMode::CollectLeft, NullEquality::NullEqualsNothing,
true, // null_aware
)?;
let optimized = JoinSelection::new().optimize(Arc::new(join), &ConfigOptions::new())?;
// optimized is a SymmetricHashJoinExec
Expected behavior
A null-aware join stays a HashJoinExec, the only join that implements null-aware semantics for this case.
Additional context
No response
Willingness to contribute
I plan to contribute a fix for this bug independently
- Langage dominant
- Rust
- Étoiles
- 9.6k
- Forks
- 2.6k
- Merge moyen
- 3 j 4 h
- PR mergées (30 j)
- 345
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/datafusion
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
apache/datafusion#27315 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
apache/datafusion#27094 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Substrait consumer doesn't recognise `shift_left` / `shift_right` from functions_arithmetic.yamlPeut-être pris @jonasHanhan l’a pris il y a 9 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
apache/datafusion#27059 ·
Les mainteneurs répondent en général sous 1 jour
-
`ProjectionExprs::project_statistics` computes approximate `Statistics::total_byte_size` ignoring column statsPeut-être pris @joseph-isaacs l’a pris il y a 10 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
apache/datafusion#27050 ·
Les mainteneurs répondent en général sous 1 jour
-
physical-plan: decoding an Unnest or Explain node with an unset field panicsPeut-être pris @geoHeil l’a pris il y a 9 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
apache/datafusion#26999 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/datafusion
Issues similaires
-
P3
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
HerringtonDarkholme/hd-lang#1770 ·
Les mainteneurs répondent en général sous 1 jour
-
needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
pbakaus/impeccable#1436 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
jonathanong/no-mistakes#3332 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
swc-project/swc-next-issues#310 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
swc-project/swc-ai-issues#653 ·