You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2015/06/09 11:31:46 UTC

incubator-kylin git commit: rollback KYLIN-658, always use FK instead PK in row key and aggregation group

Repository: incubator-kylin
Updated Branches:
  refs/heads/0.7-staging b32f9b301 -> 30f4c6ab3


rollback KYLIN-658, always use FK instead PK in row key and aggregation group

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

Branch: refs/heads/0.7-staging
Commit: 30f4c6ab31dfb20e4dc7f5e78c5772e30e04d64b
Parents: b32f9b3
Author: shaofengshi <sh...@apache.org>
Authored: Tue Jun 9 17:31:38 2015 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Tue Jun 9 17:31:38 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/cube/model/CubeDesc.java   | 11 ++++++++-
 .../org/apache/kylin/cube/model/RowKeyDesc.java |  1 +
 .../kylin/metadata/model/PartitionDesc.java     | 25 +++++++++++++++-----
 3 files changed, 30 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/30f4c6ab/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
----------------------------------------------------------------------
diff --git a/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
index 4959685..a810376 100644
--- a/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
+++ b/cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
@@ -609,8 +609,17 @@ public class CubeDesc extends RootPersistentEntity {
         ColumnDesc col = table.findColumnByName(colName);
         if (col == null)
             throw new IllegalArgumentException("No column '" + colName + "' found in table " + table);
-        
+
         TblColRef ref = new TblColRef(col);
+
+        // always use FK instead PK, FK could be shared by more than one lookup tables
+        JoinDesc join = dim.getJoin();
+        if (join != null) {
+            int idx = ArrayUtils.indexOf(join.getPrimaryKeyColumns(), ref);
+            if (idx >= 0) {
+                ref = join.getForeignKeyColumns()[idx];
+            }
+        }
         return initDimensionColRef(ref);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/30f4c6ab/cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
----------------------------------------------------------------------
diff --git a/cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java b/cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
index b1e0b53..0d2c238 100644
--- a/cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
+++ b/cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
@@ -154,6 +154,7 @@ public class RowKeyDesc {
 
     private RowKeyColDesc getColDesc(TblColRef col) {
         RowKeyColDesc desc = columnMap.get(col);
+
         if (desc == null)
             throw new NullPointerException("Column " + col + " does not exist in row key desc");
         return desc;

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/30f4c6ab/metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
----------------------------------------------------------------------
diff --git a/metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java b/metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
index b943622..42a752f 100644
--- a/metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
+++ b/metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
@@ -145,10 +145,14 @@ public class PartitionDesc {
 
     }
 
+    /**
+     * Another implementation of IPartitionConditionBuilder, for the fact tables which have three partition columns "YEAR", "MONTH", and "DAY"; This
+     * class will concat the three columns into yyyy-MM-dd format for query hive;
+     */
     public static class YearMonthDayPartitionConditionBuilder implements PartitionDesc.IPartitionConditionBuilder {
 
         @Override
-        public String buildDateRangeCondition(PartitionDesc partDesc, long l, long l1, Map<String, String> map) {
+        public String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive, Map<String, String> tableAlias) {
 
             String partitionColumnName = partDesc.getPartitionDateColumn();
             String partitionTableName;
@@ -156,17 +160,26 @@ public class PartitionDesc {
             // convert to use table alias
             int indexOfDot = partitionColumnName.lastIndexOf(".");
             if (indexOfDot > 0) {
-                partitionTableName = partitionColumnName.substring(0, indexOfDot);
+                partitionTableName = partitionColumnName.substring(0, indexOfDot).toUpperCase();
             } else {
                 throw new IllegalStateException("The partitionColumnName is invalid: " + partitionColumnName);
             }
 
-            if (map.containsKey(partitionTableName)) {
-                partitionTableName = map.get(partitionTableName);
+            if (tableAlias.containsKey(partitionTableName)) {
+                partitionTableName = tableAlias.get(partitionTableName);
             }
 
-            String sql = String.format("CONCAT(%s.YEAR,'-',%s.MONTH,'-',%s.DAY)", partitionTableName, partitionTableName, partitionTableName);
-            return sql;
+            String concatField = String.format("CONCAT(%s.YEAR,'-',%s.MONTH,'-',%s.DAY)", partitionTableName, partitionTableName, partitionTableName);
+            StringBuilder builder = new StringBuilder();
+
+            if (startInclusive > 0) {
+                builder.append(concatField + " >= '" + DateFormat.formatToDateStr(startInclusive) + "' ");
+                builder.append("AND ");
+            }
+            builder.append(concatField + " < '" + DateFormat.formatToDateStr(endExclusive) + "'");
+
+
+            return builder.toString();
         }
     }
 }