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 2018/11/27 14:16:25 UTC
[kylin] branch master updated: KYLIN-3665 Partition time column may
never be added
This is an automated email from the ASF dual-hosted git repository.
shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push:
new 4e6a69b KYLIN-3665 Partition time column may never be added
4e6a69b is described below
commit 4e6a69b7fa819918b33a5f1a5d25308ae316df97
Author: Feng Liang <so...@hotmail.com>
AuthorDate: Mon Nov 26 16:29:51 2018 +0800
KYLIN-3665 Partition time column may never be added
---
.../apache/kylin/metadata/model/PartitionDesc.java | 37 ++++++++++++----------
1 file changed, 21 insertions(+), 16 deletions(-)
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 dcb37ec..56ededb 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
@@ -200,8 +200,12 @@ public class PartitionDesc implements Serializable {
StringBuilder builder = new StringBuilder();
if (partDesc.partitionColumnIsYmdInt()) {
- buildSingleColumnRangeCondAsYmdInt(builder, partitionDateColumn, startInclusive, endExclusive,
- partDesc.getPartitionDateFormat());
+ if (partitionTimeColumn == null) {
+ buildSingleColumnRangeCondAsYmdInt(builder, partitionDateColumn, startInclusive, endExclusive, partDesc.getPartitionDateFormat());
+ } else {
+ buildMultipleColumnRangeCondition(builder, partitionDateColumn, partitionTimeColumn, startInclusive,
+ endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat(), true);
+ }
} else if (partDesc.partitionColumnIsTimeMillis()) {
buildSingleColumnRangeCondAsTimeMillis(builder, partitionDateColumn, startInclusive, endExclusive);
} else if (partitionDateColumn != null && partitionTimeColumn == null) {
@@ -212,14 +216,14 @@ public class PartitionDesc implements Serializable {
partDesc.getPartitionTimeFormat());
} else if (partitionDateColumn != null && partitionTimeColumn != null) {
buildMultipleColumnRangeCondition(builder, partitionDateColumn, partitionTimeColumn, startInclusive,
- endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat());
+ endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat(), false);
}
return builder.toString();
}
private static void buildSingleColumnRangeCondAsTimeMillis(StringBuilder builder, TblColRef partitionColumn,
- long startInclusive, long endExclusive) {
+ long startInclusive, long endExclusive) {
String partitionColumnName = partitionColumn.getIdentity();
builder.append(partitionColumnName + " >= " + startInclusive);
builder.append(" AND ");
@@ -227,7 +231,7 @@ public class PartitionDesc implements Serializable {
}
private static void buildSingleColumnRangeCondAsYmdInt(StringBuilder builder, TblColRef partitionColumn,
- long startInclusive, long endExclusive, String partitionColumnDateFormat) {
+ long startInclusive, long endExclusive, String partitionColumnDateFormat) {
String partitionColumnName = partitionColumn.getIdentity();
builder.append(partitionColumnName + " >= "
+ DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat));
@@ -237,7 +241,7 @@ public class PartitionDesc implements Serializable {
}
private static void buildSingleColumnRangeCondition(StringBuilder builder, TblColRef partitionColumn,
- long startInclusive, long endExclusive, String partitionColumnDateFormat) {
+ long startInclusive, long endExclusive, String partitionColumnDateFormat) {
String partitionColumnName = partitionColumn.getIdentity();
if (endExclusive <= startInclusive) {
@@ -261,36 +265,37 @@ public class PartitionDesc implements Serializable {
}
private static void buildMultipleColumnRangeCondition(StringBuilder builder, TblColRef partitionDateColumn,
- TblColRef partitionTimeColumn, long startInclusive, long endExclusive, String partitionColumnDateFormat,
- String partitionColumnTimeFormat) {
+ TblColRef partitionTimeColumn, long startInclusive, long endExclusive, String partitionColumnDateFormat,
+ String partitionColumnTimeFormat, boolean partitionDateColumnIsYmdInt) {
String partitionDateColumnName = partitionDateColumn.getIdentity();
String partitionTimeColumnName = partitionTimeColumn.getIdentity();
+ String singleQuotation = partitionDateColumnIsYmdInt ? "" : "'";
builder.append("(");
builder.append("(");
- builder.append(partitionDateColumnName + " = '"
- + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + "'").append(" AND ")
+ builder.append(partitionDateColumnName + " = " + singleQuotation
+ + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + singleQuotation).append(" AND ")
.append(partitionTimeColumnName + " >= '"
+ DateFormat.formatToDateStr(startInclusive, partitionColumnTimeFormat) + "'");
builder.append(")");
builder.append(" OR ");
builder.append("(");
- builder.append(partitionDateColumnName + " > '"
- + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + "'");
+ builder.append(partitionDateColumnName + " > " + singleQuotation
+ + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + singleQuotation);
builder.append(")");
builder.append(")");
builder.append(" AND ");
builder.append("(");
builder.append("(");
- builder.append(partitionDateColumnName + " = '"
- + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + "'").append(" AND ")
+ builder.append(partitionDateColumnName + " = " + singleQuotation
+ + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + singleQuotation).append(" AND ")
.append(partitionTimeColumnName + " < '"
+ DateFormat.formatToDateStr(endExclusive, partitionColumnTimeFormat) + "'");
builder.append(")");
builder.append(" OR ");
builder.append("(");
- builder.append(partitionDateColumnName + " < '"
- + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + "'");
+ builder.append(partitionDateColumnName + " < " + singleQuotation
+ + DateFormat.formatToDateStr(endExclusive, partitionColumnDateFormat) + singleQuotation);
builder.append(")");
builder.append(")");
}