You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/11/06 13:47:59 UTC
kylin git commit: KYLIN-1971 bug fixes after manual test [Forced
Update!]
Repository: kylin
Updated Branches:
refs/heads/KYLIN-1971 b65437639 -> 44efded28 (forced update)
KYLIN-1971 bug fixes after manual test
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/44efded2
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/44efded2
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/44efded2
Branch: refs/heads/KYLIN-1971
Commit: 44efded289d5489530d4d0424d8fa90740054781
Parents: 13eeb68
Author: Yang Li <li...@apache.org>
Authored: Sun Nov 6 17:30:10 2016 +0800
Committer: Yang Li <li...@apache.org>
Committed: Sun Nov 6 21:47:02 2016 +0800
----------------------------------------------------------------------
.../kylin/job/dataGen/FactTableGenerator.java | 4 +-
.../java/org/apache/kylin/cube/CubeManager.java | 2 +-
.../kylin/cube/cli/DictionaryGeneratorCLI.java | 25 ++--
.../org/apache/kylin/cube/model/CubeDesc.java | 2 +-
.../org/apache/kylin/cube/CubeManagerTest.java | 4 +-
.../org/apache/kylin/job/JoinedFlatTable.java | 135 ++++++-------------
.../kylin/metadata/model/PartitionDesc.java | 102 +++++++-------
.../apache/kylin/metadata/model/TblColRef.java | 2 +-
.../DefaultPartitionConditionBuilderTest.java | 44 +++---
.../engine/mr/steps/FactDistinctColumnsJob.java | 3 -
.../apache/kylin/query/relnode/OLAPJoinRel.java | 3 +-
.../org/apache/kylin/query/relnode/OLAPRel.java | 37 ++---
.../kylin/query/relnode/OLAPUnionRel.java | 6 +-
.../kylin/rest/controller/CubeController.java | 6 +-
14 files changed, 156 insertions(+), 219 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/assembly/src/test/java/org/apache/kylin/job/dataGen/FactTableGenerator.java
----------------------------------------------------------------------
diff --git a/assembly/src/test/java/org/apache/kylin/job/dataGen/FactTableGenerator.java b/assembly/src/test/java/org/apache/kylin/job/dataGen/FactTableGenerator.java
index ce5d8c4..84a642d 100644
--- a/assembly/src/test/java/org/apache/kylin/job/dataGen/FactTableGenerator.java
+++ b/assembly/src/test/java/org/apache/kylin/job/dataGen/FactTableGenerator.java
@@ -243,7 +243,7 @@ public class FactTableGenerator {
JoinDesc join = dim.getJoin();
if (join != null) {
- String lookupTable = dim.getTable();
+ String lookupTable = dim.getTableRef().getTableIdentity();
for (String column : join.getPrimaryKey()) {
if (!lookupTableKeys.containsKey(lookupTable)) {
lookupTableKeys.put(lookupTable, new LinkedList<String>());
@@ -301,7 +301,7 @@ public class FactTableGenerator {
String[] pks = jDesc.getPrimaryKey();
int num = fks.length;
for (int i = 0; i < num; ++i) {
- String value = dim.getTable() + "/" + pks[i];
+ String value = dim.getTableRef().getTableIdentity() + "/" + pks[i];
lookupCol2factTableCol.put(value, fks[i]);
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index b7ea7b8..87bb93d 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -662,7 +662,7 @@ public class CubeManager implements IRealizationProvider {
public LookupStringTable getLookupTable(CubeSegment cubeSegment, DimensionDesc dim) {
- String tableName = dim.getTable();
+ String tableName = dim.getTableRef().getTableIdentity();
String[] pkCols = dim.getJoin().getPrimaryKey();
String snapshotResPath = cubeSegment.getSnapshotResPath(tableName);
if (snapshotResPath == null)
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java b/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
index d3b0782..fcd68ba 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/cli/DictionaryGeneratorCLI.java
@@ -19,6 +19,7 @@
package org.apache.kylin.cube.cli;
import java.io.IOException;
+import java.util.Set;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.cube.CubeInstance;
@@ -30,6 +31,8 @@ import org.apache.kylin.metadata.model.TblColRef;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.collect.Sets;
+
public class DictionaryGeneratorCLI {
private static final Logger logger = LoggerFactory.getLogger(DictionaryGeneratorCLI.class);
@@ -50,16 +53,20 @@ public class DictionaryGeneratorCLI {
cubeMgr.buildDictionary(cubeSeg, col, factTableValueProvider);
}
+ // snapshot
+ Set<String> toSnapshot = Sets.newHashSet();
for (DimensionDesc dim : cubeSeg.getCubeDesc().getDimensions()) {
- // build snapshot
- if (dim.getTable() != null && !dim.getTable().equalsIgnoreCase(cubeSeg.getCubeDesc().getFactTable())) {
- // CubeSegment seg = cube.getTheOnlySegment();
- logger.info("Building snapshot of " + dim.getTable());
- cubeMgr.buildSnapshotTable(cubeSeg, dim.getTable());
- logger.info("Checking snapshot of " + dim.getTable());
- cubeMgr.getLookupTable(cubeSeg, dim); // load the table for sanity check
- }
+ if (dim.getTableRef() == null)
+ continue;
+
+ String lookupTable = dim.getTableRef().getTableIdentity();
+ toSnapshot.add(lookupTable);
+ }
+ toSnapshot.remove(cubeSeg.getCubeDesc().getFactTable());
+
+ for (String tableIdentity : toSnapshot) {
+ logger.info("Building snapshot of " + tableIdentity);
+ cubeMgr.buildSnapshotTable(cubeSeg, tableIdentity);
}
}
-
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
index 159042d..34650f4 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java
@@ -242,7 +242,7 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware {
public DimensionDesc findDimensionByTable(String lookupTableName) {
lookupTableName = lookupTableName.toUpperCase();
for (DimensionDesc dim : dimensions)
- if (dim.getTable() != null && dim.getTable().equals(lookupTableName))
+ if (dim.getTableRef() != null && dim.getTableRef().getTableIdentity().equals(lookupTableName))
return dim;
return null;
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
----------------------------------------------------------------------
diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
index 2904eb2..0266067 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java
@@ -19,7 +19,6 @@
package org.apache.kylin.cube;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -27,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.NavigableSet;
-import com.google.common.collect.Maps;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.persistence.ResourceStore;
import org.apache.kylin.common.util.JsonUtil;
@@ -41,6 +39,8 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.collect.Maps;
+
/**
* @author yangli9
*/
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
index e43bca3..61b5b11 100644
--- a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
+++ b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
@@ -19,10 +19,7 @@
package org.apache.kylin.job;
import java.io.File;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
@@ -34,12 +31,11 @@ import org.apache.kylin.metadata.model.IJoinedFlatTableDesc;
import org.apache.kylin.metadata.model.JoinDesc;
import org.apache.kylin.metadata.model.LookupDesc;
import org.apache.kylin.metadata.model.PartitionDesc;
+import org.apache.kylin.metadata.model.TableRef;
import org.apache.kylin.metadata.model.TblColRef;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
-import com.google.common.collect.Lists;
-
/**
*
*/
@@ -88,13 +84,11 @@ public class JoinedFlatTable {
if (i > 0) {
ddl.append(",");
}
- ddl.append(colName(col.getCanonicalName()) + " " + getHiveDataType(col.getDatatype()) + "\n");
+ ddl.append(colName(col) + " " + getHiveDataType(col.getDatatype()) + "\n");
}
ddl.append(")" + "\n");
ddl.append("STORED AS SEQUENCEFILE" + "\n");
ddl.append("LOCATION '" + getTableDir(flatDesc, storageDfsDir) + "';").append("\n");
- // ddl.append("TBLPROPERTIES ('serialization.null.format'='\\\\N')" +
- // ";\n");
return ddl.toString();
}
@@ -114,125 +108,74 @@ public class JoinedFlatTable {
public static String generateSelectDataStatement(IJoinedFlatTableDesc flatDesc, boolean redistribute) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT" + "\n");
- String tableAlias;
- Map<String, String> tableAliasMap = buildTableAliasMap(flatDesc.getDataModel());
for (int i = 0; i < flatDesc.getAllColumns().size(); i++) {
TblColRef col = flatDesc.getAllColumns().get(i);
if (i > 0) {
sql.append(",");
}
- tableAlias = tableAliasMap.get(col.getTable());
- sql.append(tableAlias + "." + col.getName() + "\n");
+ sql.append(col.getTableAlias() + "." + col.getName() + "\n");
}
- appendJoinStatement(flatDesc, sql, tableAliasMap);
- appendWhereStatement(flatDesc, sql, tableAliasMap);
+ appendJoinStatement(flatDesc, sql);
+ appendWhereStatement(flatDesc, sql);
if (redistribute == true) {
- String redistributeCol = null;
- TblColRef distDcol = flatDesc.getDistributedBy();
- if (distDcol != null) {
- String tblAlias = tableAliasMap.get(distDcol.getTable());
- redistributeCol = tblAlias + "." + distDcol.getName();
- }
- appendDistributeStatement(sql, redistributeCol);
+ TblColRef distCol = flatDesc.getDistributedBy();
+ appendDistributeStatement(sql, distCol);
}
return sql.toString();
}
public static String generateCountDataStatement(IJoinedFlatTableDesc flatDesc, final String outputDir) {
- final Map<String, String> tableAliasMap = buildTableAliasMap(flatDesc.getDataModel());
final StringBuilder sql = new StringBuilder();
- final String factTbl = flatDesc.getDataModel().getFactTable();
+ final TableRef factTbl = flatDesc.getDataModel().getFactTableRef();
sql.append("dfs -mkdir -p " + outputDir + ";\n");
- sql.append("INSERT OVERWRITE DIRECTORY '" + outputDir + "' SELECT count(*) FROM " + factTbl + " " + tableAliasMap.get(factTbl) + "\n");
- appendWhereStatement(flatDesc, sql, tableAliasMap);
+ sql.append("INSERT OVERWRITE DIRECTORY '" + outputDir + "' SELECT count(*) FROM " + factTbl.getTableIdentity() + " " + factTbl.getAlias() + "\n");
+ appendWhereStatement(flatDesc, sql);
return sql.toString();
}
- private static Map<String, String> buildTableAliasMap(DataModelDesc dataModelDesc) {
- Map<String, String> tableAliasMap = new HashMap<String, String>();
-
- addTableAlias(dataModelDesc.getFactTable(), tableAliasMap);
-
- for (LookupDesc lookupDesc : dataModelDesc.getLookups()) {
- JoinDesc join = lookupDesc.getJoin();
- if (join != null) {
- addTableAlias(lookupDesc.getTable(), tableAliasMap);
- }
- }
- return tableAliasMap;
- }
-
- // The table alias used to be "FACT_TABLE" and "LOOKUP_#", but that's too unpredictable
- // for those who want to write a filter. (KYLIN-900)
- // Also yet don't support joining the same table more than once, since table name is the map key.
- private static void addTableAlias(String table, Map<String, String> tableAliasMap) {
- String alias;
- int cut = table.lastIndexOf('.');
- if (cut < 0)
- alias = table;
- else
- alias = table.substring(cut + 1);
-
- tableAliasMap.put(table, alias);
- }
-
- private static void appendJoinStatement(IJoinedFlatTableDesc flatDesc, StringBuilder sql, Map<String, String> tableAliasMap) {
- List<JoinDesc> cubeJoins = getUsedJoinsSet(flatDesc);
-
- Set<String> dimTableCache = new HashSet<String>();
+ private static void appendJoinStatement(IJoinedFlatTableDesc flatDesc, StringBuilder sql) {
+ Set<TableRef> dimTableCache = new HashSet<>();
DataModelDesc dataModelDesc = flatDesc.getDataModel();
- String factTableName = dataModelDesc.getFactTable();
- String factTableAlias = tableAliasMap.get(factTableName);
- sql.append("FROM " + factTableName + " as " + factTableAlias + " \n");
+ TableRef factTable = dataModelDesc.getFactTableRef();
+ sql.append("FROM " + factTable.getTableIdentity() + " as " + factTable.getAlias() + " \n");
for (LookupDesc lookupDesc : dataModelDesc.getLookups()) {
JoinDesc join = lookupDesc.getJoin();
- if (!cubeJoins.contains(join)) {
- continue;
- }
if (join != null && join.getType().equals("") == false) {
String joinType = join.getType().toUpperCase();
- String dimTableName = lookupDesc.getTable();
- if (!dimTableCache.contains(dimTableName)) {
+ TableRef dimTable = lookupDesc.getTableRef();
+ if (!dimTableCache.contains(dimTable)) {
TblColRef[] pk = join.getPrimaryKeyColumns();
TblColRef[] fk = join.getForeignKeyColumns();
if (pk.length != fk.length) {
throw new RuntimeException("Invalid join condition of lookup table:" + lookupDesc);
}
- sql.append(joinType + " JOIN " + dimTableName + " as " + tableAliasMap.get(dimTableName) + "\n");
+ sql.append(joinType + " JOIN " + dimTable.getTableIdentity() + " as " + dimTable.getAlias() + "\n");
sql.append("ON ");
for (int i = 0; i < pk.length; i++) {
if (i > 0) {
sql.append(" AND ");
}
- sql.append(factTableAlias + "." + fk[i].getName() + " = " + tableAliasMap.get(dimTableName) + "." + pk[i].getName());
+ sql.append(fk[i].getTableAlias() + "." + fk[i].getName() + " = " + pk[i].getTableAlias() + "." + pk[i].getName());
}
sql.append("\n");
- dimTableCache.add(dimTableName);
+ dimTableCache.add(dimTable);
}
}
}
}
- private static List<JoinDesc> getUsedJoinsSet(IJoinedFlatTableDesc flatDesc) {
- List<JoinDesc> result = Lists.newArrayList();
- for (LookupDesc lookup : flatDesc.getDataModel().getLookups()) {
- result.add(lookup.getJoin());
- }
- return result;
- }
-
- private static void appendDistributeStatement(StringBuilder sql, String redistributeCol) {
- if (redistributeCol != null) {
- sql.append(" DISTRIBUTE BY ").append(redistributeCol).append(";\n");
+ private static void appendDistributeStatement(StringBuilder sql, TblColRef redistCol) {
+ if (redistCol != null) {
+ sql.append(" DISTRIBUTE BY ").append(colName(redistCol)).append(";\n");
} else {
sql.append(" DISTRIBUTE BY RAND()").append(";\n");
}
}
- private static void appendWhereStatement(IJoinedFlatTableDesc flatDesc, StringBuilder sql, Map<String, String> tableAliasMap) {
+ private static void appendWhereStatement(IJoinedFlatTableDesc flatDesc, StringBuilder sql) {
boolean hasCondition = false;
StringBuilder whereBuilder = new StringBuilder();
whereBuilder.append("WHERE");
@@ -244,16 +187,18 @@ public class JoinedFlatTable {
hasCondition = true;
}
- PartitionDesc partDesc = model.getPartitionDesc();
- if (partDesc != null && partDesc.getPartitionDateColumn() != null) {
- long dateStart = flatDesc.getSourceOffsetStart();
- long dateEnd = flatDesc.getSourceOffsetEnd();
-
- if (!(dateStart == 0 && dateEnd == Long.MAX_VALUE)) {
- whereBuilder.append(hasCondition ? " AND (" : " (");
- whereBuilder.append(partDesc.getPartitionConditionBuilder().buildDateRangeCondition(partDesc, dateStart, dateEnd, tableAliasMap));
- whereBuilder.append(")\n");
- hasCondition = true;
+ if (flatDesc.getSegment() != null) {
+ PartitionDesc partDesc = model.getPartitionDesc();
+ if (partDesc != null && partDesc.getPartitionDateColumn() != null) {
+ long dateStart = flatDesc.getSourceOffsetStart();
+ long dateEnd = flatDesc.getSourceOffsetEnd();
+
+ if (!(dateStart == 0 && dateEnd == Long.MAX_VALUE)) {
+ whereBuilder.append(hasCondition ? " AND (" : " (");
+ whereBuilder.append(partDesc.getPartitionConditionBuilder().buildDateRangeCondition(partDesc, dateStart, dateEnd));
+ whereBuilder.append(")\n");
+ hasCondition = true;
+ }
}
}
@@ -262,8 +207,8 @@ public class JoinedFlatTable {
}
}
- private static String colName(String canonicalColName) {
- return canonicalColName.replace(".", "_");
+ private static String colName(TblColRef col) {
+ return col.getTableAlias() + "_" + col.getName();
}
private static String getHiveDataType(String javaDataType) {
@@ -285,12 +230,8 @@ public class JoinedFlatTable {
StringBuilder sql = new StringBuilder();
sql.append("INSERT OVERWRITE TABLE " + tableName + " SELECT * FROM " + tableName);
- String redistributeCol = null;
TblColRef distDcol = flatDesc.getDistributedBy();
- if (distDcol != null) {
- redistributeCol = colName(distDcol.getCanonicalName());
- }
- appendDistributeStatement(sql, redistributeCol);
+ appendDistributeStatement(sql, distDcol);
return sql.toString();
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/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 127d5e1..d6f18e5 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
@@ -18,8 +18,6 @@
package org.apache.kylin.metadata.model;
-import java.util.Map;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.kylin.common.util.ClassUtil;
import org.apache.kylin.common.util.DateFormat;
@@ -61,6 +59,7 @@ public class PartitionDesc {
private String partitionConditionBuilderClz = DefaultPartitionConditionBuilder.class.getName();
private TblColRef partitionDateColumnRef;
+ private TblColRef partitionTimeColumnRef;
private IPartitionConditionBuilder partitionConditionBuilder;
public void init(DataModelDesc model) {
@@ -69,6 +68,10 @@ public class PartitionDesc {
partitionDateColumn = partitionDateColumn.toUpperCase();
partitionDateColumnRef = model.findColumn(partitionDateColumn);
+ if (StringUtils.isBlank(partitionTimeColumn) == false) {
+ partitionTimeColumn = partitionTimeColumn.toUpperCase();
+ partitionTimeColumnRef = model.findColumn(partitionTimeColumn);
+ }
partitionConditionBuilder = (IPartitionConditionBuilder) ClassUtil.newInstance(partitionConditionBuilderClz);
}
@@ -96,18 +99,30 @@ public class PartitionDesc {
return partitionDateColumn;
}
+ // for test
public void setPartitionDateColumn(String partitionDateColumn) {
this.partitionDateColumn = partitionDateColumn;
}
-
+
+ // for test
+ void setPartitionDateColumnRef(TblColRef partitionDateColumnRef) {
+ this.partitionDateColumnRef = partitionDateColumnRef;
+ }
+
public String getPartitionTimeColumn() {
return partitionTimeColumn;
}
- public void setPartitionTimeColumn(String partitionTimeColumn) {
+ // for test
+ void setPartitionTimeColumn(String partitionTimeColumn) {
this.partitionTimeColumn = partitionTimeColumn;
}
+ // for test
+ void setPartitionTimeColumnRef(TblColRef partitionTimeColumnRef) {
+ this.partitionTimeColumnRef = partitionTimeColumnRef;
+ }
+
@Deprecated
public long getPartitionDateStart() {
return partitionDateStart;
@@ -150,50 +165,41 @@ public class PartitionDesc {
return partitionDateColumnRef;
}
+ public TblColRef getPartitionTimeColumnRef() {
+ return partitionTimeColumnRef;
+ }
+
// ============================================================================
public static interface IPartitionConditionBuilder {
- String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive, Map<String, String> tableAlias);
+ String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive);
}
public static class DefaultPartitionConditionBuilder implements IPartitionConditionBuilder {
@Override
- public String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive, Map<String, String> tableAlias) {
+ public String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive) {
StringBuilder builder = new StringBuilder();
- String partitionDateColumnName = partDesc.getPartitionDateColumn();
- String partitionTimeColumnName = partDesc.getPartitionTimeColumn();
+ TblColRef partitionDateColumn = partDesc.getPartitionDateColumnRef();
+ TblColRef partitionTimeColumn = partDesc.getPartitionTimeColumnRef();
if (partDesc.partitionColumnIsYmdInt()) {
- buildSingleColumnRangeCondAsYmdInt(builder, partitionDateColumnName, startInclusive, endExclusive, tableAlias);
+ buildSingleColumnRangeCondAsYmdInt(builder, partitionDateColumn, startInclusive, endExclusive);
} else if (partDesc.partitionColumnIsTimeMillis()) {
- buildSingleColumnRangeCondAsTimeMillis(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);
- } else if (partitionDateColumnName != null && partitionTimeColumnName != null) {
- buildMultipleColumnRangeCondition(builder, partitionDateColumnName, partitionTimeColumnName, startInclusive, endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat(), tableAlias);
+ buildSingleColumnRangeCondAsTimeMillis(builder, partitionDateColumn, startInclusive, endExclusive);
+ } else if (partitionDateColumn != null && partitionTimeColumn == null) {
+ buildSingleColumnRangeCondition(builder, partitionDateColumn, startInclusive, endExclusive, partDesc.getPartitionDateFormat());
+ } else if (partitionDateColumn == null && partitionTimeColumn != null) {
+ buildSingleColumnRangeCondition(builder, partitionTimeColumn, startInclusive, endExclusive, partDesc.getPartitionTimeFormat());
+ } else if (partitionDateColumn != null && partitionTimeColumn != null) {
+ buildMultipleColumnRangeCondition(builder, partitionDateColumn, partitionTimeColumn, startInclusive, endExclusive, partDesc.getPartitionDateFormat(), partDesc.getPartitionTimeFormat());
}
return builder.toString();
}
- /**
- * Convert to use table alias
- */
- private static String replaceColumnNameWithAlias(String columnName, Map<String, String> tableAlias) {
- int indexOfDot = columnName.lastIndexOf(".");
- if (indexOfDot > 0) {
- String partitionTableName = columnName.substring(0, indexOfDot);
- if (tableAlias != null && tableAlias.containsKey(partitionTableName))
- columnName = tableAlias.get(partitionTableName) + columnName.substring(indexOfDot);
- }
- return columnName;
- }
-
- private static void buildSingleColumnRangeCondAsTimeMillis(StringBuilder builder, String partitionColumnName, long startInclusive, long endExclusive, Map<String, String> tableAlias) {
- partitionColumnName = replaceColumnNameWithAlias(partitionColumnName, tableAlias);
+ private static void buildSingleColumnRangeCondAsTimeMillis(StringBuilder builder, TblColRef partitionColumn, long startInclusive, long endExclusive) {
+ String partitionColumnName = partitionColumn.getTableAlias() + "." + partitionColumn.getName();
if (startInclusive > 0) {
builder.append(partitionColumnName + " >= " + startInclusive);
builder.append(" AND ");
@@ -201,8 +207,8 @@ public class PartitionDesc {
builder.append(partitionColumnName + " < " + endExclusive);
}
- private static void buildSingleColumnRangeCondAsYmdInt(StringBuilder builder, String partitionColumnName, long startInclusive, long endExclusive, Map<String, String> tableAlias) {
- partitionColumnName = replaceColumnNameWithAlias(partitionColumnName, tableAlias);
+ private static void buildSingleColumnRangeCondAsYmdInt(StringBuilder builder, TblColRef partitionColumn, long startInclusive, long endExclusive) {
+ String partitionColumnName = partitionColumn.getTableAlias() + "." + partitionColumn.getName();
if (startInclusive > 0) {
builder.append(partitionColumnName + " >= " + DateFormat.formatToDateStr(startInclusive, DateFormat.COMPACT_DATE_PATTERN));
builder.append(" AND ");
@@ -210,8 +216,8 @@ public class PartitionDesc {
builder.append(partitionColumnName + " < " + DateFormat.formatToDateStr(endExclusive, DateFormat.COMPACT_DATE_PATTERN));
}
- private static void buildSingleColumnRangeCondition(StringBuilder builder, String partitionColumnName, long startInclusive, long endExclusive, String partitionColumnDateFormat, Map<String, String> tableAlias) {
- partitionColumnName = replaceColumnNameWithAlias(partitionColumnName, tableAlias);
+ private static void buildSingleColumnRangeCondition(StringBuilder builder, TblColRef partitionColumn, long startInclusive, long endExclusive, String partitionColumnDateFormat) {
+ String partitionColumnName = partitionColumn.getTableAlias() + "." + partitionColumn.getName();
if (startInclusive > 0) {
builder.append(partitionColumnName + " >= '" + DateFormat.formatToDateStr(startInclusive, partitionColumnDateFormat) + "'");
builder.append(" AND ");
@@ -219,9 +225,9 @@ 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);
+ private static void buildMultipleColumnRangeCondition(StringBuilder builder, TblColRef partitionDateColumn, TblColRef partitionTimeColumn, long startInclusive, long endExclusive, String partitionColumnDateFormat, String partitionColumnTimeFormat) {
+ String partitionDateColumnName = partitionDateColumn.getTableAlias() + "." + partitionDateColumn.getName();
+ String partitionTimeColumnName = partitionTimeColumn.getTableAlias() + "." + partitionTimeColumn.getName();
if (startInclusive > 0) {
builder.append("(");
builder.append("(");
@@ -254,24 +260,12 @@ public class PartitionDesc {
public static class YearMonthDayPartitionConditionBuilder implements PartitionDesc.IPartitionConditionBuilder {
@Override
- public String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive, Map<String, String> tableAlias) {
-
- String partitionColumnName = partDesc.getPartitionDateColumn();
- String partitionTableName;
+ public String buildDateRangeCondition(PartitionDesc partDesc, long startInclusive, long endExclusive) {
- // convert to use table alias
- int indexOfDot = partitionColumnName.lastIndexOf(".");
- if (indexOfDot > 0) {
- partitionTableName = partitionColumnName.substring(0, indexOfDot).toUpperCase();
- } else {
- throw new IllegalStateException("The partitionColumnName is invalid: " + partitionColumnName);
- }
-
- if (tableAlias.containsKey(partitionTableName)) {
- partitionTableName = tableAlias.get(partitionTableName);
- }
+ TblColRef partitionColumn = partDesc.getPartitionDateColumnRef();
+ String tableAlias = partitionColumn.getTableAlias();
- String concatField = String.format("CONCAT(%s.YEAR,'-',%s.MONTH,'-',%s.DAY)", partitionTableName, partitionTableName, partitionTableName);
+ String concatField = String.format("CONCAT(%s.YEAR,'-',%s.MONTH,'-',%s.DAY)", tableAlias, tableAlias, tableAlias);
StringBuilder builder = new StringBuilder();
if (startInclusive > 0) {
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
index f44972c..9b71524 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
@@ -123,7 +123,7 @@ public class TblColRef implements Serializable {
}
public String getTableAlias() {
- return table.getAlias();
+ return table != null ? table.getAlias() : "UNKNOWN_ALIAS";
}
public String getTable() {
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/core-metadata/src/test/java/org/apache/kylin/metadata/model/DefaultPartitionConditionBuilderTest.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/test/java/org/apache/kylin/metadata/model/DefaultPartitionConditionBuilderTest.java b/core-metadata/src/test/java/org/apache/kylin/metadata/model/DefaultPartitionConditionBuilderTest.java
index b188668..4e56a71 100644
--- a/core-metadata/src/test/java/org/apache/kylin/metadata/model/DefaultPartitionConditionBuilderTest.java
+++ b/core-metadata/src/test/java/org/apache/kylin/metadata/model/DefaultPartitionConditionBuilderTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.kylin.metadata.model;
-import java.util.HashMap;
-
import org.apache.kylin.common.util.DateFormat;
import org.junit.Assert;
import org.junit.Before;
@@ -34,44 +32,38 @@ public class DefaultPartitionConditionBuilderTest {
@Test
public void testDatePartition() {
PartitionDesc partitionDesc = new PartitionDesc();
- partitionDesc.setPartitionDateColumn("DEFAULT.TABLE_NAME.DATE_COLUMN");
+ TblColRef col = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 1, "DATE_COLUMN", "string");
+ partitionDesc.setPartitionDateColumnRef(col);
+ partitionDesc.setPartitionDateColumn(col.getCanonicalName());
partitionDesc.setPartitionDateFormat("yyyy-MM-dd");
- String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22"), DateFormat.stringToMillis("2016-02-23"), new HashMap<String, String>());
- Assert.assertEquals("DEFAULT.TABLE_NAME.DATE_COLUMN >= '2016-02-22' AND DEFAULT.TABLE_NAME.DATE_COLUMN < '2016-02-23'", condition);
+ String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22"), DateFormat.stringToMillis("2016-02-23"));
+ Assert.assertEquals("UNKNOWN_ALIAS.DATE_COLUMN >= '2016-02-22' AND UNKNOWN_ALIAS.DATE_COLUMN < '2016-02-23'", condition);
}
@Test
public void testTimePartition() {
PartitionDesc partitionDesc = new PartitionDesc();
- partitionDesc.setPartitionTimeColumn("DEFAULT.TABLE_NAME.HOUR_COLUMN");
+ TblColRef col = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 2, "HOUR_COLUMN", "string");
+ partitionDesc.setPartitionTimeColumnRef(col);
+ partitionDesc.setPartitionTimeColumn(col.getCanonicalName());
partitionDesc.setPartitionTimeFormat("HH");
- String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00"), new HashMap<String, String>());
- Assert.assertEquals("DEFAULT.TABLE_NAME.HOUR_COLUMN >= '00' AND DEFAULT.TABLE_NAME.HOUR_COLUMN < '01'", condition);
+ String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00"));
+ Assert.assertEquals("UNKNOWN_ALIAS.HOUR_COLUMN >= '00' AND UNKNOWN_ALIAS.HOUR_COLUMN < '01'", condition);
}
@Test
public void testDateAndTimePartition() {
PartitionDesc partitionDesc = new PartitionDesc();
- partitionDesc.setPartitionDateColumn("DEFAULT.TABLE_NAME.DATE_COLUMN");
+ TblColRef col1 = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 1, "DATE_COLUMN", "string");
+ partitionDesc.setPartitionDateColumnRef(col1);
+ partitionDesc.setPartitionDateColumn(col1.getCanonicalName());
partitionDesc.setPartitionDateFormat("yyyy-MM-dd");
- partitionDesc.setPartitionTimeColumn("DEFAULT.TABLE_NAME.HOUR_COLUMN");
+ TblColRef col2 = TblColRef.mockup(TableDesc.mockup("DEFAULT.TABLE_NAME"), 2, "HOUR_COLUMN", "string");
+ partitionDesc.setPartitionTimeColumnRef(col2);
+ partitionDesc.setPartitionTimeColumn(col2.getCanonicalName());
partitionDesc.setPartitionTimeFormat("H");
- String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00"), new HashMap<String, String>());
- Assert.assertEquals("((DEFAULT.TABLE_NAME.DATE_COLUMN = '2016-02-22' AND DEFAULT.TABLE_NAME.HOUR_COLUMN >= '0') OR (DEFAULT.TABLE_NAME.DATE_COLUMN > '2016-02-22')) AND ((DEFAULT.TABLE_NAME.DATE_COLUMN = '2016-02-23' AND DEFAULT.TABLE_NAME.HOUR_COLUMN < '1') OR (DEFAULT.TABLE_NAME.DATE_COLUMN < '2016-02-23'))", condition);
+ String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00"));
+ Assert.assertEquals("((UNKNOWN_ALIAS.DATE_COLUMN = '2016-02-22' AND UNKNOWN_ALIAS.HOUR_COLUMN >= '0') OR (UNKNOWN_ALIAS.DATE_COLUMN > '2016-02-22')) AND ((UNKNOWN_ALIAS.DATE_COLUMN = '2016-02-23' AND UNKNOWN_ALIAS.HOUR_COLUMN < '1') OR (UNKNOWN_ALIAS.DATE_COLUMN < '2016-02-23'))", condition);
}
- @Test
- public void testDateAndTimePartitionWithAlias() {
- PartitionDesc partitionDesc = new PartitionDesc();
- partitionDesc.setPartitionDateColumn("TABLE_ALIAS.DATE_COLUMN");
- partitionDesc.setPartitionDateFormat("yyyy-MM-dd");
- partitionDesc.setPartitionTimeColumn("TABLE_ALIAS.HOUR_COLUMN");
- partitionDesc.setPartitionTimeFormat("H");
- String condition = partitionConditionBuilder.buildDateRangeCondition(partitionDesc, DateFormat.stringToMillis("2016-02-22 00:00:00"), DateFormat.stringToMillis("2016-02-23 01:00:00"), new HashMap<String, String>() {
- {
- put("TABLE_ALIAS", "DEFAULT.TABLE_NAME");
- }
- });
- Assert.assertEquals("((DEFAULT.TABLE_NAME.DATE_COLUMN = '2016-02-22' AND DEFAULT.TABLE_NAME.HOUR_COLUMN >= '0') OR (DEFAULT.TABLE_NAME.DATE_COLUMN > '2016-02-22')) AND ((DEFAULT.TABLE_NAME.DATE_COLUMN = '2016-02-23' AND DEFAULT.TABLE_NAME.HOUR_COLUMN < '1') OR (DEFAULT.TABLE_NAME.DATE_COLUMN < '2016-02-23'))", condition);
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsJob.java
----------------------------------------------------------------------
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsJob.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsJob.java
index 6603728..28ee335 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsJob.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsJob.java
@@ -90,15 +90,12 @@ public class FactDistinctColumnsJob extends AbstractHadoopJob {
CubeSegment segment = cube.getSegmentById(segmentID);
if (segment == null) {
logger.error("Failed to find {} in cube {}", segmentID, cube);
- System.out.println("Failed to find {} in cube {} " + segmentID + "," + cube);
for (CubeSegment s : cube.getSegments()) {
logger.error(s.getName() + " with status " + s.getStatus());
- System.out.println(s.getName() + " with status " + s.getStatus());
}
throw new IllegalStateException();
} else {
logger.info("Found segment: " + segment);
- System.out.println("Found segment " + segment);
}
setupMapper(cube.getSegmentById(segmentID));
setupReducer(output, "true".equalsIgnoreCase(statistics_enabled) ? columnsNeedDict.size() + 2 : columnsNeedDict.size());
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index be7d263..e75d747 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -121,7 +121,7 @@ public class OLAPJoinRel extends EnumerableJoin implements OLAPRel {
boolean rightHasSubquery = false;
// as we keep the first table as fact table, we need to visit from left to right
- implementor.fixSharedOlapTableScan(this);
+ implementor.fixSharedOlapTableScanOnTheLeft(this);
implementor.visitChild(this.left, this);
if (this.context != implementor.getContext() || ((OLAPRel) this.left).hasSubQuery()) {
this.hasSubQuery = true;
@@ -131,6 +131,7 @@ public class OLAPJoinRel extends EnumerableJoin implements OLAPRel {
implementor.freeContext();
}
}
+ implementor.fixSharedOlapTableScanOnTheRight(this);
implementor.visitChild(this.right, this);
if (this.context != implementor.getContext() || ((OLAPRel) this.right).hasSubQuery()) {
this.hasSubQuery = true;
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
index a24b447..941ef6a 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
@@ -104,23 +104,30 @@ public interface OLAPRel extends RelNode {
OLAPContext.registerContext(context);
}
- public void fixSharedOlapTableScan(OLAPRel parent) {
- if (parent instanceof SingleRel) {
- SingleRel single = (SingleRel) parent;
- OLAPTableScan copy = copyTableScanIfNeeded(single.getInput());
- if (copy != null)
- single.replaceInput(0, copy);
- } else if (parent instanceof BiRel) {
- BiRel bi = (BiRel) parent;
- OLAPTableScan copyLeft = copyTableScanIfNeeded(bi.getLeft());
- if (copyLeft != null)
- bi.replaceInput(0, copyLeft);
- OLAPTableScan copyRight = copyTableScanIfNeeded(bi.getRight());
- if (copyRight != null)
- bi.replaceInput(1, copyRight);
- }
+ public void fixSharedOlapTableScan(SingleRel parent) {
+ OLAPTableScan copy = copyTableScanIfNeeded(parent.getInput());
+ if (copy != null)
+ parent.replaceInput(0, copy);
}
+ public void fixSharedOlapTableScanOnTheLeft(BiRel parent) {
+ OLAPTableScan copy = copyTableScanIfNeeded(parent.getLeft());
+ if (copy != null)
+ parent.replaceInput(0, copy);
+ }
+
+ public void fixSharedOlapTableScanOnTheRight(BiRel parent) {
+ OLAPTableScan copy = copyTableScanIfNeeded(parent.getRight());
+ if (copy != null)
+ parent.replaceInput(1, copy);
+ }
+
+ public void fixSharedOlapTableScanAt(RelNode parent, int ordinalInParent) {
+ OLAPTableScan copy = copyTableScanIfNeeded(parent.getInputs().get(ordinalInParent));
+ if (copy != null)
+ parent.replaceInput(ordinalInParent, copy);
+ }
+
private OLAPTableScan copyTableScanIfNeeded(RelNode input) {
if (input instanceof OLAPTableScan) {
OLAPTableScan tableScan = (OLAPTableScan) input;
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/query/src/main/java/org/apache/kylin/query/relnode/OLAPUnionRel.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPUnionRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPUnionRel.java
index adcf27f..e04ba6f 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPUnionRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPUnionRel.java
@@ -71,9 +71,9 @@ public class OLAPUnionRel extends Union implements OLAPRel {
@Override
public void implementOLAP(OLAPImplementor implementor) {
- implementor.fixSharedOlapTableScan(this);
- for (RelNode child : getInputs()) {
- implementor.visitChild(child, this);
+ for (int i = 0, n = getInputs().size(); i < n; i++) {
+ implementor.fixSharedOlapTableScanAt(this, i);
+ implementor.visitChild(getInputs().get(i), this);
}
this.columnRowType = buildColumnRowType();
http://git-wip-us.apache.org/repos/asf/kylin/blob/44efded2/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index 10cd1f2..79739c2 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -27,7 +27,6 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
-import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.util.JsonUtil;
@@ -42,7 +41,6 @@ import org.apache.kylin.job.JobInstance;
import org.apache.kylin.job.JoinedFlatTable;
import org.apache.kylin.metadata.model.IJoinedFlatTableDesc;
import org.apache.kylin.metadata.model.ISourceAware;
-import org.apache.kylin.metadata.model.SegmentStatusEnum;
import org.apache.kylin.metadata.project.ProjectInstance;
import org.apache.kylin.metadata.realization.RealizationStatusEnum;
import org.apache.kylin.rest.exception.BadRequestException;
@@ -75,6 +73,7 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
@@ -145,8 +144,7 @@ public class CubeController extends BasicController {
@ResponseBody
public GeneralResponse getSql(@PathVariable String cubeName, @PathVariable String segmentName) {
CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
- CubeSegment cubeSegment = cube.getSegment(segmentName, SegmentStatusEnum.READY);
- IJoinedFlatTableDesc flatTableDesc = EngineFactory.getJoinedFlatTableDesc(cubeSegment);
+ IJoinedFlatTableDesc flatTableDesc = EngineFactory.getJoinedFlatTableDesc(cube.getDescriptor());
String sql = JoinedFlatTable.generateSelectDataStatement(flatTableDesc, false);
GeneralResponse repsonse = new GeneralResponse();