lens git commit: LENS-1432 : Map Join tuning broken for this query leading to Map timeouts
Repository: lens Updated Branches: refs/heads/master 359937fab -> 933cc3d6f LENS-1432 : Map Join tuning broken for this query leading to Map timeouts Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/933cc3d6 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/933cc3d6 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/933cc3d6 Branch: refs/heads/master Commit: 933cc3d6f7924c893f1c18273ffba8347bfcec89 Parents: 359937f Author: Sushil MohantyAuthored: Tue Jun 6 18:14:39 2017 +0530 Committer: Rajat Khandelwal Committed: Tue Jun 6 18:14:39 2017 +0530 -- .../cube/parse/MultiCandidateQueryWriterContext.java | 11 +++ .../org/apache/lens/cube/parse/QueryWriterContext.java | 4 .../java/org/apache/lens/driver/cube/RewriterPlan.java | 6 +++--- .../org/apache/lens/cube/parse/TestRewriterPlan.java | 2 ++ .../lens/cube/parse/TestUnionAndJoinCandidates.java | 2 +- lens-cube/src/test/resources/schema/facts/b1fact1.xml| 2 +- 6 files changed, 22 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/933cc3d6/lens-cube/src/main/java/org/apache/lens/cube/parse/MultiCandidateQueryWriterContext.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/MultiCandidateQueryWriterContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/MultiCandidateQueryWriterContext.java index d57c027..50046a5 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/MultiCandidateQueryWriterContext.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/MultiCandidateQueryWriterContext.java @@ -18,8 +18,11 @@ */ package org.apache.lens.cube.parse; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.apache.lens.cube.metadata.Dimension; import org.apache.lens.server.api.error.LensException; import com.google.common.collect.Lists; @@ -90,4 +93,12 @@ public class MultiCandidateQueryWriterContext implements QueryWriterContext { List leafWriterContexts = getLeafQueryWriterContexts(); return new UnionQueryWriter(leafWriterContexts, getCubeQueryContext()); } + + public Map getDimsToQuery() { +Map allDimsQueried = new HashMap<>(); +for (QueryWriterContext ctx : children) { + allDimsQueried.putAll(ctx.getDimsToQuery()); +} +return allDimsQueried; + } } http://git-wip-us.apache.org/repos/asf/lens/blob/933cc3d6/lens-cube/src/main/java/org/apache/lens/cube/parse/QueryWriterContext.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/QueryWriterContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/QueryWriterContext.java index d55de1f..6531f22 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/QueryWriterContext.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/QueryWriterContext.java @@ -18,6 +18,9 @@ */ package org.apache.lens.cube.parse; +import java.util.Map; + +import org.apache.lens.cube.metadata.Dimension; import org.apache.lens.server.api.error.LensException; /** @@ -31,4 +34,5 @@ public interface QueryWriterContext { QueryAST getQueryAst(); void updateFromString() throws LensException; QueryWriter toQueryWriter() throws LensException; + Map getDimsToQuery(); } http://git-wip-us.apache.org/repos/asf/lens/blob/933cc3d6/lens-cube/src/main/java/org/apache/lens/driver/cube/RewriterPlan.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/driver/cube/RewriterPlan.java b/lens-cube/src/main/java/org/apache/lens/driver/cube/RewriterPlan.java index caf8770..a27aec1 100644 --- a/lens-cube/src/main/java/org/apache/lens/driver/cube/RewriterPlan.java +++ b/lens-cube/src/main/java/org/apache/lens/driver/cube/RewriterPlan.java @@ -45,10 +45,10 @@ public final class RewriterPlan extends DriverQueryPlan { @SuppressWarnings("unchecked") // required for (Set) casting void extractPlan(Collection cubeQueries) { - for (CubeQueryContext ctx : cubeQueries) { - if (ctx.getPickedDimTables() != null && !ctx.getPickedDimTables().isEmpty()) { -for (CandidateDim dim : ctx.getPickedDimTables()) { + if (ctx.getQueryWriterContext().getDimsToQuery() != null + && !ctx.getQueryWriterContext().getDimsToQuery().isEmpty()) { +for (CandidateDim dim : ctx.getQueryWriterContext().getDimsToQuery().values()) { addTablesQueried(dim.getStorageTable()); if (partitions.get(dim.getName()) == null ||
lens git commit: LENS-1435: Cube xml files are missing in lens-example
Repository: lens Updated Branches: refs/heads/master 89b17e640 -> aaf455111 LENS-1435: Cube xml files are missing in lens-example Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/aaf45511 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/aaf45511 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/aaf45511 Branch: refs/heads/master Commit: aaf455111953fd1d49218a8bdf4bcc9600b01899 Parents: 89b17e6 Author: Sushil MohantyAuthored: Tue Jun 6 17:45:22 2017 +0530 Committer: Rajat Khandelwal Committed: Tue Jun 6 17:45:22 2017 +0530 -- lens-examples/src/main/resources/cube11.xml | 53 lens-examples/src/main/resources/cube22.xml | 53 lens-examples/src/main/resources/cube33.xml | 53 3 files changed, 159 insertions(+) -- http://git-wip-us.apache.org/repos/asf/lens/blob/aaf45511/lens-examples/src/main/resources/cube11.xml -- diff --git a/lens-examples/src/main/resources/cube11.xml b/lens-examples/src/main/resources/cube11.xml new file mode 100644 index 000..2283939 --- /dev/null +++ b/lens-examples/src/main/resources/cube11.xml @@ -0,0 +1,53 @@ + + +http://www.w3.org/2001/XMLSchema-instance; + xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/lens/blob/aaf45511/lens-examples/src/main/resources/cube22.xml -- diff --git a/lens-examples/src/main/resources/cube22.xml b/lens-examples/src/main/resources/cube22.xml new file mode 100644 index 000..59b1828 --- /dev/null +++ b/lens-examples/src/main/resources/cube22.xml @@ -0,0 +1,53 @@ + + +http://www.w3.org/2001/XMLSchema-instance; + xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/lens/blob/aaf45511/lens-examples/src/main/resources/cube33.xml -- diff --git a/lens-examples/src/main/resources/cube33.xml b/lens-examples/src/main/resources/cube33.xml new file mode 100644 index 000..47b9b17 --- /dev/null +++ b/lens-examples/src/main/resources/cube33.xml @@ -0,0 +1,53 @@ + + +http://www.w3.org/2001/XMLSchema-instance; + xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
lens git commit: LENS-1430 : Expressions are not getting resolved correctly in union query
Repository: lens Updated Branches: refs/heads/current-release-line cc6c907d7 -> be75e1d55 LENS-1430 : Expressions are not getting resolved correctly in union query Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/be75e1d5 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/be75e1d5 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/be75e1d5 Branch: refs/heads/current-release-line Commit: be75e1d5571f33ca1ec51f91a5d113abe0838842 Parents: cc6c907 Author: Sushil MohantyAuthored: Tue Jun 6 16:43:17 2017 +0530 Committer: sushilmohanty Committed: Tue Jun 6 16:43:17 2017 +0530 -- .../lens/cube/parse/ExpressionResolver.java | 36 +++- .../cube/parse/TestUnionAndJoinCandidates.java | 60 +++- .../resources/schema/cubes/base/basecube.xml| 12 .../resources/schema/cubes/base/testcube.xml| 9 +++ .../cubes/derived/union_join_ctx_der1.xml | 2 + .../schema/facts/union_join_ctx_fact1.xml | 2 +- .../schema/facts/union_join_ctx_fact3.xml | 1 + .../schema/facts/union_join_ctx_fact4.xml | 59 +++ 8 files changed, 177 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/be75e1d5/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 7cad400..a2f4bb6 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -285,6 +285,7 @@ class ExpressionResolver implements ContextRewriter { @Getter private Map allExprsQueried = new HashMap (); private Map pickedExpressions = new HashMap (); +private Map nonPickedExpressionsForCandidate = new HashMap (); private final CubeQueryContext cubeql; ExpressionResolverContext(CubeQueryContext cubeql) { @@ -407,6 +408,7 @@ class ExpressionResolver implements ContextRewriter { } pickedExpressions.clear(); + nonPickedExpressionsForCandidate.clear(); return exprDims; } @@ -426,7 +428,7 @@ class ExpressionResolver implements ContextRewriter { // Having ast is not copied now, it's maintained in cubeQueryContext, each fact processes that serially. if (queryAST.getHavingAST() != null) { replaceAST(cubeql, queryAST.getHavingAST()); - } else if (cubeql.getHavingAST() != null) { + } else if (cubeql.getHavingAST() != null && nonPickedExpressionsForCandidate.isEmpty()) { replaceAST(cubeql, cubeql.getHavingAST()); queryAST.setHavingAST(MetastoreUtil.copyAST(cubeql.getHavingAST())); } @@ -459,6 +461,9 @@ class ExpressionResolver implements ContextRewriter { if (expr != null) { node1.setChild(i, replaceAlias(expr.getRewrittenAST(), cubeql)); } +} else if (nonPickedExpressionsForCandidate.containsKey(column)) { + node1.setChild(i, nonPickedExpressionsForCandidate.get(column)); + } } } @@ -477,7 +482,7 @@ class ExpressionResolver implements ContextRewriter { return null; } -private void pickExpressionsForTable(CandidateTable cTable) { +private void pickExpressionsForTable(CandidateTable cTable) throws LensException { for (Map.Entry ecEntry : allExprsQueried.entrySet()) { Set ecSet = ecEntry.getValue(); for (ExpressionContext ec : ecSet) { @@ -488,6 +493,8 @@ class ExpressionResolver implements ContextRewriter { // pick first evaluable expression pickedExpressions.computeIfAbsent(ecEntry.getKey(), k -> new HashSet<>()) .add(new PickedExpression(ec.srcAlias, ec.evaluableExpressions.get(cTable).iterator().next())); + } else { +nonPickedExpressionsForCandidate.put(ecEntry.getKey(), getDefaultExpr(getExprAst(ec))); } } } @@ -495,6 +502,31 @@ class ExpressionResolver implements ContextRewriter { } } +private ASTNode getExprAst(ExpressionContext ec) { + Set scSet = CandidateUtil.getStorageCandidates(cubeql.getCandidates()); + Set storageTableNames = new HashSet(); + for (StorageCandidate sc : scSet) { +storageTableNames.add(sc.getStorageTable()); + } + for (CandidateTable table : ec.evaluableExpressions.keySet()) { +
lens git commit: LENS-1427: ExpressionResolver is removing expressions if they are not answerable by *any* candidates
Repository: lens Updated Branches: refs/heads/master d3e732c9f -> cb2529672 LENS-1427: ExpressionResolver is removing expressions if they are not answerable by *any* candidates Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/cb252967 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/cb252967 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/cb252967 Branch: refs/heads/master Commit: cb252967237a7e6c945a9031a3d417c18bc736cf Parents: d3e732c Author: Rajat KhandelwalAuthored: Tue Jun 6 15:37:41 2017 +0530 Committer: Rajat Khandelwal Committed: Tue Jun 6 15:37:41 2017 +0530 -- .../lens/cube/parse/ExpressionResolver.java | 37 +--- .../test/resources/schema/cubes/base/b1cube.xml | 2 +- .../test/resources/schema/cubes/base/b2cube.xml | 2 +- .../resources/schema/cubes/base/testcube.xml| 2 +- 4 files changed, 19 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 7cad400..f38aa54 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -518,15 +518,14 @@ class ExpressionResolver implements ContextRewriter { } // Remove expressions for which denormalized columns are no more reachable esc.getDeNormCtx().pruneReferences(cubeql); -for (String table : esc.getDeNormCtx().getTableToRefCols().keySet()) { - Set nonReachableFields = esc.getDeNormCtx().getNonReachableReferenceFields(table); - if (!nonReachableFields.isEmpty()) { -log.info("Removing expression {} as columns {} are not available", esc, nonReachableFields); -iterator.remove(); -removedEsc.add(esc); -removed = true; -break; - } +if (!esc.getDeNormCtx().getTableToRefCols().isEmpty() + && esc.getDeNormCtx().getTableToRefCols().keySet().stream() + .map(esc.getDeNormCtx()::getNonReachableReferenceFields).noneMatch(Set::isEmpty)) { + log.info("Removing expression {} as all tables have non reachable fields", esc); + iterator.remove(); + removedEsc.add(esc); + removed = true; + break; } if (removed) { continue; @@ -630,19 +629,15 @@ class ExpressionResolver implements ContextRewriter { for (Map.Entry ecEntry : exprCtx.allExprsQueried.entrySet()) { String expr = ecEntry.getKey(); Set ecSet = ecEntry.getValue(); - for (ExpressionContext ec : ecSet) { -if (ec.getSrcTable().getName().equals(cubeql.getCube().getName())) { - for (Iterator sItr = cubeql.getCandidates().iterator(); sItr.hasNext();) { -Candidate cand = sItr.next(); -if (!cand.isExpressionEvaluable(ec)) { - log.info("Not considering Candidate :{} as {} is not evaluable", cand, ec.exprCol.getName()); - sItr.remove(); - cubeql.addCandidatePruningMsg(cand, - CandidateTablePruneCause.expressionNotEvaluable(ec.exprCol.getName())); -} - } + cubeql.getCandidates().removeIf(x-> { +if (ecSet.stream().noneMatch(x::isExpressionEvaluable)) { + log.info("Not considering Candidate :{} as {} is not evaluable", x, expr); + cubeql.addCandidatePruningMsg(x, +CandidateTablePruneCause.expressionNotEvaluable(expr)); + return true; } - } +return false; + }); } } // prune candidate dims without any valid expressions http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml -- diff --git a/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml b/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml index e3e9909..fd25982 100644 --- a/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml +++ b/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml @@ -178,7 +178,7 @@ - +
lens git commit: LENS-1429: Queries failing intermittently with NO_REF_COL_AVAILABLE
Repository: lens Updated Branches: refs/heads/master 159cf71e7 -> d3e732c9f LENS-1429: Queries failing intermittently with NO_REF_COL_AVAILABLE Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/d3e732c9 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/d3e732c9 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/d3e732c9 Branch: refs/heads/master Commit: d3e732c9fe579b54d6c60e01a36746ecbd4ecb59 Parents: 159cf71 Author: Sushil MohantyAuthored: Tue Jun 6 15:35:46 2017 +0530 Committer: Rajat Khandelwal Committed: Tue Jun 6 15:35:46 2017 +0530 -- .../org/apache/lens/cube/parse/CandidateTableResolver.java | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/d3e732c9/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java index 93736cd..f530650 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java @@ -674,11 +674,13 @@ class CandidateTableResolver implements ContextRewriter { if (colSet == null || colSet.isEmpty()) { return true; } +boolean isEvaluable = false; for (QueriedPhraseContext qur : colSet) { if (sc.isPhraseAnswerable(qur)) { -return true; +isEvaluable = true; +continue; } } -return false; +return isEvaluable; } }
lens git commit: LENS-1428 : Common measures are getting repeated in UnionQuery for JoinCandidate
Repository: lens Updated Branches: refs/heads/master 5de45e0f8 -> 159cf71e7 LENS-1428 : Common measures are getting repeated in UnionQuery for JoinCandidate Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/159cf71e Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/159cf71e Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/159cf71e Branch: refs/heads/master Commit: 159cf71e732a0b63bf8c7efde6489f4eea8d943a Parents: 5de45e0 Author: Sushil MohantyAuthored: Tue Jun 6 15:08:38 2017 +0530 Committer: sushilmohanty Committed: Tue Jun 6 15:08:38 2017 +0530 -- .../apache/lens/cube/metadata/CubeMetastoreClient.java | 2 +- .../java/org/apache/lens/cube/parse/Candidate.java | 9 + .../org/apache/lens/cube/parse/CubeQueryContext.java | 5 + .../java/org/apache/lens/cube/parse/JoinCandidate.java | 13 + .../org/apache/lens/cube/parse/StorageCandidate.java | 7 +++ .../org/apache/lens/cube/parse/UnionQueryWriter.java | 6 ++ 6 files changed, 37 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/159cf71e/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 749e44c..5c05e53 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 @@ -443,7 +443,7 @@ public class CubeMetastoreClient { if (get(timeLineKey) == null) { loadTimeLines(fact, storage, timeLineKey); } -log.info("timeline for {} is: {}", storage, get(timeLineKey)); +log.debug("timeline for {} is: {}", storage, get(timeLineKey)); // return the final value from memory return get(timeLineKey); // RESUME CHECKSTYLE CHECK DoubleCheckedLockingCheck http://git-wip-us.apache.org/repos/asf/lens/blob/159cf71e/lens-cube/src/main/java/org/apache/lens/cube/parse/Candidate.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/Candidate.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/Candidate.java index 2edeb41..0855ced 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/Candidate.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/Candidate.java @@ -355,4 +355,13 @@ public interface Candidate { } throw new IllegalArgumentException("Candidate doesn't have children and no suitable implementation found"); } + + default Set decideMeasurePhrasesToAnswer(Set measurePhraseIndices) throws LensException { +HashSet allCovered = Sets.newHashSet(); +for (Candidate candidate : getChildren()) { + Set covered = candidate.decideMeasurePhrasesToAnswer(measurePhraseIndices); + allCovered.addAll(covered); +} +return allCovered; + } } http://git-wip-us.apache.org/repos/asf/lens/blob/159cf71e/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java -- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java index 47bce65..b5330a7 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java @@ -830,6 +830,11 @@ public class CubeQueryContext extends TracksQueriedColumns implements QueryAST, cand = iter.next(); log.info("Available Candidates:{}, picking up Candidate: {} for querying", candidates, cand); pickedCandidate = cand; +// Answerable common measures in JoinCandidate should be answered by one of the children, otherwise +// measure numbers will be added multiple times in the final union query. +Set measureIndices = getQueriedPhrases().stream().filter(x -> x.hasMeasures(this)) + .map(QueriedPhraseContext::getPosition).collect(toSet()); +pickedCandidate.decideMeasurePhrasesToAnswer(measureIndices); } if (pickedCandidate == null) { throwNoCandidateFactException(); http://git-wip-us.apache.org/repos/asf/lens/blob/159cf71e/lens-cube/src/main/java/org/apache/lens/cube/parse/JoinCandidate.java -- diff --git
[3/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
LENS-1412 : Add capability to define virtual facts in a cube Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/27ad9aa8 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/27ad9aa8 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/27ad9aa8 Branch: refs/heads/current-release-line Commit: 27ad9aa8f27082a8ac6d82cbf91fff80b43ab689 Parents: 7c1171c Author: Rajitha RAuthored: Tue Jun 6 13:59:58 2017 +0530 Committer: Amareshwari Sriramadasu Committed: Tue Jun 6 14:01:49 2017 +0530 -- .../lens/api/metastore/SchemaTraverser.java | 1 + lens-api/src/main/resources/cube-0.1.xsd| 176 +++ lens-api/src/main/resources/lens-errors.conf| 6 + .../lens/cli/commands/LensFactCommands.java | 6 +- .../lens/cli/commands/LensSchemaCommands.java | 18 +- .../apache/lens/cli/TestLensFactCommands.java | 132 +- .../apache/lens/cli/TestLensSchemaCommands.java | 2 +- .../schema/cubes/base/virtual-cube.xml | 30 ++ .../resources/schema/facts/virtual_fact.xml | 28 ++ .../java/org/apache/lens/client/LensClient.java | 2 +- .../apache/lens/client/LensMetadataClient.java | 18 +- .../lens/cube/error/LensCubeErrorCode.java | 3 +- .../lens/cube/metadata/AbstractCubeTable.java | 22 +- .../lens/cube/metadata/CubeFactTable.java | 52 ++- .../lens/cube/metadata/CubeMetastoreClient.java | 463 ++- .../cube/metadata/CubeVirtualFactTable.java | 186 .../apache/lens/cube/metadata/FactTable.java| 166 +++ .../apache/lens/cube/metadata/JAXBUtils.java| 24 +- .../lens/cube/metadata/MetastoreConstants.java | 2 + .../lens/cube/metadata/MetastoreUtil.java | 26 +- .../apache/lens/cube/metadata/Segmentation.java | 13 +- .../org/apache/lens/cube/parse/Candidate.java | 8 +- .../lens/cube/parse/CandidateTableResolver.java | 11 +- .../lens/cube/parse/StorageCandidate.java | 55 +-- .../cube/parse/StorageCandidateHQLContext.java | 12 +- .../lens/cube/parse/StorageTableResolver.java | 5 +- .../lens/cube/metadata/CubeFactTableTest.java | 12 +- .../cube/metadata/TestCubeMetastoreClient.java | 123 - .../apache/lens/cube/parse/CubeTestSetup.java | 40 +- .../lens/cube/parse/TestCubeRewriter.java | 16 + .../parse/TestCubeSegmentationRewriter.java | 15 +- .../lens/cube/parse/TestUnionQueries.java | 2 +- .../resources/schema/cubes/base/virtualcube.xml | 36 ++ .../test/resources/schema/facts/virtualfact.xml | 27 ++ lens-driver-es/pom.xml | 3 +- lens-examples/pom.xml | 3 +- .../src/test/resources/yaml/fact1.yaml | 4 +- .../src/test/resources/yaml/fact2.yaml | 4 +- .../src/test/resources/yaml/rawfact.yaml| 4 +- .../yaml/sales-aggr-continuous-fact.yaml| 4 +- .../test/resources/yaml/sales-aggr-fact1.yaml | 4 +- .../test/resources/yaml/sales-aggr-fact2.yaml | 4 +- .../src/test/resources/yaml/sales-raw-fact.yaml | 4 +- .../api/metastore/CubeMetastoreService.java | 8 +- lens-server/pom.xml | 2 +- .../metastore/CubeMetastoreServiceImpl.java | 24 +- .../server/metastore/MetastoreResource.java | 17 +- .../lens/server/common/RestAPITestUtil.java | 7 +- .../server/metastore/TestMetastoreService.java | 274 ++- src/site/apt/user/cli.apt | 3 +- tools/scripts/generate-site-public.sh | 2 +- 51 files changed, 1646 insertions(+), 463 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/27ad9aa8/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java -- diff --git a/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java b/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java index 9564443..09c848a 100644 --- a/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java +++ b/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java @@ -42,6 +42,7 @@ public class SchemaTraverser implements Runnable { types.put("cubes/derived", XDerivedCube.class); types.put("dimensions", XDimension.class); types.put("facts", XFactTable.class); +types.put("facts/virtual", XVirtualFactTable.class); types.put("dimtables", XDimensionTable.class); types.put("dimensiontables", XDimensionTable.class); types.put("dimensiontables", XDimensionTable.class); http://git-wip-us.apache.org/repos/asf/lens/blob/27ad9aa8/lens-api/src/main/resources/cube-0.1.xsd -- diff --git
[1/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
Repository: lens Updated Branches: refs/heads/current-release-line 7c1171c8d -> 27ad9aa8f http://git-wip-us.apache.org/repos/asf/lens/blob/27ad9aa8/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java -- diff --git a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java index 6d32d23..ab24033 100644 --- a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java +++ b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java @@ -1856,6 +1856,24 @@ public class TestMetastoreService extends LensJerseyTest { return f; } + + private XVirtualFactTable createVirtualFactTable(String factName, String sourceFactName) { +return createVirtualFactTable(factName, "testCube", sourceFactName); + } + + private XVirtualFactTable createVirtualFactTable(String factName, final String cubeName, String sourceFactName) { +XVirtualFactTable f = cubeObjectFactory.createXVirtualFactTable(); +f.setProperties(new XProperties()); +f.setName(factName); +f.setWeight(10.0); +f.setCubeName(cubeName); +f.setSourceFactName(sourceFactName); + +Mapproperties = LensUtil.getHashMap("foo1", "bar1"); + f.getProperties().getProperty().addAll(JAXBUtils.xPropertiesFromMap(properties)); +return f; + } + @Test(dataProvider = "mediaTypeData") public void testCreateFactTableWithMultipleUpdatePeriods(MediaType mediaType) throws Exception { @@ -1877,7 +1895,7 @@ public class TestMetastoreService extends LensJerseyTest { .add(createStorageTblWithMultipleTableDescriptors("S1", tables, updatePeriods)); APIResult result = target().path("metastore").path("facts").queryParam("sessionid", lensSessionId) .request(mediaType) -.post(Entity.entity(new GenericEntity (cubeObjectFactory.createXFactTable(f)) { +.post(Entity.entity(new GenericEntity (cubeObjectFactory.createXFact(f)) { }, mediaType), APIResult.class); assertSuccess(result); @@ -1886,10 +1904,10 @@ public class TestMetastoreService extends LensJerseyTest { assertTrue(factNames.getElements().contains(table.toLowerCase())); // Get the created tables - JAXBElement gotFactElement = target().path("metastore/facts").path(table) -.queryParam("sessionid", lensSessionId).request(mediaType).get(new GenericType () { + JAXBElement gotFactElement = target().path("metastore/facts").path(table) +.queryParam("sessionid", lensSessionId).request(mediaType).get(new GenericType () { }); - XFactTable gotFact = gotFactElement.getValue(); + XFactTable gotFact = (XFactTable) gotFactElement.getValue(); assertTrue(gotFact.getName().equalsIgnoreCase(table)); assertEquals(gotFact.getWeight(), 10.0); @@ -1915,15 +1933,15 @@ public class TestMetastoreService extends LensJerseyTest { // Update result = target().path("metastore").path("facts").path(table).queryParam("sessionid", lensSessionId) .request(mediaType) -.put(Entity.entity(new GenericEntity (cubeObjectFactory.createXFactTable(update)) { +.put(Entity.entity(new GenericEntity (cubeObjectFactory.createXFact(update)) { }, mediaType), APIResult.class); assertSuccess(result); // Get the updated table gotFactElement = target().path("metastore/facts").path(table).queryParam("sessionid", lensSessionId) -.request(mediaType).get(new GenericType () { +.request(mediaType).get(new GenericType () { }); - gotFact = gotFactElement.getValue(); + gotFact = (XFactTable) gotFactElement.getValue(); CubeFactTable ucf = JAXBUtils.cubeFactFromFactTable(gotFact); assertEquals(ucf.weight(), 20.0); assertTrue(ucf.getUpdatePeriods().get("S1").contains(HOURLY)); @@ -2032,6 +2050,7 @@ public class TestMetastoreService extends LensJerseyTest { @Test(dataProvider = "mediaTypeData") public void testCreateFactTable(MediaType mediaType) throws Exception { + final String table = "testCreateFactTable"; final String DB = dbPFX + "testCreateFactTable_DB" + mediaType.getSubtype(); String prevDb = getCurrentDatabase(mediaType); @@ -2049,7 +2068,7 @@ public class TestMetastoreService extends LensJerseyTest { .path("facts").queryParam("sessionid", lensSessionId) .request(mediaType) .post(Entity.entity( - new GenericEntity (cubeObjectFactory.createXFactTable(f)){}, mediaType), + new GenericEntity (cubeObjectFactory.createXFact(f)){}, mediaType), APIResult.class);
[2/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
http://git-wip-us.apache.org/repos/asf/lens/blob/27ad9aa8/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 new file mode 100644 index 000..f87cf44 --- /dev/null +++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java @@ -0,0 +1,166 @@ +/** + * 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. + */ +package org.apache.lens.cube.metadata; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.hadoop.hive.metastore.api.FieldSchema; + +/** + * The Fact table interface + */ +public interface FactTable extends Named { + + /** + * Get map of storage to update period mapping + * + * @return Map of storage to set of update periods + */ + public MapgetUpdatePeriods(); + + /** + * Cube to which this fact belongs to + * + * @return the cube string + */ + public String getCubeName(); + + /** + * The set of Storage names + * + * @return set of strings + */ + public Set getStorages(); + + /** + *The type of the fact + * + * @return table type {@link CubeTableType} + */ + public CubeTableType getTableType(); + + /** + * Config properties + * + * @return map of string, string + */ + public Map getProperties(); + + /** + * Valid columns of the fact + * + * @return list of column names + */ + public Set getValidColumns(); + + /** + * Weight of the fact + * + * @return weight of the fact in double + */ + public double weight(); + + /** + * Set of all the columns names of the fact + * + * @return set of column names + */ + public Set getAllFieldNames(); + + /** + *tag for checking data completeness + * + * @return Tag String + */ + public String getDataCompletenessTag(); + + /** + * List of columns of the fact + * + * @return set of {@link FieldSchema} + */ + public List getColumns(); + + /** + * Is Aggregated Fact + * + * @return true if fact is Aggregated , false otherwise + */ + public boolean isAggregated(); + + /** + * Absolute start time of the fact + * + * @return Absolute Start time of the fact {@link Date} + */ + public Date getAbsoluteStartTime(); + + /** + * Relative start time of the fact + * + * @return Relative Start time of the fact {@link Date} + */ + public Date getRelativeStartTime(); + + /** + * Start time of the fact + * + * @return Start time of the fact {@link Date} + */ + public Date getStartTime(); + + /** + * Absolute end time of the fact + * + * @return Absolute End time of the fact {@link Date} + */ + public Date getAbsoluteEndTime(); + + /** + * Relative End time of the Fact + * + * @return Relative end time of the fact {@link Date} + */ + public Date getRelativeEndTime(); + + /** + * End time of the fact + * + * @return End time of the fact {@link Date} + */ + public Date getEndTime(); + + /** + * Is Virtual Fact + * + * @return true if fact is a virtual fact, false otherwise + */ + public boolean isVirtualFact(); + + /** + * Storage name of the fact + * + * @return Storage name of the fact + */ + public String getSourceFactName(); + +} http://git-wip-us.apache.org/repos/asf/lens/blob/27ad9aa8/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 e1e3d16..7dfb166 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 @@ -718,6 +718,15 @@ public final class JAXBUtils { mapFromXProperties(fact.getProperties()), storageTablePrefixMap); } + public static CubeVirtualFactTable cubeVirtualFactFromFactTable(XVirtualFactTable fact, FactTable sourceFactTable) +
[1/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
Repository: lens Updated Branches: refs/heads/master 34500f1b3 -> 5de45e0f8 http://git-wip-us.apache.org/repos/asf/lens/blob/5de45e0f/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java -- diff --git a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java index 6d32d23..ab24033 100644 --- a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java +++ b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java @@ -1856,6 +1856,24 @@ public class TestMetastoreService extends LensJerseyTest { return f; } + + private XVirtualFactTable createVirtualFactTable(String factName, String sourceFactName) { +return createVirtualFactTable(factName, "testCube", sourceFactName); + } + + private XVirtualFactTable createVirtualFactTable(String factName, final String cubeName, String sourceFactName) { +XVirtualFactTable f = cubeObjectFactory.createXVirtualFactTable(); +f.setProperties(new XProperties()); +f.setName(factName); +f.setWeight(10.0); +f.setCubeName(cubeName); +f.setSourceFactName(sourceFactName); + +Mapproperties = LensUtil.getHashMap("foo1", "bar1"); + f.getProperties().getProperty().addAll(JAXBUtils.xPropertiesFromMap(properties)); +return f; + } + @Test(dataProvider = "mediaTypeData") public void testCreateFactTableWithMultipleUpdatePeriods(MediaType mediaType) throws Exception { @@ -1877,7 +1895,7 @@ public class TestMetastoreService extends LensJerseyTest { .add(createStorageTblWithMultipleTableDescriptors("S1", tables, updatePeriods)); APIResult result = target().path("metastore").path("facts").queryParam("sessionid", lensSessionId) .request(mediaType) -.post(Entity.entity(new GenericEntity (cubeObjectFactory.createXFactTable(f)) { +.post(Entity.entity(new GenericEntity (cubeObjectFactory.createXFact(f)) { }, mediaType), APIResult.class); assertSuccess(result); @@ -1886,10 +1904,10 @@ public class TestMetastoreService extends LensJerseyTest { assertTrue(factNames.getElements().contains(table.toLowerCase())); // Get the created tables - JAXBElement gotFactElement = target().path("metastore/facts").path(table) -.queryParam("sessionid", lensSessionId).request(mediaType).get(new GenericType () { + JAXBElement gotFactElement = target().path("metastore/facts").path(table) +.queryParam("sessionid", lensSessionId).request(mediaType).get(new GenericType () { }); - XFactTable gotFact = gotFactElement.getValue(); + XFactTable gotFact = (XFactTable) gotFactElement.getValue(); assertTrue(gotFact.getName().equalsIgnoreCase(table)); assertEquals(gotFact.getWeight(), 10.0); @@ -1915,15 +1933,15 @@ public class TestMetastoreService extends LensJerseyTest { // Update result = target().path("metastore").path("facts").path(table).queryParam("sessionid", lensSessionId) .request(mediaType) -.put(Entity.entity(new GenericEntity (cubeObjectFactory.createXFactTable(update)) { +.put(Entity.entity(new GenericEntity (cubeObjectFactory.createXFact(update)) { }, mediaType), APIResult.class); assertSuccess(result); // Get the updated table gotFactElement = target().path("metastore/facts").path(table).queryParam("sessionid", lensSessionId) -.request(mediaType).get(new GenericType () { +.request(mediaType).get(new GenericType () { }); - gotFact = gotFactElement.getValue(); + gotFact = (XFactTable) gotFactElement.getValue(); CubeFactTable ucf = JAXBUtils.cubeFactFromFactTable(gotFact); assertEquals(ucf.weight(), 20.0); assertTrue(ucf.getUpdatePeriods().get("S1").contains(HOURLY)); @@ -2032,6 +2050,7 @@ public class TestMetastoreService extends LensJerseyTest { @Test(dataProvider = "mediaTypeData") public void testCreateFactTable(MediaType mediaType) throws Exception { + final String table = "testCreateFactTable"; final String DB = dbPFX + "testCreateFactTable_DB" + mediaType.getSubtype(); String prevDb = getCurrentDatabase(mediaType); @@ -2049,7 +2068,7 @@ public class TestMetastoreService extends LensJerseyTest { .path("facts").queryParam("sessionid", lensSessionId) .request(mediaType) .post(Entity.entity( - new GenericEntity (cubeObjectFactory.createXFactTable(f)){}, mediaType), + new GenericEntity (cubeObjectFactory.createXFact(f)){}, mediaType), APIResult.class); assertSuccess(result); @@
[3/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
LENS-1412 : Add capability to define virtual facts in a cube Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/5de45e0f Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/5de45e0f Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/5de45e0f Branch: refs/heads/master Commit: 5de45e0f8212c2e03eaf9886b720e13868a1c42a Parents: 34500f1 Author: Rajitha RAuthored: Tue Jun 6 13:59:58 2017 +0530 Committer: Amareshwari Sriramadasu Committed: Tue Jun 6 13:59:58 2017 +0530 -- .../lens/api/metastore/SchemaTraverser.java | 1 + lens-api/src/main/resources/cube-0.1.xsd| 176 +++ lens-api/src/main/resources/lens-errors.conf| 6 + .../lens/cli/commands/LensFactCommands.java | 6 +- .../lens/cli/commands/LensSchemaCommands.java | 18 +- .../apache/lens/cli/TestLensFactCommands.java | 132 +- .../apache/lens/cli/TestLensSchemaCommands.java | 2 +- .../schema/cubes/base/virtual-cube.xml | 30 ++ .../resources/schema/facts/virtual_fact.xml | 28 ++ .../java/org/apache/lens/client/LensClient.java | 2 +- .../apache/lens/client/LensMetadataClient.java | 18 +- .../lens/cube/error/LensCubeErrorCode.java | 3 +- .../lens/cube/metadata/AbstractCubeTable.java | 22 +- .../lens/cube/metadata/CubeFactTable.java | 52 ++- .../lens/cube/metadata/CubeMetastoreClient.java | 463 ++- .../cube/metadata/CubeVirtualFactTable.java | 186 .../apache/lens/cube/metadata/FactTable.java| 166 +++ .../apache/lens/cube/metadata/JAXBUtils.java| 24 +- .../lens/cube/metadata/MetastoreConstants.java | 2 + .../lens/cube/metadata/MetastoreUtil.java | 26 +- .../apache/lens/cube/metadata/Segmentation.java | 13 +- .../org/apache/lens/cube/parse/Candidate.java | 8 +- .../lens/cube/parse/CandidateTableResolver.java | 11 +- .../lens/cube/parse/StorageCandidate.java | 55 +-- .../cube/parse/StorageCandidateHQLContext.java | 12 +- .../lens/cube/parse/StorageTableResolver.java | 5 +- .../lens/cube/metadata/CubeFactTableTest.java | 12 +- .../cube/metadata/TestCubeMetastoreClient.java | 123 - .../apache/lens/cube/parse/CubeTestSetup.java | 40 +- .../lens/cube/parse/TestCubeRewriter.java | 16 + .../parse/TestCubeSegmentationRewriter.java | 15 +- .../lens/cube/parse/TestUnionQueries.java | 2 +- .../resources/schema/cubes/base/virtualcube.xml | 36 ++ .../test/resources/schema/facts/virtualfact.xml | 27 ++ lens-driver-es/pom.xml | 3 +- lens-examples/pom.xml | 3 +- .../src/test/resources/yaml/fact1.yaml | 4 +- .../src/test/resources/yaml/fact2.yaml | 4 +- .../src/test/resources/yaml/rawfact.yaml| 4 +- .../yaml/sales-aggr-continuous-fact.yaml| 4 +- .../test/resources/yaml/sales-aggr-fact1.yaml | 4 +- .../test/resources/yaml/sales-aggr-fact2.yaml | 4 +- .../src/test/resources/yaml/sales-raw-fact.yaml | 4 +- .../api/metastore/CubeMetastoreService.java | 8 +- lens-server/pom.xml | 2 +- .../metastore/CubeMetastoreServiceImpl.java | 24 +- .../server/metastore/MetastoreResource.java | 17 +- .../lens/server/common/RestAPITestUtil.java | 7 +- .../server/metastore/TestMetastoreService.java | 274 ++- src/site/apt/user/cli.apt | 3 +- tools/scripts/generate-site-public.sh | 2 +- 51 files changed, 1646 insertions(+), 463 deletions(-) -- http://git-wip-us.apache.org/repos/asf/lens/blob/5de45e0f/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java -- diff --git a/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java b/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java index 9564443..09c848a 100644 --- a/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java +++ b/lens-api/src/main/java/org/apache/lens/api/metastore/SchemaTraverser.java @@ -42,6 +42,7 @@ public class SchemaTraverser implements Runnable { types.put("cubes/derived", XDerivedCube.class); types.put("dimensions", XDimension.class); types.put("facts", XFactTable.class); +types.put("facts/virtual", XVirtualFactTable.class); types.put("dimtables", XDimensionTable.class); types.put("dimensiontables", XDimensionTable.class); types.put("dimensiontables", XDimensionTable.class); http://git-wip-us.apache.org/repos/asf/lens/blob/5de45e0f/lens-api/src/main/resources/cube-0.1.xsd -- diff --git
[2/3] lens git commit: LENS-1412 : Add capability to define virtual facts in a cube
http://git-wip-us.apache.org/repos/asf/lens/blob/5de45e0f/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 new file mode 100644 index 000..f87cf44 --- /dev/null +++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/FactTable.java @@ -0,0 +1,166 @@ +/** + * 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. + */ +package org.apache.lens.cube.metadata; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.hadoop.hive.metastore.api.FieldSchema; + +/** + * The Fact table interface + */ +public interface FactTable extends Named { + + /** + * Get map of storage to update period mapping + * + * @return Map of storage to set of update periods + */ + public MapgetUpdatePeriods(); + + /** + * Cube to which this fact belongs to + * + * @return the cube string + */ + public String getCubeName(); + + /** + * The set of Storage names + * + * @return set of strings + */ + public Set getStorages(); + + /** + *The type of the fact + * + * @return table type {@link CubeTableType} + */ + public CubeTableType getTableType(); + + /** + * Config properties + * + * @return map of string, string + */ + public Map getProperties(); + + /** + * Valid columns of the fact + * + * @return list of column names + */ + public Set getValidColumns(); + + /** + * Weight of the fact + * + * @return weight of the fact in double + */ + public double weight(); + + /** + * Set of all the columns names of the fact + * + * @return set of column names + */ + public Set getAllFieldNames(); + + /** + *tag for checking data completeness + * + * @return Tag String + */ + public String getDataCompletenessTag(); + + /** + * List of columns of the fact + * + * @return set of {@link FieldSchema} + */ + public List getColumns(); + + /** + * Is Aggregated Fact + * + * @return true if fact is Aggregated , false otherwise + */ + public boolean isAggregated(); + + /** + * Absolute start time of the fact + * + * @return Absolute Start time of the fact {@link Date} + */ + public Date getAbsoluteStartTime(); + + /** + * Relative start time of the fact + * + * @return Relative Start time of the fact {@link Date} + */ + public Date getRelativeStartTime(); + + /** + * Start time of the fact + * + * @return Start time of the fact {@link Date} + */ + public Date getStartTime(); + + /** + * Absolute end time of the fact + * + * @return Absolute End time of the fact {@link Date} + */ + public Date getAbsoluteEndTime(); + + /** + * Relative End time of the Fact + * + * @return Relative end time of the fact {@link Date} + */ + public Date getRelativeEndTime(); + + /** + * End time of the fact + * + * @return End time of the fact {@link Date} + */ + public Date getEndTime(); + + /** + * Is Virtual Fact + * + * @return true if fact is a virtual fact, false otherwise + */ + public boolean isVirtualFact(); + + /** + * Storage name of the fact + * + * @return Storage name of the fact + */ + public String getSourceFactName(); + +} http://git-wip-us.apache.org/repos/asf/lens/blob/5de45e0f/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 e1e3d16..7dfb166 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 @@ -718,6 +718,15 @@ public final class JAXBUtils { mapFromXProperties(fact.getProperties()), storageTablePrefixMap); } + public static CubeVirtualFactTable cubeVirtualFactFromFactTable(XVirtualFactTable fact, FactTable sourceFactTable) +