You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2014/05/21 04:14:47 UTC
[1/2] git commit: TAJO-833
Repository: tajo
Updated Branches:
refs/heads/master d0528d1bc -> 5f9330b10
TAJO-833
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/5dda14a9
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/5dda14a9
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/5dda14a9
Branch: refs/heads/master
Commit: 5dda14a9d3e2216c1c80ae2b3654a78b852df269
Parents: 4a747a0
Author: 김형준 <ba...@babokim-MacBook-Pro.local>
Authored: Tue May 20 00:47:45 2014 +0900
Committer: 김형준 <ba...@babokim-MacBook-Pro.local>
Committed: Tue May 20 00:47:45 2014 +0900
----------------------------------------------------------------------
.../org/apache/tajo/engine/eval/FieldEval.java | 6 ++-
.../global/builder/DistinctGroupbyBuilder.java | 22 +++++++--
.../planner/physical/AggregationExec.java | 6 ++-
.../DistinctGroupbyHashAggregationExec.java | 51 +++++++++++++++-----
.../DistinctGroupbySortAggregationExec.java | 7 ---
.../planner/physical/SortAggregateExec.java | 1 -
.../tajo/engine/query/TestGroupByQuery.java | 4 ++
.../testDistinctAggregation_case8.sql | 10 ++++
.../testDistinctAggregation_case8.result | 6 +++
.../apache/tajo/storage/TupleComparator.java | 20 +++++++-
10 files changed, 106 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java b/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
index ea2b031..6799c04 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
@@ -42,7 +42,11 @@ public class FieldEval extends EvalNode implements Cloneable {
@Override
public Datum eval(Schema schema, Tuple tuple) {
if (fieldId == -1) {
- fieldId = schema.getColumnId(column.getQualifiedName());
+ if (column.hasQualifier()) {
+ fieldId = schema.getColumnId(column.getQualifiedName());
+ } else {
+ fieldId = schema.getColumnIdByName(column.getSimpleName());
+ }
if (fieldId == -1) {
throw new IllegalStateException("No Such Column Reference: " + column + ", schema: " + schema);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
index 1ccd9dc..8727b84 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
@@ -263,7 +263,11 @@ public class DistinctGroupbyBuilder {
int[] secondStageColumnIds = new int[secondStageDistinctNode.getOutSchema().size()];
int columnIdIndex = 0;
for (Column column: secondStageDistinctNode.getGroupingColumns()) {
- secondStageColumnIds[originOutputSchema.getColumnId(column.getQualifiedName())] = columnIdIndex;
+ if (column.hasQualifier()) {
+ secondStageColumnIds[originOutputSchema.getColumnId(column.getQualifiedName())] = columnIdIndex;
+ } else {
+ secondStageColumnIds[originOutputSchema.getColumnIdByName(column.getSimpleName())] = columnIdIndex;
+ }
columnIdIndex++;
}
@@ -312,8 +316,12 @@ public class DistinctGroupbyBuilder {
int targetIdx = originGroupColumns.size() + uniqueDistinctColumn.size() + aggFuncIdx;
Target aggFuncTarget = oldTargets[targetIdx];
secondGroupbyTargets.add(aggFuncTarget);
- int outputColumnId = originOutputSchema.getColumnId(aggFuncTarget.getNamedColumn().getQualifiedName());
- secondStageColumnIds[outputColumnId] = columnIdIndex;
+ Column column = aggFuncTarget.getNamedColumn();
+ if (column.hasQualifier()) {
+ secondStageColumnIds[originOutputSchema.getColumnId(column.getQualifiedName())] = columnIdIndex;
+ } else {
+ secondStageColumnIds[originOutputSchema.getColumnIdByName(column.getSimpleName())] = columnIdIndex;
+ }
columnIdIndex++;
}
secondStageGroupbyNode.setTargets(secondGroupbyTargets.toArray(new Target[]{}));
@@ -336,8 +344,12 @@ public class DistinctGroupbyBuilder {
secondStageAggFunction.setArgs(new EvalNode[] {firstEval});
Target secondTarget = secondStageGroupbyNode.getTargets()[secondStageGroupbyNode.getGroupingColumns().length + aggFuncIdx];
- int outputColumnId = originOutputSchema.getColumnId(secondTarget.getNamedColumn().getQualifiedName());
- secondStageColumnIds[outputColumnId] = columnIdIndex;
+ Column column = secondTarget.getNamedColumn();
+ if (column.hasQualifier()) {
+ secondStageColumnIds[originOutputSchema.getColumnId(column.getQualifiedName())] = columnIdIndex;
+ } else {
+ secondStageColumnIds[originOutputSchema.getColumnIdByName(column.getSimpleName())] = columnIdIndex;
+ }
columnIdIndex++;
aggFuncIdx++;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/AggregationExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/AggregationExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/AggregationExec.java
index 208973e..2a671e6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/AggregationExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/AggregationExec.java
@@ -49,7 +49,11 @@ public abstract class AggregationExec extends UnaryPhysicalExec {
Column col;
for (int idx = 0; idx < plan.getGroupingColumns().length; idx++) {
col = keyColumns[idx];
- groupingKeyIds[idx] = inSchema.getColumnId(col.getQualifiedName());
+ if (col.hasQualifier()) {
+ groupingKeyIds[idx] = inSchema.getColumnId(col.getQualifiedName());
+ } else {
+ groupingKeyIds[idx] = inSchema.getColumnIdByName(col.getSimpleName());
+ }
}
if (plan.hasAggFunctions()) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
index 6458f47..33cc242 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
@@ -40,7 +40,6 @@ public class DistinctGroupbyHashAggregationExec extends PhysicalExec {
private HashAggregator[] hashAggregators;
private PhysicalExec child;
- private int distinctGroupingKeyNum;
private int distinctGroupingKeyIds[];
private boolean first = true;
private int groupbyNodeNum;
@@ -58,14 +57,22 @@ public class DistinctGroupbyHashAggregationExec extends PhysicalExec {
this.child = subOp;
this.child.init();
- distinctGroupingKeyNum = plan.getGroupingColumns().length;
- distinctGroupingKeyIds = new int[distinctGroupingKeyNum];
-
- Column[] keyColumns = plan.getGroupingColumns();
- Column col;
- for (int idx = 0; idx < plan.getGroupingColumns().length; idx++) {
- col = keyColumns[idx];
- distinctGroupingKeyIds[idx] = inSchema.getColumnId(col.getQualifiedName());
+ List<Integer> distinctGroupingKeyIdList = new ArrayList<Integer>();
+ for (Column col: plan.getGroupingColumns()) {
+ int keyIndex;
+ if (col.hasQualifier()) {
+ keyIndex = inSchema.getColumnId(col.getQualifiedName());
+ } else {
+ keyIndex = inSchema.getColumnIdByName(col.getSimpleName());
+ }
+ if (!distinctGroupingKeyIdList.contains(keyIndex)) {
+ distinctGroupingKeyIdList.add(keyIndex);
+ }
+ }
+ int idx = 0;
+ distinctGroupingKeyIds = new int[distinctGroupingKeyIdList.size()];
+ for (Integer intVal: distinctGroupingKeyIdList) {
+ distinctGroupingKeyIds[idx++] = intVal.intValue();
}
List<GroupbyNode> groupbyNodes = plan.getGroupByNodes();
@@ -179,6 +186,23 @@ public class DistinctGroupbyHashAggregationExec extends PhysicalExec {
if (tuples[i] != null) {
mergedTuple.put(resultColumnIdIndexes[mergeTupleIndex], tuples[i].get(j));
} else {
+ /*
+ Output Tuple Index: 0(l_orderkey), 1(l_partkey), 2(default.lineitem.l_suppkey), 5(default.lineitem.l_partkey), 8(sum)
+ select
+ lineitem.l_orderkey as l_orderkey,
+ lineitem.l_partkey as l_partkey,
+ count(distinct lineitem.l_partkey) as cnt1,
+ count(distinct lineitem.l_suppkey) as cnt2,
+ sum(lineitem.l_quantity) as sum1
+ from
+ lineitem
+ group by
+ lineitem.l_orderkey, lineitem.l_partkey
+
+ l_orderkey l_partkey default.lineitem.l_suppkey l_orderkey l_partkey default.lineitem.l_partkey l_orderkey l_partkey sum
+ 1 1 7311 1 1 1 1 1 53.0
+ 1 1 7706
+ */
mergedTuple.put(resultColumnIdIndexes[mergeTupleIndex], NullDatum.get());
}
}
@@ -296,9 +320,14 @@ public class DistinctGroupbyHashAggregationExec extends PhysicalExec {
List<Integer> groupingKeyIdList = new ArrayList<Integer>(distinctGroupingKeyIdSet);
Column[] keyColumns = groupbyNode.getGroupingColumns();
Column col;
- for (int idx = 0; idx < groupbyNode.getGroupingColumns().length; idx++) {
+ for (int idx = 0; idx < keyColumns.length; idx++) {
col = keyColumns[idx];
- int keyIndex = inSchema.getColumnId(col.getQualifiedName());
+ int keyIndex;
+ if (col.hasQualifier()) {
+ keyIndex = inSchema.getColumnId(col.getQualifiedName());
+ } else {
+ keyIndex = inSchema.getColumnIdByName(col.getSimpleName());
+ }
if (!distinctGroupingKeyIdSet.contains(keyIndex)) {
groupingKeyIdList.add(keyIndex);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbySortAggregationExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbySortAggregationExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbySortAggregationExec.java
index c8457ac..fd79725 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbySortAggregationExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbySortAggregationExec.java
@@ -18,7 +18,6 @@
package org.apache.tajo.engine.planner.physical;
-import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.engine.planner.logical.DistinctGroupbyNode;
import org.apache.tajo.engine.planner.logical.GroupbyNode;
@@ -34,8 +33,6 @@ public class DistinctGroupbySortAggregationExec extends PhysicalExec {
private boolean finished = false;
- private int distinctGroupingKeyNum;
-
private Tuple[] currentTuples;
private int outColumnNum;
private int groupbyNodeNum;
@@ -49,9 +46,6 @@ public class DistinctGroupbySortAggregationExec extends PhysicalExec {
this.aggregateExecs = aggregateExecs;
this.groupbyNodeNum = plan.getGroupByNodes().size();
- final Column[] keyColumns = plan.getGroupingColumns();
- distinctGroupingKeyNum = keyColumns.length;
-
currentTuples = new Tuple[groupbyNodeNum];
outColumnNum = outSchema.size();
@@ -116,7 +110,6 @@ public class DistinctGroupbySortAggregationExec extends PhysicalExec {
mergeTupleIndex++;
}
}
-
return mergedTuple;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
index 4c4227f..9a415d1 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
@@ -57,7 +57,6 @@ public class SortAggregateExec extends AggregationExec {
Tuple outputTuple = null;
while(!context.isStopped() && (tuple = child.next()) != null) {
-
// get a key tuple
currentKey = new VTuple(groupingKeyIds.length);
for(int i = 0; i < groupingKeyIds.length; i++) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
index 91993a1..1263bbe 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
@@ -249,6 +249,10 @@ public class TestGroupByQuery extends QueryTestCaseBase {
res = executeFile("testDistinctAggregation_case7.sql");
assertResultSet(res, "testDistinctAggregation_case7.result");
res.close();
+
+ res = executeFile("testDistinctAggregation_case8.sql");
+ assertResultSet(res, "testDistinctAggregation_case8.result");
+ res.close();
}
@Test
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation_case8.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation_case8.sql b/tajo-core/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation_case8.sql
new file mode 100644
index 0000000..ed8e363
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation_case8.sql
@@ -0,0 +1,10 @@
+select
+ lineitem.l_orderkey as l_orderkey,
+ lineitem.l_partkey as l_partkey,
+ count(distinct lineitem.l_partkey) as cnt1,
+ count(distinct lineitem.l_suppkey) as cnt2,
+ sum(lineitem.l_quantity) as sum1
+from
+ lineitem
+group by
+ lineitem.l_orderkey, lineitem.l_partkey
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-core/src/test/resources/results/TestGroupByQuery/testDistinctAggregation_case8.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestGroupByQuery/testDistinctAggregation_case8.result b/tajo-core/src/test/resources/results/TestGroupByQuery/testDistinctAggregation_case8.result
new file mode 100644
index 0000000..e234896
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestGroupByQuery/testDistinctAggregation_case8.result
@@ -0,0 +1,6 @@
+l_orderkey,l_partkey,cnt1,cnt2,sum1
+-------------------------------
+1,1,1,2,53.0
+2,2,1,1,38.0
+3,2,1,1,45.0
+3,3,1,1,49.0
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/5dda14a9/tajo-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java b/tajo-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java
index 30f2810..51388a4 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java
@@ -58,7 +58,11 @@ public class TupleComparator implements Comparator<Tuple>, ProtoObject<TupleComp
this.asc = new boolean[sortKeys.length];
this.nullFirsts = new boolean[sortKeys.length];
for (int i = 0; i < sortKeys.length; i++) {
- this.sortKeyIds[i] = schema.getColumnId(sortKeys[i].getSortKey().getQualifiedName());
+ if (sortKeys[i].getSortKey().hasQualifier()) {
+ this.sortKeyIds[i] = schema.getColumnId(sortKeys[i].getSortKey().getQualifiedName());
+ } else {
+ this.sortKeyIds[i] = schema.getColumnIdByName(sortKeys[i].getSortKey().getSimpleName());
+ }
this.asc[i] = sortKeys[i].isAscending();
this.nullFirsts[i]= sortKeys[i].isNullFirst();
@@ -160,4 +164,18 @@ public class TupleComparator implements Comparator<Tuple>, ProtoObject<TupleComp
return builder.build();
}
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+
+ String prefix = "";
+ for (int i = 0; i < sortKeyIds.length; i++) {
+ sb.append(prefix).append("SortKeyId=").append(sortKeyIds[i])
+ .append(",Asc=").append(asc[i])
+ .append(",NullFirst=").append(nullFirsts[i]);
+ prefix = " ,";
+ }
+ return sb.toString();
+ }
}
\ No newline at end of file
[2/2] git commit: TAJO-833: NPE occurs when using the column as a
alias name in the multiple DISTINCT. (Hyoungjun Kim via hyunsik)
Posted by hy...@apache.org.
TAJO-833: NPE occurs when using the column as a alias name in the multiple DISTINCT. (Hyoungjun Kim via hyunsik)
Closes #11
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/5f9330b1
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/5f9330b1
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/5f9330b1
Branch: refs/heads/master
Commit: 5f9330b101d20760dffd96ec5191134352b5a6aa
Parents: d0528d1 5dda14a
Author: Hyunsik Choi <hy...@apache.org>
Authored: Wed May 21 11:13:40 2014 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Wed May 21 11:14:16 2014 +0900
----------------------------------------------------------------------
CHANGES | 3 +
.../org/apache/tajo/engine/eval/FieldEval.java | 7 ++-
.../global/builder/DistinctGroupbyBuilder.java | 22 +++++--
.../planner/physical/AggregationExec.java | 6 +-
.../DistinctGroupbyHashAggregationExec.java | 62 ++++++++++++++++----
.../DistinctGroupbySortAggregationExec.java | 7 ---
.../planner/physical/SortAggregateExec.java | 1 -
.../tajo/engine/query/TestGroupByQuery.java | 4 ++
.../testDistinctAggregation_case8.sql | 10 ++++
.../testDistinctAggregation_case8.result | 6 ++
.../apache/tajo/storage/TupleComparator.java | 20 ++++++-
11 files changed, 121 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/CHANGES
----------------------------------------------------------------------
diff --cc CHANGES
index 97d6c9c,41ac271..3d1ec45
--- a/CHANGES
+++ b/CHANGES
@@@ -40,9 -40,6 +40,12 @@@ Release 0.9.0 - unrelease
(Hyoungjun Kim via hyunsik)
BUG FIXES
++
++ TAJO-833: NPE occurs when using the column as a alias name in the multiple
++ DISTINCT. (Hyoungjun Kim via hyunsik)
+
+ TAJO-821: IllegalStateException occurs when a NettyClientBase object is created
+ within single thread. (hyoungjunkim via jinho)
TAJO-816: NULL delimiter doesn't apply with HCatalogStore. (jaehwa)
http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
index ea2b031,6799c04..20af854
--- a/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
@@@ -42,7 -42,11 +42,12 @@@ public class FieldEval extends EvalNod
@Override
public Datum eval(Schema schema, Tuple tuple) {
if (fieldId == -1) {
- fieldId = schema.getColumnId(column.getQualifiedName());
++ // TODO - column namespace should be improved to simplify name handling and resolving.
+ if (column.hasQualifier()) {
+ fieldId = schema.getColumnId(column.getQualifiedName());
+ } else {
+ fieldId = schema.getColumnIdByName(column.getSimpleName());
+ }
if (fieldId == -1) {
throw new IllegalStateException("No Such Column Reference: " + column + ", schema: " + schema);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
index 6458f47,33cc242..8daad0b
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
@@@ -152,6 -159,6 +159,34 @@@ public class DistinctGroupbyHashAggrega
return null;
}
++
++ /*
++ Tuple materialization example
++ =============================
++
++ Output Tuple Index: 0(l_orderkey), 1(l_partkey), 2(default.lineitem.l_suppkey), 5(default.lineitem.
++ l_partkey), 8(sum)
++
++ select
++ lineitem.l_orderkey as l_orderkey,
++ lineitem.l_partkey as l_partkey,
++ count(distinct lineitem.l_partkey) as cnt1,
++ count(distinct lineitem.l_suppkey) as cnt2,
++ sum(lineitem.l_quantity) as sum1
++ from
++ lineitem
++ group by
++ lineitem.l_orderkey, lineitem.l_partkey
++
++ The above case will result in the following materialization
++ ------------------------------------------------------------
++
++ l_orderkey l_partkey default.lineitem.l_suppkey l_orderkey l_partkey default.lineitem.l_partkey l_orderkey l_partkey sum
++ 1 1 7311 1 1 1 1 1 53.0
++ 1 1 7706
++
++ */
++
currentAggregatedTuples = new ArrayList<Tuple>();
int listIndex = 0;
while (true) {