-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Internal #215: Window EXCLUDE Functionality #9220
Conversation
Reverse the expected order of one test now that we have deterministic ordering of single partitions.
Move the code for WindowSegmentTree::EvaluateInternal to WindowSegmentTreeState. This hides the implementation details and prepares to fix some memory leaks.
Fix the right side memory leak. Avoid unnecessary per-chunk memory allocation.
Plumb the setting through and throw if it is not supported.
Change API to pass frame lists instead of window setting.
Support the EXCLUDE modifiers for COUNT(*).
Use swap instead of copying.
Convert ReuseIndexes to handle multiple ranges. Only tested for single range.
Reduce the insert range of Reuse to the current frames instead of the union of current and previous frames.
Back out range restriction. Add median tests.
Make the new exclude clause member optional so we don't have to bump the file version.
Still broken but should be closer. Probably just needs a `GetDefault`?
Updated json file with default value. Works now.
Add sorting to handle new work stealing.
Since not all custom window functions need the previous frame, push responsibility down to the function states that do. Pass around vectors so we have fewer silly arguments.
Factor out the frame intersection logic for reuse.
Fix the ModeState to have proper constructors and destructors and then call them.
Hack around memory leak in PerfectAggregateHashTable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @hawkfish! Thanks for the PR, EXCLUDE
looks like a pretty neat extension to the windowing functionality. I added some comments and nits.
From my understanding, the significant change here is the switch from a single FrameBounds
parameter to a vector of those? From what I can tell, we then determine what to exclude by setting the validity mask accordingly.
src/include/duckdb/common/vector_operations/aggregate_executor.hpp
Outdated
Show resolved
Hide resolved
src/include/duckdb/common/vector_operations/aggregate_executor.hpp
Outdated
Show resolved
Hide resolved
Incorporate review feedback. Most notably, the ValidityMask object is smart enough to handle the AllValid situation without constructing extra bitmasks.
Thanks for all the comments and explanations on my notes! LGTM now.
|
Thanks! |
Merge pull request duckdb/duckdb#9164 from Mause/feature/jdbc-uuid-param Merge pull request duckdb/duckdb#9185 from pdet/adbc_07 Merge pull request duckdb/duckdb#9126 from Maxxen/parquet-kv-metadata Merge pull request duckdb/duckdb#9123 from lnkuiper/parquet_schema Merge pull request duckdb/duckdb#9086 from lnkuiper/json_inconsistent_structure Merge pull request duckdb/duckdb#8977 from Tishj/python_readcsv_multi_v2 Merge pull request duckdb/duckdb#9279 from hawkfish/nsdate-cast Merge pull request duckdb/duckdb#8851 from taniabogatsch/binary_lambdas Merge pull request duckdb/duckdb#8983 from Maxxen/types/fixedsizelist Merge pull request duckdb/duckdb#9318 from Maxxen/fix-unused Merge pull request duckdb/duckdb#9220 from hawkfish/exclude Merge pull request duckdb/duckdb#9230 from Maxxen/json-plan-serialization Merge pull request duckdb/duckdb#9011 from Tmonster/add_create_statement_support_to_fuzzer Merge pull request duckdb/duckdb#9400 from Maxxen/array-fixes Merge pull request duckdb/duckdb#8741 from Tishj/python_import_cache_upgrade Merge fixes Merge pull request duckdb/duckdb#9395 from taniabogatsch/lambda-performance Merge pull request duckdb/duckdb#9427 from Tishj/python_table_support_replacement_scan Merge pull request duckdb/duckdb#9516 from carlopi/fixformat Merge pull request duckdb/duckdb#9485 from Maxxen/fix-parquet-serialization Merge pull request duckdb/duckdb#9388 from chrisiou/issue217 Merge pull request duckdb/duckdb#9565 from Maxxen/fix-array-vector-sizes Merge pull request duckdb/duckdb#9583 from carlopi/feature Merge pull request duckdb/duckdb#8907 from cryoEncryp/new-list-functions Merge pull request duckdb/duckdb#8642 from Virgiel/capi-streaming-arrow Merge pull request duckdb/duckdb#8658 from Tishj/pytype_optional Merge pull request duckdb/duckdb#9040 from Light-City/feature/set_mg
Implement the SQL windowing EXCLUDE functionality started by @j-w-moebius. This includes:
Despite the increased complexity of the calling sequences, performance appears unaffected.
fixes: duckdblabs/duckdb-internal#215