You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2016/11/03 06:30:49 UTC
[3/7] kylin git commit: KYLIN-2154 source table rows will be skipped
if TOPN's group column contains NULL values
KYLIN-2154 source table rows will be skipped if TOPN's group column contains NULL values
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/da2d4d0b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/da2d4d0b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/da2d4d0b
Branch: refs/heads/yang21-hbase1.x
Commit: da2d4d0b38c8dc1a32c4ee2049954b6a5a684ff3
Parents: f3ac9ff
Author: Hongbin Ma <ma...@apache.org>
Authored: Wed Nov 2 22:28:35 2016 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Thu Nov 3 10:33:57 2016 +0800
----------------------------------------------------------------------
.../java/org/apache/kylin/measure/topn/TopNMeasureType.java | 9 +++++++--
.../apache/kylin/storage/gtrecord/CubeSegmentScanner.java | 5 ++++-
2 files changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/da2d4d0b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
index 3974a4f..1e2d6dd 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
@@ -18,6 +18,7 @@
package org.apache.kylin.measure.topn;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -142,8 +143,12 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
final ByteArray key = new ByteArray(keyLength);
int offset = 0;
for (int i = 0; i < dimensionEncodings.length; i++) {
- byte[] valueBytes = Bytes.toBytes(values[i + 1]);
- dimensionEncodings[i].encode(valueBytes, valueBytes.length, key.array(), offset);
+ if (values[i + 1] == null) {
+ Arrays.fill(key.array(), offset, offset + dimensionEncodings[i].getLengthOfEncoding(), DimensionEncoding.NULL);
+ } else {
+ byte[] valueBytes = Bytes.toBytes(values[i + 1]);
+ dimensionEncodings[i].encode(valueBytes, valueBytes.length, key.array(), offset);
+ }
offset += dimensionEncodings[i].getLengthOfEncoding();
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/da2d4d0b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
index 6e19c09..c6a6daa 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
@@ -53,6 +53,9 @@ public class CubeSegmentScanner implements IGTScanner {
public CubeSegmentScanner(CubeSegment cubeSeg, Cuboid cuboid, Set<TblColRef> dimensions, Set<TblColRef> groups, //
Collection<FunctionDesc> metrics, TupleFilter originalfilter, StorageContext context, String gtStorage) {
+
+ logger.info("Init CubeSegmentScanner for segment {}", cubeSeg.getName());
+
this.cuboid = cuboid;
this.cubeSeg = cubeSeg;
@@ -61,7 +64,7 @@ public class CubeSegmentScanner implements IGTScanner {
//is working on its own copy
byte[] serialize = TupleFilterSerializer.serialize(originalfilter, StringCodeSystem.INSTANCE);
TupleFilter filter = TupleFilterSerializer.deserialize(serialize, StringCodeSystem.INSTANCE);
-
+
// translate FunctionTupleFilter to IN clause
ITupleFilterTransformer translator = new BuiltInFunctionTransformer(cubeSeg.getDimensionEncodingMap());
filter = translator.transform(filter);