123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- mode cockroach
- statement ok
- CREATE TABLE t (
- a INT NOT NULL,
- b TEXT NOT NULL,
- c TEXT
- );
- statement ok
- INSERT INTO t VALUES (1, '10', 'x'), (2, '20', NULL), (3, '30', NULL), (4, '40', 'x'), (5, '50a', 'x'), (5, '50b', 'y'), (5, '50c', 'z');
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggr=(0, array_agg[order_by=[]](row(array[#1{b}])))
- val_plan
- project=(#2)
- map=(row(array[#1{b}]))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), array_agg(c) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[]](row(array[#1{b}])))
- aggrs[1]=(1, array_agg[order_by=[]](row(array[#2{c}])))
- val_plan
- project=(#3, #4)
- map=(row(array[#1{b}]), row(array[#2{c}]))
- key_plan
- project=(#0)
- Get::PassArrangements materialize.public.t
- raw=true
- Source materialize.public.t
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), string_agg(c, ',') FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[]](row(array[#1{b}])))
- aggrs[1]=(1, string_agg[order_by=[]](row(row(#2{c}, ","))))
- val_plan
- project=(#3, #4)
- map=(row(array[#1{b}]), row(row(#2{c}, ",")))
- key_plan
- project=(#0)
- Get::PassArrangements materialize.public.t
- raw=true
- Source materialize.public.t
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), string_agg(c, ',' ORDER BY b DESC) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[]](row(array[#1{b}])))
- aggrs[1]=(1, string_agg[order_by=[#0 desc nulls_first]](row(row(#2{c}, ","), #1{b})))
- val_plan
- project=(#3, #4)
- map=(row(array[#1{b}]), row(row(#2{c}, ","), #1{b}))
- key_plan
- project=(#0)
- Get::PassArrangements materialize.public.t
- raw=true
- Source materialize.public.t
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), max(c) FROM t WHERE c <> 'x' GROUP BY a;
- ----
- Explained Query:
- Reduce::Collation
- aggregate_types=[b, h]
- hierarchical
- aggr_funcs=[max]
- skips=[1]
- monotonic
- must_consolidate
- basic
- aggr=(0, array_agg[order_by=[]](row(array[#1{b}])))
- val_plan
- project=(#3, #2)
- map=(row(array[#1{b}]))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- filter=((#2{c} != "x"))
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), max(b) FROM t GROUP BY a HAVING count(a) > 1;
- ----
- Explained Query:
- Reduce::Collation
- aggregate_types=[b, h, a]
- accumulable
- simple_aggrs[0]=(0, 2, count(*))
- hierarchical
- aggr_funcs=[max]
- skips=[1]
- monotonic
- must_consolidate
- basic
- aggr=(0, array_agg[order_by=[]](row(array[#1{b}])))
- val_plan
- project=(#2, #1, #3)
- map=(row(array[#1{b}]), true)
- key_plan
- project=(#0)
- mfp_after
- project=(#0..=#2)
- filter=((#3{"?column?"} > 1))
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, min(b), max(b) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Hierarchical
- aggr_funcs=[min, max]
- skips=[0, 0]
- monotonic
- must_consolidate
- val_plan
- project=(#1, #1)
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b ORDER BY b ASC), array_agg(b ORDER BY b DESC) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[#0 asc nulls_last]](row(array[#1{b}], #1{b})))
- aggrs[1]=(1, array_agg[order_by=[#0 desc nulls_first]](row(array[#1{b}], #1{b})))
- val_plan
- project=(#2, #2)
- map=(row(array[#1{b}], #1{b}))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT array_agg(b ORDER BY b ASC), array_agg(b ORDER BY b DESC), bool_or(b IS NOT NULL) FROM t;
- ----
- Explained Query:
- With
- cte l0 =
- Reduce::Collation
- aggregate_types=[b, b, a]
- accumulable
- simple_aggrs[0]=(0, 2, sum(1))
- basic
- aggrs[0]=(0, array_agg[order_by=[#0 asc nulls_last]](row(array[#0{b}], #0{b})))
- aggrs[1]=(1, array_agg[order_by=[#0 desc nulls_first]](row(array[#0{b}], #0{b})))
- val_plan
- project=(#1, #1, #2)
- map=(row(array[#0{b}], #0{b}), 1)
- key_plan
- project=()
- Get::Collection materialize.public.t
- raw=true
- Return
- Mfp
- project=(#0, #1, #3)
- map=((#2{"?column?"} > 0))
- Union
- ArrangeBy
- input_key=[]
- raw=true
- Get::PassArrangements l0
- raw=false
- arrangements[0]={ key=[], permutation=id, thinning=(#0..=#2) }
- Mfp
- project=(#0..=#2)
- map=(null, null, null)
- Union consolidate_output=true
- Negate
- Get::Arrangement l0
- project=()
- key=
- raw=false
- arrangements[0]={ key=[], permutation=id, thinning=(#0..=#2) }
- Constant
- - ()
- Source materialize.public.t
- project=(#1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT t1.a, array_agg(t1.c), array_agg(t2.c) FROM t t1 INNER JOIN t t2 ON t1.c = t2.c WHERE t1.c IS NOT NULL GROUP BY t1.a;
- ----
- Explained Query:
- With
- cte l0 =
- Get::Collection materialize.public.t
- raw=true
- Return
- Mfp
- project=(#0, #1, #1)
- input_key=#0
- Reduce::Basic
- aggr=(0, array_agg[order_by=[]](row(array[#1{c}])))
- val_plan
- project=(#2)
- map=(row(array[#1{c}]))
- key_plan
- project=(#0)
- Join::Linear
- linear_stage[0]
- closure
- project=(#1, #0)
- lookup={ relation=1, key=[#0{c}] }
- stream={ key=[#1{c}], thinning=(#0) }
- source={ relation=0, key=[#1{c}] }
- ArrangeBy
- raw=true
- arrangements[0]={ key=[#1{c}], permutation={#0: #1, #1: #0}, thinning=(#0) }
- types=[integer, text]
- Get::PassArrangements l0
- raw=true
- ArrangeBy
- raw=true
- arrangements[0]={ key=[#0{c}], permutation=id, thinning=() }
- types=[text]
- Get::Collection l0
- project=(#1)
- raw=true
- Source materialize.public.t
- project=(#0, #2)
- filter=((#2{c}) IS NOT NULL)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT sum(a), jsonb_agg(b), array_agg(b), array_agg(b) FROM t;
- ----
- Explained Query:
- With
- cte l0 =
- Reduce::Collation
- aggregate_types=[a, b, b]
- accumulable
- simple_aggrs[0]=(0, 0, sum(#0{a}))
- basic
- aggrs[0]=(1, jsonb_agg[order_by=[]](row(jsonbable_to_jsonb(#1{b}))))
- aggrs[1]=(2, array_agg[order_by=[]](row(array[#1{b}])))
- val_plan
- project=(#0, #2, #3)
- map=(row(jsonbable_to_jsonb(#1{b})), row(array[#1{b}]))
- key_plan
- project=()
- Get::Collection materialize.public.t
- raw=true
- Return
- Mfp
- project=(#0..=#2, #2)
- Union
- ArrangeBy
- input_key=[]
- raw=true
- Get::PassArrangements l0
- raw=false
- arrangements[0]={ key=[], permutation=id, thinning=(#0..=#2) }
- Mfp
- project=(#0..=#2)
- map=(null, null, null)
- Union consolidate_output=true
- Negate
- Get::Arrangement l0
- project=()
- key=
- raw=false
- arrangements[0]={ key=[], permutation=id, thinning=(#0..=#2) }
- Constant
- - ()
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b ORDER BY b) FROM t GROUP BY a HAVING array_agg(b ORDER BY b) = array_agg(b ORDER BY b DESC);
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[#0 asc nulls_last]](row(array[#1{b}], #1{b})))
- aggrs[1]=(1, array_agg[order_by=[#0 desc nulls_first]](row(array[#1{b}], #1{b})))
- val_plan
- project=(#2, #2)
- map=(row(array[#1{b}], #1{b}))
- key_plan
- project=(#0)
- mfp_after
- project=(#0, #1)
- filter=((#1{"?column?"} = #2{"?column?"}))
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), array_agg(sha256(b::BYTEA)) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[]](row(array[#1{b}])))
- aggrs[1]=(1, array_agg[order_by=[]](row(array[digest(text_to_bytea(#1{b}), "sha256")])))
- val_plan
- project=(#2, #3)
- map=(row(array[#1{b}]), row(array[digest(text_to_bytea(#1{b}), "sha256")]))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, array_agg(b), array_agg(CASE WHEN a = 1 THEN 'ooo' ELSE b END) FROM t GROUP BY a;
- ----
- Explained Query:
- Reduce::Basic
- aggrs[0]=(0, array_agg[order_by=[]](row(array[#1{b}])))
- aggrs[1]=(1, array_agg[order_by=[]](row(array[case when (#0{a} = 1) then "ooo" else #1{b} end])))
- val_plan
- project=(#2, #3)
- map=(row(array[#1{b}]), row(array[case when (#0{a} = 1) then "ooo" else #1{b} end]))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
- query T multiline
- EXPLAIN PHYSICAL PLAN AS VERBOSE TEXT FOR SELECT a, dense_rank() OVER (ORDER BY a), array_agg(b) FROM t GROUP BY a;
- ----
- Explained Query:
- Mfp
- project=(#2, #4, #3)
- map=(record_get[1](#0), record_get[0](#1), record_get[1](#1), record_get[0](#0))
- input_key=
- Reduce::Basic
- aggr=(0, dense_rank[order_by=[#0 asc nulls_last]](row(list[row(#0, #1)], #0{a})), fused_unnest_list=true)
- val_plan
- project=(#2)
- map=(row(list[row(#0, #1)], #0{a}))
- key_plan
- project=()
- input_key=#0
- Reduce::Basic
- aggr=(0, array_agg[order_by=[]](row(array[#1{b}])))
- val_plan
- project=(#2)
- map=(row(array[#1{b}]))
- key_plan
- project=(#0)
- Get::Collection materialize.public.t
- raw=true
- Source materialize.public.t
- project=(#0, #1)
- Target cluster: quickstart
- EOF
|