2533 lines
229 KiB
Plaintext
2533 lines
229 KiB
Plaintext
*************** Case 1 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |228 |
|
|
|1 | PX COORDINATOR | |5 |228 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |224 |
|
|
|3 | LIMIT | |5 |215 |
|
|
|4 | MERGE GROUP BY | |5 |214 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |4 |214 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|4 |212 |
|
|
|7 | MERGE GROUP BY | |4 |208 |
|
|
|8 | SORT | |3 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil)
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), limit(5), offset(nil)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 1(end) **************
|
|
|
|
*************** Case 2 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by avg(c1);
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |PX COORDINATOR MERGE SORT | |70 |572 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10001|70 |516 |
|
|
|2 | SORT | |70 |390 |
|
|
|3 | MERGE GROUP BY | |70 |355 |
|
|
|4 | EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|5 | EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|6 | MERGE GROUP BY | |70 |223 |
|
|
|7 | SORT | |90 |208 |
|
|
|8 | PX PARTITION ITERATOR | |90 |158 |
|
|
|9 | TABLE SCAN |t1_topk |90 |158 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([INTERNAL_FUNCTION(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [INTERNAL_FUNCTION(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
4 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
5 - (#keys=1, [t1_topk.c2]), output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
6 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
7 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
1 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), dop=1
|
|
2 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
3 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
4 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
5 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 2(end) **************
|
|
|
|
*************** Case 3 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 order by avg(c1) limit 5;
|
|
|
|
=======================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------
|
|
|0 |LIMIT | |1 |171 |
|
|
|1 | SCALAR GROUP BY | |1 |171 |
|
|
|2 | PX COORDINATOR | |1 |171 |
|
|
|3 | EXCHANGE OUT DISTR |:EX10000|1 |170 |
|
|
|4 | MERGE GROUP BY | |1 |169 |
|
|
|5 | PX PARTITION ITERATOR| |90 |158 |
|
|
|6 | TABLE SCAN |t1_topk |90 |158 |
|
|
=======================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
2 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil)
|
|
3 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
4 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group(nil), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
=======
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c3))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))]), filter(nil),
|
|
group(nil), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c3))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))])
|
|
2 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)]), filter(nil)
|
|
3 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)]), filter(nil), dop=1
|
|
4 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)]), filter(nil),
|
|
group(nil), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
5 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
NO_USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 3(end) **************
|
|
|
|
*************** Case 4 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by avg(c1) limit 5 for update nowait;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |374 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |374 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |370 |
|
|
|3 | TOP-N SORT | |5 |361 |
|
|
|4 | MERGE GROUP BY | |70 |355 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|7 | MERGE GROUP BY | |70 |223 |
|
|
|8 | SORT | |90 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC]), topn(5)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
2 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
3 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
4 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
5 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC]), topn(5)
|
|
6 - output([T_FUN_SUM(t1_topk.c1)], [t1_topk.c1], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [t1_topk.c3], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
7 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
8 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 4(end) **************
|
|
|
|
*************** Case 5 ***************
|
|
|
|
SQL: select avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by avg(c1) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |374 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |374 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |370 |
|
|
|3 | TOP-N SORT | |5 |361 |
|
|
|4 | MERGE GROUP BY | |70 |355 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|7 | MERGE GROUP BY | |70 |223 |
|
|
|8 | SORT | |90 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC]), topn(5)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
2 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC]), topn(5)
|
|
5 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 5(end) **************
|
|
|
|
*************** Case 6 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ sql_calc_found_rows avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by avg(c1) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |574 |
|
|
|1 | PX COORDINATOR MERGE SORT | |70 |572 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|70 |516 |
|
|
|3 | SORT | |70 |390 |
|
|
|4 | MERGE GROUP BY | |70 |355 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|7 | MERGE GROUP BY | |70 |223 |
|
|
|8 | SORT | |90 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
8 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
2 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
4 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
5 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
7 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 6(end) **************
|
|
|
|
*************** Case 7 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by (select c1 from t1_topk where c2 = 1) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |389 |
|
|
|1 | SUBPLAN FILTER | |5 |389 |
|
|
|2 | PX COORDINATOR | |5 |231 |
|
|
|3 | EXCHANGE OUT DISTR |:EX10001|5 |227 |
|
|
|4 | MERGE GROUP BY | |5 |218 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |6 |217 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|6 |215 |
|
|
|7 | MERGE GROUP BY | |6 |209 |
|
|
|8 | SORT | |6 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
|11| PX COORDINATOR | |2 |158 |
|
|
|12| EXCHANGE OUT DISTR |:EX20000|2 |158 |
|
|
|13| PX PARTITION ITERATOR | |2 |158 |
|
|
|14| TABLE SCAN |t1_topk |2 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
exec_params_(nil), onetime_exprs_([subquery(1)]), init_plan_idxs_(nil)
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil)
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
11 - output([t1_topk.c1]), filter(nil)
|
|
12 - output([t1_topk.c1]), filter(nil), dop=1
|
|
13 - output([t1_topk.c1]), filter(nil),
|
|
force partition granule.
|
|
14 - output([t1_topk.c1]), filter([t1_topk.c2 = 1]),
|
|
access([t1_topk.c1], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:1, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 7(end) **************
|
|
|
|
*************** Case 8 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ distinct avg(c1), avg(c2), avg(c3) from t1_topk where c2 <10 group by c2 order by avg(c1) limit 5;
|
|
|
|
===================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------------
|
|
|0 |LIMIT | |5 |418 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |418 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10002|5 |414 |
|
|
|3 | LIMIT | |5 |405 |
|
|
|4 | MERGE DISTINCT | |5 |405 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR | |5 |404 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10001|5 |400 |
|
|
|7 | MERGE DISTINCT | |5 |391 |
|
|
|8 | SORT | |5 |390 |
|
|
|9 | MERGE GROUP BY | |70 |355 |
|
|
|10| EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|11| EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|12| MERGE GROUP BY | |70 |223 |
|
|
|13| SORT | |90 |208 |
|
|
|14| PX PARTITION ITERATOR | |90 |158 |
|
|
|15| TABLE SCAN |t1_topk |90 |158 |
|
|
===================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil),
|
|
distinct([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))])
|
|
5 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), ASC])
|
|
6 - (#keys=3, [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), dop=1
|
|
7 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil),
|
|
distinct([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))])
|
|
8 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), ASC])
|
|
9 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
10 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
12 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
13 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
14 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
2 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
4 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil),
|
|
distinct([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))])
|
|
5 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2), ASC], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), ASC])
|
|
6 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil)
|
|
7 - (#keys=3, [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), dop=1
|
|
8 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
10 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
15 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
DISTINCT_PUSHDOWN(@"SEL$1")
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 8(end) **************
|
|
|
|
*************** Case 9 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ sum(c1), avg(c2), group_concat(c3, c1) from t1_topk where c2 <10 group by c2 order by avg(c1) limit 5;
|
|
|
|
=============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-------------------------------------------------------------
|
|
|0 |LIMIT | |5 |6434|
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |6434|
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |4883|
|
|
|3 | TOP-N SORT | |5 |1391|
|
|
|4 | MERGE GROUP BY | |70 |291 |
|
|
|5 | SORT | |90 |277 |
|
|
|6 | EXCHANGE IN DISTR | |90 |227 |
|
|
|7 | EXCHANGE OUT DISTR (HASH)|:EX10000|90 |205 |
|
|
|8 | PX PARTITION ITERATOR | |90 |158 |
|
|
|9 | TABLE SCAN |t1_topk |90 |158 |
|
|
=============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / cast(T_FUN_COUNT(t1_topk.c2), DECIMAL(20, 0))], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / cast(T_FUN_COUNT(t1_topk.c1), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))], [T_FUN_SUM(t1_topk.c1) / cast(T_FUN_COUNT(t1_topk.c1), DECIMAL(20, 0))], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))], [T_FUN_SUM(t1_topk.c1) / cast(T_FUN_COUNT(t1_topk.c1), DECIMAL(20, 0))], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / cast(T_FUN_COUNT(t1_topk.c1), DECIMAL(20, 0)), ASC]), topn(5)
|
|
4 - output([T_FUN_SUM(t1_topk.c1)], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_GROUP_CONCAT(t1_topk.c3, cast(t1_topk.c1, VARCHAR(65536)))], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)])
|
|
5 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
NO_USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 9(end) **************
|
|
|
|
*************** Case 10 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ avg(c1), avg(c2), avg(c3) from (select * from t1_topk where c2 <10) as a group by a.c2 order by avg(a.c1) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |374 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |374 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |370 |
|
|
|3 | TOP-N SORT | |5 |361 |
|
|
|4 | MERGE GROUP BY | |70 |355 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |70 |341 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|70 |304 |
|
|
|7 | MERGE GROUP BY | |70 |223 |
|
|
|8 | SORT | |90 |208 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC]), topn(5)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c1], [t1_topk.c3]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC])
|
|
2 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1), ASC]), topn(5)
|
|
5 - output([T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$CFEA49FE")
|
|
FULL(@"SEL$CFEA49FE" "opt"."t1_topk"@"SEL$2")
|
|
MERGE(@"SEL$2" > "SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 10(end) **************
|
|
|
|
*************** Case 11 ***************
|
|
|
|
SQL: select /*+topk(20 6)*/ distinct avg(t1_topk.c1), avg(t1_topk.c2), avg(t1_topk.c3) from t1_topk , t2_topk group by t1_topk.c2 order by avg(t1_topk.c1) limit 5;
|
|
|
|
=================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST |
|
|
-----------------------------------------------------------------
|
|
|0 |LIMIT | |5 |10333|
|
|
|1 | MERGE DISTINCT | |5 |10333|
|
|
|2 | SORT | |5 |10332|
|
|
|3 | HASH GROUP BY | |75 |10295|
|
|
|4 | NESTED-LOOP JOIN CARTESIAN | |20000 |3350 |
|
|
|5 | PX COORDINATOR | |100 |587 |
|
|
|6 | EXCHANGE OUT DISTR |:EX10001|100 |553 |
|
|
|7 | SUBPLAN SCAN |VIEW1 |100 |478 |
|
|
|8 | HASH GROUP BY | |100 |477 |
|
|
|9 | EXCHANGE IN DISTR | |100 |417 |
|
|
|10| EXCHANGE OUT DISTR (HASH)|:EX10000|100 |364 |
|
|
|11| HASH GROUP BY | |100 |247 |
|
|
|12| PX PARTITION ITERATOR | |200 |155 |
|
|
|13| TABLE SCAN |t1_topk |200 |155 |
|
|
|14| MATERIAL | |200 |188 |
|
|
|15| PX COORDINATOR | |200 |187 |
|
|
|16| EXCHANGE OUT DISTR |:EX20000|200 |176 |
|
|
|17| PX PARTITION ITERATOR | |200 |155 |
|
|
|18| TABLE SCAN |t2_topk |200 |155 |
|
|
=================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil),
|
|
distinct([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))])
|
|
2 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), ASC], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), ASC])
|
|
3 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([VIEW1.t1_topk.c2]), agg_func([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
4 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.t1_topk.c2]), filter(nil),
|
|
=======
|
|
0 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))]), filter(nil),
|
|
distinct([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))])
|
|
2 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))]), filter(nil), sort_keys([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1)), ASC], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2)), ASC], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1)), ASC])
|
|
3 - output([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [cast(T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3)) / T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3)), DOUBLE(-1, -1))]), filter(nil),
|
|
group([VIEW1.t1_topk.c2]), agg_func([T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(VIEW1.T_FUN_SUM(t1_topk.c3))], [T_FUN_COUNT_SUM(VIEW1.T_FUN_COUNT(t1_topk.c3))])
|
|
4 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c3)], [VIEW1.T_FUN_COUNT(t1_topk.c3)], [VIEW1.t1_topk.c2]), filter(nil), sort_keys([VIEW1.t1_topk.c2, ASC])
|
|
5 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c3)], [VIEW1.T_FUN_COUNT(t1_topk.c3)], [VIEW1.t1_topk.c2]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
conds(nil), nl_params_(nil), batch_join=false
|
|
5 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.t1_topk.c2]), filter(nil)
|
|
6 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.t1_topk.c2]), filter(nil), dop=1
|
|
7 - output([VIEW1.t1_topk.c2], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
access([VIEW1.t1_topk.c2], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)], [VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_COUNT(t1_topk.c2)], [VIEW1.T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [VIEW1.T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil)
|
|
10 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil), dop=1
|
|
11 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
13 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
14 - output(nil), filter(nil)
|
|
15 - output(nil), filter(nil)
|
|
16 - output(nil), filter(nil), dop=1
|
|
17 - output(nil), filter(nil),
|
|
force partition granule.
|
|
18 - output(nil), filter(nil),
|
|
access([t2_topk.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t2_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
USE_HASH_AGGREGATION(@"SEL$94AA298F")
|
|
LEADING(@"SEL$94AA298F" ("VIEW1"@"SEL$1" "opt"."t2_topk"@"SEL$1"))
|
|
USE_NL(@"SEL$94AA298F" "opt"."t2_topk"@"SEL$1")
|
|
PQ_DISTRIBUTE(@"SEL$94AA298F" "opt"."t2_topk"@"SEL$1" LOCAL LOCAL)
|
|
USE_NL_MATERIALIZATION(@"SEL$94AA298F" "opt"."t2_topk"@"SEL$1")
|
|
GBY_PUSHDOWN(@"SEL$94AA298D")
|
|
USE_HASH_AGGREGATION(@"SEL$94AA298D")
|
|
FULL(@"SEL$94AA298D" "opt"."t1_topk"@"SEL$1")
|
|
FULL(@"SEL$94AA298F" "opt"."t2_topk"@"SEL$1")
|
|
PLACE_GROUP_BY(@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
NO_USE_HASH_AGGREGATION(@"SEL$1")
|
|
LEADING(@"SEL$1" ("VIEW1"@"SEL$1" "opt.t2_topk"@"SEL$1" ))
|
|
USE_NL(@"SEL$1" ("opt.t2_topk"@"SEL$1" ))
|
|
PQ_DISTRIBUTE(@"SEL$1" ("opt.t2_topk"@"SEL$1" ) LOCAL LOCAL)
|
|
USE_NL_MATERIALIZATION(@"SEL$1" ("opt.t2_topk"@"SEL$1" ))
|
|
NO_USE_HASH_AGGREGATION(@"SEL$2")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
FULL(@"SEL$1" "opt"."t2_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:200, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
t2_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:200, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t2_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
|
|
|
|
*************** Case 11(end) **************
|
|
|
|
*************** Case 12 ***************
|
|
|
|
SQL: select /*+topk(1 2) use_hash_aggregation*/ c3, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by c3 limit 1;
|
|
|
|
============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------
|
|
|0 |LIMIT | |1 |465 |
|
|
|1 | PX COORDINATOR MERGE SORT | |1 |465 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|1 |464 |
|
|
|3 | TOP-N SORT | |1 |462 |
|
|
|4 | HASH GROUP BY | |70 |457 |
|
|
|5 | EXCHANGE IN DISTR | |70 |413 |
|
|
|6 | EXCHANGE OUT DISTR (HASH)|:EX10000|70 |365 |
|
|
|7 | SORT | |70 |260 |
|
|
|8 | HASH GROUP BY | |70 |206 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(1), offset(nil)
|
|
1 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
2 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(1)
|
|
4 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil)
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC]), minimum_row_count:2 top_precision:1 , limit(1), offset(nil)
|
|
8 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
USE_HASH_AGGREGATION
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
<<<<<<< HEAD
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 12(end) **************
|
|
|
|
*************** Case 13 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c3, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by c3 limit 1;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |1 |398 |
|
|
|1 | PX COORDINATOR MERGE SORT | |1 |398 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|1 |397 |
|
|
|3 | TOP-N SORT | |1 |395 |
|
|
|4 | MERGE GROUP BY | |70 |390 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |1 |385 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|1 |385 |
|
|
|7 | TOPK | |70 |280 |
|
|
|8 | SORT | |70 |278 |
|
|
|9 | MERGE GROUP BY | |70 |224 |
|
|
|10| SORT | |90 |208 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(1), offset(nil)
|
|
1 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
2 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(1)
|
|
4 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(1), offset(nil)
|
|
8 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
9 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c3], [t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 13(end) **************
|
|
|
|
*************** Case 14 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c3, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by c3 limit 1 offset 4;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |1 |467 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |466 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |461 |
|
|
|3 | TOP-N SORT | |5 |448 |
|
|
|4 | MERGE GROUP BY | |79 |432 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |5 |426 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|5 |423 |
|
|
|7 | TOPK | |79 |304 |
|
|
|8 | SORT | |79 |303 |
|
|
|9 | MERGE GROUP BY | |79 |240 |
|
|
|10| SORT | |108 |220 |
|
|
|11| PX PARTITION ITERATOR | |108 |158 |
|
|
|12| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(1), offset(?)
|
|
1 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
2 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(1 + ?)
|
|
4 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(1), offset(?)
|
|
8 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
9 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c3], [t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}, {obj:{"BIGINT":4}, accuracy:{length:1, precision:1, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 14(end) **************
|
|
|
|
*************** Case 15 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c3, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by c3 limit 1 offset 1000;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |0 |819 |
|
|
|1 | PX COORDINATOR MERGE SORT | |79 |817 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|79 |729 |
|
|
|3 | TOP-N SORT | |79 |533 |
|
|
|4 | MERGE GROUP BY | |79 |495 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |79 |476 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|79 |423 |
|
|
|7 | TOPK | |79 |304 |
|
|
|8 | SORT | |79 |303 |
|
|
|9 | MERGE GROUP BY | |79 |240 |
|
|
|10| SORT | |108 |220 |
|
|
|11| PX PARTITION ITERATOR | |108 |158 |
|
|
|12| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(1), offset(?)
|
|
1 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
2 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(1 + ?)
|
|
4 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(1), offset(?)
|
|
8 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
9 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c3], [t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}, {obj:{"BIGINT":1000}, accuracy:{length:4, precision:4, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 15(end) **************
|
|
|
|
*************** Case 16 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c3, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by c3 limit 0;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |0 |395 |
|
|
|1 | PX COORDINATOR MERGE SORT | |0 |395 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|0 |395 |
|
|
|3 | TOP-N SORT | |0 |395 |
|
|
|4 | MERGE GROUP BY | |70 |390 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |1 |385 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|1 |385 |
|
|
|7 | TOPK | |70 |280 |
|
|
|8 | SORT | |70 |278 |
|
|
|9 | MERGE GROUP BY | |70 |224 |
|
|
|10| SORT | |90 |208 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(0), offset(nil)
|
|
1 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
2 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(0)
|
|
4 - output([t1_topk.c3], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(0), offset(nil)
|
|
8 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
9 - output([t1_topk.c3], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c3], [t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 16(end) **************
|
|
|
|
*************** Case 17 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c2, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by avg(c3), sum(c1)/sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |417 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |417 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |411 |
|
|
|3 | TOP-N SORT | |5 |398 |
|
|
|4 | MERGE GROUP BY | |70 |388 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |5 |382 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|5 |379 |
|
|
|7 | TOPK | |70 |268 |
|
|
|8 | SORT | |70 |267 |
|
|
|9 | MERGE GROUP BY | |70 |226 |
|
|
|10| SORT | |90 |208 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), ASC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), ASC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), ASC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), ASC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), ASC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 17(end) **************
|
|
|
|
*************** Case 18 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c1, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by avg(c3) desc, sum(c1)/sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |417 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |417 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |411 |
|
|
|3 | TOP-N SORT | |5 |398 |
|
|
|4 | MERGE GROUP BY | |70 |388 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |5 |382 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|5 |379 |
|
|
|7 | TOPK | |70 |268 |
|
|
|8 | SORT | |70 |267 |
|
|
|9 | MERGE GROUP BY | |70 |226 |
|
|
|10| SORT | |90 |208 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c1], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c1], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(5), offset(nil)
|
|
8 - output([t1_topk.c1], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c1], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [t1_topk.c2], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c1], [t1_topk.c3], [t1_topk.c2]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c1], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 18(end) **************
|
|
|
|
*************** Case 19 ***************
|
|
|
|
SQL: select /*+topk(1 1)*/ c2, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <10 group by c2 order by avg(c3) desc, sum(c1)/sum(c2) + avg(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |427 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |427 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |420 |
|
|
|3 | TOP-N SORT | |5 |406 |
|
|
|4 | MERGE GROUP BY | |70 |396 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |5 |390 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|5 |387 |
|
|
|7 | TOPK | |70 |270 |
|
|
|8 | SORT | |70 |268 |
|
|
|9 | MERGE GROUP BY | |70 |228 |
|
|
|10| SORT | |90 |208 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2)), DECIMAL(20, 0)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c2))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:1 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / cast(T_FUN_COUNT(t1_topk.c2), DECIMAL(20, 0)), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c2)])
|
|
10 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) / T_FUN_SUM(t1_topk.c2) + T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [T_FUN_COUNT(t1_topk.c2)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 19(end) **************
|
|
|
|
*************** Case 20 ***************
|
|
|
|
SQL: select /*+topk(0 0)*/ c2, sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by avg(c3) desc, sum(c1)+sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |474 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |474 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |468 |
|
|
|3 | TOP-N SORT | |5 |455 |
|
|
|4 | MERGE GROUP BY | |79 |444 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |79 |424 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|79 |367 |
|
|
|7 | MERGE GROUP BY | |79 |242 |
|
|
|8 | SORT | |108 |220 |
|
|
|9 | PX PARTITION ITERATOR | |108 |158 |
|
|
|10| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
8 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 20(end) **************
|
|
|
|
*************** Case 21 ***************
|
|
|
|
SQL: select /*+topk(50 0)*/ c2, sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by avg(c3) desc, sum(c1)+sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |487 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |487 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |481 |
|
|
|3 | TOP-N SORT | |5 |467 |
|
|
|4 | MERGE GROUP BY | |79 |457 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |40 |444 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|40 |416 |
|
|
|7 | TOPK | |79 |290 |
|
|
|8 | SORT | |79 |289 |
|
|
|9 | MERGE GROUP BY | |79 |242 |
|
|
|10| SORT | |108 |220 |
|
|
|11| PX PARTITION ITERATOR | |108 |158 |
|
|
|12| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:0 top_precision:50 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 21(end) **************
|
|
|
|
*************** Case 22 ***************
|
|
|
|
SQL: select /*+topk(10000 1)*/ c2, sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by avg(c3) desc, sum(c1)+sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |522 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |522 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |516 |
|
|
|3 | TOP-N SORT | |5 |503 |
|
|
|4 | MERGE GROUP BY | |79 |492 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |79 |472 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|79 |416 |
|
|
|7 | TOPK | |79 |290 |
|
|
|8 | SORT | |79 |289 |
|
|
|9 | MERGE GROUP BY | |79 |242 |
|
|
|10| SORT | |108 |220 |
|
|
|11| PX PARTITION ITERATOR | |108 |158 |
|
|
|12| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:1 top_precision:10000 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 22(end) **************
|
|
|
|
*************** Case 23 ***************
|
|
|
|
SQL: select /*+topk(1 10000)*/ c2, sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk where c2 <12 group by c2 order by avg(c3) desc, sum(c1)+sum(c2) limit 5;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |522 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |522 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |516 |
|
|
|3 | TOP-N SORT | |5 |503 |
|
|
|4 | MERGE GROUP BY | |79 |492 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |79 |472 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|79 |416 |
|
|
|7 | TOPK | |79 |290 |
|
|
|8 | SORT | |79 |289 |
|
|
|9 | MERGE GROUP BY | |79 |242 |
|
|
|10| SORT | |108 |220 |
|
|
|11| PX PARTITION ITERATOR | |108 |158 |
|
|
|12| TABLE SCAN |t1_topk |108 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
<<<<<<< HEAD
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))], [T_FUN_COUNT_SUM(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:10000 top_precision:1 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))) / cast(T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1))), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_SUM(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
10 - output([t1_topk.c2], [t1_topk.c3], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
=======
|
|
0 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2) / T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3) / T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(5), offset(nil)
|
|
1 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC])
|
|
2 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
3 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), limit(5), offset(nil)
|
|
4 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1)), DESC], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)], [cast(T_FUN_SUM(t1_topk.c3) / T_FUN_COUNT(t1_topk.c3), DOUBLE(-1, -1))], [T_FUN_SUM(t1_topk.c1) + T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c3)])
|
|
6 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil)
|
|
7 - (#keys=1, [t1_topk.c2]), output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil), dop=1
|
|
8 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter(nil),
|
|
>>>>>>> 4ace446e738... fix aggr convert lost origin type
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2], [t1_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:108, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":12}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 23(end) **************
|
|
|
|
*************** Case 24 ***************
|
|
|
|
SQL: select * from (select /*+topk(0 4)*/ avg(c1) from t1_topk where c2 <10 group by c2 order by sum(c2) limit 5) as a;
|
|
|
|
==============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
--------------------------------------------------------------
|
|
|0 |LIMIT | |5 |295 |
|
|
|1 | PX COORDINATOR MERGE SORT | |5 |295 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001|5 |293 |
|
|
|3 | TOP-N SORT | |5 |289 |
|
|
|4 | MERGE GROUP BY | |70 |285 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |5 |283 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000|5 |282 |
|
|
|7 | TOPK | |70 |248 |
|
|
|8 | SORT | |70 |247 |
|
|
|9 | MERGE GROUP BY | |70 |216 |
|
|
|10| SORT | |90 |207 |
|
|
|11| PX PARTITION ITERATOR | |90 |158 |
|
|
|12| TABLE SCAN |t1_topk |90 |158 |
|
|
==============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))]), filter(nil), limit(5), offset(nil)
|
|
1 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
2 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
3 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), minimum_row_count:4 top_precision:0 limit(5), offset(nil)
|
|
8 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c2), ASC])
|
|
9 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
10 - output([t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - output([t1_topk.c1], [t1_topk.c2]), filter(nil),
|
|
force partition granule.
|
|
12 - output([t1_topk.c1], [t1_topk.c2]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$F53088DF" "opt"."t1_topk"@"SEL$2")
|
|
MERGE(@"SEL$2" < "SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$2")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 24(end) **************
|
|
|
|
*************** Case 25 ***************
|
|
|
|
SQL: select c1 from t1_topk where c1 < any (select /*+topk(0 4)*/ avg(c1) from t1_topk where c2 <10 group by c2 order by sum(c2) limit 5);
|
|
|
|
=================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------------
|
|
|0 |NESTED-LOOP SEMI JOIN | |67 |565 |
|
|
|1 | PX COORDINATOR | |200 |187 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|200 |176 |
|
|
|3 | PX PARTITION ITERATOR | |200 |155 |
|
|
|4 | TABLE SCAN |t1_topk |200 |155 |
|
|
|5 | MATERIAL | |5 |295 |
|
|
|6 | SUBPLAN SCAN |VIEW1 |5 |295 |
|
|
|7 | LIMIT | |5 |295 |
|
|
|8 | PX COORDINATOR MERGE SORT | |5 |295 |
|
|
|9 | EXCHANGE OUT DISTR |:EX20001|5 |293 |
|
|
|10| TOP-N SORT | |5 |289 |
|
|
|11| MERGE GROUP BY | |70 |285 |
|
|
|12| EXCHANGE IN MERGE SORT DISTR| |5 |283 |
|
|
|13| EXCHANGE OUT DISTR (HASH) |:EX20000|5 |282 |
|
|
|14| TOPK | |70 |248 |
|
|
|15| SORT | |70 |247 |
|
|
|16| MERGE GROUP BY | |70 |216 |
|
|
|17| SORT | |90 |207 |
|
|
|18| PX PARTITION ITERATOR | |90 |158 |
|
|
|19| TABLE SCAN |t1_topk |90 |158 |
|
|
=================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c1]), filter(nil),
|
|
conds([cast(t1_topk.c1, DECIMAL(11, 0)) < VIEW1.avg(c1)]), nl_params_(nil), batch_join=false
|
|
1 - output([t1_topk.c1]), filter(nil)
|
|
2 - output([t1_topk.c1]), filter(nil), dop=1
|
|
3 - output([t1_topk.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1_topk.c1]), filter(nil),
|
|
access([t1_topk.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
5 - output([VIEW1.avg(c1)]), filter(nil)
|
|
6 - output([VIEW1.avg(c1)]), filter(nil),
|
|
access([VIEW1.avg(c1)])
|
|
7 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))]), filter(nil), limit(5), offset(nil)
|
|
8 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
9 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
10 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(5)
|
|
11 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))])
|
|
12 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
13 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
14 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), minimum_row_count:4 top_precision:0 limit(5), offset(nil)
|
|
15 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c2), ASC])
|
|
16 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
17 - output([t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
18 - output([t1_topk.c1], [t1_topk.c2]), filter(nil),
|
|
force partition granule.
|
|
19 - output([t1_topk.c1], [t1_topk.c2]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
LEADING(@"SEL$6FCAE2AA" ("opt"."t1_topk"@"SEL$1" "VIEW1"@"SEL$1"))
|
|
USE_NL(@"SEL$6FCAE2AA" "VIEW1"@"SEL$1")
|
|
PQ_DISTRIBUTE(@"SEL$6FCAE2AA" "VIEW1"@"SEL$1" LOCAL LOCAL)
|
|
USE_NL_MATERIALIZATION(@"SEL$6FCAE2AA" "VIEW1"@"SEL$1")
|
|
FULL(@"SEL$6FCAE2AA" "opt"."t1_topk"@"SEL$1")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
UNNEST(@"SEL$2")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
LEADING(@"SEL$1" ("opt.t1_topk"@"SEL$1" "VIEW1"@"SEL$1" ))
|
|
USE_NL(@"SEL$1" ("VIEW1"@"SEL$1" ))
|
|
PQ_DISTRIBUTE(@"SEL$1" ("VIEW1"@"SEL$1" ) LOCAL LOCAL)
|
|
USE_NL_MATERIALIZATION(@"SEL$1" ("VIEW1"@"SEL$1" ))
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
USE_HASH_AGGREGATION(@"SEL$2")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:200, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 25(end) **************
|
|
|
|
*************** Case 26 ***************
|
|
|
|
SQL: select /*+topk(0 4), no_use_px*/ avg(c1) from t1_topk where c2 <10 group by c2 order by sum(c2) limit 5 union (select /*+topk(0 10)*/ sum(c1) from t1_topk where c2 <10 group by c2 order by sum(c2) limit 7);
|
|
|
|
==================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
------------------------------------------------------------------
|
|
|0 |TEMP TABLE TRANSFORMATION | |12 |381 |
|
|
|1 | PX COORDINATOR | |70 |355 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10001 |70 |330 |
|
|
|3 | TEMP TABLE INSERT |TEMP1 |70 |276 |
|
|
|4 | MERGE GROUP BY | |70 |273 |
|
|
|5 | EXCHANGE IN MERGE SORT DISTR| |70 |265 |
|
|
|6 | EXCHANGE OUT DISTR (HASH) |:EX10000 |70 |250 |
|
|
|7 | MERGE GROUP BY | |70 |216 |
|
|
|8 | SORT | |90 |207 |
|
|
|9 | PX PARTITION ITERATOR | |90 |158 |
|
|
|10| TABLE SCAN |t1_topk |90 |158 |
|
|
|11| HASH UNION DISTINCT | |12 |26 |
|
|
|12| LIMIT | |5 |10 |
|
|
|13| PX COORDINATOR MERGE SORT | |5 |10 |
|
|
|14| EXCHANGE OUT DISTR |:EX20000 |5 |10 |
|
|
|15| TOP-N SORT | |5 |8 |
|
|
|16| TEMP TABLE ACCESS |VIEW1(TEMP1)|70 |4 |
|
|
|17| LIMIT | |7 |11 |
|
|
|18| PX COORDINATOR MERGE SORT | |7 |11 |
|
|
|19| EXCHANGE OUT DISTR |:EX30000 |7 |10 |
|
|
|20| TOP-N SORT | |7 |8 |
|
|
|21| TEMP TABLE ACCESS |VIEW2(TEMP1)|70 |4 |
|
|
==================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([UNION([1])]), filter(nil)
|
|
1 - output(nil), filter(nil)
|
|
2 - output(nil), filter(nil), dop=1
|
|
3 - output(nil), filter(nil)
|
|
4 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))])
|
|
5 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
6 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
7 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
8 - output([t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
9 - output([t1_topk.c1], [t1_topk.c2]), filter(nil),
|
|
force partition granule.
|
|
10 - output([t1_topk.c1], [t1_topk.c2]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
11 - output([UNION([1])]), filter(nil)
|
|
12 - output([VIEW1.T_FUN_SUM(t1_topk.c1) / cast(VIEW1.T_FUN_COUNT(t1_topk.c1), DECIMAL(20, 0))]), filter(nil), limit(5), offset(nil)
|
|
13 - output([VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([VIEW1.T_FUN_SUM(t1_topk.c2), ASC])
|
|
14 - output([VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)]), filter(nil), dop=1
|
|
15 - output([VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)]), filter(nil), sort_keys([VIEW1.T_FUN_SUM(t1_topk.c2), ASC]), topn(5)
|
|
16 - output([VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)]), filter(nil),
|
|
access([VIEW1.T_FUN_SUM(t1_topk.c2)], [VIEW1.T_FUN_SUM(t1_topk.c1)], [VIEW1.T_FUN_COUNT(t1_topk.c1)])
|
|
17 - output([VIEW2.T_FUN_SUM(t1_topk.c1)]), filter(nil), limit(7), offset(nil)
|
|
18 - output([VIEW2.T_FUN_SUM(t1_topk.c1)]), filter(nil), sort_keys([VIEW2.T_FUN_SUM(t1_topk.c2), ASC])
|
|
19 - output([VIEW2.T_FUN_SUM(t1_topk.c1)], [VIEW2.T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
20 - output([VIEW2.T_FUN_SUM(t1_topk.c1)], [VIEW2.T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([VIEW2.T_FUN_SUM(t1_topk.c2), ASC]), topn(7)
|
|
21 - output([VIEW2.T_FUN_SUM(t1_topk.c1)], [VIEW2.T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
access([VIEW2.T_FUN_SUM(t1_topk.c1)], [VIEW2.T_FUN_SUM(t1_topk.c2)])
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
GBY_PUSHDOWN(@"SEL$21FA2A17")
|
|
FULL(@"SEL$21FA2A17" "opt"."t1_topk"@"SEL$1")
|
|
USE_HASH_SET(@"SET$7AED123F")
|
|
MATERIALIZE(@"SET$1" ("SEL$1", "SEL$2"))
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$4")
|
|
FULL(@"SEL$4" "opt"."t1_topk"@"SEL$4")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}, {obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 26(end) **************
|
|
|
|
*************** Case 27 ***************
|
|
|
|
SQL: select c1 from t1_topk where (select /*+topk(0 10)*/ avg(c1) from t1_topk where c2 <10 group by c2 order by sum(c2) limit 1) > 1 ;
|
|
|
|
===============================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
---------------------------------------------------------------
|
|
|0 |SUBPLAN FILTER | |200 |480 |
|
|
|1 | PX COORDINATOR | |200 |187 |
|
|
|2 | EXCHANGE OUT DISTR |:EX10000|200 |176 |
|
|
|3 | PX PARTITION ITERATOR | |200 |155 |
|
|
|4 | TABLE SCAN |t1_topk |200 |155 |
|
|
|5 | LIMIT | |1 |290 |
|
|
|6 | PX COORDINATOR MERGE SORT | |1 |290 |
|
|
|7 | EXCHANGE OUT DISTR |:EX20001|1 |290 |
|
|
|8 | TOP-N SORT | |1 |289 |
|
|
|9 | MERGE GROUP BY | |70 |286 |
|
|
|10| EXCHANGE IN MERGE SORT DISTR| |10 |284 |
|
|
|11| EXCHANGE OUT DISTR (HASH) |:EX20000|10 |282 |
|
|
|12| TOPK | |70 |248 |
|
|
|13| SORT | |70 |247 |
|
|
|14| MERGE GROUP BY | |70 |216 |
|
|
|15| SORT | |90 |207 |
|
|
|16| PX PARTITION ITERATOR | |90 |158 |
|
|
|17| TABLE SCAN |t1_topk |90 |158 |
|
|
===============================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([t1_topk.c1]), filter(nil),
|
|
exec_params_(nil), onetime_exprs_([subquery(1) > ?]), init_plan_idxs_(nil)
|
|
1 - output([t1_topk.c1]), filter(nil)
|
|
2 - output([t1_topk.c1]), filter(nil), dop=1
|
|
3 - output([t1_topk.c1]), filter(nil),
|
|
force partition granule.
|
|
4 - output([t1_topk.c1]), filter(nil), startup_filter([?]),
|
|
access([t1_topk.c1]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
5 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))]), filter(nil), limit(1), offset(nil)
|
|
6 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC])
|
|
7 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), dop=1
|
|
8 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil), sort_keys([T_FUN_SUM(T_FUN_SUM(t1_topk.c2)), ASC]), topn(1)
|
|
9 - output([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))])
|
|
10 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
11 - (#keys=1, [t1_topk.c2]), output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), dop=1
|
|
12 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), minimum_row_count:10 top_precision:0 limit(1), offset(nil)
|
|
13 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil), sort_keys([T_FUN_SUM(t1_topk.c2), ASC])
|
|
14 - output([t1_topk.c2], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(t1_topk.c2)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)])
|
|
15 - output([t1_topk.c2], [t1_topk.c1]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
16 - output([t1_topk.c1], [t1_topk.c2]), filter(nil),
|
|
force partition granule.
|
|
17 - output([t1_topk.c1], [t1_topk.c2]), filter([t1_topk.c2 < ?]),
|
|
access([t1_topk.c1], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false, filter_before_indexback[false],
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
FULL(@"SEL$1" "opt"."t1_topk"@"SEL$1")
|
|
<<<<<<< HEAD
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
USE_HASH_AGGREGATION(@"SEL$2")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:200, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:90, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
{obj:{"BIGINT":10}, accuracy:{length:2, precision:2, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}, {obj:{"BIGINT":1}, accuracy:{length:1, precision:1, scale:0}, flag:1, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"BIGINT", collation:"binary", coercibility:"NUMERIC"}}, {obj:{"DECIMAL":"1"}, accuracy:{length:-1, precision:-1, scale:-1}, flag:0, raw_text_pos:-1, raw_text_len:-1, param_meta:{type:"DECIMAL", collation:"binary", coercibility:"NUMERIC"}}
|
|
|
|
*************** Case 27(end) **************
|
|
|
|
*************** Case 28 ***************
|
|
|
|
SQL: select * from (select /*+topk(10 5)*/ c3, c1, avg(c1), sum(c2), sum(c1) + sum(c2), count(c3), min(c3), max(c1), sum(c2)/count(c1), sum(c3)/sum(c1) from t1_topk group by c2 order by c3 limit 7) as a left join t2_topk on a.c1 = t2_topk.c1 left join t3_topk on t3_topk.c1 = a.c1;
|
|
|
|
=======================================================================
|
|
|ID|OPERATOR |NAME |EST. ROWS|COST|
|
|
-----------------------------------------------------------------------
|
|
|0 |PX COORDINATOR | |7 |780 |
|
|
|1 | EXCHANGE OUT DISTR |:EX10004|7 |772 |
|
|
|2 | NESTED-LOOP OUTER JOIN | |7 |753 |
|
|
|3 | EXCHANGE IN DISTR | |7 |706 |
|
|
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10003|7 |700 |
|
|
|5 | NESTED-LOOP OUTER JOIN | |7 |684 |
|
|
|6 | EXCHANGE IN DISTR | |7 |637 |
|
|
|7 | EXCHANGE OUT DISTR (PKEY) |:EX10002|7 |632 |
|
|
|8 | SUBPLAN SCAN |a |7 |621 |
|
|
|9 | LIMIT | |7 |620 |
|
|
|10| EXCHANGE IN MERGE SORT DISTR | |7 |620 |
|
|
|11| EXCHANGE OUT DISTR |:EX10001|7 |613 |
|
|
|12| TOP-N SORT | |7 |595 |
|
|
|13| MERGE GROUP BY | |100 |571 |
|
|
|14| EXCHANGE IN MERGE SORT DISTR| |10 |563 |
|
|
|15| EXCHANGE OUT DISTR (HASH) |:EX10000|10 |557 |
|
|
|16| TOPK | |100 |406 |
|
|
|17| SORT | |100 |404 |
|
|
|18| MERGE GROUP BY | |100 |321 |
|
|
|19| SORT | |200 |285 |
|
|
|20| PX PARTITION ITERATOR | |200 |155 |
|
|
|21| TABLE SCAN |t1_topk |200 |155 |
|
|
|22| PX PARTITION ITERATOR | |1 |12 |
|
|
|23| TABLE GET |t2_topk |1 |12 |
|
|
|24| PX PARTITION ITERATOR | |1 |12 |
|
|
|25| TABLE GET |t3_topk |1 |12 |
|
|
=======================================================================
|
|
|
|
Outputs & filters:
|
|
-------------------------------------
|
|
0 - output([INTERNAL_FUNCTION(a.c3, a.c1, a.avg(c1), a.sum(c2), a.sum(c1) + sum(c2), a.count(c3), a.min(c3), a.max(c1), a.sum(c2)/count(c1), a.sum(c3)/sum(c1), t2_topk.c1, t2_topk.c2, t2_topk.c3, t3_topk.c1, t3_topk.c2, t3_topk.c3)]), filter(nil)
|
|
1 - output([INTERNAL_FUNCTION(a.c3, a.c1, a.avg(c1), a.sum(c2), a.sum(c1) + sum(c2), a.count(c3), a.min(c3), a.max(c1), a.sum(c2)/count(c1), a.sum(c3)/sum(c1), t2_topk.c1, t2_topk.c2, t2_topk.c3, t3_topk.c1, t3_topk.c2, t3_topk.c3)]), filter(nil), dop=1
|
|
2 - output([a.c1], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)], [t2_topk.c1], [t2_topk.c2], [t2_topk.c3], [t3_topk.c1], [t3_topk.c2], [t3_topk.c3]), filter(nil),
|
|
conds(nil), nl_params_([a.c1]), batch_join=false
|
|
3 - output([a.c1], [PARTITION_ID], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)], [t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), filter(nil)
|
|
4 - (#keys=1, [a.c1]), output([a.c1], [PARTITION_ID], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)], [t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), filter(nil), dop=1
|
|
5 - output([a.c1], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)], [t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), filter(nil),
|
|
conds(nil), nl_params_([a.c1]), batch_join=false
|
|
6 - output([a.c1], [PARTITION_ID], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)]), filter(nil)
|
|
7 - (#keys=1, [a.c1]), output([a.c1], [PARTITION_ID], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)]), filter(nil), is_single, dop=1
|
|
8 - output([a.c1], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)]), filter(nil),
|
|
access([a.c1], [a.c3], [a.avg(c1)], [a.sum(c2)], [a.sum(c1) + sum(c2)], [a.count(c3)], [a.min(c3)], [a.max(c1)], [a.sum(c2)/count(c1)], [a.sum(c3)/sum(c1)])
|
|
9 - output([t1_topk.c3], [t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1)) + T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2)) / cast(T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1)), DECIMAL(20, 0))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))) / cast(T_FUN_SUM(T_FUN_SUM(t1_topk.c1)), DOUBLE(-1, -1))]), filter(nil), limit(7), offset(nil)
|
|
10 - output([t1_topk.c3], [t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
11 - output([t1_topk.c3], [t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), dop=1
|
|
12 - output([t1_topk.c3], [t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil), sort_keys([t1_topk.c3, ASC]), topn(7)
|
|
13 - output([t1_topk.c3], [t1_topk.c1], [T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(T_FUN_SUM(t1_topk.c2))], [T_FUN_SUM(T_FUN_SUM(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c3))], [T_FUN_MIN(T_FUN_MIN(t1_topk.c3))], [T_FUN_MAX(T_FUN_MAX(t1_topk.c1))], [T_FUN_COUNT_SUM(T_FUN_COUNT(t1_topk.c1))], [T_FUN_SUM(T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1))))])
|
|
14 - output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
15 - (#keys=1, [t1_topk.c2]), output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), dop=1
|
|
16 - output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), minimum_row_count:5 top_precision:10 limit(7), offset(nil)
|
|
17 - output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil), sort_keys([t1_topk.c3, ASC])
|
|
18 - output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2], [T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)]), filter(nil),
|
|
group([t1_topk.c2]), agg_func([T_FUN_SUM(t1_topk.c2)], [T_FUN_SUM(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c3)], [T_FUN_MIN(t1_topk.c3)], [T_FUN_MAX(t1_topk.c1)], [T_FUN_COUNT(t1_topk.c1)], [T_FUN_SUM(cast(t1_topk.c3, DOUBLE(-1, -1)))])
|
|
19 - output([t1_topk.c3], [t1_topk.c1], [t1_topk.c2]), filter(nil), sort_keys([t1_topk.c2, ASC])
|
|
20 - output([t1_topk.c1], [t1_topk.c3], [t1_topk.c2]), filter(nil),
|
|
force partition granule.
|
|
21 - output([t1_topk.c1], [t1_topk.c3], [t1_topk.c2]), filter(nil),
|
|
access([t1_topk.c1], [t1_topk.c3], [t1_topk.c2]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t1_topk.c1]), range(MIN ; MAX)always true
|
|
22 - output([t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
23 - output([t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), filter(nil),
|
|
access([t2_topk.c1], [t2_topk.c2], [t2_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t2_topk.c1]), range(MIN ; MAX),
|
|
range_cond([? = t2_topk.c1])
|
|
24 - output([t3_topk.c1], [t3_topk.c2], [t3_topk.c3]), filter(nil),
|
|
affinitize, force partition granule.
|
|
25 - output([t3_topk.c1], [t3_topk.c2], [t3_topk.c3]), filter(nil),
|
|
access([t3_topk.c1], [t3_topk.c2], [t3_topk.c3]), partitions(p[0-1]),
|
|
is_index_back=false,
|
|
range_key([t3_topk.c1]), range(MIN ; MAX),
|
|
range_cond([t3_topk.c1 = ?])
|
|
|
|
Used Hint:
|
|
-------------------------------------
|
|
/*+
|
|
*/
|
|
|
|
Outline Data:
|
|
-------------------------------------
|
|
/*+
|
|
BEGIN_OUTLINE_DATA
|
|
<<<<<<< HEAD
|
|
LEADING(@"SEL$1" (("a"@"SEL$1" "opt"."t2_topk"@"SEL$1") "opt"."t3_topk"@"SEL$1"))
|
|
USE_NL(@"SEL$1" "opt"."t3_topk"@"SEL$1")
|
|
PQ_DISTRIBUTE(@"SEL$1" "opt"."t3_topk"@"SEL$1" PARTITION NONE)
|
|
USE_NL(@"SEL$1" "opt"."t2_topk"@"SEL$1")
|
|
PQ_DISTRIBUTE(@"SEL$1" "opt"."t2_topk"@"SEL$1" PARTITION NONE)
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
FULL(@"SEL$1" "opt"."t2_topk"@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t3_topk"@"SEL$1")
|
|
OPTIMIZER_FEATURES_ENABLE('4.0.0.0')
|
|
=======
|
|
LEADING(@"SEL$1" (("a"@"SEL$1" "opt.t2_topk"@"SEL$1" )"opt.t3_topk"@"SEL$1" ))
|
|
USE_HASH(@"SEL$1" ("opt.t3_topk"@"SEL$1" ))
|
|
PQ_DISTRIBUTE(@"SEL$1" ("opt.t3_topk"@"SEL$1" ) PARTITION NONE)
|
|
USE_HASH(@"SEL$1" ("opt.t2_topk"@"SEL$1" ))
|
|
PQ_DISTRIBUTE(@"SEL$1" ("opt.t2_topk"@"SEL$1" ) PARTITION NONE)
|
|
USE_HASH_AGGREGATION(@"SEL$2")
|
|
FULL(@"SEL$2" "opt"."t1_topk"@"SEL$2")
|
|
FULL(@"SEL$1" "opt"."t2_topk"@"SEL$1")
|
|
FULL(@"SEL$1" "opt"."t3_topk"@"SEL$1")
|
|
>>>>>>> implement spm part1
|
|
END_OUTLINE_DATA
|
|
*/
|
|
|
|
Plan Type:
|
|
-------------------------------------
|
|
DISTRIBUTED
|
|
|
|
Optimization Info:
|
|
-------------------------------------
|
|
t1_topk:table_rows:200, physical_range_rows:200, logical_range_rows:200, index_back_rows:0, output_rows:200, est_method:default_stat, optimization_method=cost_based, avaiable_index_name[t1_topk]
|
|
|
|
t2_topk:table_rows:200, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:default_stat, optimization_method=rule_based, heuristic_rule=unique_index_without_indexback
|
|
|
|
|
|
t3_topk:table_rows:200, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:default_stat, optimization_method=rule_based, heuristic_rule=unique_index_without_indexback
|
|
|
|
|
|
|
|
Parameters:
|
|
-------------------------------------
|
|
|
|
|
|
*************** Case 28(end) **************
|
|
|