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 2016/04/06 09:52:48 UTC
kylin git commit: KYLIN-1513 Time partitioning doesn't work across
multiple days
Repository: kylin
Updated Branches:
refs/heads/master be6e2065a -> b37c5bb29
KYLIN-1513 Time partitioning doesn't work across multiple days
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b37c5bb2
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b37c5bb2
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b37c5bb2
Branch: refs/heads/master
Commit: b37c5bb293fe2025bf7e7b0c4901d13c02fc86eb
Parents: be6e206
Author: shaofengshi <sh...@apache.org>
Authored: Wed Apr 6 15:49:07 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Wed Apr 6 15:49:29 2016 +0800
----------------------------------------------------------------------
.../kylin/metadata/model/PartitionDesc.java | 37 +++++++++++++++++---
1 file changed, 32 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/b37c5bb2/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
index 1738c27..f1339cd 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/PartitionDesc.java
@@ -166,14 +166,14 @@ public class PartitionDesc {
String partitionDateColumnName = partDesc.getPartitionDateColumn();
String partitionTimeColumnName = partDesc.getPartitionTimeColumn();
- if (partitionDateColumnName != null) {
+ if (partitionDateColumnName != null && partitionTimeColumnName == null) {
buildSingleColumnRangeCondition(builder, partitionDateColumnName, startInclusive, endExclusive, partDesc.getPartitionDateFormat(), tableAlias);
- }
- if (partitionTimeColumnName != null) {
- if (partitionDateColumnName != null)
- builder.append(" AND ");
+ } else if (partitionDateColumnName == null && partitionTimeColumnName != null) {
buildSingleColumnRangeCondition(builder, partitionTimeColumnName, startInclusive, endExclusive, partDesc.getPartitionTimeFormat(), tableAlias);
+ } else if (partitionDateColumnName != null && partitionTimeColumnName != null) {
+ buildMultipleColumnRangeCondition(builder, partitionDateColumnName, partitionTimeColumnName, startInclusive, endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat(), tableAlias);
}
+
return builder.toString();
}
@@ -198,6 +198,33 @@ public class PartitionDesc {
}
builder.append(partitionColumnName + " < '" + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + "'");
}
+
+ private static void buildMultipleColumnRangeCondition(StringBuilder builder, String partitionDateColumnName, String partitionTimeColumnName, long startInclusive, long endExclusive, String partitionColumnDateFormat, String partitionColumnTimeFormat, Map<String, String> tableAlias) {
+ partitionDateColumnName = replaceColumnNameWithAlias(partitionDateColumnName, tableAlias);
+ partitionTimeColumnName = replaceColumnNameWithAlias(partitionTimeColumnName, tableAlias);
+ if (startInclusive > 0) {
+ builder.append("(");
+ builder.append("(");
+ builder.append(partitionDateColumnName + " = '" + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + "'").append(" AND ").append(partitionTimeColumnName + " >= '" + DateFormat.formatToDateStr(startInclusive, partitionColumnTimeFormat) + "'");
+ builder.append(")");
+ builder.append(" OR ");
+ builder.append("(");
+ builder.append(partitionDateColumnName + " > '" + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + "'");
+ builder.append(")");
+ builder.append(")");
+ builder.append(" AND ");
+ }
+
+ builder.append("(");
+ builder.append("(");
+ builder.append(partitionDateColumnName + " = '" + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + "'").append(" AND ").append(partitionTimeColumnName + " < '" + DateFormat.formatToDateStr(endExclusive, partitionColumnTimeFormat) + "'");
+ builder.append(")");
+ builder.append(" OR ");
+ builder.append("(");
+ builder.append(partitionDateColumnName + " < '" + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + "'");
+ builder.append(")");
+ builder.append(")");
+ }
}
/**