| == Abstract Syntax Tree == |
| LogicalProject(category=[$0], shopId=[$1], sum_num=[$2], max_num=[$3], rank_num=[$4]) |
| +- LogicalFilter(condition=[<=($4, 2)]) |
| +- LogicalProject(category=[$0], shopId=[$1], sum_num=[$2], max_num=[$3], rank_num=[ROW_NUMBER() OVER (PARTITION BY $0 ORDER BY $2 DESC NULLS LAST, $3 NULLS FIRST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)]) |
| +- LogicalTableScan(table=[[builtin, default, MyView]]) |
| |
| LogicalProject(category=[$0], shopId=[$1], avg_num=[$2], cnt_num=[$3], rank_num=[$4]) |
| +- LogicalFilter(condition=[<=($4, 2)]) |
| +- LogicalProject(category=[$0], shopId=[$1], avg_num=[$4], cnt_num=[$5], rank_num=[ROW_NUMBER() OVER (PARTITION BY $0 ORDER BY $4 DESC NULLS LAST, $5 NULLS FIRST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)]) |
| +- LogicalTableScan(table=[[builtin, default, MyView]]) |
| |
| == Optimized Logical Plan == |
| StreamExecCalc(select=[category, shopId, CASE(=($f3, 0), null, sum_num) AS sum_num, max_num, CAST(/(CAST(CASE(=($f3, 0), null, sum_num)), $f3)) AS avg_num, $f3 AS cnt_num], retract=[true], accMode=[AccRetract], reuse_id=[1]) |
| +- StreamExecGroupAggregate(groupBy=[category, shopId], select=[category, shopId, $SUM0(num) AS sum_num, COUNT(num) AS $f3, MAX(num) AS max_num], retract=[true], accMode=[AccRetract]) |
| +- StreamExecExchange(distribution=[hash[category, shopId]], retract=[true], accMode=[Acc]) |
| +- StreamExecDataStreamScan(table=[[builtin, default, _DataStreamTable_0]], retract=[true], accMode=[Acc]) |
| |
| StreamExecSink(fields=[category, shopId, sum_num, max_num, rank_num], retract=[false], accMode=[AccRetract]) |
| +- StreamExecCalc(select=[category, shopId, sum_num, max_num, w0$o0], retract=[true], accMode=[AccRetract]) |
| +- StreamExecRank(rankFunction=[ROW_NUMBER], partitionBy=[category], orderBy=[sum_num DESC, max_num ASC], rankRange=[rankStart=1, rankEnd=2], strategy=[RetractRank], select=[*, rowNum], retract=[true], accMode=[AccRetract]) |
| +- StreamExecExchange(distribution=[hash[category]], retract=[true], accMode=[AccRetract]) |
| +- Reused(reference_id=[1]) |
| |
| StreamExecSink(fields=[category, shopId, avg_num, cnt_num, rank_num], retract=[false], accMode=[AccRetract]) |
| +- StreamExecCalc(select=[category, shopId, avg_num, cnt_num, w0$o0], retract=[true], accMode=[AccRetract]) |
| +- StreamExecRank(rankFunction=[ROW_NUMBER], partitionBy=[category], orderBy=[avg_num DESC, cnt_num ASC], rankRange=[rankStart=1, rankEnd=2], strategy=[RetractRank], select=[*, rowNum], retract=[true], accMode=[AccRetract]) |
| +- StreamExecExchange(distribution=[hash[category]], retract=[true], accMode=[AccRetract]) |
| +- Reused(reference_id=[1]) |
| |
| == Physical Execution Plan == |
| : Data Source |
| content : collect elements with CollectionInputFormat |
| |
| : Operator |
| content : SourceConversion(table:[builtin, default, _DataStreamTable_0], fields:(category, shopId, num)) |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : GroupAggregate(groupBy: (category, shopId), select: (category, shopId, $SUM0(num) AS sum_num, COUNT(num) AS $f3, MAX(num) AS max_num)) |
| ship_strategy : HASH |
| |
| : Operator |
| content : Calc(select: (category, shopId, (($f3 = 0) CASE null CASE sum_num) AS sum_num, max_num, CAST((CAST((($f3 = 0) CASE null CASE sum_num)) / $f3)) AS avg_num, $f3 AS cnt_num)) |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : RetractRank(orderBy: (sum_num DESC, max_num ASC), partitionBy: (category), *, rowNum, rankStart=1, rankEnd=2) |
| ship_strategy : HASH |
| |
| : Operator |
| content : Calc(select: (category, shopId, sum_num, max_num, w0$o0)) |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : SinkConversion to Tuple2 |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : Map |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : RetractRank(orderBy: (avg_num DESC, cnt_num ASC), partitionBy: (category), *, rowNum, rankStart=1, rankEnd=2) |
| ship_strategy : HASH |
| |
| : Operator |
| content : Calc(select: (category, shopId, avg_num, cnt_num, w0$o0)) |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : SinkConversion to Tuple2 |
| ship_strategy : FORWARD |
| |
| : Operator |
| content : Map |
| ship_strategy : FORWARD |
| |
| : Data Sink |
| content : Sink: TestingRetractTableSink |
| ship_strategy : FORWARD |
| |
| : Data Sink |
| content : Sink: TestingRetractTableSink |
| ship_strategy : FORWARD |
| |