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)  ************** 
 | |
| 
 | 
