You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by an...@apache.org on 2014/02/05 06:50:20 UTC
[1/2] git commit: PHOENIX-18 Distinct based aggregations not working
correctly when query contains ORDER BY.(Anoop)
Updated Branches:
refs/heads/master ff1c1af6f -> 974ad584b
PHOENIX-18 Distinct based aggregations not working correctly when query contains ORDER BY.(Anoop)
Project: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/commit/4e239840
Tree: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/tree/4e239840
Diff: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/diff/4e239840
Branch: refs/heads/master
Commit: 4e2398404f5672df4f1160099f3d9a4a681c8445
Parents: bc21d8e
Author: anoopsjohn <an...@gmail.com>
Authored: Wed Feb 5 11:16:58 2014 +0530
Committer: anoopsjohn <an...@gmail.com>
Committed: Wed Feb 5 11:16:58 2014 +0530
----------------------------------------------------------------------
.../aggregator/BaseDecimalStddevAggregator.java | 21 ++---
.../aggregator/BaseStddevAggregator.java | 14 +---
.../DistinctCountClientAggregator.java | 12 +--
.../DistinctValueWithCountClientAggregator.java | 80 +++++++++++---------
.../aggregator/PercentRankClientAggregator.java | 12 +--
.../aggregator/PercentileClientAggregator.java | 12 +--
.../PercentileDiscClientAggregator.java | 16 ++--
.../phoenix/end2end/DistinctCountTest.java | 63 ++++++++++++++-
.../apache/phoenix/end2end/PercentileTest.java | 72 +++++++++++++++++-
9 files changed, 201 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
index b28cb92..85dbc4f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
@@ -23,16 +23,15 @@ import java.math.*;
import java.util.List;
import java.util.Map.Entry;
+import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.util.Pair;
-
-import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
import org.apache.phoenix.expression.ColumnExpression;
import org.apache.phoenix.expression.Expression;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
import org.apache.phoenix.schema.tuple.Tuple;
-import org.apache.phoenix.util.*;
+import org.apache.phoenix.util.BigDecimalUtil;
import org.apache.phoenix.util.BigDecimalUtil.Operation;
/**
@@ -42,7 +41,6 @@ import org.apache.phoenix.util.BigDecimalUtil.Operation;
*/
public abstract class BaseDecimalStddevAggregator extends DistinctValueWithCountClientAggregator {
- private BigDecimal cachedResult = null;
private int colPrecision;
private int colScale;
@@ -54,11 +52,6 @@ public abstract class BaseDecimalStddevAggregator extends DistinctValueWithCount
}
@Override
- protected int getBufferLength() {
- return PDataType.DECIMAL.getByteSize();
- }
-
- @Override
public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
if (cachedResult == null) {
BigDecimal ssd = sumSquaredDeviation();
@@ -77,9 +70,10 @@ public abstract class BaseDecimalStddevAggregator extends DistinctValueWithCount
this.colScale, this.colPrecision, this.colScale, Operation.OTHERS);
resultPrecision = precisionScale.getFirst();
}
- cachedResult = new BigDecimal(Math.sqrt(ssd.doubleValue()), new MathContext(resultPrecision,
+ BigDecimal result = new BigDecimal(Math.sqrt(ssd.doubleValue()), new MathContext(resultPrecision,
RoundingMode.HALF_UP));
- cachedResult.setScale(this.colScale, RoundingMode.HALF_UP);
+ result.setScale(this.colScale, RoundingMode.HALF_UP);
+ cachedResult = result;
}
if (buffer == null) {
initBuffer();
@@ -112,8 +106,7 @@ public abstract class BaseDecimalStddevAggregator extends DistinctValueWithCount
}
@Override
- public void reset() {
- super.reset();
- this.cachedResult = null;
+ protected PDataType getResultDataType() {
+ return PDataType.DECIMAL;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
index eaafc79..b140ff6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
@@ -23,9 +23,8 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.Map.Entry;
-import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.phoenix.expression.Expression;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
@@ -39,7 +38,6 @@ import org.apache.phoenix.schema.tuple.Tuple;
public abstract class BaseStddevAggregator extends DistinctValueWithCountClientAggregator {
protected Expression stdDevColExp;
- private BigDecimal cachedResult = null;
public BaseStddevAggregator(List<Expression> exps, ColumnModifier columnModifier) {
super(columnModifier);
@@ -47,11 +45,6 @@ public abstract class BaseStddevAggregator extends DistinctValueWithCountClientA
}
@Override
- protected int getBufferLength() {
- return PDataType.DECIMAL.getByteSize();
- }
-
- @Override
public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
if (cachedResult == null) {
double ssd = sumSquaredDeviation();
@@ -89,8 +82,7 @@ public abstract class BaseStddevAggregator extends DistinctValueWithCountClientA
}
@Override
- public void reset() {
- super.reset();
- this.cachedResult = null;
+ protected PDataType getResultDataType() {
+ return PDataType.DECIMAL;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
index d221e91..b568687 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
@@ -20,7 +20,6 @@
package org.apache.phoenix.expression.aggregator;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
import org.apache.phoenix.schema.tuple.Tuple;
@@ -42,14 +41,17 @@ public class DistinctCountClientAggregator extends DistinctValueWithCountClientA
if (buffer == null) {
initBuffer();
}
- long value = this.valueVsCount.size();
- buffer = PDataType.LONG.toBytes(value);
+ if (cachedResult != null) {
+ buffer = PDataType.LONG.toBytes(cachedResult);
+ } else {
+ buffer = PDataType.LONG.toBytes(this.valueVsCount.size());
+ }
ptr.set(buffer);
return true;
}
@Override
- protected int getBufferLength() {
- return PDataType.LONG.getByteSize();
+ protected PDataType getResultDataType() {
+ return PDataType.LONG;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
index c009a28..7d2b93a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
@@ -19,23 +19,17 @@
*/
package org.apache.phoenix.expression.aggregator;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.*;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.TreeMap;
+import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.WritableUtils;
-
-import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
import org.apache.phoenix.schema.tuple.Tuple;
/**
@@ -48,6 +42,7 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
protected Map<ImmutableBytesPtr, Integer> valueVsCount = new HashMap<ImmutableBytesPtr, Integer>();
protected byte[] buffer;
protected long totalCount = 0L;
+ protected Object cachedResult;
public DistinctValueWithCountClientAggregator(ColumnModifier columnModifier) {
super(columnModifier);
@@ -55,41 +50,45 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
@Override
public void aggregate(Tuple tuple, ImmutableBytesWritable ptr) {
- InputStream is = new ByteArrayInputStream(ptr.get(), ptr.getOffset() + 1, ptr.getLength() - 1);
- try {
- if (Bytes.equals(ptr.get(), ptr.getOffset(), 1, DistinctValueWithCountServerAggregator.COMPRESS_MARKER, 0,
- 1)) {
- InputStream decompressionStream = DistinctValueWithCountServerAggregator.COMPRESS_ALGO
- .createDecompressionStream(is,
- DistinctValueWithCountServerAggregator.COMPRESS_ALGO.getDecompressor(), 0);
- is = decompressionStream;
- }
- DataInputStream in = new DataInputStream(is);
- int mapSize = WritableUtils.readVInt(in);
- for (int i = 0; i < mapSize; i++) {
- int keyLen = WritableUtils.readVInt(in);
- byte[] keyBytes = new byte[keyLen];
- in.read(keyBytes, 0, keyLen);
- ImmutableBytesPtr key = new ImmutableBytesPtr(keyBytes);
- int value = WritableUtils.readVInt(in);
- Integer curCount = valueVsCount.get(key);
- if (curCount == null) {
- valueVsCount.put(key, value);
- } else {
- valueVsCount.put(key, curCount + value);
+ if (tuple instanceof SingleKeyValueTuple) {
+ // Case when scanners do look ahead and re-aggregate result row.The result is already available in the ptr
+ PDataType resultDataType = getResultDataType();
+ cachedResult = resultDataType.toObject(ptr, resultDataType, columnModifier);
+ } else {
+ InputStream is = new ByteArrayInputStream(ptr.get(), ptr.getOffset() + 1, ptr.getLength() - 1);
+ try {
+ if (Bytes.equals(ptr.get(), ptr.getOffset(), 1, DistinctValueWithCountServerAggregator.COMPRESS_MARKER,
+ 0, 1)) {
+ InputStream decompressionStream = DistinctValueWithCountServerAggregator.COMPRESS_ALGO
+ .createDecompressionStream(is,
+ DistinctValueWithCountServerAggregator.COMPRESS_ALGO.getDecompressor(), 0);
+ is = decompressionStream;
+ }
+ DataInputStream in = new DataInputStream(is);
+ int mapSize = WritableUtils.readVInt(in);
+ for (int i = 0; i < mapSize; i++) {
+ int keyLen = WritableUtils.readVInt(in);
+ byte[] keyBytes = new byte[keyLen];
+ in.read(keyBytes, 0, keyLen);
+ ImmutableBytesPtr key = new ImmutableBytesPtr(keyBytes);
+ int value = WritableUtils.readVInt(in);
+ Integer curCount = valueVsCount.get(key);
+ if (curCount == null) {
+ valueVsCount.put(key, value);
+ } else {
+ valueVsCount.put(key, curCount + value);
+ }
+ totalCount += value;
}
- totalCount += value;
+ } catch (IOException ioe) {
+ throw new RuntimeException(ioe); // Impossible as we're using a ByteArrayInputStream
}
- } catch (IOException ioe) {
- throw new RuntimeException(ioe); // Impossible as we're using a ByteArrayInputStream
}
if (buffer == null) {
initBuffer();
}
}
- protected abstract int getBufferLength();
-
protected void initBuffer() {
buffer = new byte[getBufferLength()];
}
@@ -109,6 +108,7 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
valueVsCount = new HashMap<ImmutableBytesPtr, Integer>();
buffer = null;
totalCount = 0L;
+ cachedResult = null;
super.reset();
}
@@ -129,4 +129,10 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
}
return sorted;
}
+
+ protected int getBufferLength() {
+ return getResultDataType().getByteSize();
+ }
+
+ protected abstract PDataType getResultDataType();
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
index 42ca267..13a1f6e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
@@ -24,7 +24,6 @@ import java.util.*;
import java.util.Map.Entry;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
import org.apache.phoenix.expression.*;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
@@ -39,7 +38,6 @@ import org.apache.phoenix.schema.tuple.Tuple;
public class PercentRankClientAggregator extends DistinctValueWithCountClientAggregator {
private final List<Expression> exps;
- private BigDecimal cachedResult = null;
public PercentRankClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
super(columnModifier);
@@ -80,13 +78,7 @@ public class PercentRankClientAggregator extends DistinctValueWithCountClientAgg
}
@Override
- protected int getBufferLength() {
- return PDataType.DECIMAL.getByteSize();
- }
-
- @Override
- public void reset() {
- super.reset();
- this.cachedResult = null;
+ protected PDataType getResultDataType() {
+ return PDataType.DECIMAL;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
index 095842a..945387b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
@@ -24,7 +24,6 @@ import java.util.*;
import java.util.Map.Entry;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
import org.apache.phoenix.expression.*;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
@@ -39,7 +38,6 @@ import org.apache.phoenix.schema.tuple.Tuple;
public class PercentileClientAggregator extends DistinctValueWithCountClientAggregator {
private final List<Expression> exps;
- private BigDecimal cachedResult = null;
public PercentileClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
super(columnModifier);
@@ -98,13 +96,7 @@ public class PercentileClientAggregator extends DistinctValueWithCountClientAggr
}
@Override
- protected int getBufferLength() {
- return PDataType.DECIMAL.getByteSize();
- }
-
- @Override
- public void reset() {
- super.reset();
- this.cachedResult = null;
+ protected PDataType getResultDataType() {
+ return PDataType.DECIMAL;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
index 206ed1d..53d9526 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
@@ -23,7 +23,6 @@ import java.util.*;
import java.util.Map.Entry;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
import org.apache.phoenix.expression.*;
import org.apache.phoenix.schema.ColumnModifier;
import org.apache.phoenix.schema.PDataType;
@@ -36,11 +35,9 @@ import org.apache.phoenix.schema.tuple.Tuple;
* @author ramkrishna
* @since 1.2.1
*/
-public class PercentileDiscClientAggregator extends
- DistinctValueWithCountClientAggregator {
+public class PercentileDiscClientAggregator extends DistinctValueWithCountClientAggregator {
private final List<Expression> exps;
- private Object cachedResult = null;
ColumnExpression columnExp = null;
public PercentileDiscClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
@@ -92,15 +89,14 @@ public class PercentileDiscClientAggregator extends
}
@Override
- public void reset() {
- super.reset();
- this.cachedResult = null;
- }
-
- @Override
protected int getBufferLength() {
// Will be used in the aggregate() call
return PDataType.DECIMAL.getByteSize();
}
+
+ @Override
+ protected PDataType getResultDataType() {
+ return columnExp.getDataType();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/test/java/org/apache/phoenix/end2end/DistinctCountTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/end2end/DistinctCountTest.java b/phoenix-core/src/test/java/org/apache/phoenix/end2end/DistinctCountTest.java
index 928828b..c508f5c 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/end2end/DistinctCountTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/end2end/DistinctCountTest.java
@@ -26,9 +26,8 @@ import java.math.BigDecimal;
import java.sql.*;
import java.util.Properties;
-import org.junit.Test;
-
import org.apache.phoenix.util.PhoenixRuntime;
+import org.junit.Test;
public class DistinctCountTest extends BaseClientManagedTimeTest {
@@ -109,6 +108,66 @@ public class DistinctCountTest extends BaseClientManagedTimeTest {
}
@Test
+ public void testDistinctCountWithGroupByAndOrderBy() throws Exception {
+ long ts = nextTimestamp();
+ String tenantId = getOrganizationId();
+ initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts);
+
+ String query = "SELECT A_STRING, count(DISTINCT B_STRING) FROM aTable group by A_STRING order by A_STRING desc";
+
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at
+ // timestamp 2
+ Connection conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
+ try {
+ PreparedStatement statement = conn.prepareStatement(query);
+ ResultSet rs = statement.executeQuery();
+ assertTrue(rs.next());
+ assertEquals(C_VALUE, rs.getString(1));
+ assertEquals(1, rs.getLong(2));
+ assertTrue(rs.next());
+ assertEquals(B_VALUE, rs.getString(1));
+ assertEquals(1, rs.getLong(2));
+ assertTrue(rs.next());
+ assertEquals(A_VALUE, rs.getString(1));
+ assertEquals(2, rs.getLong(2));
+ assertFalse(rs.next());
+ } finally {
+ conn.close();
+ }
+ }
+
+ @Test
+ public void testDistinctCountWithGroupByAndOrderByOnDistinctCount() throws Exception {
+ long ts = nextTimestamp();
+ String tenantId = getOrganizationId();
+ initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts);
+
+ String query = "SELECT A_STRING, count(DISTINCT B_STRING) as COUNT_B_STRING FROM aTable group by A_STRING order by COUNT_B_STRING";
+
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at
+ // timestamp 2
+ Connection conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
+ try {
+ PreparedStatement statement = conn.prepareStatement(query);
+ ResultSet rs = statement.executeQuery();
+ assertTrue(rs.next());
+ assertEquals(B_VALUE, rs.getString(1));
+ assertEquals(1, rs.getLong(2));
+ assertTrue(rs.next());
+ assertEquals(C_VALUE, rs.getString(1));
+ assertEquals(1, rs.getLong(2));
+ assertTrue(rs.next());
+ assertEquals(A_VALUE, rs.getString(1));
+ assertEquals(2, rs.getLong(2));
+ assertFalse(rs.next());
+ } finally {
+ conn.close();
+ }
+ }
+
+ @Test
public void testDistinctCountWithGroupByOrdered() throws Exception {
long ts = nextTimestamp();
String tenantId = getOrganizationId();
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/4e239840/phoenix-core/src/test/java/org/apache/phoenix/end2end/PercentileTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/end2end/PercentileTest.java b/phoenix-core/src/test/java/org/apache/phoenix/end2end/PercentileTest.java
index f5cd102..e28804e 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/end2end/PercentileTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/end2end/PercentileTest.java
@@ -27,10 +27,9 @@ import java.math.RoundingMode;
import java.sql.*;
import java.util.Properties;
-import org.junit.Test;
-
import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.util.PhoenixRuntime;
+import org.junit.Test;
public class PercentileTest extends BaseClientManagedTimeTest {
@@ -121,6 +120,42 @@ public class PercentileTest extends BaseClientManagedTimeTest {
}
@Test
+ public void testPercentileWithGroupbyAndOrderBy() throws Exception {
+ long ts = nextTimestamp();
+ String tenantId = getOrganizationId();
+ initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts);
+
+ String query = "SELECT A_STRING, PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY A_INTEGER ASC) AS PC FROM aTable GROUP BY A_STRING ORDER BY PC";
+
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at
+ // timestamp 2
+ Connection conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
+ try {
+ PreparedStatement statement = conn.prepareStatement(query);
+ ResultSet rs = statement.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("a",rs.getString(1));
+ BigDecimal percentile = rs.getBigDecimal(2);
+ percentile = percentile.setScale(1, RoundingMode.HALF_UP);
+ assertEquals(7.0, percentile.doubleValue(),0.0);
+ assertTrue(rs.next());
+ assertEquals("c",rs.getString(1));
+ percentile = rs.getBigDecimal(2);
+ percentile = percentile.setScale(1, RoundingMode.HALF_UP);
+ assertEquals(8.0, percentile.doubleValue(),0.0);
+ assertTrue(rs.next());
+ assertEquals("b",rs.getString(1));
+ percentile = rs.getBigDecimal(2);
+ percentile = percentile.setScale(1, RoundingMode.HALF_UP);
+ assertEquals(9.0, percentile.doubleValue(),0.0);
+ assertFalse(rs.next());
+ } finally {
+ conn.close();
+ }
+ }
+
+ @Test
public void testPercentileDiscAsc() throws Exception {
long ts = nextTimestamp();
String tenantId = getOrganizationId();
@@ -204,6 +239,39 @@ public class PercentileTest extends BaseClientManagedTimeTest {
}
@Test
+ public void testPercentileDiscWithGroupbyAndOrderBy() throws Exception {
+ long ts = nextTimestamp();
+ String tenantId = getOrganizationId();
+ initATableValues(tenantId, null, getDefaultSplits(tenantId), null, ts);
+
+ String query = "SELECT A_STRING, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY A_INTEGER ASC) FROM aTable GROUP BY A_STRING ORDER BY A_STRING DESC";
+
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 2)); // Execute at
+ // timestamp 2
+ Connection conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
+ try {
+ PreparedStatement statement = conn.prepareStatement(query);
+ ResultSet rs = statement.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("c",rs.getString(1));
+ int percentile_disc = rs.getInt(2);
+ assertEquals(8, percentile_disc);
+ assertTrue(rs.next());
+ assertEquals("b",rs.getString(1));
+ percentile_disc = rs.getInt(2);
+ assertEquals(5, percentile_disc);
+ assertTrue(rs.next());
+ assertEquals("a",rs.getString(1));
+ percentile_disc = rs.getInt(2);
+ assertEquals(2, percentile_disc);
+ assertFalse(rs.next());
+ } finally {
+ conn.close();
+ }
+ }
+
+ @Test
public void testPercentRank() throws Exception {
long ts = nextTimestamp();
String tenantId = getOrganizationId();
[2/2] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-phoenix
Posted by an...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-phoenix
Project: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/commit/974ad584
Tree: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/tree/974ad584
Diff: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/diff/974ad584
Branch: refs/heads/master
Commit: 974ad584b0aef1fcb2f946961c7538c0f012794b
Parents: 4e23984 ff1c1af
Author: anoopsjohn <an...@gmail.com>
Authored: Wed Feb 5 11:19:27 2014 +0530
Committer: anoopsjohn <an...@gmail.com>
Committed: Wed Feb 5 11:19:27 2014 +0530
----------------------------------------------------------------------
.../apache/phoenix/compile/DeleteCompiler.java | 13 +-
.../phoenix/compile/ExpressionCompiler.java | 6 +-
.../phoenix/compile/IndexStatementRewriter.java | 11 +-
.../apache/phoenix/compile/JoinCompiler.java | 75 +++--
.../apache/phoenix/compile/QueryCompiler.java | 9 +-
.../org/apache/phoenix/compile/ScanRanges.java | 62 +++-
.../phoenix/compile/StatementNormalizer.java | 5 +-
.../apache/phoenix/compile/WhereOptimizer.java | 59 ++--
.../phoenix/coprocessor/ScanProjector.java | 202 -----------
.../phoenix/expression/InListExpression.java | 22 +-
.../apache/phoenix/iterate/ExplainTable.java | 16 +-
.../apache/phoenix/optimize/QueryOptimizer.java | 1 +
.../org/apache/phoenix/parse/BindTableNode.java | 11 +-
.../apache/phoenix/parse/ConcreteTableNode.java | 7 +-
.../org/apache/phoenix/parse/JoinTableNode.java | 3 +-
.../apache/phoenix/parse/LiteralParseNode.java | 4 +-
.../apache/phoenix/parse/NamedTableNode.java | 13 +-
.../apache/phoenix/parse/ParseNodeRewriter.java | 37 ++-
.../org/apache/phoenix/parse/TableNode.java | 11 +
.../apache/phoenix/schema/MetaDataClient.java | 69 ++--
.../org/apache/phoenix/schema/PDataType.java | 18 +-
.../org/apache/phoenix/schema/SaltingUtil.java | 36 +-
.../org/apache/phoenix/util/SchemaUtil.java | 5 +-
.../phoenix/compile/JoinQueryCompileTest.java | 28 +-
.../phoenix/compile/WhereClauseCompileTest.java | 57 ++--
.../compile/WhereClauseOptimizerTest.java | 8 +-
.../phoenix/end2end/BaseConnectedQueryTest.java | 4 +-
.../apache/phoenix/end2end/HashJoinTest.java | 331 +++++++++----------
.../apache/phoenix/end2end/QueryPlanTest.java | 4 +-
.../end2end/RowValueConstructorTest.java | 9 +-
.../end2end/TenantSpecificTablesDMLTest.java | 109 ++++--
.../phoenix/end2end/index/BaseIndexTest.java | 31 ++
.../end2end/index/BaseMutableIndexTest.java | 10 +-
.../end2end/index/ImmutableIndexTest.java | 149 ---------
.../phoenix/end2end/index/MutableIndexTest.java | 8 +-
.../end2end/index/MutableSaltedIndexTest.java | 183 ----------
.../phoenix/end2end/index/SaltedIndexTest.java | 207 ++++++++++++
.../java/org/apache/phoenix/query/BaseTest.java | 22 +-
.../java/org/apache/phoenix/util/TestUtil.java | 22 +-
39 files changed, 830 insertions(+), 1047 deletions(-)
----------------------------------------------------------------------