-
Notifications
You must be signed in to change notification settings - Fork 3.9k
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
release-22.2: sql: introduce array_cat_agg aggregate builtin #98171
release-22.2: sql: introduce array_cat_agg aggregate builtin #98171
Conversation
Thanks for opening a backport. Please check the backport criteria before merging:
If some of the basic criteria cannot be satisfied, ensure that the exceptional criteria are satisfied within.
Add a brief release justification to the body of your PR to justify this backport. Some other things to consider:
|
This commit introduces a new `array_cat_agg` aggregate builtin function that takes in an array type as its input, and then unnests each array and appends all its elements into a single result array. In other words, it behaves similar to `array_agg(unnest(array_column))`. This function doesn't have an analogue in Postgres. However, some of our SQL observability tools need this functionality, and the current workaround of using a LATERAL JOIN often results in slow apply joins, so this new builtin should speed things up significantly. In particular, `crdb_internal.statement_statistics` view is now refactored to use the new builtin which removes an apply join from it. The choice of this particular name comes from the fact that we have the `array_cat` builtin which concatenates two arrays. Release note (sql change): New aggregate builtin function `array_cat_agg` is introduced. It behaves similar to how `array_agg(unnest(array_column))` would - namely, it takes arrays as its input, unnests them into the array elements which are then aggregated into a single result array (i.e. it's similar to concatenating all input arrays into a single one).
7289e78
to
02fb46e
Compare
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.
assuming the oid changes are ok
Reviewed 19 of 19 files at r1, all commit messages.
Reviewable status:complete! 1 of 0 LGTMs obtained (waiting on @DrewKimball and @yuzefovich)
pkg/sql/logictest/testdata/logic_test/pg_catalog
line 3273 at r1 (raw file):
WHERE t.typname = '_int4' ---- 2046 array_in array_in
Are these changes ok? (this file and pgoidtype)
pkg/sql/function_resolver_test.go
line 370 at r1 (raw file):
searchPath: []string{"sc1", "sc2"}, expectedFuncBody: "", expectedFuncOID: 853,
is this change ok?
TFTR! The oid changes are ok - we didn't have fixed oids until 5ee5d85 which is only present on 23.1 development branch. |
Backport 1/1 commits from #97826.
/cc @cockroachdb/release
This commit introduces a new
array_cat_agg
aggregate builtin functionthat takes in an array type as its input, and then unnests each array
and appends all its elements into a single result array. In other
words, it behaves similar to
array_agg(unnest(array_column))
. Thisfunction doesn't have an analogue in Postgres. However, some of our SQL
observability tools need this functionality, and the current workaround
of using a LATERAL JOIN often results in slow apply joins, so this new
builtin should speed things up significantly. In particular,
crdb_internal.statement_statistics
view is now refactored to use thenew builtin which removes an apply join from it. The choice of this
particular name comes from the fact that we have the
array_cat
builtinwhich concatenates two arrays.
Fixes: #97502.
Release note (sql change): New aggregate builtin function
array_cat_agg
is introduced. It behaves similar to howarray_agg(unnest(array_column))
would - namely, it takes arrays as itsinput, unnests them into the array elements which are then aggregated
into a single result array (i.e. it's similar to concatenating all input
arrays into a single one).
Release justification: performance improvement of observability tooling.