Repository: lens Updated Branches: refs/heads/lens-1381 112af59cc -> 363f132d1
http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDenormalizationResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDenormalizationResolver.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDenormalizationResolver.java index 523a876..7874a66 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDenormalizationResolver.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDenormalizationResolver.java @@ -21,7 +21,7 @@ package org.apache.lens.cube.parse; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; -import static java.util.stream.Collectors.toMap; + import static org.apache.lens.cube.metadata.DateFactory.*; import static org.apache.lens.cube.parse.CandidateTablePruneCause.columnNotFound; import static org.apache.lens.cube.parse.CubeTestSetup.*; @@ -193,21 +193,21 @@ public class TestDenormalizationResolver extends TestQueryRewrite { LensException e = getLensExceptionInRewrite( "select dim2big2, max(msr3)," + " msr2 from testCube" + " where " + TWO_DAYS_RANGE, tconf); NoCandidateFactAvailableException ne = (NoCandidateFactAvailableException) e; - PruneCauses.BriefAndDetailedError error = ne.getJsonMessage(); // Storage update periods are not valid for given time range + PruneCauses.BriefAndDetailedError error = ne.getJsonMessage(); Assert.assertEquals(error.getBrief(), CandidateTablePruneCode.UNSUPPORTED_STORAGE.errorFormat); Map<HashSet<String>, List<CandidateTablePruneCause>> enhanced = error.enhanced(); Map<Set<String>, List<CandidateTablePruneCause>> expected = Maps.newHashMap(); - expected.put(newHashSet("c1_summary1","c1_testfact","c1_testfact2"), + expected.put(newHashSet("c1_summary1", "c1_testfact", "c1_testfact2"), newArrayList(columnNotFound("dim2big2"))); - expected.put(newHashSet("c2_summary2","c2_summary3","c1_testfact2_raw","" - + "c3_testfact2_raw","c1_summary3","c1_summary2"), + expected.put(newHashSet("c2_summary2", "c2_summary3", "c1_testfact2_raw", "" + + "c3_testfact2_raw", "c1_summary3", "c1_summary2"), newArrayList(new CandidateTablePruneCause(CandidateTablePruneCode.INVALID_DENORM_TABLE))); expected.put(newHashSet("c0_testfact_continuous"), newArrayList(columnNotFound( "msr2", "msr3"))); - expected.put(newHashSet("c2_summary2","c2_summary3","c2_summary4","c4_testfact","c2_summary1", - "c3_testfact","c3_testfact2_raw","c4_testfact2","c5_testfact","c99_cheapfact","c2_testfact","c0_cheapfact", - "c2_testfactmonthly","c0_testfact"), + expected.put(newHashSet("c2_summary2", "c2_summary3", "c2_summary4", "c4_testfact", "c2_summary1", + "c3_testfact", "c3_testfact2_raw", "c6_testfact", "c4_testfact2", "c5_testfact", "c99_cheapfact", + "c2_testfact", "c0_cheapfact", "c2_testfactmonthly", "c0_testfact"), newArrayList(new CandidateTablePruneCause(CandidateTablePruneCode.UNSUPPORTED_STORAGE))); Assert.assertEquals(enhanced, expected); http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java index 46ee863..3883bee 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java @@ -21,8 +21,6 @@ package org.apache.lens.cube.parse; import static org.apache.lens.cube.metadata.DateFactory.TWO_DAYS_RANGE; -import java.util.Arrays; - import org.apache.lens.server.api.LensConfConstants; import org.apache.lens.server.api.metrics.LensMetricsRegistry; @@ -59,7 +57,8 @@ public class TestQueryMetrics extends TestQueryRewrite { "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnLifetimeChecker-ITER-10", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-11", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-12", - "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateCoveringSetsResolver-ITER-13", + "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse." + + "CandidateCoveringSetsResolver-ITER-13", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-14", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.MaxCoveringFactResolver-ITER-15", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-16", @@ -68,6 +67,6 @@ public class TestQueryMetrics extends TestQueryRewrite { "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-19", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-20", "lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-21" - )); + )); } } http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java index cd7383b..d4ffefe 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java @@ -105,14 +105,12 @@ public class TestTimeRangeResolver extends TestQueryRewrite { causes = findPruningMessagesForStorage("c1_testfact_deprecated", ctx.getStoragePruningMsgs()); assertEquals(causes.size(), 1); - assertEquals(causes.get(0).getCause(), STORAGE_NOT_AVAILABLE_IN_RANGE); - assertTrue(causes.get(0).getInvalidRanges().containsAll(ctx.getTimeRanges())); + assertEquals(causes.get(0).getCause(), TIME_RANGE_NOT_ANSWERABLE); causes = findPruningMessagesForStorage("c2_testfact_deprecated", ctx.getStoragePruningMsgs()); assertEquals(causes.size(), 1); - assertEquals(causes.get(0).getCause(), STORAGE_NOT_AVAILABLE_IN_RANGE); - assertTrue(causes.get(0).getInvalidRanges().containsAll(ctx.getTimeRanges())); + assertEquals(causes.get(0).getCause(), TIME_RANGE_NOT_ANSWERABLE); } @Test http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java index a6b8f88..a8014bf 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java @@ -79,10 +79,11 @@ public class TestTimeRangeWriterWithQuery extends TestQueryRewrite { return cal.getTime(); } - @Test + @Test(invocationCount = 1) public void testCubeQueryContinuousUpdatePeriod() throws Exception { LensException th = null; try { + conf.set("lens.cube.query.valid.testcube.facttables", "summary3"); rewrite("select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); } catch (LensException e) { th = e; @@ -93,6 +94,7 @@ public class TestTimeRangeWriterWithQuery extends TestQueryRewrite { Assert .assertEquals(th.getErrorCode(), CANNOT_USE_TIMERANGE_WRITER.getLensErrorInfo().getErrorCode()); } + conf.unset("lens.cube.query.valid.testcube.facttables"); // hourly partitions for two days conf.setBoolean(FAIL_QUERY_ON_PARTIAL_DATA, true); DateFormat qFmt = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java index c2d5f7c..9168d10 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java @@ -28,8 +28,11 @@ import static org.apache.lens.cube.parse.TestCubeRewriter.*; import static org.testng.Assert.*; import java.util.*; +import java.util.stream.Collectors; import org.apache.lens.cube.error.LensCubeErrorCode; +import org.apache.lens.cube.error.NoCandidateDimAvailableException; +import org.apache.lens.cube.error.NoCandidateFactAvailableException; import org.apache.lens.server.api.LensServerAPITestUtil; import org.apache.lens.server.api.error.LensException; @@ -458,4 +461,45 @@ public class TestUnionQueries extends TestQueryRewrite { ); compareQueries(hqlQuery, expected); } + + + @Test + public void testSingleFactSingleStorageWithMultipleTableDescriptions() throws Exception { + Configuration conf = LensServerAPITestUtil.getConfigurationWithParams(getConf(), + CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C6", + getValidFactTablesKey("testcube"), "testfact", + FAIL_QUERY_ON_PARTIAL_DATA, false); + + //If not beginning of month. Expecting this to pass at beginning of every month (example April 01 00:00) + if (!THREE_MONTHS_RANGE_UPTO_DAYS.equals(THREE_MONTHS_RANGE_UPTO_MONTH)) { + LensException e = getLensExceptionInRewrite("select count(msr4) from testCube where " + THREE_MONTHS_RANGE_UPTO_DAYS, conf); + assertTrue(e instanceof NoCandidateFactAvailableException); + Set<Map.Entry<StorageCandidate, List<CandidateTablePruneCause>>> causes = ((NoCandidateFactAvailableException) e).getBriefAndDetailedError().entrySet().stream().filter(x -> x.getKey().getName().equalsIgnoreCase("c6_testfact")).collect(Collectors.toSet()); + assertEquals(causes.size(), 1); + List<CandidateTablePruneCause> pruneCauses = causes.iterator().next().getValue(); + assertEquals(pruneCauses.size(), 1); + assertEquals(pruneCauses.get(0).getCause(), CandidateTablePruneCause.CandidateTablePruneCode.STORAGE_NOT_AVAILABLE_IN_RANGE); + } + + String hqlQuery2 = rewrite("select count(msr4) from testCube where " + THREE_MONTHS_RANGE_UPTO_MONTH, conf); + System.out.println(hqlQuery2); + + ArrayList<String> storages = Lists.newArrayList("daily_c6_testfact", "monthly_c6_testfact"); + StoragePartitionProvider provider = new StoragePartitionProvider() { + @Override + public Map<String, String> providePartitionsForStorage(String storage) { + if (storage.contains("daily_c6_testfact")) { + return getWhereForDays(storage, ONE_MONTH_BACK_TRUNCATED, getTruncatedDateWithOffset(MONTHLY, 0)); + } else if (storage.contains("monthly_c6_testfact")) { + return getWhereForMonthly(storage, THREE_MONTHS_BACK_TRUNCATED, ONE_MONTH_BACK_TRUNCATED); + } + return null; + } + }; + String expected = getExpectedUnionQuery(TEST_CUBE_NAME, storages, provider, + "select count(testcube.alias0) AS `count(msr4)`", null, null, + "select count((testcube.msr4)) AS `alias0` from ", null, null + ); + compareQueries(hqlQuery2, expected); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/363f132d/lens-cube/src/test/resources/schema/facts/testfact.xml ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/resources/schema/facts/testfact.xml b/lens-cube/src/test/resources/schema/facts/testfact.xml index a4c2c78..0bd9c5a 100644 --- a/lens-cube/src/test/resources/schema/facts/testfact.xml +++ b/lens-cube/src/test/resources/schema/facts/testfact.xml @@ -188,5 +188,44 @@ <time_part_cols>dt</time_part_cols> </table_desc> </storage_table> + <storage_table> + <storage_name>C6</storage_name> + <update_periods> + <update_period_table_descriptor> + <update_period>DAILY</update_period> + <table_desc external="false"> + <part_cols> + <column name="dt" _type="string" comment="date partition"/> + </part_cols> + <table_parameters> + <property name="cube.storagetable.time.partcols" value="dt"/> + <property name="cube.storagetable.start.times" value="now.month - 2 months"/> + <property name="cube.storagetable.end.times" value="now.day"/> + </table_parameters> + <serde_parameters> + <property name="serialization.format" value="1"/> + </serde_parameters> + <time_part_cols>dt</time_part_cols> + </table_desc> + </update_period_table_descriptor> + <update_period_table_descriptor> + <update_period>MONTHLY</update_period> + <table_desc external="false"> + <part_cols> + <column name="dt" _type="string" comment="date partition"/> + </part_cols> + <table_parameters> + <property name="cube.storagetable.time.partcols" value="dt"/> + <property name="cube.storagetable.start.times" value="now.month - 12 months"/> + <property name="cube.storagetable.end.times" value="now.month - 1 months"/> + </table_parameters> + <serde_parameters> + <property name="serialization.format" value="1"/> + </serde_parameters> + <time_part_cols>dt</time_part_cols> + </table_desc> + </update_period_table_descriptor> + </update_periods> + </storage_table> </storage_tables> </x_fact_table> \ No newline at end of file
