Open qzsee opened 3 years ago
新版本的 runtime filter 取消了这部分逻辑了。所以新版本没问题。 旧版本的 runtime filter 确实有可能有你这个问题。
新版本的 runtime filter 取消了这部分逻辑了。所以新版本没问题。 旧版本的 runtime filter 确实有可能有你这个问题。
是的,但是新版本的runtime filter,也有IN类型的过滤,这部分同样有复制谓词的过程,如果_tuple_idx不清空,不太清楚有些特别的查询是否继续命中这种bug。
Describe the bug
DDL
Join query
Execute the SQL multiple times
Result1
Result2
在doris runtime filter版本之前。
hash join node 会把_probe_expr_ctxs中的谓词组成InPredicate谓词下推到exchange node节点。
InPredicate谓词添加了一个child,由_probe_expr_ctxs[i]->root() copy过去的。 在我的case中copy的是一个 if(TupleIsNull(2), NULL, <slot 4>
region_id
) 其中 TupleIsNull(2) 谓词会连带其中的 _tuple_idxs内容也会拷贝过去。 在TupleIsNull prepare的时候没有将_tuple_idxs集合做清空处理,导致在调用TupleIsNullPredicate::get_boolean_val方法的时候,因_tuple_idxs内容不正确,从而导致TupleIsNullPredicate::get_boolean_val方法调用不准确。然后就出现了我遇到的case。runtime filter版本之前 貌似都存在这个问题