diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkMapJoinProc.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkMapJoinProc.java index d966300..98fc7c5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkMapJoinProc.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkMapJoinProc.java @@ -109,6 +109,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procContext, // remember the output name of the reduce sink parentRS.getConf().setOutputName(myWork.getName()); + context.connectedReduceSinks.add(parentRS); } else { List linkWorkList = context.linkOpWithWorkMap.get(childOp); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezProcContext.java ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezProcContext.java index 7581e16..3085edd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezProcContext.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezProcContext.java @@ -120,6 +120,9 @@ public final Map> linkedFileSinks; public final Set fileSinkSet; + // remember which reducesinks we've already connected + public final Set connectedReduceSinks; + @SuppressWarnings("unchecked") public GenTezProcContext(HiveConf conf, ParseContext parseContext, List> moveTask, List> rootTasks, @@ -147,6 +150,7 @@ public GenTezProcContext(HiveConf conf, ParseContext parseContext, this.workWithUnionOperators = new HashSet(); this.linkedFileSinks = new HashMap>(); this.fileSinkSet = new HashSet(); + this.connectedReduceSinks = new HashSet(); rootTasks.add(currentTask); } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java index d13749e..62fb6d4 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezUtils.java @@ -107,6 +107,7 @@ public ReduceWork createReduceWork(GenTezProcContext context, Operator root, tezWork.connect( context.preceedingWork, reduceWork, EdgeType.SIMPLE_EDGE); + context.connectedReduceSinks.add(reduceSink); return reduceWork; } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezWork.java ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezWork.java index 06ea00e..559d08e 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezWork.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/GenTezWork.java @@ -145,6 +145,7 @@ public Object process(Node nd, Stack stack, for (ReduceSinkOperator r: context.linkWorkWithReduceSinkMap.get(parentWork)) { r.getConf().setOutputName(work.getName()); + context.connectedReduceSinks.add(r); } } } @@ -177,6 +178,7 @@ public Object process(Node nd, Stack stack, } // finally hook everything up + LOG.debug("Connecting union work ("+unionWork+") with work ("+work+")"); tezWork.connect(unionWork, work, EdgeType.CONTAINS); unionWork.addUnionOperators(context.currentUnionOperators); context.currentUnionOperators.clear(); @@ -199,6 +201,9 @@ public Object process(Node nd, Stack stack, BaseWork followingWork = context.leafOperatorToFollowingWork.get(operator); + LOG.debug("Second pass. Leaf operator: "+operator + +" has common downstream work:"+followingWork); + // need to add this branch to the key + value info assert operator instanceof ReduceSinkOperator && followingWork instanceof ReduceWork; @@ -212,10 +217,13 @@ public Object process(Node nd, Stack stack, // remember the output name of the reduce sink rs.getConf().setOutputName(rWork.getName()); - if (!context.unionWorkMap.containsKey(operator)) { + if (!context.connectedReduceSinks.contains(rs)) { // add dependency between the two work items tezWork.connect(work, rWork, EdgeType.SIMPLE_EDGE); + context.connectedReduceSinks.add(rs); } + } else { + LOG.debug("First pass. Leaf operator: "+operator); } // No children means we're at the bottom. If there are more operators to scan diff --git ql/src/test/queries/clientpositive/tez_union.q ql/src/test/queries/clientpositive/tez_union.q index 41b9d80..ecfe9cf 100644 --- ql/src/test/queries/clientpositive/tez_union.q +++ ql/src/test/queries/clientpositive/tez_union.q @@ -7,4 +7,15 @@ select s2.key as key, s2.value as value from src s2; select s1.key as key, s1.value as value from src s1 join src s3 on s1.key=s3.key UNION ALL -select s2.key as key, s2.value as value from src s2; \ No newline at end of file +select s2.key as key, s2.value as value from src s2; + +set hive.auto.convert.join=false; + +explain +with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a; + +with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a; diff --git ql/src/test/results/clientpositive/tez/ctas.q.out ql/src/test/results/clientpositive/tez/ctas.q.out index aaac91c..8c3c083 100644 --- ql/src/test/results/clientpositive/tez/ctas.q.out +++ ql/src/test/results/clientpositive/tez/ctas.q.out @@ -797,7 +797,7 @@ STAGE PLANS: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat properties: - columns _col0,_col1 + columns key,value columns.types string:string field.delim , line.delim diff --git ql/src/test/results/clientpositive/tez/groupby3.q.out ql/src/test/results/clientpositive/tez/groupby3.q.out index cb8f0e7..5b9efc9 100644 --- ql/src/test/results/clientpositive/tez/groupby3.q.out +++ ql/src/test/results/clientpositive/tez/groupby3.q.out @@ -69,7 +69,7 @@ STAGE PLANS: Reduce Output Operator sort order: Statistics: Num rows: 1 Data size: 176 Basic stats: COMPLETE Column stats: NONE - value expressions: _col0 (type: double), _col1 (type: struct), _col2 (type: struct), _col3 (type: string), _col4 (type: string), _col5 (type: struct), _col6 (type: struct), _col7 (type: struct), _col8 (type: struct) + value expressions: _col0 (type: double), _col1 (type: struct), _col2 (type: struct), _col3 (type: string), _col4 (type: string), _col5 (type: struct), _col6 (type: struct), _col7 (type: struct), _col8 (type: struct) Reducer 3 Reduce Operator Tree: Group By Operator diff --git ql/src/test/results/clientpositive/tez/insert1.q.out ql/src/test/results/clientpositive/tez/insert1.q.out index 7b8819d..1c16d3d 100644 --- ql/src/test/results/clientpositive/tez/insert1.q.out +++ ql/src/test/results/clientpositive/tez/insert1.q.out @@ -270,10 +270,10 @@ POSTHOOK: Lineage: insert1.value SIMPLE [(insert2)a.FieldSchema(name:value, type STAGE DEPENDENCIES: Stage-2 is a root stage Stage-3 depends on stages: Stage-2 - Stage-0 depends on stages: Stage-3 - Stage-4 depends on stages: Stage-0 Stage-1 depends on stages: Stage-3 - Stage-5 depends on stages: Stage-1 + Stage-4 depends on stages: Stage-1 + Stage-0 depends on stages: Stage-3 + Stage-5 depends on stages: Stage-0 STAGE PLANS: Stage: Stage-2 @@ -319,28 +319,28 @@ STAGE PLANS: Stage: Stage-3 Dependency Collection - Stage: Stage-0 + Stage: Stage-1 Move Operator tables: - replace: false + replace: true table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - name: default.insert1 + name: x.insert1 Stage: Stage-4 Stats-Aggr Operator - Stage: Stage-1 + Stage: Stage-0 Move Operator tables: - replace: true + replace: false table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - name: x.insert1 + name: default.insert1 Stage: Stage-5 Stats-Aggr Operator diff --git ql/src/test/results/clientpositive/tez/limit_pushdown.q.out ql/src/test/results/clientpositive/tez/limit_pushdown.q.out index 7d6b1c7..ee72290 100644 --- ql/src/test/results/clientpositive/tez/limit_pushdown.q.out +++ ql/src/test/results/clientpositive/tez/limit_pushdown.q.out @@ -294,7 +294,7 @@ STAGE PLANS: Map-reduce partition columns: _col0 (type: string) Statistics: Num rows: 29 Data size: 5812 Basic stats: COMPLETE Column stats: NONE TopN Hash Memory Usage: 0.3 - value expressions: _col1 (type: struct) + value expressions: _col1 (type: struct) Reducer 2 Reduce Operator Tree: Group By Operator diff --git ql/src/test/results/clientpositive/tez/load_dyn_part1.q.out ql/src/test/results/clientpositive/tez/load_dyn_part1.q.out index d420caf..fb86f35 100644 --- ql/src/test/results/clientpositive/tez/load_dyn_part1.q.out +++ ql/src/test/results/clientpositive/tez/load_dyn_part1.q.out @@ -49,10 +49,10 @@ POSTHOOK: type: QUERY STAGE DEPENDENCIES: Stage-2 is a root stage Stage-3 depends on stages: Stage-2 - Stage-1 depends on stages: Stage-3 - Stage-4 depends on stages: Stage-1 Stage-0 depends on stages: Stage-3 - Stage-5 depends on stages: Stage-0 + Stage-4 depends on stages: Stage-0 + Stage-1 depends on stages: Stage-3 + Stage-5 depends on stages: Stage-1 STAGE PLANS: Stage: Stage-2 @@ -98,34 +98,34 @@ STAGE PLANS: Stage: Stage-3 Dependency Collection - Stage: Stage-1 + Stage: Stage-0 Move Operator tables: partition: - ds 2008-12-31 + ds hr replace: true table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - name: default.nzhang_part2 + name: default.nzhang_part1 Stage: Stage-4 Stats-Aggr Operator - Stage: Stage-0 + Stage: Stage-1 Move Operator tables: partition: - ds + ds 2008-12-31 hr replace: true table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - name: default.nzhang_part1 + name: default.nzhang_part2 Stage: Stage-5 Stats-Aggr Operator diff --git ql/src/test/results/clientpositive/tez/mapjoin_mapjoin.q.out ql/src/test/results/clientpositive/tez/mapjoin_mapjoin.q.out index bc2c650..284cc03 100644 --- ql/src/test/results/clientpositive/tez/mapjoin_mapjoin.q.out +++ ql/src/test/results/clientpositive/tez/mapjoin_mapjoin.q.out @@ -80,9 +80,137 @@ STAGE PLANS: Fetch Operator limit: -1 -PREHOOK: query: explain select count(*) from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) group by ds +PREHOOK: query: explain +select srcpart.key from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) where srcpart.value > 'val_450' PREHOOK: type: QUERY -POSTHOOK: query: explain select count(*) from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) group by ds +POSTHOOK: query: explain +select srcpart.key from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) where srcpart.value > 'val_450' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Tez + Edges: + Map 1 <- Map 2 (BROADCAST_EDGE), Map 3 (BROADCAST_EDGE) +#### A masked pattern was here #### + Vertices: + Map 1 + Map Operator Tree: + TableScan + alias: srcpart + Statistics: Num rows: 116 Data size: 23248 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (value > 'val_450') (type: boolean) + Statistics: Num rows: 38 Data size: 7615 Basic stats: COMPLETE Column stats: NONE + Map Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {key} + 1 + keys: + 0 value (type: string) + 1 value (type: string) + outputColumnNames: _col0 + Statistics: Num rows: 41 Data size: 8376 Basic stats: COMPLETE Column stats: NONE + Map Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {_col0} + 1 + keys: + 0 _col0 (type: string) + 1 key (type: string) + outputColumnNames: _col0 + Statistics: Num rows: 45 Data size: 9213 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: _col0 (type: string) + outputColumnNames: _col0 + Statistics: Num rows: 45 Data size: 9213 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 45 Data size: 9213 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Map 2 + Map Operator Tree: + TableScan + alias: src1 + Statistics: Num rows: 2 Data size: 216 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + key expressions: key (type: string) + sort order: + + Map-reduce partition columns: key (type: string) + Statistics: Num rows: 2 Data size: 216 Basic stats: COMPLETE Column stats: NONE + Map 3 + Map Operator Tree: + TableScan + alias: src + Statistics: Num rows: 58 Data size: 5812 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (value > 'val_450') (type: boolean) + Statistics: Num rows: 19 Data size: 1903 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + key expressions: value (type: string) + sort order: + + Map-reduce partition columns: value (type: string) + Statistics: Num rows: 19 Data size: 1903 Basic stats: COMPLETE Column stats: NONE + + Stage: Stage-0 + Fetch Operator + limit: -1 + +PREHOOK: query: select srcpart.key from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) where srcpart.value > 'val_450' +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@src1 +PREHOOK: Input: default@srcpart +PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11 +PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12 +PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=11 +PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=12 +#### A masked pattern was here #### +POSTHOOK: query: select srcpart.key from srcpart join src on (srcpart.value=src.value) join src1 on (srcpart.key=src1.key) where srcpart.value > 'val_450' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@src1 +POSTHOOK: Input: default@srcpart +POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11 +POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12 +POSTHOOK: Input: default@srcpart@ds=2008-04-09/hr=11 +POSTHOOK: Input: default@srcpart@ds=2008-04-09/hr=12 +#### A masked pattern was here #### +98 +98 +66 +98 +98 +98 +98 +66 +98 +98 +98 +98 +66 +98 +98 +98 +98 +66 +98 +98 +PREHOOK: query: explain +select count(*) from srcpart join src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds +PREHOOK: type: QUERY +POSTHOOK: query: explain +select count(*) from srcpart join src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds POSTHOOK: type: QUERY STAGE DEPENDENCIES: Stage-1 is a root stage @@ -143,12 +271,12 @@ STAGE PLANS: Map Operator Tree: TableScan alias: src1 - Statistics: Num rows: 2 Data size: 216 Basic stats: COMPLETE Column stats: NONE + Statistics: Num rows: 58 Data size: 5812 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator key expressions: key (type: string) sort order: + Map-reduce partition columns: key (type: string) - Statistics: Num rows: 2 Data size: 216 Basic stats: COMPLETE Column stats: NONE + Statistics: Num rows: 58 Data size: 5812 Basic stats: COMPLETE Column stats: NONE Map 4 Map Operator Tree: TableScan @@ -183,7 +311,7 @@ STAGE PLANS: Fetch Operator limit: -1 -PREHOOK: query: select count(*) from srcpart join src src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds +PREHOOK: query: select count(*) from srcpart join src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds PREHOOK: type: QUERY PREHOOK: Input: default@src PREHOOK: Input: default@srcpart @@ -192,7 +320,7 @@ PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12 PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=11 PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=12 #### A masked pattern was here #### -POSTHOOK: query: select count(*) from srcpart join src src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds +POSTHOOK: query: select count(*) from srcpart join src on (srcpart.value=src.value) join src src1 on (srcpart.key=src1.key) group by ds POSTHOOK: type: QUERY POSTHOOK: Input: default@src POSTHOOK: Input: default@srcpart diff --git ql/src/test/results/clientpositive/tez/subquery_in.q.out ql/src/test/results/clientpositive/tez/subquery_in.q.out index c66602b..201a890 100644 --- ql/src/test/results/clientpositive/tez/subquery_in.q.out +++ ql/src/test/results/clientpositive/tez/subquery_in.q.out @@ -400,7 +400,7 @@ STAGE PLANS: Reduce Output Operator sort order: Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE - value expressions: _col0 (type: struct) + value expressions: _col0 (type: struct) Reducer 3 Reduce Operator Tree: Group By Operator diff --git ql/src/test/results/clientpositive/tez/tez_union.q.out ql/src/test/results/clientpositive/tez/tez_union.q.out index ce7d1b8..19ba085 100644 --- ql/src/test/results/clientpositive/tez/tez_union.q.out +++ ql/src/test/results/clientpositive/tez/tez_union.q.out @@ -92,1530 +92,1660 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### 238 val_238 +238 val_238 86 val_86 311 val_311 +311 val_311 +311 val_311 27 val_27 165 val_165 +165 val_165 +409 val_409 +409 val_409 409 val_409 255 val_255 +255 val_255 +278 val_278 278 val_278 98 val_98 +98 val_98 484 val_484 265 val_265 +265 val_265 +193 val_193 +193 val_193 193 val_193 401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 150 val_150 273 val_273 +273 val_273 +273 val_273 224 val_224 +224 val_224 +369 val_369 +369 val_369 369 val_369 66 val_66 128 val_128 +128 val_128 +128 val_128 +213 val_213 213 val_213 146 val_146 +146 val_146 +406 val_406 +406 val_406 +406 val_406 406 val_406 429 val_429 +429 val_429 374 val_374 152 val_152 +152 val_152 +469 val_469 +469 val_469 +469 val_469 +469 val_469 469 val_469 145 val_145 495 val_495 37 val_37 +37 val_37 +327 val_327 327 val_327 +327 val_327 +281 val_281 281 val_281 277 val_277 +277 val_277 +277 val_277 +277 val_277 +209 val_209 209 val_209 15 val_15 +15 val_15 82 val_82 403 val_403 +403 val_403 +403 val_403 166 val_166 417 val_417 +417 val_417 +417 val_417 +430 val_430 +430 val_430 430 val_430 252 val_252 292 val_292 219 val_219 +219 val_219 287 val_287 153 val_153 193 val_193 +193 val_193 +193 val_193 338 val_338 446 val_446 459 val_459 +459 val_459 394 val_394 237 val_237 +237 val_237 482 val_482 174 val_174 +174 val_174 +413 val_413 413 val_413 494 val_494 207 val_207 +207 val_207 +199 val_199 199 val_199 +199 val_199 +466 val_466 466 val_466 +466 val_466 +208 val_208 208 val_208 +208 val_208 +174 val_174 174 val_174 399 val_399 +399 val_399 +396 val_396 +396 val_396 396 val_396 247 val_247 417 val_417 +417 val_417 +417 val_417 +489 val_489 +489 val_489 +489 val_489 489 val_489 162 val_162 377 val_377 397 val_397 +397 val_397 +309 val_309 309 val_309 365 val_365 266 val_266 439 val_439 +439 val_439 +342 val_342 342 val_342 367 val_367 +367 val_367 +325 val_325 325 val_325 167 val_167 +167 val_167 +167 val_167 +195 val_195 195 val_195 475 val_475 17 val_17 113 val_113 +113 val_113 155 val_155 203 val_203 +203 val_203 339 val_339 0 val_0 +0 val_0 +0 val_0 455 val_455 128 val_128 +128 val_128 +128 val_128 +311 val_311 311 val_311 +311 val_311 +316 val_316 +316 val_316 316 val_316 57 val_57 302 val_302 205 val_205 +205 val_205 149 val_149 +149 val_149 +438 val_438 +438 val_438 438 val_438 345 val_345 129 val_129 +129 val_129 170 val_170 20 val_20 489 val_489 +489 val_489 +489 val_489 +489 val_489 157 val_157 378 val_378 221 val_221 +221 val_221 92 val_92 111 val_111 47 val_47 72 val_72 +72 val_72 4 val_4 280 val_280 +280 val_280 +35 val_35 +35 val_35 35 val_35 427 val_427 277 val_277 +277 val_277 +277 val_277 +277 val_277 +208 val_208 +208 val_208 208 val_208 356 val_356 399 val_399 +399 val_399 +169 val_169 +169 val_169 169 val_169 +169 val_169 +382 val_382 382 val_382 498 val_498 +498 val_498 +498 val_498 +125 val_125 125 val_125 386 val_386 437 val_437 469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 192 val_192 286 val_286 187 val_187 +187 val_187 +187 val_187 +176 val_176 176 val_176 54 val_54 459 val_459 +459 val_459 +51 val_51 51 val_51 138 val_138 +138 val_138 +138 val_138 +138 val_138 +103 val_103 103 val_103 239 val_239 +239 val_239 +213 val_213 213 val_213 216 val_216 +216 val_216 +430 val_430 430 val_430 +430 val_430 +278 val_278 278 val_278 176 val_176 +176 val_176 289 val_289 221 val_221 +221 val_221 65 val_65 318 val_318 +318 val_318 +318 val_318 332 val_332 311 val_311 +311 val_311 +311 val_311 275 val_275 137 val_137 +137 val_137 241 val_241 83 val_83 +83 val_83 +333 val_333 333 val_333 180 val_180 284 val_284 12 val_12 +12 val_12 +230 val_230 +230 val_230 +230 val_230 +230 val_230 230 val_230 181 val_181 67 val_67 +67 val_67 260 val_260 404 val_404 +404 val_404 384 val_384 +384 val_384 +384 val_384 +489 val_489 +489 val_489 489 val_489 +489 val_489 +353 val_353 353 val_353 373 val_373 272 val_272 +272 val_272 +138 val_138 +138 val_138 +138 val_138 138 val_138 217 val_217 +217 val_217 +84 val_84 84 val_84 348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +466 val_466 +466 val_466 466 val_466 58 val_58 +58 val_58 8 val_8 411 val_411 230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 +208 val_208 208 val_208 +208 val_208 +348 val_348 +348 val_348 +348 val_348 348 val_348 +348 val_348 +24 val_24 24 val_24 463 val_463 +463 val_463 +431 val_431 431 val_431 +431 val_431 +179 val_179 179 val_179 172 val_172 +172 val_172 +42 val_42 42 val_42 129 val_129 +129 val_129 158 val_158 119 val_119 +119 val_119 +119 val_119 496 val_496 0 val_0 +0 val_0 +0 val_0 +322 val_322 322 val_322 197 val_197 +197 val_197 +468 val_468 +468 val_468 +468 val_468 468 val_468 393 val_393 454 val_454 +454 val_454 +454 val_454 100 val_100 +100 val_100 +298 val_298 298 val_298 +298 val_298 +199 val_199 199 val_199 +199 val_199 +191 val_191 191 val_191 418 val_418 96 val_96 26 val_26 +26 val_26 +165 val_165 165 val_165 327 val_327 +327 val_327 +327 val_327 +230 val_230 +230 val_230 +230 val_230 +230 val_230 230 val_230 205 val_205 +205 val_205 +120 val_120 120 val_120 131 val_131 51 val_51 +51 val_51 +404 val_404 404 val_404 43 val_43 436 val_436 156 val_156 469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +468 val_468 +468 val_468 +468 val_468 468 val_468 308 val_308 95 val_95 +95 val_95 196 val_196 288 val_288 +288 val_288 481 val_481 457 val_457 98 val_98 +98 val_98 282 val_282 +282 val_282 +197 val_197 197 val_197 187 val_187 +187 val_187 +187 val_187 +318 val_318 +318 val_318 +318 val_318 +318 val_318 318 val_318 318 val_318 409 val_409 +409 val_409 +409 val_409 470 val_470 137 val_137 +137 val_137 +369 val_369 369 val_369 +369 val_369 +316 val_316 316 val_316 +316 val_316 +169 val_169 +169 val_169 +169 val_169 169 val_169 413 val_413 +413 val_413 85 val_85 77 val_77 0 val_0 +0 val_0 +0 val_0 490 val_490 87 val_87 364 val_364 179 val_179 +179 val_179 118 val_118 +118 val_118 +134 val_134 134 val_134 395 val_395 +395 val_395 +282 val_282 282 val_282 138 val_138 -238 val_238 -419 val_419 +138 val_138 +138 val_138 +138 val_138 +238 val_238 +238 val_238 +419 val_419 15 val_15 +15 val_15 +118 val_118 118 val_118 72 val_72 +72 val_72 +90 val_90 90 val_90 +90 val_90 +307 val_307 307 val_307 19 val_19 435 val_435 10 val_10 277 val_277 +277 val_277 +277 val_277 +277 val_277 +273 val_273 +273 val_273 273 val_273 306 val_306 224 val_224 +224 val_224 +309 val_309 309 val_309 389 val_389 327 val_327 +327 val_327 +327 val_327 +242 val_242 242 val_242 369 val_369 +369 val_369 +369 val_369 392 val_392 272 val_272 +272 val_272 +331 val_331 331 val_331 401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 +242 val_242 242 val_242 452 val_452 177 val_177 226 val_226 5 val_5 +5 val_5 +5 val_5 497 val_497 402 val_402 396 val_396 +396 val_396 +396 val_396 +317 val_317 317 val_317 395 val_395 +395 val_395 +58 val_58 58 val_58 35 val_35 +35 val_35 +35 val_35 336 val_336 95 val_95 +95 val_95 11 val_11 168 val_168 34 val_34 229 val_229 +229 val_229 +233 val_233 233 val_233 143 val_143 472 val_472 322 val_322 +322 val_322 +498 val_498 +498 val_498 498 val_498 160 val_160 195 val_195 +195 val_195 +42 val_42 42 val_42 321 val_321 +321 val_321 +430 val_430 430 val_430 +430 val_430 +119 val_119 119 val_119 +119 val_119 +489 val_489 +489 val_489 +489 val_489 489 val_489 458 val_458 +458 val_458 78 val_78 76 val_76 +76 val_76 41 val_41 223 val_223 +223 val_223 +492 val_492 492 val_492 149 val_149 +149 val_149 449 val_449 218 val_218 228 val_228 138 val_138 +138 val_138 +138 val_138 +138 val_138 453 val_453 30 val_30 209 val_209 +209 val_209 64 val_64 468 val_468 +468 val_468 +468 val_468 +468 val_468 +76 val_76 76 val_76 74 val_74 342 val_342 +342 val_342 69 val_69 230 val_230 +230 val_230 +230 val_230 +230 val_230 +230 val_230 33 val_33 368 val_368 103 val_103 +103 val_103 296 val_296 113 val_113 +113 val_113 216 val_216 +216 val_216 +367 val_367 367 val_367 344 val_344 +344 val_344 +167 val_167 +167 val_167 167 val_167 274 val_274 219 val_219 +219 val_219 +239 val_239 239 val_239 485 val_485 116 val_116 223 val_223 +223 val_223 +256 val_256 256 val_256 263 val_263 70 val_70 +70 val_70 +70 val_70 487 val_487 480 val_480 +480 val_480 +480 val_480 +401 val_401 +401 val_401 +401 val_401 401 val_401 +401 val_401 +288 val_288 288 val_288 191 val_191 +191 val_191 +5 val_5 +5 val_5 5 val_5 244 val_244 438 val_438 +438 val_438 +438 val_438 +128 val_128 +128 val_128 128 val_128 467 val_467 432 val_432 202 val_202 316 val_316 +316 val_316 +316 val_316 +229 val_229 229 val_229 469 val_469 +469 val_469 +469 val_469 +469 val_469 +469 val_469 463 val_463 +463 val_463 +280 val_280 280 val_280 2 val_2 35 val_35 +35 val_35 +35 val_35 283 val_283 331 val_331 +331 val_331 235 val_235 80 val_80 44 val_44 193 val_193 +193 val_193 +193 val_193 +321 val_321 321 val_321 335 val_335 104 val_104 +104 val_104 +466 val_466 +466 val_466 466 val_466 366 val_366 175 val_175 +175 val_175 +403 val_403 +403 val_403 403 val_403 483 val_483 53 val_53 105 val_105 257 val_257 406 val_406 +406 val_406 +406 val_406 +406 val_406 +409 val_409 +409 val_409 409 val_409 190 val_190 406 val_406 +406 val_406 +406 val_406 +406 val_406 +401 val_401 +401 val_401 +401 val_401 +401 val_401 401 val_401 114 val_114 258 val_258 90 val_90 +90 val_90 +90 val_90 +203 val_203 203 val_203 262 val_262 348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +424 val_424 424 val_424 12 val_12 +12 val_12 +396 val_396 +396 val_396 396 val_396 201 val_201 217 val_217 +217 val_217 164 val_164 +164 val_164 +431 val_431 431 val_431 +431 val_431 +454 val_454 454 val_454 +454 val_454 +478 val_478 478 val_478 298 val_298 +298 val_298 +298 val_298 125 val_125 +125 val_125 +431 val_431 431 val_431 +431 val_431 +164 val_164 164 val_164 424 val_424 +424 val_424 +187 val_187 187 val_187 +187 val_187 +382 val_382 382 val_382 5 val_5 +5 val_5 +5 val_5 +70 val_70 +70 val_70 70 val_70 397 val_397 +397 val_397 +480 val_480 +480 val_480 480 val_480 291 val_291 24 val_24 +24 val_24 351 val_351 255 val_255 +255 val_255 +104 val_104 104 val_104 70 val_70 +70 val_70 +70 val_70 163 val_163 438 val_438 +438 val_438 +438 val_438 +119 val_119 +119 val_119 119 val_119 414 val_414 +414 val_414 +200 val_200 200 val_200 491 val_491 237 val_237 +237 val_237 +439 val_439 439 val_439 360 val_360 248 val_248 479 val_479 305 val_305 417 val_417 +417 val_417 +417 val_417 +199 val_199 +199 val_199 199 val_199 444 val_444 120 val_120 +120 val_120 +429 val_429 429 val_429 169 val_169 +169 val_169 +169 val_169 +169 val_169 443 val_443 323 val_323 325 val_325 +325 val_325 277 val_277 +277 val_277 +277 val_277 +277 val_277 +230 val_230 230 val_230 +230 val_230 +230 val_230 +230 val_230 +478 val_478 478 val_478 178 val_178 468 val_468 +468 val_468 +468 val_468 +468 val_468 310 val_310 317 val_317 +317 val_317 +333 val_333 333 val_333 493 val_493 460 val_460 207 val_207 +207 val_207 249 val_249 265 val_265 +265 val_265 +480 val_480 480 val_480 +480 val_480 +83 val_83 83 val_83 136 val_136 353 val_353 +353 val_353 +172 val_172 172 val_172 214 val_214 462 val_462 +462 val_462 +233 val_233 233 val_233 406 val_406 +406 val_406 +406 val_406 +406 val_406 133 val_133 175 val_175 +175 val_175 189 val_189 454 val_454 +454 val_454 +454 val_454 375 val_375 401 val_401 +401 val_401 +401 val_401 +401 val_401 +401 val_401 421 val_421 407 val_407 384 val_384 +384 val_384 +384 val_384 256 val_256 +256 val_256 +26 val_26 26 val_26 134 val_134 +134 val_134 +67 val_67 67 val_67 384 val_384 +384 val_384 +384 val_384 379 val_379 18 val_18 +18 val_18 +462 val_462 462 val_462 492 val_492 +492 val_492 +100 val_100 100 val_100 298 val_298 +298 val_298 +298 val_298 9 val_9 341 val_341 498 val_498 +498 val_498 +498 val_498 146 val_146 +146 val_146 +458 val_458 458 val_458 362 val_362 186 val_186 285 val_285 348 val_348 +348 val_348 +348 val_348 +348 val_348 +348 val_348 +167 val_167 +167 val_167 167 val_167 18 val_18 +18 val_18 +273 val_273 +273 val_273 273 val_273 183 val_183 281 val_281 +281 val_281 344 val_344 +344 val_344 +97 val_97 97 val_97 469 val_469 -315 val_315 -84 val_84 +469 val_469 +469 val_469 +469 val_469 +469 val_469 +315 val_315 +84 val_84 +84 val_84 28 val_28 37 val_37 +37 val_37 448 val_448 152 val_152 +152 val_152 +348 val_348 +348 val_348 +348 val_348 348 val_348 +348 val_348 +307 val_307 307 val_307 194 val_194 414 val_414 +414 val_414 477 val_477 222 val_222 126 val_126 90 val_90 +90 val_90 +90 val_90 +169 val_169 +169 val_169 +169 val_169 169 val_169 403 val_403 +403 val_403 +403 val_403 400 val_400 200 val_200 +200 val_200 +97 val_97 97 val_97 -238 val_238 238 val_238 86 val_86 311 val_311 -311 val_311 -311 val_311 27 val_27 165 val_165 -165 val_165 -409 val_409 -409 val_409 409 val_409 255 val_255 -255 val_255 -278 val_278 278 val_278 98 val_98 -98 val_98 484 val_484 265 val_265 -265 val_265 -193 val_193 -193 val_193 193 val_193 401 val_401 -401 val_401 -401 val_401 -401 val_401 -401 val_401 150 val_150 273 val_273 -273 val_273 -273 val_273 224 val_224 -224 val_224 -369 val_369 -369 val_369 369 val_369 66 val_66 128 val_128 -128 val_128 -128 val_128 -213 val_213 213 val_213 146 val_146 -146 val_146 -406 val_406 -406 val_406 -406 val_406 406 val_406 429 val_429 -429 val_429 374 val_374 152 val_152 -152 val_152 -469 val_469 -469 val_469 -469 val_469 -469 val_469 469 val_469 145 val_145 495 val_495 37 val_37 -37 val_37 -327 val_327 327 val_327 -327 val_327 -281 val_281 281 val_281 277 val_277 -277 val_277 -277 val_277 -277 val_277 -209 val_209 209 val_209 15 val_15 -15 val_15 82 val_82 403 val_403 -403 val_403 -403 val_403 166 val_166 417 val_417 -417 val_417 -417 val_417 -430 val_430 -430 val_430 430 val_430 252 val_252 292 val_292 219 val_219 -219 val_219 287 val_287 153 val_153 193 val_193 -193 val_193 -193 val_193 338 val_338 446 val_446 459 val_459 -459 val_459 394 val_394 237 val_237 -237 val_237 482 val_482 174 val_174 -174 val_174 -413 val_413 413 val_413 494 val_494 207 val_207 -207 val_207 -199 val_199 199 val_199 -199 val_199 -466 val_466 466 val_466 -466 val_466 -208 val_208 208 val_208 -208 val_208 -174 val_174 174 val_174 399 val_399 -399 val_399 -396 val_396 -396 val_396 396 val_396 247 val_247 417 val_417 -417 val_417 -417 val_417 -489 val_489 -489 val_489 -489 val_489 489 val_489 162 val_162 377 val_377 397 val_397 -397 val_397 -309 val_309 309 val_309 365 val_365 266 val_266 439 val_439 -439 val_439 -342 val_342 342 val_342 367 val_367 -367 val_367 -325 val_325 325 val_325 167 val_167 -167 val_167 -167 val_167 -195 val_195 195 val_195 475 val_475 17 val_17 113 val_113 -113 val_113 155 val_155 203 val_203 -203 val_203 339 val_339 0 val_0 -0 val_0 -0 val_0 455 val_455 128 val_128 -128 val_128 -128 val_128 -311 val_311 311 val_311 -311 val_311 -316 val_316 -316 val_316 316 val_316 57 val_57 302 val_302 205 val_205 -205 val_205 149 val_149 -149 val_149 -438 val_438 -438 val_438 438 val_438 345 val_345 129 val_129 -129 val_129 170 val_170 20 val_20 489 val_489 -489 val_489 -489 val_489 -489 val_489 157 val_157 378 val_378 221 val_221 -221 val_221 92 val_92 111 val_111 47 val_47 72 val_72 -72 val_72 4 val_4 280 val_280 -280 val_280 -35 val_35 -35 val_35 35 val_35 427 val_427 277 val_277 -277 val_277 -277 val_277 -277 val_277 -208 val_208 -208 val_208 208 val_208 356 val_356 399 val_399 -399 val_399 -169 val_169 -169 val_169 169 val_169 -169 val_169 -382 val_382 382 val_382 498 val_498 -498 val_498 -498 val_498 -125 val_125 125 val_125 386 val_386 437 val_437 469 val_469 -469 val_469 -469 val_469 -469 val_469 -469 val_469 192 val_192 286 val_286 187 val_187 -187 val_187 -187 val_187 -176 val_176 176 val_176 54 val_54 459 val_459 -459 val_459 -51 val_51 51 val_51 138 val_138 -138 val_138 -138 val_138 -138 val_138 -103 val_103 103 val_103 239 val_239 -239 val_239 -213 val_213 213 val_213 216 val_216 -216 val_216 -430 val_430 430 val_430 -430 val_430 -278 val_278 278 val_278 176 val_176 -176 val_176 289 val_289 221 val_221 -221 val_221 65 val_65 318 val_318 -318 val_318 -318 val_318 332 val_332 311 val_311 -311 val_311 -311 val_311 275 val_275 137 val_137 -137 val_137 241 val_241 83 val_83 -83 val_83 -333 val_333 333 val_333 180 val_180 284 val_284 12 val_12 -12 val_12 -230 val_230 -230 val_230 -230 val_230 -230 val_230 230 val_230 181 val_181 67 val_67 -67 val_67 260 val_260 404 val_404 -404 val_404 384 val_384 -384 val_384 -384 val_384 -489 val_489 -489 val_489 489 val_489 -489 val_489 -353 val_353 353 val_353 373 val_373 272 val_272 -272 val_272 -138 val_138 -138 val_138 -138 val_138 138 val_138 217 val_217 -217 val_217 -84 val_84 84 val_84 348 val_348 -348 val_348 -348 val_348 -348 val_348 -348 val_348 -466 val_466 -466 val_466 466 val_466 58 val_58 -58 val_58 8 val_8 411 val_411 230 val_230 -230 val_230 -230 val_230 -230 val_230 -230 val_230 -208 val_208 208 val_208 -208 val_208 -348 val_348 -348 val_348 -348 val_348 348 val_348 -348 val_348 -24 val_24 24 val_24 463 val_463 -463 val_463 -431 val_431 431 val_431 -431 val_431 -179 val_179 179 val_179 172 val_172 -172 val_172 -42 val_42 42 val_42 129 val_129 -129 val_129 158 val_158 119 val_119 -119 val_119 -119 val_119 496 val_496 0 val_0 -0 val_0 -0 val_0 -322 val_322 322 val_322 197 val_197 -197 val_197 -468 val_468 -468 val_468 -468 val_468 468 val_468 393 val_393 454 val_454 -454 val_454 -454 val_454 100 val_100 -100 val_100 -298 val_298 298 val_298 -298 val_298 -199 val_199 199 val_199 -199 val_199 -191 val_191 191 val_191 418 val_418 96 val_96 26 val_26 -26 val_26 -165 val_165 165 val_165 327 val_327 -327 val_327 -327 val_327 -230 val_230 -230 val_230 -230 val_230 -230 val_230 230 val_230 205 val_205 -205 val_205 -120 val_120 120 val_120 131 val_131 51 val_51 -51 val_51 -404 val_404 404 val_404 43 val_43 436 val_436 156 val_156 469 val_469 -469 val_469 -469 val_469 -469 val_469 -469 val_469 -468 val_468 -468 val_468 -468 val_468 468 val_468 308 val_308 95 val_95 -95 val_95 196 val_196 288 val_288 -288 val_288 481 val_481 457 val_457 98 val_98 -98 val_98 282 val_282 -282 val_282 -197 val_197 197 val_197 187 val_187 -187 val_187 -187 val_187 318 val_318 318 val_318 -318 val_318 -318 val_318 -318 val_318 -318 val_318 -409 val_409 -409 val_409 409 val_409 470 val_470 137 val_137 -137 val_137 -369 val_369 -369 val_369 369 val_369 316 val_316 -316 val_316 -316 val_316 -169 val_169 -169 val_169 -169 val_169 169 val_169 413 val_413 -413 val_413 85 val_85 77 val_77 0 val_0 -0 val_0 -0 val_0 490 val_490 87 val_87 364 val_364 179 val_179 -179 val_179 -118 val_118 118 val_118 134 val_134 -134 val_134 395 val_395 -395 val_395 -282 val_282 282 val_282 138 val_138 -138 val_138 -138 val_138 -138 val_138 -238 val_238 238 val_238 419 val_419 15 val_15 -15 val_15 -118 val_118 118 val_118 72 val_72 -72 val_72 -90 val_90 -90 val_90 90 val_90 307 val_307 -307 val_307 19 val_19 435 val_435 10 val_10 277 val_277 -277 val_277 -277 val_277 -277 val_277 -273 val_273 -273 val_273 273 val_273 306 val_306 224 val_224 -224 val_224 -309 val_309 309 val_309 389 val_389 327 val_327 -327 val_327 -327 val_327 242 val_242 -242 val_242 -369 val_369 -369 val_369 369 val_369 392 val_392 272 val_272 -272 val_272 -331 val_331 331 val_331 401 val_401 -401 val_401 -401 val_401 -401 val_401 -401 val_401 -242 val_242 242 val_242 452 val_452 177 val_177 226 val_226 5 val_5 -5 val_5 -5 val_5 497 val_497 402 val_402 396 val_396 -396 val_396 -396 val_396 -317 val_317 317 val_317 395 val_395 -395 val_395 58 val_58 -58 val_58 -35 val_35 -35 val_35 35 val_35 336 val_336 95 val_95 -95 val_95 11 val_11 168 val_168 34 val_34 229 val_229 -229 val_229 -233 val_233 233 val_233 143 val_143 472 val_472 322 val_322 -322 val_322 -498 val_498 -498 val_498 498 val_498 160 val_160 195 val_195 -195 val_195 -42 val_42 42 val_42 321 val_321 -321 val_321 -430 val_430 -430 val_430 430 val_430 119 val_119 -119 val_119 -119 val_119 -489 val_489 -489 val_489 -489 val_489 489 val_489 458 val_458 -458 val_458 78 val_78 76 val_76 -76 val_76 41 val_41 223 val_223 -223 val_223 492 val_492 -492 val_492 -149 val_149 149 val_149 449 val_449 218 val_218 228 val_228 138 val_138 -138 val_138 -138 val_138 -138 val_138 453 val_453 30 val_30 209 val_209 -209 val_209 64 val_64 468 val_468 -468 val_468 -468 val_468 -468 val_468 -76 val_76 76 val_76 74 val_74 342 val_342 -342 val_342 69 val_69 230 val_230 -230 val_230 -230 val_230 -230 val_230 -230 val_230 33 val_33 368 val_368 103 val_103 -103 val_103 296 val_296 113 val_113 -113 val_113 -216 val_216 216 val_216 367 val_367 -367 val_367 -344 val_344 344 val_344 167 val_167 -167 val_167 -167 val_167 274 val_274 219 val_219 -219 val_219 -239 val_239 239 val_239 485 val_485 116 val_116 223 val_223 -223 val_223 -256 val_256 256 val_256 263 val_263 70 val_70 -70 val_70 -70 val_70 487 val_487 480 val_480 -480 val_480 -480 val_480 -401 val_401 -401 val_401 401 val_401 -401 val_401 -401 val_401 -288 val_288 288 val_288 191 val_191 -191 val_191 -5 val_5 -5 val_5 5 val_5 244 val_244 438 val_438 -438 val_438 -438 val_438 -128 val_128 -128 val_128 128 val_128 467 val_467 432 val_432 202 val_202 316 val_316 -316 val_316 -316 val_316 -229 val_229 229 val_229 469 val_469 -469 val_469 -469 val_469 -469 val_469 -469 val_469 -463 val_463 463 val_463 280 val_280 -280 val_280 2 val_2 35 val_35 -35 val_35 -35 val_35 283 val_283 331 val_331 -331 val_331 235 val_235 80 val_80 44 val_44 193 val_193 -193 val_193 -193 val_193 -321 val_321 321 val_321 335 val_335 104 val_104 -104 val_104 -466 val_466 -466 val_466 466 val_466 366 val_366 175 val_175 -175 val_175 -403 val_403 -403 val_403 403 val_403 483 val_483 53 val_53 105 val_105 257 val_257 406 val_406 -406 val_406 -406 val_406 -406 val_406 -409 val_409 -409 val_409 409 val_409 190 val_190 406 val_406 -406 val_406 -406 val_406 -406 val_406 -401 val_401 -401 val_401 -401 val_401 -401 val_401 401 val_401 114 val_114 258 val_258 90 val_90 -90 val_90 -90 val_90 -203 val_203 203 val_203 262 val_262 348 val_348 -348 val_348 -348 val_348 -348 val_348 -348 val_348 424 val_424 -424 val_424 -12 val_12 12 val_12 396 val_396 -396 val_396 -396 val_396 201 val_201 217 val_217 -217 val_217 164 val_164 -164 val_164 -431 val_431 -431 val_431 431 val_431 454 val_454 -454 val_454 -454 val_454 478 val_478 -478 val_478 -298 val_298 -298 val_298 298 val_298 125 val_125 -125 val_125 -431 val_431 -431 val_431 431 val_431 164 val_164 -164 val_164 -424 val_424 424 val_424 187 val_187 -187 val_187 -187 val_187 -382 val_382 382 val_382 5 val_5 -5 val_5 -5 val_5 -70 val_70 70 val_70 -70 val_70 -397 val_397 397 val_397 480 val_480 -480 val_480 -480 val_480 291 val_291 24 val_24 -24 val_24 351 val_351 255 val_255 -255 val_255 104 val_104 -104 val_104 -70 val_70 -70 val_70 70 val_70 163 val_163 438 val_438 -438 val_438 -438 val_438 119 val_119 -119 val_119 -119 val_119 -414 val_414 414 val_414 200 val_200 -200 val_200 491 val_491 237 val_237 -237 val_237 -439 val_439 439 val_439 360 val_360 248 val_248 479 val_479 305 val_305 417 val_417 -417 val_417 -417 val_417 -199 val_199 -199 val_199 199 val_199 444 val_444 120 val_120 -120 val_120 429 val_429 -429 val_429 -169 val_169 -169 val_169 -169 val_169 169 val_169 443 val_443 323 val_323 325 val_325 -325 val_325 -277 val_277 -277 val_277 277 val_277 -277 val_277 -230 val_230 -230 val_230 230 val_230 -230 val_230 -230 val_230 -478 val_478 478 val_478 178 val_178 468 val_468 -468 val_468 -468 val_468 -468 val_468 310 val_310 317 val_317 -317 val_317 -333 val_333 333 val_333 493 val_493 460 val_460 207 val_207 -207 val_207 249 val_249 265 val_265 -265 val_265 -480 val_480 480 val_480 -480 val_480 -83 val_83 83 val_83 136 val_136 353 val_353 -353 val_353 -172 val_172 172 val_172 214 val_214 462 val_462 -462 val_462 -233 val_233 233 val_233 406 val_406 -406 val_406 -406 val_406 -406 val_406 133 val_133 175 val_175 -175 val_175 189 val_189 454 val_454 -454 val_454 -454 val_454 375 val_375 401 val_401 -401 val_401 -401 val_401 -401 val_401 -401 val_401 421 val_421 407 val_407 384 val_384 -384 val_384 -384 val_384 -256 val_256 256 val_256 26 val_26 -26 val_26 -134 val_134 134 val_134 67 val_67 -67 val_67 -384 val_384 -384 val_384 384 val_384 379 val_379 18 val_18 -18 val_18 -462 val_462 462 val_462 492 val_492 -492 val_492 100 val_100 -100 val_100 -298 val_298 -298 val_298 298 val_298 9 val_9 341 val_341 498 val_498 -498 val_498 -498 val_498 146 val_146 -146 val_146 -458 val_458 458 val_458 362 val_362 186 val_186 285 val_285 348 val_348 -348 val_348 -348 val_348 -348 val_348 -348 val_348 -167 val_167 -167 val_167 167 val_167 18 val_18 -18 val_18 -273 val_273 -273 val_273 273 val_273 183 val_183 281 val_281 -281 val_281 -344 val_344 344 val_344 97 val_97 -97 val_97 -469 val_469 -469 val_469 -469 val_469 -469 val_469 469 val_469 315 val_315 84 val_84 -84 val_84 28 val_28 37 val_37 -37 val_37 448 val_448 152 val_152 -152 val_152 -348 val_348 -348 val_348 -348 val_348 -348 val_348 348 val_348 307 val_307 -307 val_307 194 val_194 414 val_414 -414 val_414 477 val_477 222 val_222 126 val_126 90 val_90 -90 val_90 -90 val_90 -169 val_169 169 val_169 -169 val_169 -169 val_169 -403 val_403 -403 val_403 403 val_403 400 val_400 200 val_200 -200 val_200 -97 val_97 97 val_97 +PREHOOK: query: explain +with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a +PREHOOK: type: QUERY +POSTHOOK: query: explain +with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Tez + Edges: + Map 1 <- Union 2 (CONTAINS) + Map 5 <- Union 6 (CONTAINS) + Map 7 <- Union 2 (CONTAINS) + Map 8 <- Union 6 (CONTAINS) + Reducer 3 <- Union 2 (SIMPLE_EDGE), Union 6 (SIMPLE_EDGE) + Reducer 4 <- Reducer 3 (SIMPLE_EDGE) +#### A masked pattern was here #### + Vertices: + Map 1 + Map Operator Tree: + TableScan + alias: src + Select Operator + expressions: key (type: string), value (type: string) + outputColumnNames: _col0, _col1 + Reduce Output Operator + key expressions: _col0 (type: string) + sort order: + + Map-reduce partition columns: _col0 (type: string) + Map 5 + Map Operator Tree: + TableScan + alias: src + Select Operator + expressions: key (type: string), value (type: string) + outputColumnNames: _col0, _col1 + Reduce Output Operator + key expressions: _col0 (type: string) + sort order: + + Map-reduce partition columns: _col0 (type: string) + Map 7 + Map Operator Tree: + TableScan + alias: src + Select Operator + expressions: key (type: string), value (type: string) + outputColumnNames: _col0, _col1 + Reduce Output Operator + key expressions: _col0 (type: string) + sort order: + + Map-reduce partition columns: _col0 (type: string) + Map 8 + Map Operator Tree: + TableScan + alias: src + Select Operator + expressions: key (type: string), value (type: string) + outputColumnNames: _col0, _col1 + Reduce Output Operator + key expressions: _col0 (type: string) + sort order: + + Map-reduce partition columns: _col0 (type: string) + Reducer 3 + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 + 1 + Statistics: Num rows: 63 Data size: 12786 Basic stats: COMPLETE Column stats: NONE + Select Operator + Statistics: Num rows: 63 Data size: 12786 Basic stats: COMPLETE Column stats: NONE + Group By Operator + aggregations: count() + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + sort order: + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + value expressions: _col0 (type: bigint) + Reducer 4 + Reduce Operator Tree: + Group By Operator + aggregations: count(VALUE._col0) + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: _col0 (type: bigint) + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + Union 2 + Vertex: Union 2 + Union 6 + Vertex: Union 6 + + Stage: Stage-0 + Fetch Operator + limit: -1 + +PREHOOK: query: with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: with u as (select * from src union all select * from src) +select count(*) from (select u1.key as k1, u2.key as k2 from +u as u1 join u as u2 on (u1.key = u2.key)) a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +4112