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();
}
}
}