KYLIN-1698 backend done, pending GUI
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a20d709d Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a20d709d Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a20d709d Branch: refs/heads/1.5.x-CDH5.7 Commit: a20d709d27da9060d63ccb1c14902235a3aedec2 Parents: 16de8ba Author: Li Yang <liy...@apache.org> Authored: Fri Sep 2 15:49:34 2016 +0800 Committer: Li Yang <liy...@apache.org> Committed: Fri Sep 2 15:49:48 2016 +0800 ---------------------------------------------------------------------- .../kylin/metadata/datatype/DataType.java | 2 +- .../kylin/metadata/model/PartitionDesc.java | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/a20d709d/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java index 032fba2..c981f46 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java @@ -63,7 +63,7 @@ public class DataType implements Serializable { register("any", "char", "varchar", "string", // "boolean", "byte", "binary", // "int", "short", "long", "integer", "tinyint", "smallint", "bigint", // - "int4", "long8", // + "int4", "long8", // for test only "float", "real", "double", "decimal", "numeric", // "date", "time", "datetime", "timestamp", // InnerDataTypeEnum.LITERAL.getDataType(), InnerDataTypeEnum.DERIVED.getDataType()); http://git-wip-us.apache.org/repos/asf/kylin/blob/a20d709d/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 3f265e2..8d3979e 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 @@ -24,6 +24,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.util.ClassUtil; import org.apache.kylin.common.util.DateFormat; import org.apache.kylin.common.util.StringSplitter; +import org.apache.kylin.metadata.datatype.DataType; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; @@ -90,6 +91,11 @@ public class PartitionDesc { partitionConditionBuilder = (IPartitionConditionBuilder) ClassUtil.newInstance(partitionConditionBuilderClz); } + public boolean partitionColumnIsTimeMillis() { + DataType type = partitionDateColumnRef.getType(); + return type.isBigInt(); + } + public boolean isPartitioned() { return partitionDateColumnRef != null; } @@ -166,7 +172,9 @@ public class PartitionDesc { String partitionDateColumnName = partDesc.getPartitionDateColumn(); String partitionTimeColumnName = partDesc.getPartitionTimeColumn(); - if (partitionDateColumnName != null && partitionTimeColumnName == null) { + if (partDesc.partitionColumnIsTimeMillis()) { + buildSingleColumnRangeCondition(builder, partitionDateColumnName, startInclusive, endExclusive, tableAlias); + } else if (partitionDateColumnName != null && partitionTimeColumnName == null) { buildSingleColumnRangeCondition(builder, partitionDateColumnName, startInclusive, endExclusive, partDesc.getPartitionDateFormat(), tableAlias); } else if (partitionDateColumnName == null && partitionTimeColumnName != null) { buildSingleColumnRangeCondition(builder, partitionTimeColumnName, startInclusive, endExclusive, partDesc.getPartitionTimeFormat(), tableAlias); @@ -190,6 +198,15 @@ public class PartitionDesc { return columnName; } + private static void buildSingleColumnRangeCondition(StringBuilder builder, String partitionColumnName, long startInclusive, long endExclusive, Map<String, String> tableAlias) { + partitionColumnName = replaceColumnNameWithAlias(partitionColumnName, tableAlias); + if (startInclusive > 0) { + builder.append(partitionColumnName + " >= " + startInclusive); + builder.append(" AND "); + } + builder.append(partitionColumnName + " < " + endExclusive); + } + private static void buildSingleColumnRangeCondition(StringBuilder builder, String partitionColumnName, long startInclusive, long endExclusive, String partitionColumnDateFormat, Map<String, String> tableAlias) { partitionColumnName = replaceColumnNameWithAlias(partitionColumnName, tableAlias); if (startInclusive > 0) { @@ -272,4 +289,5 @@ public class PartitionDesc { newPartDesc.setPartitionDateStart(partitionDesc.getPartitionDateStart()); return newPartDesc; } + }