KYLIN-1179 Cannot use String as partition column

Signed-off-by: honma <ho...@ebay.com>


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/225a7d5b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/225a7d5b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/225a7d5b

Branch: refs/heads/2.x-staging
Commit: 225a7d5b6c68e4c0d5a70283823e4fede59d5522
Parents: 9f60f47
Author: lidongsjtu <don...@ebay.com>
Authored: Mon Nov 30 10:48:36 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Fri Dec 4 16:29:06 2015 +0800

----------------------------------------------------------------------
 .../hbase/cube/v2/CubeSegmentScanner.java       | 26 +++++++++++---------
 webapp/app/js/controllers/modelEdit.js          |  2 +-
 2 files changed, 16 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/225a7d5b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
index 1eed318..2f78a86 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/cube/v2/CubeSegmentScanner.java
@@ -11,6 +11,7 @@ import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.debug.BackdoorToggles;
 import org.apache.kylin.common.util.ByteArray;
 import org.apache.kylin.common.util.DateFormat;
@@ -30,6 +31,7 @@ import org.apache.kylin.gridtable.GTScanRequest;
 import org.apache.kylin.gridtable.GTUtil;
 import org.apache.kylin.gridtable.IGTScanner;
 import org.apache.kylin.metadata.filter.TupleFilter;
+import org.apache.kylin.metadata.model.DataType;
 import org.apache.kylin.metadata.model.FunctionDesc;
 import org.apache.kylin.metadata.model.TblColRef;
 
@@ -83,27 +85,23 @@ public class CubeSegmentScanner implements IGTScanner {
         GTInfo trimmedInfo = GTInfo.deserialize(trimmedInfoBytes);
 
         for (GTScanRange range : scanRanges) {
-            scanRequests.add(new GTScanRequest(trimmedInfo, 
range.replaceGTInfo(trimmedInfo),
-                    gtDimensions, gtAggrGroups, gtAggrMetrics, gtAggrFuncs, 
gtFilter, allowPreAggregate));
+            scanRequests.add(new GTScanRequest(trimmedInfo, 
range.replaceGTInfo(trimmedInfo), gtDimensions, gtAggrGroups, gtAggrMetrics, 
gtAggrFuncs, gtFilter, allowPreAggregate));
         }
 
         scanner = new Scanner();
     }
 
     private Pair<ByteArray, ByteArray> getSegmentStartAndEnd(TblColRef 
tblColRef, int index) {
-
-        String partitionColType = tblColRef.getColumnDesc().getDatatype();
-
         ByteArray start;
         if (cubeSeg.getDateRangeStart() != Long.MIN_VALUE) {
-            start = translateTsToString(cubeSeg.getDateRangeStart(), 
partitionColType, index);
+            start = translateTsToString(cubeSeg.getDateRangeStart(), index, 1);
         } else {
             start = new ByteArray();
         }
 
         ByteArray end;
         if (cubeSeg.getDateRangeEnd() != Long.MAX_VALUE) {
-            end = translateTsToString(cubeSeg.getDateRangeEnd(), 
partitionColType, index);
+            end = translateTsToString(cubeSeg.getDateRangeEnd(), index, -1);
         } else {
             end = new ByteArray();
         }
@@ -111,19 +109,25 @@ public class CubeSegmentScanner implements IGTScanner {
 
     }
 
-    private ByteArray translateTsToString(long ts, String partitionColType, 
int index) {
+    private ByteArray translateTsToString(long ts, int index, int 
roundingFlag) {
         String value;
-        if ("date".equalsIgnoreCase(partitionColType)) {
+        DataType partitionColType = info.getColumnType(index);
+        if (partitionColType.isDate()) {
             value = DateFormat.formatToDateStr(ts);
-        } else if ("timestamp".equalsIgnoreCase(partitionColType)) {
+        } else if (partitionColType.isDatetime()) {
             //TODO: if partition col is not dict encoded, value's format may 
differ from expected. Though by default it is not the case
             value = DateFormat.formatToTimeWithoutMilliStr(ts);
+        } else if (partitionColType.isStringFamily()) {
+            String partitionDateFormat = 
cubeSeg.getCubeDesc().getModel().getPartitionDesc().getPartitionDateFormat();
+            if (StringUtils.isEmpty(partitionDateFormat))
+                partitionDateFormat = DateFormat.DEFAULT_DATE_PATTERN;
+            value = DateFormat.formatToDateStr(ts, partitionDateFormat);
         } else {
             throw new RuntimeException("Type " + partitionColType + " is not 
valid partition column type");
         }
 
         ByteBuffer buffer = ByteBuffer.allocate(info.getMaxColumnLength());
-        info.getCodeSystem().encodeColumnValue(index, value, buffer);
+        info.getCodeSystem().encodeColumnValue(index, value, roundingFlag, 
buffer);
 
         return ByteArray.copyOf(buffer.array(), 0, buffer.position());
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/225a7d5b/webapp/app/js/controllers/modelEdit.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/modelEdit.js 
b/webapp/app/js/controllers/modelEdit.js
index cbfb57f..70d4159 100644
--- a/webapp/app/js/controllers/modelEdit.js
+++ b/webapp/app/js/controllers/modelEdit.js
@@ -35,7 +35,7 @@ KylinApp.controller('ModelEditCtrl', function ($scope, $q, 
$routeParams, $locati
 
     $scope.getPartitonColumns = function(tableName){
         var columns = 
_.filter($scope.getColumnsByTable(tableName),function(column){
-            return 
column.datatype==="date"||column.datatype==="string"||column.datatype==="timestamp";
+            return 
column.datatype==="date"||column.datatype==="timestamp"||column.datatype==="string"||column.datatype.startsWith("varchar");
         });
         return columns;
     };

Reply via email to