-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement Filter::mergeWith for MultiRange #154
Comments
I am a person who is interested in contributing to open source. Looks like this issue is a good one for a starter. May I work on this issue? |
Welcome, @amaliujia . Sure, feel free to pick this up. CC: @atanu1991 who is working on a related issue #153 |
I want to discuss a bit on high level before start to implement. MultiRange is a class that contains a list of Filter, with nan_allowed and null_allowed. So my current idea of the implementation is:
Can you give me some suggestions? |
Rui, MultiRange represents and OR of multiple filters. NaN values pass only if MultiRange::nanAllowed is true. Null values pass only if nullAllowed is true. Merging two filters is combining the filters with an AND. A value passes the new filter only if it passes both the original filters. Here is how I would represent a merge of two MultiRange filters (with just 2 filters in each for simplicity): (a OR b) AND (c OR d) = (a AND c) OR (a AND d) OR (b AND c) OR (b AND d) Therefore, what you have proposed is very close.
In step (3), make sure to check if a merge of two filter is kAlwaysFalse, kIsNull, kIsNotNull. In this case, the filter can be dropped from the result (null and NaN flags in the nested filters do not count for MultiRange filter; only top-level flags take effect). Step (3) may result in an empty list of filters or a list of one. If the list is empty, return kAlwaysFalse, kIsNull, or kIsNotNull as appropriate (see nullOrFalse(bothNullAllowed) in Filter.cpp). If the list contains just one filter, return that filter after incorporating the null flag, e.g. if bothNullAllowed && !filter->testNull() return filter.mergeWith(IsNull) else return filter. That should be it. (Check out #233 that implements merge logic for BytesValues and BytesRanges.) |
Thanks @mbasmanova! I prepared a WIP impl based on your suggestions: #299. Can you comment on the PR to see if I am on the right track? I haven't added test cases and I can add those later. Sorry to occupy too much of your time. I am a beginner so probably need more guidance at this moment (for example on how to deal with nullness in Volex)? Maybe later I could help to contribute a doc about nullness, nan, always true, always false, is null, is not null with Filter. |
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward? This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. |
Looks like this issue was resolved with #299 . Closing. |
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
relative pr: Fix hashjoin runtime issue facebookincubator#106 INVALID_STATE on HashJoin when spill is turned on facebookincubator#154 SIGABRT on DecimalAvgAggregate<UnscaleLongDecimal, UnscaleShortDecimal> when spilling is engaged facebookincubator#236 Support kPreceeding & kFollowing for window range frame type facebookincubator#287
Similar to #153 this task is to implement Filter::mergeWith() for MultiRange filters which represent an OR of two of more filters.
CC: @pedroerp @kgpai @aditi-pandit @majetideepak
The text was updated successfully, but these errors were encountered: