You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by ra...@apache.org on 2018/09/20 11:24:23 UTC
lens git commit: LENS-1533 : Adding support for Partition Columns to
queried without giving additional xml tag valid.columns
Repository: lens
Updated Branches:
refs/heads/master 3e7d92e9d -> 2d64f6ca4
LENS-1533 : Adding support for Partition Columns to queried without giving additional xml tag valid.columns
Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/2d64f6ca
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/2d64f6ca
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/2d64f6ca
Branch: refs/heads/master
Commit: 2d64f6ca4167570097bab7cde3604b190ab89edf
Parents: 3e7d92e
Author: Rajitha R <ra...@apache.org>
Authored: Thu Sep 20 16:53:51 2018 +0530
Committer: Rajitha.R <ra...@IM0318-L0.corp.inmobi.com>
Committed: Thu Sep 20 16:53:51 2018 +0530
----------------------------------------------------------------------
.../lens/cube/metadata/CubeFactTable.java | 55 +++++++++++++++++---
.../lens/cube/metadata/CubeMetastoreClient.java | 12 ++---
.../cube/metadata/CubeVirtualFactTable.java | 7 ++-
.../apache/lens/cube/metadata/FactTable.java | 7 +++
.../apache/lens/cube/metadata/JAXBUtils.java | 28 ++++++++--
.../lens/cube/metadata/MetastoreUtil.java | 4 ++
.../lens/cube/parse/StorageCandidate.java | 13 ++++-
.../cube/metadata/TestCubeMetastoreClient.java | 7 +--
.../lens/examples/PopulateSampleMetastore.java | 1 +
.../apache/lens/examples/SampleMetastore.java | 1 +
.../src/main/resources/cube-queries.sql | 2 +-
.../src/main/resources/fact3-local-part.xml | 19 +++++++
.../src/main/resources/fact3-local1.data | 8 +++
.../src/main/resources/fact3-local2.data | 8 +++
lens-examples/src/main/resources/fact3.xml | 51 ++++++++++++++++++
.../src/main/resources/sample-cube.xml | 1 +
16 files changed, 199 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeFactTable.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeFactTable.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeFactTable.java
index 8f3f4aa..218e153 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeFactTable.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeFactTable.java
@@ -40,12 +40,14 @@ public class CubeFactTable extends AbstractCubeTable implements FactTable {
private final Map<String, Map<UpdatePeriod, String>> storagePrefixUpdatePeriodMap;
private String cubeName;
private final Map<String, Set<UpdatePeriod>> storageUpdatePeriods;
+ private Map<String, Set<String>> storageTablePartitionColumns;
public CubeFactTable(Table hiveTable) {
super(hiveTable);
this.storageUpdatePeriods = getUpdatePeriods(getName(), getProperties());
this.cubeName = this.getProperties().get(MetastoreUtil.getFactCubeNameKey(getName()));
this.storagePrefixUpdatePeriodMap = getUpdatePeriodMap(getName(), getProperties());
+ this.storageTablePartitionColumns = getStorageTablePartitionColumns(getName(), getProperties());
}
public CubeFactTable(String cubeName, String factName, List<FieldSchema> columns,
@@ -61,17 +63,20 @@ public class CubeFactTable extends AbstractCubeTable implements FactTable {
public CubeFactTable(String cubeName, String factName, List<FieldSchema> columns,
Map<String, Set<UpdatePeriod>> storageUpdatePeriods, double weight, Map<String, String> properties) {
this(cubeName, factName, columns, storageUpdatePeriods, weight, properties,
- new HashMap<String, Map<UpdatePeriod, String>>());
+ new HashMap<String, Map<UpdatePeriod, String>>(), new HashMap<String, Set<String>>());
}
public CubeFactTable(String cubeName, String factName, List<FieldSchema> columns,
- Map<String, Set<UpdatePeriod>> storageUpdatePeriods, double weight, Map<String, String> properties,
- Map<String, Map<UpdatePeriod, String>> storagePrefixUpdatePeriodMap) {
+ Map<String, Set<UpdatePeriod>> storageUpdatePeriods, double weight,
+ Map<String, String> properties,
+ Map<String, Map<UpdatePeriod, String>> storagePrefixUpdatePeriodMap,
+ Map<String, Set<String>> storageTablePartitionColumns) {
super(factName, columns, properties, weight);
this.cubeName = cubeName;
this.storageUpdatePeriods = storageUpdatePeriods;
this.storagePrefixUpdatePeriodMap = storagePrefixUpdatePeriodMap;
+ this.storageTablePartitionColumns = storageTablePartitionColumns;
addProperties();
}
@@ -90,10 +95,20 @@ public class CubeFactTable extends AbstractCubeTable implements FactTable {
this.getProperties().put(MetastoreUtil.getFactCubeNameKey(getName()), cubeName);
addUpdatePeriodProperies(getName(), getProperties(), storageUpdatePeriods);
addStorageTableProperties(getName(), getProperties(), storagePrefixUpdatePeriodMap);
+ addStorageTableParititionColumns(getName(), getProperties(), storageTablePartitionColumns);
}
- private void addStorageTableProperties(String name, Map<String, String> properties,
- Map<String, Map<UpdatePeriod, String>> storageUpdatePeriodMap) {
+ private void addStorageTableParititionColumns(String name, Map<String, String> properties,
+ Map<String, Set<String>> storageTablePartitionColumns) {
+ for (String storage : storageTablePartitionColumns.keySet()) {
+ String partitionColumnKey = MetastoreUtil.getPartitionColumnKey(name, storage);
+ String partitionColumnValues = StringUtils.join(storageTablePartitionColumns.get(storage), ',');
+ properties.put(partitionColumnKey, partitionColumnValues);
+ }
+ }
+
+ private void addStorageTableProperties(String name, Map<String, String> properties, Map<String, Map<UpdatePeriod,
+ String>> storageUpdatePeriodMap) {
for (String storageName : storageUpdatePeriodMap.keySet()) {
String prefix = MetastoreUtil.getFactKeyPrefix(name) + "." + storageName;
for (Map.Entry updatePeriodEntry : storageUpdatePeriodMap.get(storageName).entrySet()) {
@@ -104,12 +119,12 @@ public class CubeFactTable extends AbstractCubeTable implements FactTable {
}
private static void addUpdatePeriodProperies(String name, Map<String, String> props,
- Map<String, Set<UpdatePeriod>> updatePeriods) {
+ Map<String, Set<UpdatePeriod>> updatePeriods) {
if (updatePeriods != null) {
props.put(MetastoreUtil.getFactStorageListKey(name), MetastoreUtil.getStr(updatePeriods.keySet()));
for (Map.Entry<String, Set<UpdatePeriod>> entry : updatePeriods.entrySet()) {
props.put(MetastoreUtil.getFactUpdatePeriodKey(name, entry.getKey()),
- MetastoreUtil.getNamedStr(entry.getValue()));
+ MetastoreUtil.getNamedStr(entry.getValue()));
}
}
}
@@ -151,10 +166,36 @@ public class CubeFactTable extends AbstractCubeTable implements FactTable {
return storageUpdatePeriods;
}
+ private Map<String, Set<String>> getStorageTablePartitionColumns(String name, Map<String, String> props) {
+ Map<String, Set<String>> storageTablePartitionColumns = new HashMap<>();
+ String storagesStr = props.get(MetastoreUtil.getFactStorageListKey(name));
+ if (!StringUtils.isBlank(storagesStr)) {
+ String[] storages = storagesStr.split(",");
+ for (String storage : storages) {
+ String partitionColumnKey = MetastoreUtil.getPartitionColumnKey(name, storage);
+ String partitionColumnValues = props.get(partitionColumnKey);
+ if (StringUtils.isNotEmpty(partitionColumnValues)) {
+ storageTablePartitionColumns.put(partitionColumnKey,
+ new HashSet<String>(Arrays.asList(partitionColumnValues.split(","))));
+ }
+
+ }
+ }
+ return storageTablePartitionColumns;
+ }
+
public Map<String, Set<UpdatePeriod>> getUpdatePeriods() {
return storageUpdatePeriods;
}
+ public Set<String> getPartitionColumns(String storageName) {
+ String partitionColumnKey = MetastoreUtil.getPartitionColumnKey(getName(), storageName);
+ if (storageTablePartitionColumns.containsKey(partitionColumnKey)) {
+ return storageTablePartitionColumns.get(partitionColumnKey);
+ }
+ return new HashSet<String>();
+ }
+
@Override
public int hashCode() {
return super.hashCode();
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
index c611963..34069d9 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
@@ -29,19 +29,16 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.lens.api.metastore.*;
-
import org.apache.lens.cube.authorization.AuthorizationUtil;
import org.apache.lens.cube.error.LensCubeErrorCode;
import org.apache.lens.cube.metadata.Storage.LatestInfo;
import org.apache.lens.cube.metadata.Storage.LatestPartColumnInfo;
import org.apache.lens.cube.metadata.timeline.PartitionTimeline;
import org.apache.lens.cube.metadata.timeline.PartitionTimelineFactory;
-
import org.apache.lens.server.api.LensConfConstants;
import org.apache.lens.server.api.authorization.ActionType;
import org.apache.lens.server.api.authorization.LensAuthorizer;
import org.apache.lens.server.api.authorization.LensPrivilegeObject;
-
import org.apache.lens.server.api.error.LensException;
import org.apache.lens.server.api.metastore.DataCompletenessChecker;
import org.apache.lens.server.api.util.LensUtil;
@@ -68,7 +65,6 @@ import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
import lombok.extern.slf4j.Slf4j;
/**
@@ -330,11 +326,12 @@ public class CubeMetastoreClient {
public void createCubeFactTable(String cubeName, String factName, List<FieldSchema> columns,
Map<String, Set<UpdatePeriod>> storageAggregatePeriods, double weight, Map<String, String> properties,
- Map<String, StorageTableDesc> storageTableDescs, Map<String, Map<UpdatePeriod, String>> storageUpdatePeriodMap)
+ Map<String, StorageTableDesc> storageTableDescs, Map<String, Map<UpdatePeriod, String>> storageUpdatePeriodMap,
+ Map<String, Set<String>> storageTablePartitionColumns)
throws LensException {
checkIfAuthorized();
CubeFactTable factTable = new CubeFactTable(cubeName, factName, columns, storageAggregatePeriods, weight,
- properties, storageUpdatePeriodMap);
+ properties, storageUpdatePeriodMap, storageTablePartitionColumns);
createCubeTable(factTable, storageTableDescs);
// do a get to update cache
getFactTable(factName);
@@ -401,7 +398,8 @@ public class CubeMetastoreClient {
xf.getWeight(),
addFactColStartTimePropertyToFactProperties(xf),
JAXBUtils.tableDescPrefixMapFromXStorageTables(xf.getStorageTables()),
- JAXBUtils.storageTablePrefixMapOfStorage(xf.getStorageTables()));
+ JAXBUtils.storageTablePrefixMapOfStorage(xf.getStorageTables()),
+ JAXBUtils.getStorageTablePartitionColumnsFromTableDescs(xf.getStorageTables()));
}
}
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java
index 96948cc..4881640 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeVirtualFactTable.java
@@ -25,8 +25,8 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.ql.metadata.Table;
import com.google.common.base.Optional;
-
import com.google.common.collect.Lists;
+
import lombok.Getter;
import lombok.Setter;
@@ -195,4 +195,9 @@ public class CubeVirtualFactTable extends AbstractCubeTable implements FactTable
public Map<String, String> getSourceFactProperties() {
return getSourceCubeFactTable().getProperties();
}
+
+ @Override
+ public Set<String> getPartitionColumns(String storage) {
+ return new HashSet<String>();
+ }
}
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java
index e351d7f..ab39e60 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java
@@ -87,6 +87,13 @@ public interface FactTable extends Named {
Set<String> getAllFieldNames();
/**
+ * Set of all partition columns for the fact
+ * @param storage Name of the stroage
+ * @return Set of all partition columns
+ */
+ Set<String> getPartitionColumns(String storage);
+
+ /**
*tag for checking data completeness
*
* @return Tag String
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/JAXBUtils.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/JAXBUtils.java
index 7dfb166..623425e 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/JAXBUtils.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/JAXBUtils.java
@@ -710,12 +710,14 @@ public final class JAXBUtils {
public static CubeFactTable cubeFactFromFactTable(XFactTable fact) throws LensException {
List<FieldSchema> columns = fieldSchemaListFromColumns(fact.getColumns());
- Map<String, Set<UpdatePeriod>> storageUpdatePeriods = getFactUpdatePeriodsFromStorageTables(
- fact.getStorageTables());
- Map<String, Map<UpdatePeriod, String>> storageTablePrefixMap = storageTablePrefixMapOfStorage(
- fact.getStorageTables());
+ Map<String, Set<UpdatePeriod>> storageUpdatePeriods =
+ getFactUpdatePeriodsFromStorageTables(fact.getStorageTables());
+ Map<String, Map<UpdatePeriod, String>> storageTablePrefixMap =
+ storageTablePrefixMapOfStorage(fact.getStorageTables());
+ Map<String, Set<String>> storageTablePartitionColumns =
+ getStorageTablePartitionColumnsFromTableDescs(fact.getStorageTables());
return new CubeFactTable(fact.getCubeName(), fact.getName(), columns, storageUpdatePeriods, fact.getWeight(),
- mapFromXProperties(fact.getProperties()), storageTablePrefixMap);
+ mapFromXProperties(fact.getProperties()), storageTablePrefixMap, storageTablePartitionColumns);
}
public static CubeVirtualFactTable cubeVirtualFactFromFactTable(XVirtualFactTable fact, FactTable sourceFactTable)
@@ -893,6 +895,22 @@ public final class JAXBUtils {
return storageTablePrefixToDescMap;
}
+ public static Map<String, Set<String>> getStorageTablePartitionColumnsFromTableDescs(XStorageTables storageTables) {
+ Map<String, Set<String>> storageTablePartitionColumns = new HashMap<>();
+ if (storageTables != null && !storageTables.getStorageTable().isEmpty()) {
+ for (XStorageTableElement xStorageTableElement : storageTables.getStorageTable()) {
+ Set<String> partitionColumns = new HashSet<>();
+ if (xStorageTableElement.getTableDesc() != null && xStorageTableElement.getTableDesc().getPartCols() != null) {
+ for (XColumn xColumn : xStorageTableElement.getTableDesc().getPartCols().getColumn()) {
+ partitionColumns.add(xColumn.getName());
+ }
+ }
+ storageTablePartitionColumns.put(xStorageTableElement.getStorageName(), partitionColumns);
+ }
+ }
+ return storageTablePartitionColumns;
+ }
+
public static Map<String, Map<UpdatePeriod, String>> storageTablePrefixMapOfStorage(XStorageTables storageTables) {
Map<String, Map<UpdatePeriod, String>> storageTableMap = new HashMap<>();
if (storageTables != null && !storageTables.getStorageTable().isEmpty()) {
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
index 44411f2..2c25d61 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
@@ -374,6 +374,10 @@ public class MetastoreUtil {
return getFactKeyPrefix(name) + VALID_COLUMNS_SFX;
}
+ public static String getPartitionColumnKey(String name, String storage) {
+ return getFactKeyPrefix(name) + "." + storage + PARTCOLS_SFX;
+ }
+
public static String getRestrictedColumnsKey(String name) {
return getCubePrefix(name) + RESTRICTED_COLUMNS_SFX;
}
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidate.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidate.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidate.java
index 193ce6b..ff67b8c 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidate.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidate.java
@@ -47,7 +47,17 @@ import java.util.TimeZone;
import java.util.TreeSet;
import java.util.stream.Stream;
-import org.apache.lens.cube.metadata.*;
+import org.apache.lens.cube.metadata.AbstractCubeTable;
+import org.apache.lens.cube.metadata.CubeFactTable;
+import org.apache.lens.cube.metadata.CubeInterface;
+import org.apache.lens.cube.metadata.DateUtil;
+import org.apache.lens.cube.metadata.Dimension;
+import org.apache.lens.cube.metadata.FactPartition;
+import org.apache.lens.cube.metadata.FactTable;
+import org.apache.lens.cube.metadata.MetastoreConstants;
+import org.apache.lens.cube.metadata.MetastoreUtil;
+import org.apache.lens.cube.metadata.TimeRange;
+import org.apache.lens.cube.metadata.UpdatePeriod;
import org.apache.lens.server.api.error.LensException;
import org.apache.lens.server.api.metastore.DataCompletenessChecker;
@@ -348,6 +358,7 @@ public class StorageCandidate implements Candidate, CandidateTable {
factColumns = fact.getValidColumns();
if (factColumns == null) {
factColumns = fact.getAllFieldNames();
+ factColumns.addAll(fact.getPartitionColumns(storageName));
}
}
return factColumns;
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
index 9b8a55a..6e76eda 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
@@ -28,7 +28,6 @@ import static org.apache.lens.server.api.util.LensUtil.getHashMap;
import static org.testng.Assert.*;
import java.text.SimpleDateFormat;
-
import java.util.*;
import org.apache.lens.cube.error.LensCubeErrorCode;
@@ -1007,10 +1006,12 @@ public class TestCubeMetastoreClient {
Map<String, Map<UpdatePeriod, String>> storageUpdatePeriodMap = getHashMap(c1,
getHashMap(HOURLY, HOURLY + "_" + c1, DAILY, DAILY + "_" + c1), c2, getHashMap(HOURLY, c2, DAILY, c2));
+ Map<String, Set<String>> storageTablePartitionColumns = getHashMap("pl_pi", new HashSet<String>(Arrays.asList("pt"
+ , "it")), "pl_p3", new HashSet<String>(Arrays.asList("pt", "et")));
CubeFactTable cubeFact = new CubeFactTable(CUBE_NAME, factName, factColumns, updatePeriods, 0L, null,
- storageUpdatePeriodMap);
+ storageUpdatePeriodMap, storageTablePartitionColumns);
client.createCubeFactTable(CUBE_NAME, factName, factColumns, updatePeriods, 0L, null, storageTables,
- storageUpdatePeriodMap);
+ storageUpdatePeriodMap, storageTablePartitionColumns);
assertTrue(client.tableExists(factName));
Table cubeTbl = client.getHiveTable(factName);
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/java/org/apache/lens/examples/PopulateSampleMetastore.java
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/java/org/apache/lens/examples/PopulateSampleMetastore.java b/lens-examples/src/main/java/org/apache/lens/examples/PopulateSampleMetastore.java
index 7c8fd2c..5fb57dc 100644
--- a/lens-examples/src/main/java/org/apache/lens/examples/PopulateSampleMetastore.java
+++ b/lens-examples/src/main/java/org/apache/lens/examples/PopulateSampleMetastore.java
@@ -190,6 +190,7 @@ public class PopulateSampleMetastore {
createFactPartition("fact2-local-part1.xml", "fact2", "local");
createFactPartition("fact2-local-part2.xml", "fact2", "local");
createFactPartition("fact2-local-part3.xml", "fact2", "local");
+ createFactPartitions("fact3-local-part.xml", "fact3", "local");
createFactPartition("raw-local-part1.xml", "rawfact", "local");
createFactPartition("raw-local-part2.xml", "rawfact", "local");
createFactPartition("raw-local-part3.xml", "rawfact", "local");
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java b/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
index 1aa993b..ac7470b 100644
--- a/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
+++ b/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
@@ -167,6 +167,7 @@ public class SampleMetastore {
private void createFacts() throws JAXBException, IOException {
createFact("fact1.xml");
createFact("fact2.xml");
+ createFact("fact3.xml");
createFact("rawfact.xml");
createFact("sales-raw-fact.xml");
createFact("sales-aggr-fact1.xml");
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/cube-queries.sql
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/cube-queries.sql b/lens-examples/src/main/resources/cube-queries.sql
index 0169175..f3d6cc7 100644
--- a/lens-examples/src/main/resources/cube-queries.sql
+++ b/lens-examples/src/main/resources/cube-queries.sql
@@ -16,7 +16,7 @@
-- specific language governing permissions and limitations
-- under the License.
--
-
+cube select dim1, measure2 from sample_cube where time_range_in(dt, '2014-06-25-00', '2014-06-26-00') and nontimedim = 'nonTimeDimValue2'
cube select measure2 from sample_cube where time_range_in(dt, '2014-06-24-23', '2014-06-25-00')
cube select measure2 from sample_cube where time_range_in(dt, '2014-06-25-00', '2014-06-26-00')
cube select measure2 from sample_cube where time_range_in(dt, '2014-06-24-23', '2014-06-26-01')
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/fact3-local-part.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact3-local-part.xml b/lens-examples/src/main/resources/fact3-local-part.xml
new file mode 100644
index 0000000..05ed815
--- /dev/null
+++ b/lens-examples/src/main/resources/fact3-local-part.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<x_partition_list xmlns="uri:lens:cube:0.1">
+ <partition fact_or_dimension_table_name="fact3" location="examples/data/fact3-local1" update_period="DAILY">
+ <non_time_partition_spec>
+ <part_spec_element key="nontimedim" value="nonTimeDimValue1"/>
+ </non_time_partition_spec>
+ <time_partition_spec>
+ <part_spec_element key="dt" value="2014-06-25T00:00:00"/>
+ </time_partition_spec>
+ </partition>
+ <partition fact_or_dimension_table_name="fact3" location="examples/data/fact3-local2" update_period="DAILY">
+ <non_time_partition_spec>
+ <part_spec_element key="nontimedim" value="nonTimeDimValue2"/>
+ </non_time_partition_spec>
+ <time_partition_spec>
+ <part_spec_element key="dt" value="2014-06-25T00:00:00"/>
+ </time_partition_spec>
+ </partition>
+</x_partition_list>
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/fact3-local1.data
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact3-local1.data b/lens-examples/src/main/resources/fact3-local1.data
new file mode 100644
index 0000000..273765d
--- /dev/null
+++ b/lens-examples/src/main/resources/fact3-local1.data
@@ -0,0 +1,8 @@
+21,1,100,100,100
+22,2,200,200,200
+23,3,300,300,300
+24,4,400,400,400
+25,5,500,500,500
+26,6,600,600,600
+27,7,700,700,700
+28,8,800,800,800
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/fact3-local2.data
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact3-local2.data b/lens-examples/src/main/resources/fact3-local2.data
new file mode 100644
index 0000000..2f7f831
--- /dev/null
+++ b/lens-examples/src/main/resources/fact3-local2.data
@@ -0,0 +1,8 @@
+21,1,2400,100,100
+22,2,4800,200,200
+23,3,7200,300,300
+24,4,9600,400,400
+25,5,12000,500,500
+26,6,14400,600,600
+27,7,16800,700,700
+28,8,19200,800,800
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/fact3.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact3.xml b/lens-examples/src/main/resources/fact3.xml
new file mode 100644
index 0000000..a8a93f8
--- /dev/null
+++ b/lens-examples/src/main/resources/fact3.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<x_fact_table cube_name="sample_cube" name="fact3" weight="100.0" xmlns="uri:lens:cube:0.1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
+ <columns>
+ <column comment="" name="dim1" _type="INT"/>
+ <column comment="" name="measure2" _type="BIGINT"/>
+ <column comment="" name="measure3" _type="INT"/>
+ <column comment="" name="measure4" _type="FLOAT"/>
+ <column comment="" name="measure5" _type="FLOAT" start_time="2015-01-01"/>
+ <column comment="" name="measure6" _type="FLOAT" end_time="2015-01-01"/>
+ </columns>
+ <properties>
+ <property name="cube.fact.is.aggregated" value="true"/>
+ </properties>
+ <storage_tables>
+ <storage_table>
+ <update_periods>
+ <update_period>HOURLY</update_period>
+ <update_period>DAILY</update_period>
+ </update_periods>
+ <storage_name>local</storage_name>
+ <table_desc external="true" field_delimiter="," table_location="/tmp/examples/fact3_local">
+ <part_cols>
+ <column comment="Time column" name="dt" _type="STRING"/>
+ <column comment="Non Time column" name="nontimedim" _type="STRING"/>
+ </part_cols>
+ <time_part_cols>dt</time_part_cols>
+ </table_desc>
+ </storage_table>
+ </storage_tables>
+</x_fact_table>
http://git-wip-us.apache.org/repos/asf/lens/blob/2d64f6ca/lens-examples/src/main/resources/sample-cube.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sample-cube.xml b/lens-examples/src/main/resources/sample-cube.xml
index 6b17da5..464fb0b 100644
--- a/lens-examples/src/main/resources/sample-cube.xml
+++ b/lens-examples/src/main/resources/sample-cube.xml
@@ -53,6 +53,7 @@
<property name="is_ui_visible" value="true"/>
</tags>
</dim_attribute>
+ <dim_attribute name="nonTimeDim" _type="STRING"/>
</dim_attributes>
<expressions>
<expression name="expr_msr5" _type="DOUBLE">