diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java index 01c1d30..7bc0a3b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java @@ -817,6 +817,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, Map joinedColStats = Maps.newHashMap(); Map> joinKeys = Maps.newHashMap(); + List rowCounts = Lists.newArrayList(); // get the join keys from parent ReduceSink operators for (int pos = 0; pos < parents.size(); pos++) { @@ -836,6 +837,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, for (String tabAlias : tableAliases) { rowCountParents.put(tabAlias, parentStats.getNumRows()); } + rowCounts.add(parentStats.getNumRows()); // multi-attribute join key if (keyExprs.size() > 1) { @@ -936,8 +938,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, // update join statistics stats.setColumnStats(outColStats); - long newRowCount = computeNewRowCount( - Lists.newArrayList(rowCountParents.values()), denom); + long newRowCount = computeNewRowCount(rowCounts, denom); if (newRowCount <= 0 && LOG.isDebugEnabled()) { newRowCount = 0;