Repository: incubator-lens Updated Branches: refs/heads/master 6f8ad2186 -> dc1fafa91
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java index b1d7a32..e61d807 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java @@ -19,25 +19,36 @@ package org.apache.lens.cube.parse; +import static org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.MISSING_PARTITIONS; import static org.apache.lens.cube.parse.CubeTestSetup.*; +import static org.apache.lens.cube.parse.DateUtil.*; +import static org.apache.lens.cube.parse.TestCubeRewriter.compareQueries; + +import static org.apache.hadoop.hive.ql.parse.HiveParser.KW_AND; import static org.testng.Assert.*; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.lens.cube.metadata.UpdatePeriod; +import org.apache.lens.server.api.error.LensException; + +import org.apache.commons.lang.time.DateUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.ql.ErrorMsg; +import org.apache.hadoop.hive.ql.parse.ASTNode; import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.antlr.runtime.CommonToken; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; -public class TestBaseCubeQueries extends TestQueryRewrite { +import lombok.Getter; +public class TestBaseCubeQueries extends TestQueryRewrite { + @Getter private Configuration conf; private final String cubeName = CubeTestSetup.BASE_CUBE_NAME; @@ -141,19 +152,19 @@ public class TestBaseCubeQueries extends TestQueryRewrite { String expected = getExpectedQuery(cubeName, "select basecube.dim1, SUM(basecube.msr1) FROM ", null, " group by basecube.dim1", getWhereForHourly2days(cubeName, "C1_testfact1_raw_base")); - TestCubeRewriter.compareQueries(expected, hqlQuery); + compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, SUM(msr1), msr2 from basecube" + " where " + TWO_DAYS_RANGE, conf); expected = getExpectedQuery(cubeName, "select basecube.dim1, SUM(basecube.msr1), basecube.msr2 FROM ", null, " group by basecube.dim1", getWhereForHourly2days(cubeName, "C1_testfact1_raw_base")); - TestCubeRewriter.compareQueries(expected, hqlQuery); + compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, roundedmsr2 from basecube" + " where " + TWO_DAYS_RANGE, conf); expected = getExpectedQuery(cubeName, "select basecube.dim1, round(sum(basecube.msr2)/1000) FROM ", null, " group by basecube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_testFact1_BASE")); - TestCubeRewriter.compareQueries(expected, hqlQuery); + compareQueries(expected, hqlQuery); hqlQuery = rewrite("select booleancut, msr2 from basecube" + " where " + TWO_DAYS_RANGE + " and substrexpr != 'XYZ'", conf); @@ -162,13 +173,13 @@ public class TestBaseCubeQueries extends TestQueryRewrite { + " sum(basecube.msr2) FROM ", null, " and substr(basecube.dim1, 3) != 'XYZ' " + "group by basecube.dim1 != 'x' AND basecube.dim2 != 10", getWhereForHourly2days(cubeName, "C1_testfact1_raw_base")); - TestCubeRewriter.compareQueries(expected, hqlQuery); + compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, msr12 from basecube" + " where " + TWO_DAYS_RANGE, conf); expected = getExpectedQuery(cubeName, "select basecube.dim1, sum(basecube.msr12) FROM ", null, " group by basecube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_testFact2_BASE")); - TestCubeRewriter.compareQueries(expected, hqlQuery); + compareQueries(expected, hqlQuery); } @Test @@ -388,4 +399,74 @@ public class TestBaseCubeQueries extends TestQueryRewrite { .startsWith("select coalesce(mq1.expr1, mq2.expr1) expr1, mq1.msr2 msr2, mq2.expr3 expr3 from ")); assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2 on mq1.expr1 <=> mq2.expr1")); } + + @Test + public void testFallbackPartCol() throws Exception { + Configuration conf = getConfWithStorages("C1,C2,C3,C4"); + conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, false); + String hql, expected; + // Prefer fact that has a storage with part col on queried time dim + hql = rewrite("cube select msr12 from basecube where " + TWO_DAYS_RANGE, conf); + expected = getExpectedQuery(BASE_CUBE_NAME, "select sum(basecube.msr12) FROM ", null, null, + getWhereForDailyAndHourly2days(BASE_CUBE_NAME, "c1_testfact2_base")); + compareQueries(hql, expected); + + // If going to fallback timedim, and partitions are missing, then error should be missing partition on that + conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C4"); + conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, true); + SemanticException exc = + getSemanticExceptionInRewrite("cube select msr12 from basecube where " + TWO_DAYS_RANGE, conf); + PruneCauses.BriefAndDetailedError pruneCause = extractPruneCause(exc); + assertTrue(pruneCause.getBrief().contains("Missing partitions")); + assertEquals(pruneCause.getDetails().get("testfact2_base").iterator().next().getCause(), MISSING_PARTITIONS); + assertEquals(pruneCause.getDetails().get("testfact2_base").iterator().next().getMissingPartitions().size(), 1); + assertEquals( + pruneCause.getDetails().get("testfact2_base").iterator().next().getMissingPartitions().iterator().next(), + "ttd:[" + + UpdatePeriod.SECONDLY.format().format(DateUtils.addDays(DateUtils.truncate(TWODAYS_BACK, Calendar.HOUR), -10)) + + ", " + UpdatePeriod.SECONDLY.format().format(DateUtils.addDays(DateUtils.truncate(NOW, Calendar.HOUR), 10)) + + ")"); + + // fail on partial false. Should go to fallback column. Also testing transitivity of timedim relations + conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, false); + hql = rewrite("cube select msr12 from basecube where " + TWO_DAYS_RANGE, conf); + String dTimeWhereClause = "basecube.d_time >= '" + HIVE_QUERY_DATE_PARSER.get().format(ABSDATE_PARSER.get().parse( + getAbsDateFormatString(getDateUptoHours( + TWODAYS_BACK)))) + "' and " + + "basecube.d_time < '" + HIVE_QUERY_DATE_PARSER.get().format(ABSDATE_PARSER.get().parse( + getAbsDateFormatString(getDateUptoHours(NOW)))); + String pTimeWhereClause = "basecube.processing_time >= '" + + HIVE_QUERY_DATE_PARSER.get().format(ABSDATE_PARSER.get().parse( + getAbsDateFormatString(getDateUptoHours( + DateUtils.addDays(TWODAYS_BACK, -5))))) + "' and " + + "basecube.processing_time < '" + HIVE_QUERY_DATE_PARSER.get().format(ABSDATE_PARSER.get().parse( + getAbsDateFormatString(getDateUptoHours(DateUtils.addDays(NOW, 5))))); + expected = getExpectedQuery(BASE_CUBE_NAME, "select sum(basecube.msr12) FROM ", null, + " and " + dTimeWhereClause + " and " + pTimeWhereClause, + getWhereForDailyAndHourly2daysWithTimeDim(BASE_CUBE_NAME, "ttd", + DateUtils.addDays(TWODAYS_BACK, -10), DateUtils.addDays(NOW, 10), "c4_testfact2_base")); + compareQueries(hql, expected); + + // Multiple timedims in single query. test that + CubeQueryContext ctx = + rewriteCtx("cube select msr12 from basecube where " + TWO_DAYS_RANGE + " and " + TWO_DAYS_RANGE_TTD, conf); + assertEquals(ctx.getCandidateFactSets().size(), 1); + assertEquals(ctx.getCandidateFactSets().iterator().next().size(), 1); + CandidateFact cfact = ctx.getCandidateFactSets().iterator().next().iterator().next(); + assertEquals(cfact.getRangeToWhereClause().size(), 2); + for(Map.Entry<TimeRange, String> entry: cfact.getRangeToWhereClause().entrySet()) { + if (entry.getKey().getPartitionColumn().equals("dt")) { + ASTNode parsed = HQLParser.parseExpr(entry.getValue()); + assertEquals(parsed.getToken().getType(), KW_AND); + assertTrue(entry.getValue().substring(((CommonToken) parsed.getToken()).getStopIndex() + 1).toLowerCase() + .contains(dTimeWhereClause)); + assertFalse(entry.getValue().substring(0, ((CommonToken) parsed.getToken()).getStartIndex()).toLowerCase() + .contains("and")); + } else if (entry.getKey().getPartitionColumn().equals("ttd")) { + assertFalse(entry.getValue().toLowerCase().contains("and")); + } else { + throw new LensException("Unexpected"); + } + } + } } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java index c915353..44826bd 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java @@ -19,12 +19,14 @@ package org.apache.lens.cube.parse; +import static org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.*; import static org.apache.lens.cube.parse.CubeTestSetup.*; +import static org.testng.Assert.*; + import java.util.*; import org.apache.lens.cube.metadata.*; -import org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode; import org.apache.lens.cube.parse.CandidateTablePruneCause.SkipStorageCause; import org.apache.lens.cube.parse.CandidateTablePruneCause.SkipStorageCode; import org.apache.lens.server.api.error.LensException; @@ -39,67 +41,59 @@ import org.apache.hadoop.hive.ql.parse.ParseException; import org.apache.hadoop.hive.ql.parse.SemanticException; import org.apache.hadoop.hive.ql.processors.CommandProcessorResponse; -import org.testng.Assert; +import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestCubeRewriter extends TestQueryRewrite { private final String cubeName = CubeTestSetup.TEST_CUBE_NAME; - public Configuration getConf() { - Configuration conf = new Configuration(); + private Configuration conf; + + @BeforeTest + public void setupDriver() throws Exception { + conf = new Configuration(); conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2"); conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, true); conf.setBoolean(CubeQueryConfUtil.ENABLE_SELECT_TO_GROUPBY, true); conf.setBoolean(CubeQueryConfUtil.ENABLE_GROUP_BY_TO_SELECT, true); conf.setBoolean(CubeQueryConfUtil.DISABLE_AGGREGATE_RESOLVER, false); - return conf; - } - public Configuration getC1Conf() { - Configuration conf = getConf(); - conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1"); - return conf; - } - public Configuration getC2Conf() { - Configuration conf = getConf(); - conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2"); - return conf; } - public Configuration getC3Conf() { - Configuration conf = getConf(); - conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C3"); - return conf; + + @Override + public Configuration getConf() { + return new Configuration(conf); } @Test public void testQueryWithNow() throws Exception { SemanticException e = getSemanticExceptionInRewrite( - "select SUM(msr2) from testCube where" + " time_range_in(dt, 'NOW - 2DAYS', 'NOW')", getConf()); - Assert.assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); + "select SUM(msr2) from testCube where" + " time_range_in(d_time, 'NOW - 2DAYS', 'NOW')", getConf()); + assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); } @Test public void testCandidateTables() throws Exception { SemanticException th = getSemanticExceptionInRewrite( "select dim12, SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); // this query should through exception because invalidMsr is invalid th = getSemanticExceptionInRewrite( "SELECT cityid, invalidMsr from testCube " + " where " + TWO_DAYS_RANGE, getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); } @Test public void testCubeQuery() throws Exception { CubeQueryContext rewrittenQuery = - rewriteCtx("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getC2Conf()); + rewriteCtx("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(expected, rewrittenQuery.toHQL()); System.out.println("Non existing parts:" + rewrittenQuery.getNonExistingParts()); - Assert.assertNotNull(rewrittenQuery.getNonExistingParts()); + assertNotNull(rewrittenQuery.getNonExistingParts()); } @Test @@ -114,24 +108,25 @@ public class TestCubeRewriter extends TestQueryRewrite { int lessDataCauses = 0; for (Map.Entry<CubeFactTable, List<CandidateTablePruneCause>> entry : pruneCause.entrySet()) { for (CandidateTablePruneCause cause : entry.getValue()) { - if (cause.getCause().equals(CandidateTablePruneCode.LESS_DATA)) { + if (cause.getCause().equals(LESS_DATA)) { lessDataCauses++; } } } - Assert.assertTrue(lessDataCauses > 0); + assertTrue(lessDataCauses > 0); } @Test public void testLightestFactFirst() throws Exception { // testFact is lighter than testFact2. - String hqlQuery = rewrite("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getC2Conf()); + String hqlQuery = rewrite("cube select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConfWithStorages( + "C2")); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(expected, hqlQuery); - Configuration conf = getC1Conf(); + Configuration conf = getConfWithStorages("C1"); conf.setBoolean(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, true); hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf); expected = @@ -143,32 +138,32 @@ public class TestCubeRewriter extends TestQueryRewrite { SemanticException th = getSemanticExceptionInRewrite( "select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, conf); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); PruneCauses.BriefAndDetailedError pruneCauses = extractPruneCause(th); - int endIndex = CandidateTablePruneCode.MISSING_PARTITIONS.errorFormat.length() - 3; - Assert.assertEquals( + int endIndex = MISSING_PARTITIONS.errorFormat.length() - 3; + assertEquals( pruneCauses.getBrief().substring(0, endIndex), - CandidateTablePruneCode.MISSING_PARTITIONS.errorFormat.substring(0, endIndex) + MISSING_PARTITIONS.errorFormat.substring(0, endIndex) ); - Assert.assertEquals(pruneCauses.getDetails().get("testfact").size(), 1); - Assert.assertEquals(pruneCauses.getDetails().get("testfact").iterator().next().getCause(), - CandidateTablePruneCode.MISSING_PARTITIONS); + assertEquals(pruneCauses.getDetails().get("testfact").size(), 1); + assertEquals(pruneCauses.getDetails().get("testfact").iterator().next().getCause(), + MISSING_PARTITIONS); } @Test public void testDerivedCube() throws SemanticException, ParseException, LensException { CubeQueryContext rewrittenQuery = - rewriteCtx("cube select" + " SUM(msr2) from derivedCube where " + TWO_DAYS_RANGE, getC2Conf()); + rewriteCtx("cube select" + " SUM(msr2) from derivedCube where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); String expected = getExpectedQuery(CubeTestSetup.DERIVED_CUBE_NAME, "select sum(derivedCube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days(CubeTestSetup.DERIVED_CUBE_NAME, "C2_testfact")); compareQueries(expected, rewrittenQuery.toHQL()); System.out.println("Non existing parts:" + rewrittenQuery.getNonExistingParts()); - Assert.assertNotNull(rewrittenQuery.getNonExistingParts()); + assertNotNull(rewrittenQuery.getNonExistingParts()); SemanticException th = getSemanticExceptionInRewrite( "select SUM(msr4) from derivedCube" + " where " + TWO_DAYS_RANGE, getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.COLUMN_NOT_FOUND.getErrorCode()); // test join Configuration conf = getConf(); @@ -204,9 +199,9 @@ public class TestCubeRewriter extends TestQueryRewrite { conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2"); String hqlQuery = rewrite("insert overwrite directory" + " '/tmp/test' select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); + Map<String, String> wh = getWhereForDailyAndHourly2days(cubeName, "C2_testfact"); String expected = "insert overwrite directory '/tmp/test' " - + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, - getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); + + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, wh); compareQueries(expected, hqlQuery); hqlQuery = rewrite("insert overwrite directory" + " '/tmp/test' cube select SUM(msr2) from testCube where " @@ -215,9 +210,9 @@ public class TestCubeRewriter extends TestQueryRewrite { hqlQuery = rewrite("insert overwrite local directory" + " '/tmp/test' select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); + wh = getWhereForDailyAndHourly2days(cubeName, "C2_testfact"); expected = "insert overwrite local directory '/tmp/test' " - + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, - getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); + + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, wh); compareQueries(expected, hqlQuery); hqlQuery = rewrite("insert overwrite local directory" + " '/tmp/test' cube select SUM(msr2) from testCube where " @@ -226,9 +221,9 @@ public class TestCubeRewriter extends TestQueryRewrite { hqlQuery = rewrite("insert overwrite table temp" + " select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); + wh = getWhereForDailyAndHourly2days(cubeName, "C2_testfact"); expected = "insert overwrite table temp " - + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, - getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); + + getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, wh); compareQueries(expected, hqlQuery); hqlQuery = rewrite("insert overwrite table temp" + " cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, @@ -240,9 +235,9 @@ public class TestCubeRewriter extends TestQueryRewrite { if (expected == null && actual == null) { return; } else if (expected == null) { - Assert.fail(); + fail(); } else if (actual == null) { - Assert.fail("Rewritten query is null"); + fail("Rewritten query is null"); } String expectedTrimmed = expected.replaceAll("\\W", ""); String actualTrimmed = actual.replaceAll("\\W", ""); @@ -257,16 +252,16 @@ public class TestCubeRewriter extends TestQueryRewrite { System.err.println("__FAILED__ " + method + "\n\tExpected: " + expected + "\n\t---------\n\tActual: " + actual); } - Assert.assertTrue(expectedTrimmed.equalsIgnoreCase(actualTrimmed)); + assertTrue(expectedTrimmed.equalsIgnoreCase(actualTrimmed)); } static void compareContains(String expected, String actual) { if (expected == null && actual == null) { return; } else if (expected == null) { - Assert.fail(); + fail(); } else if (actual == null) { - Assert.fail("Rewritten query is null"); + fail("Rewritten query is null"); } String expectedTrimmed = expected.replaceAll("\\W", ""); String actualTrimmed = actual.replaceAll("\\W", ""); @@ -281,13 +276,13 @@ public class TestCubeRewriter extends TestQueryRewrite { System.err.println("__FAILED__ " + method + "\n\tExpected: " + expected + "\n\t---------\n\tActual: " + actual); } - Assert.assertTrue(actualTrimmed.toLowerCase().contains(expectedTrimmed.toLowerCase())); + assertTrue(actualTrimmed.toLowerCase().contains(expectedTrimmed.toLowerCase())); } @Test public void testCubeWhereQuery() throws Exception { String hqlQuery, expected; - hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf()); + hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); @@ -481,7 +476,8 @@ public class TestCubeRewriter extends TestQueryRewrite { rewrite("select SUM(msr2) from testCube" + " join citydim on testCube.cityid = citydim.id" + " where " + TWO_DAYS_RANGE, conf); List<String> joinWhereConds = new ArrayList<String>(); -// joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest())); + // joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest + // ())); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2)" + " FROM ", " INNER JOIN " + getDbName() + "c2_citytable citydim ON" + " testCube.cityid = citydim.id", null, null, joinWhereConds, @@ -495,7 +491,7 @@ public class TestCubeRewriter extends TestQueryRewrite { hqlQuery = rewrite("select SUM(msr2) from testCube" + " join citydim on cityid = id" + " where " + TWO_DAYS_RANGE, - getC2Conf()); + getConfWithStorages("C2")); compareQueries(expected, hqlQuery); // q2 @@ -556,7 +552,7 @@ public class TestCubeRewriter extends TestQueryRewrite { SemanticException th = getSemanticExceptionInRewrite( "select name, SUM(msr2) from testCube" + " join citydim" + " where " + TWO_DAYS_RANGE + " group by name", getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_JOIN_CONDITION_AVAIABLE.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_JOIN_CONDITION_AVAIABLE.getErrorCode()); } @Test @@ -609,7 +605,8 @@ public class TestCubeRewriter extends TestQueryRewrite { rewrite("select name, SUM(msr2) from" + " testCube join citydim on testCube.cityid = citydim.id where " + TWO_DAYS_RANGE, conf); List<String> joinWhereConds = new ArrayList<String>(); -// joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest())); + // joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest + // ())); String expected = getExpectedQuery(cubeName, "select citydim.name," + " sum(testcube.msr2) FROM ", "INNER JOIN " + getDbName() + "c2_citytable citydim ON" + " testCube.cityid = citydim.id", null, " group by citydim.name ", @@ -829,9 +826,9 @@ public class TestCubeRewriter extends TestQueryRewrite { + "(( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . dt ) = '" + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ))) GROUP BY ( citydim . name )"; - String actualRewrittenQuery = rewrite(inputQuery, getC2Conf()); + String actualRewrittenQuery = rewrite(inputQuery, getConfWithStorages("C2")); - Assert.assertEquals(actualRewrittenQuery, expectedRewrittenQuery); + assertEquals(actualRewrittenQuery, expectedRewrittenQuery); } @Test @@ -846,38 +843,41 @@ public class TestCubeRewriter extends TestQueryRewrite { + "(( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . dt ) = '" + CubeTestSetup.getDateUptoHours(LAST_HOUR) + "' ))) GROUP BY ( citydim . name )"; - String actualRewrittenQuery = rewrite(inputQuery, getC2Conf()); + String actualRewrittenQuery = rewrite(inputQuery, getConfWithStorages("C2")); - Assert.assertEquals(actualRewrittenQuery, expectedRewrittenQuery); + assertEquals(actualRewrittenQuery, expectedRewrittenQuery); } @Test public void testCubeQueryWithAilas() throws Exception { - String hqlQuery = rewrite("select SUM(msr2) m2 from" + " testCube where " + TWO_DAYS_RANGE, getC2Conf()); + String hqlQuery = rewrite("select SUM(msr2) m2 from" + " testCube where " + TWO_DAYS_RANGE, getConfWithStorages( + "C2")); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2)" + " m2 FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(expected, hqlQuery); - hqlQuery = rewrite("select SUM(msr2) from testCube mycube" + " where " + TWO_DAYS_RANGE, getC2Conf()); + hqlQuery = rewrite("select SUM(msr2) from testCube mycube" + " where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); expected = getExpectedQuery("mycube", "select sum(mycube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days("mycube", "C2_testfact")); compareQueries(expected, hqlQuery); - hqlQuery = rewrite("select SUM(testCube.msr2) from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf()); + hqlQuery = + rewrite("select SUM(testCube.msr2) from testCube" + " where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(expected, hqlQuery); - hqlQuery = rewrite("select mycube.msr2 m2 from testCube" + " mycube where " + TWO_DAYS_RANGE, getC2Conf()); + hqlQuery = rewrite("select mycube.msr2 m2 from testCube" + " mycube where " + TWO_DAYS_RANGE, getConfWithStorages( + "C2")); expected = getExpectedQuery("mycube", "select sum(mycube.msr2) m2 FROM ", null, null, getWhereForDailyAndHourly2days("mycube", "C2_testfact")); compareQueries(expected, hqlQuery); - hqlQuery = rewrite("select testCube.msr2 m2 from testCube" + " where " + TWO_DAYS_RANGE, getC2Conf()); + hqlQuery = rewrite("select testCube.msr2 m2 from testCube" + " where " + TWO_DAYS_RANGE, getConfWithStorages("C2")); expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) m2 FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); @@ -886,7 +886,8 @@ public class TestCubeRewriter extends TestQueryRewrite { @Test public void testCubeWhereQueryForMonth() throws Exception { - String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, getC2Conf()); + String hqlQuery = + rewrite("select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, getConfWithStorages("C2")); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, getWhereForMonthlyDailyAndHourly2months("C2_testfact")); @@ -900,31 +901,27 @@ public class TestCubeRewriter extends TestQueryRewrite { SemanticException e = getSemanticExceptionInRewrite( "select SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_HOURS, conf); - Assert.assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); + assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE.getErrorCode()); PruneCauses.BriefAndDetailedError pruneCauses = extractPruneCause(e); - Assert.assertEquals( - pruneCauses.getBrief().substring(0, CandidateTablePruneCode.MISSING_PARTITIONS.errorFormat.length() - 3), - CandidateTablePruneCode.MISSING_PARTITIONS.errorFormat.substring(0, - CandidateTablePruneCode.MISSING_PARTITIONS.errorFormat.length() - 3)); - - Assert.assertEquals(pruneCauses.getDetails().get("testfact").iterator().next().getCause(), - CandidateTablePruneCode.MISSING_PARTITIONS); - Assert.assertEquals(pruneCauses.getDetails().get("testfactmonthly").iterator().next().getCause(), - CandidateTablePruneCode.NO_FACT_UPDATE_PERIODS_FOR_GIVEN_RANGE); - Assert.assertEquals(pruneCauses.getDetails().get("testfact2").iterator().next().getCause(), - CandidateTablePruneCode.MISSING_PARTITIONS); - Assert.assertEquals(pruneCauses.getDetails().get("testfact2_raw").iterator().next().getCause(), - CandidateTablePruneCode.MISSING_PARTITIONS); - Assert.assertEquals(pruneCauses.getDetails().get("cheapfact").iterator().next().getCause(), - CandidateTablePruneCode.NO_CANDIDATE_STORAGES); - Assert.assertEquals(pruneCauses.getDetails().get("summary1,summary2,summary3").iterator().next().getCause(), - CandidateTablePruneCode.MISSING_PARTITIONS); - Assert.assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() - .getCause(), CandidateTablePruneCode.NO_CANDIDATE_STORAGES); - Assert.assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() + assertEquals( + pruneCauses.getBrief().substring(0, MISSING_PARTITIONS.errorFormat.length() - 3), + MISSING_PARTITIONS.errorFormat.substring(0, + MISSING_PARTITIONS.errorFormat.length() - 3)); + + assertEquals(pruneCauses.getDetails().get("summary1,summary2,testfact2_raw,summary3,testfact").iterator() + .next().getCause(), MISSING_PARTITIONS); + assertEquals(pruneCauses.getDetails().get("testfactmonthly").iterator().next().getCause(), + NO_FACT_UPDATE_PERIODS_FOR_GIVEN_RANGE); + assertEquals(pruneCauses.getDetails().get("testfact2").iterator().next().getCause(), + MISSING_PARTITIONS); + assertEquals(pruneCauses.getDetails().get("cheapfact").iterator().next().getCause(), + NO_CANDIDATE_STORAGES); + assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() + .getCause(), NO_CANDIDATE_STORAGES); + assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() .getStorageCauses().values().iterator().next().getCause(), SkipStorageCode.PART_COL_DOES_NOT_EXIST); - Assert.assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() + assertEquals(pruneCauses.getDetails().get("summary4").iterator().next() .getStorageCauses().values().iterator().next().getNonExistantPartCols(), Arrays.asList("dt")); } @@ -932,7 +929,7 @@ public class TestCubeRewriter extends TestQueryRewrite { public void testCubeWhereQueryForMonthUptoMonths() throws Exception { // this should consider only two month partitions. String hqlQuery = rewrite("select cityid, SUM(msr2) from testCube" + " where " + TWO_MONTHS_RANGE_UPTO_MONTH, - getC2Conf()); + getConfWithStorages("C2")); String expected = getExpectedQuery(cubeName, "select testcube.cityid," + " sum(testcube.msr2) FROM ", null, "group by testcube.cityid", getWhereForMonthly2months("c2_testfact")); @@ -956,9 +953,9 @@ public class TestCubeRewriter extends TestQueryRewrite { // state table is present on c1 with partition dumps and partitions added SemanticException e = getSemanticExceptionInRewrite("select name, capital from statedim ", conf); - Assert.assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_DIM_AVAILABLE.getErrorCode()); - Assert.assertEquals(extractPruneCause(e), new PruneCauses.BriefAndDetailedError( - CandidateTablePruneCode.NO_CANDIDATE_STORAGES.errorFormat, + assertEquals(e.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.NO_CANDIDATE_DIM_AVAILABLE.getErrorCode()); + assertEquals(extractPruneCause(e), new PruneCauses.BriefAndDetailedError( + NO_CANDIDATE_STORAGES.errorFormat, new HashMap<String, List<CandidateTablePruneCause>>() { { put("statetable", Arrays.asList(CandidateTablePruneCause.noCandidateStorages( @@ -986,7 +983,7 @@ public class TestCubeRewriter extends TestQueryRewrite { expected = getExpectedQuery("statedim", "select statedim.name," + " statedim.capital from ", null, "c1_statetable", true); compareQueries(expected, rewrittenQuery.toHQL()); - Assert.assertNotNull(rewrittenQuery.getNonExistingParts()); + assertNotNull(rewrittenQuery.getNonExistingParts()); // run a query with time range function hqlQuery = rewrite("select name, stateid from citydim where " + TWO_DAYS_RANGE, conf); @@ -1097,13 +1094,13 @@ public class TestCubeRewriter extends TestQueryRewrite { + TWO_DAYS_RANGE; SemanticException th = getSemanticExceptionInRewrite(query, getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.AMBIGOUS_CUBE_COLUMN.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.AMBIGOUS_CUBE_COLUMN.getErrorCode()); String q2 = "SELECT ambigdim2 from citydim join" + " statedim on citydim.stateid = statedim.id join countrydim on" + " statedim.countryid = countrydim.id"; th = getSemanticExceptionInRewrite(q2, getConf()); - Assert.assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.AMBIGOUS_DIM_COLUMN.getErrorCode()); + assertEquals(th.getCanonicalErrorMsg().getErrorCode(), ErrorMsg.AMBIGOUS_DIM_COLUMN.getErrorCode()); } @Test @@ -1137,14 +1134,14 @@ public class TestCubeRewriter extends TestQueryRewrite { @Test public void testFactsWithInvalidColumns() throws Exception { String hqlQuery = rewrite("select dim1, max(msr3)," + " msr2 from testCube" + " where " + TWO_DAYS_RANGE, - getC1Conf()); + getConfWithStorages("C1")); String expected = getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null, " group by testcube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_summary1")); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, COUNT(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE, - getC1Conf()); + getConfWithStorages("C1")); expected = getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, count(testcube.msr4)," + " sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2", @@ -1152,7 +1149,7 @@ public class TestCubeRewriter extends TestQueryRewrite { compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, cityid, msr4," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE, - getC1Conf()); + getConfWithStorages("C1")); expected = getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, testcube.cityid," + " count(testcube.msr4), sum(testcube.msr2), max(testcube.msr3) FROM ", null, @@ -1172,7 +1169,7 @@ public class TestCubeRewriter extends TestQueryRewrite { String expected = getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null, " group by testcube.dim1", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary1"), - getNotLatestConditions(cubeName, "it", "C2_summary1")); + null); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, COUNT(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + twoDaysITRange, @@ -1181,7 +1178,7 @@ public class TestCubeRewriter extends TestQueryRewrite { getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, count(testcube.msr4)," + " sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary2"), - getNotLatestConditions(cubeName, "it", "C2_summary2")); + null); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, cityid, count(msr4)," + " SUM(msr2), msr3 from testCube" + " where " @@ -1191,7 +1188,7 @@ public class TestCubeRewriter extends TestQueryRewrite { + " count(testcube.msr4), sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2, testcube.cityid", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary3"), - getNotLatestConditions(cubeName, "it", "C2_summary3")); + null); compareQueries(expected, hqlQuery); } @@ -1209,7 +1206,7 @@ public class TestCubeRewriter extends TestQueryRewrite { String expected = getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null, "or (( testcube.it ) == 'default')) and ((testcube.dim1) > 1000)" + " group by testcube.dim1", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary1"), - getNotLatestConditions(cubeName, "it", "C2_summary1")); + null); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " OR (" @@ -1218,8 +1215,7 @@ public class TestCubeRewriter extends TestQueryRewrite { String expecteddtRangeWhere1 = getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", TWODAYS_BACK, NOW) + " OR (" - + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", CubeTestSetup.BEFORE_4_DAYS_START, - CubeTestSetup.BEFORE_4_DAYS_END) + ")"; + + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", BEFORE_4_DAYS_START, BEFORE_4_DAYS_END) + ")"; expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, " AND testcube.dt='default'", expecteddtRangeWhere1, "c2_testfact"); @@ -1229,8 +1225,7 @@ public class TestCubeRewriter extends TestQueryRewrite { "(" + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", TWODAYS_BACK, NOW) + " AND testcube.dt='dt1') OR " - + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", CubeTestSetup.BEFORE_4_DAYS_START, - CubeTestSetup.BEFORE_4_DAYS_END); + + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", BEFORE_4_DAYS_START, BEFORE_4_DAYS_END); hqlQuery = rewrite("select SUM(msr2) from testCube" + " where (" + TWO_DAYS_RANGE + " AND dt='dt1') OR (" + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS + " AND dt='default')", getConf()); @@ -1269,7 +1264,7 @@ public class TestCubeRewriter extends TestQueryRewrite { String expected = getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null, " GROUP BY ( testcube . dim1 )", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary1"), - getNotLatestConditions(cubeName, "it", "C2_summary1")); + null); // TODO compare queries // compareQueries(expected, hqlQuery); hqlQuery = @@ -1305,26 +1300,25 @@ public class TestCubeRewriter extends TestQueryRewrite { public void testCubeQueryWithMultipleRanges() throws Exception { String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + TWO_DAYS_RANGE + " OR " - + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC2Conf()); + + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConfWithStorages("C2")); String expectedRangeWhere = getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", TWODAYS_BACK, NOW) + " OR " - + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", CubeTestSetup.BEFORE_4_DAYS_START, - CubeTestSetup.BEFORE_4_DAYS_END); + + getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "dt", BEFORE_4_DAYS_START, BEFORE_4_DAYS_END); String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null, expectedRangeWhere, "c2_testfact"); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, max(msr3)," + " msr2 from testCube" + " where " + TWO_DAYS_RANGE + " OR " - + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf()); + + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConfWithStorages("C1")); expected = getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null, " group by testcube.dim1", expectedRangeWhere, "C1_summary1"); compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, COUNT(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE - + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf()); + + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConfWithStorages("C1")); expected = getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, count(testcube.msr4)," + " sum(testcube.msr2), max(testcube.msr3) FROM ", null, " group by testcube.dim1, testcube.dim2", @@ -1332,7 +1326,7 @@ public class TestCubeRewriter extends TestQueryRewrite { compareQueries(expected, hqlQuery); hqlQuery = rewrite("select dim1, dim2, cityid, count(msr4)," + " SUM(msr2), msr3 from testCube" + " where " + TWO_DAYS_RANGE - + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getC1Conf()); + + " OR " + CubeTestSetup.TWO_DAYS_RANGE_BEFORE_4_DAYS, getConfWithStorages("C1")); expected = getExpectedQuery(cubeName, "select testcube.dim1, testcube,dim2, testcube.cityid," + " count(testcube.msr4), sum(testcube.msr2), max(testcube.msr3) FROM ", null, @@ -1365,7 +1359,7 @@ public class TestCubeRewriter extends TestQueryRewrite { "SELECT SUM(msr2) from testCube left outer join citydim c1 on testCube.cityid = c1.id" + " left outer join statedim s1 on c1.stateid = s1.id" + " left outer join citydim c2 on s1.countryid = c2.id where " + TWO_DAYS_RANGE; - Configuration conf = getC1Conf(); + Configuration conf = getConfWithStorages("C1"); conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, true); String hqlQuery = rewrite(cubeQl, conf); String db = getDbName(); @@ -1391,15 +1385,15 @@ public class TestCubeRewriter extends TestQueryRewrite { Cube cube = (Cube) client.getCube(cubeName); ReferencedDimAtrribute col = (ReferencedDimAtrribute) cube.getColumnByName("cdim2"); - Assert.assertNotNull(col); + assertNotNull(col); final String query = "SELECT cycledim1.name, msr2 FROM testCube where " + TWO_DAYS_RANGE; try { CubeQueryContext context = rewriteCtx(query, testConf); System.out.println("TestJoinPathTimeRange: " + context.toHQL()); - Assert.fail("Expected query to fail because of invalid column life"); + fail("Expected query to fail because of invalid column life"); } catch (SemanticException exc) { - Assert.assertEquals(exc.getCanonicalErrorMsg(), ErrorMsg.NO_JOIN_PATH); + assertEquals(exc.getCanonicalErrorMsg(), ErrorMsg.NO_JOIN_PATH); } finally { // Add old column back cube.alterDimension(col); @@ -1417,7 +1411,7 @@ public class TestCubeRewriter extends TestQueryRewrite { cube.alterDimension(newDim2); client.alterCube(cubeName, cube); String hql = rewrite(query, testConf); - Assert.assertNotNull(hql); + assertNotNull(hql); } @Test @@ -1425,13 +1419,13 @@ public class TestCubeRewriter extends TestQueryRewrite { String query = "SELECT sum(msr2) as `a measure` from testCube where " + TWO_DAYS_RANGE; try { String hql = rewrite(query, getConf()); - Assert.assertNotNull(hql); + assertNotNull(hql); // test that quotes are preserved - Assert.assertTrue(hql.contains("`a measure`")); + assertTrue(hql.contains("`a measure`")); System.out.println("@@ hql: " + hql); } catch (NullPointerException npe) { npe.printStackTrace(); - Assert.fail("Not expecting null pointer exception"); + fail("Not expecting null pointer exception"); } } @@ -1453,15 +1447,15 @@ public class TestCubeRewriter extends TestQueryRewrite { CubeQueryContext context = rewriter.rewrite(query); String hql = context.toHQL(); System.out.println("@@" + hql); - Assert.assertTrue(hql.contains("ttd") && hql.contains("full_hour")); + assertTrue(hql.contains("ttd") && hql.contains("full_hour")); - Assert.assertTrue(context.shouldReplaceTimeDimWithPart()); + assertTrue(context.shouldReplaceTimeDimWithPart()); String partCol = context.getPartitionColumnOfTimeDim("test_time_dim"); - Assert.assertEquals("ttd", partCol); + assertEquals("ttd", partCol); String timeDimCol = context.getTimeDimOfPartitionColumn("ttd"); - Assert.assertEquals("test_time_dim".toLowerCase(), timeDimCol); + assertEquals("test_time_dim".toLowerCase(), timeDimCol); // Rewrite with setting disabled hconf.setBoolean(CubeQueryConfUtil.REPLACE_TIMEDIM_WITH_PART_COL, false); @@ -1469,7 +1463,7 @@ public class TestCubeRewriter extends TestQueryRewrite { context = rewriter.rewrite(query); hql = context.toHQL(); System.out.println("@@2 " + hql); - Assert.assertTrue(!hql.contains("ttd") && hql.contains("full_hour")); + assertTrue(!hql.contains("ttd") && hql.contains("full_hour")); } @Test @@ -1477,10 +1471,10 @@ public class TestCubeRewriter extends TestQueryRewrite { String query = "SELECT msr2 as msr2 from testCube WHERE " + TWO_DAYS_RANGE; try { String hql = rewrite(query, getConf()); - Assert.assertNotNull(hql); + assertNotNull(hql); System.out.println("@@HQL " + hql); } catch (NullPointerException npe) { - Assert.fail(npe.getMessage()); + fail(npe.getMessage()); npe.printStackTrace(); } } @@ -1489,7 +1483,7 @@ public class TestCubeRewriter extends TestQueryRewrite { public void testDimAttributeQueryWithFact() throws Exception { String query = "select count (distinct dim1) from testCube where " + TWO_DAYS_RANGE; String hql = rewrite(query, getConf()); - Assert.assertTrue(hql.contains("summary1")); + assertTrue(hql.contains("summary1")); } @Test @@ -1499,7 +1493,7 @@ public class TestCubeRewriter extends TestQueryRewrite { conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, false); String hql = rewrite(query, conf); System.out.println("@@ HQL = " + hql); - Assert.assertNotNull(hql); + assertNotNull(hql); } @Test @@ -1532,8 +1526,8 @@ public class TestCubeRewriter extends TestQueryRewrite { // Run explain on this command, it should pass successfully. CommandProcessorResponse inExplainResponse = runExplain(hqlWithInClause, conf); - Assert.assertNotNull(inExplainResponse); - Assert.assertTrue(hqlWithInClause.contains("in")); + assertNotNull(inExplainResponse); + assertTrue(hqlWithInClause.contains("in")); // Test 2 - check for single part column // Verify for large number of partitions, single column. This is just to check if we don't see @@ -1545,8 +1539,8 @@ public class TestCubeRewriter extends TestQueryRewrite { String largePartRewrittenQuery = rewrite(largePartQuery, largeConf); CommandProcessorResponse response = runExplain(largePartRewrittenQuery, largeConf); - Assert.assertNotNull(response); - Assert.assertTrue(largePartRewrittenQuery.contains("in")); + assertNotNull(response); + assertTrue(largePartRewrittenQuery.contains("in")); } private CommandProcessorResponse runExplain(String hql, HiveConf conf) throws Exception { @@ -1560,7 +1554,7 @@ public class TestCubeRewriter extends TestQueryRewrite { for (Object explainRow : explainResult) { // Print the following to stdout to check partition output. // Not parsing the output because it will slow down the test - Assert.assertNotNull(explainRow.toString()); + assertNotNull(explainRow.toString()); } return response; http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java index 3df704d..14e56fb 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestDateUtil.java @@ -18,6 +18,8 @@ */ package org.apache.lens.cube.parse; +import static java.util.Calendar.DAY_OF_MONTH; + import static org.apache.lens.cube.metadata.UpdatePeriod.*; import static org.apache.lens.cube.parse.DateUtil.*; @@ -28,16 +30,22 @@ import static org.testng.Assert.assertEquals; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.Set; import org.apache.lens.cube.parse.DateUtil.*; import org.apache.commons.lang.time.DateUtils; +import org.apache.hadoop.hive.ql.parse.SemanticException; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; +import com.beust.jcommander.internal.Sets; +import com.google.common.collect.Lists; + /** * Unit tests for cube DateUtil class TestDateUtil. */ @@ -246,4 +254,34 @@ public class TestDateUtil { assertEquals(getCeilDate(date, SECONDLY), ABS_DATE_PARSER.get().parse("2015-12-26T06:30:16:000Z")); assertEquals(getCeilDate(date, WEEKLY), ABS_DATE_PARSER.get().parse("2015-12-27T00:00:00:000Z")); } + + @Test + public void testTimeDiff() throws SemanticException { + ArrayList<String> minusFourDays = + Lists.newArrayList("-4 days", "-4days", "-4day", "-4 day", "- 4days", "- 4 day"); + ArrayList<String> plusFourDays = + Lists.newArrayList("+4 days", "4 days", "+4days", "4day", "4 day", "+ 4days", "+ 4 day", "+4 day"); + Set<TimeDiff> diffs = Sets.newHashSet(); + for (String diffStr : minusFourDays) { + diffs.add(TimeDiff.parseFrom(diffStr)); + } + assertEquals(diffs.size(), 1); + TimeDiff minusFourDaysDiff = diffs.iterator().next(); + assertEquals(minusFourDaysDiff.quantity, -4); + assertEquals(minusFourDaysDiff.calendarField, DAY_OF_MONTH); + + diffs.clear(); + for (String diffStr : plusFourDays) { + diffs.add(TimeDiff.parseFrom(diffStr)); + } + assertEquals(diffs.size(), 1); + TimeDiff plusFourDaysDiff = diffs.iterator().next(); + assertEquals(plusFourDaysDiff.quantity, 4); + assertEquals(plusFourDaysDiff.calendarField, DAY_OF_MONTH); + Date now = new Date(); + assertEquals(minusFourDaysDiff.offsetFrom(plusFourDaysDiff.offsetFrom(now)), now); + assertEquals(plusFourDaysDiff.offsetFrom(minusFourDaysDiff.offsetFrom(now)), now); + assertEquals(minusFourDaysDiff.negativeOffsetFrom(now), plusFourDaysDiff.offsetFrom(now)); + assertEquals(minusFourDaysDiff.offsetFrom(now), plusFourDaysDiff.negativeOffsetFrom(now)); + } } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/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 29240b6..71ed1a8 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 @@ -61,7 +61,7 @@ public class TestDenormalizationResolver extends TestQueryRewrite { String expecteddim2big1 = getExpectedQuery(cubeName, "select testcube.dim2big1," + " max(testcube.msr3), sum(testcube.msr2) FROM ", null, " group by testcube.dim2big1", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary4"), - getNotLatestConditions(cubeName, "it", "C2_summary4")); + null); TestCubeRewriter.compareQueries(expecteddim2big1, hqlQuery); // with another table hqlQuery = rewrite("select dim2big1, citydim.name, max(msr3)," + " msr2 from testCube" + " where " + twoDaysITRange, @@ -71,14 +71,14 @@ public class TestDenormalizationResolver extends TestQueryRewrite { + getDbName() + "c1_citytable citydim " + "on testcube.cityid = citydim.id and citydim.dt = 'latest' ", null, " group by testcube.dim2big1, citydim.name", null, getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary4"), - getNotLatestConditions(cubeName, "it", "C2_summary4")); + null); TestCubeRewriter.compareQueries(expecteddim2big1WithAnotherTable, hqlQuery); hqlQuery = rewrite("select dim2big2, max(msr3)," + " msr2 from testCube" + " where " + twoDaysITRange, conf); String expecteddim2big2 = getExpectedQuery(cubeName, "select testcube.dim2big2, max(testcube.msr3), sum(testcube.msr2) FROM ", null, " group by testcube.dim2big2", getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary4"), - getNotLatestConditions(cubeName, "it", "C2_summary4")); + null); TestCubeRewriter.compareQueries(expecteddim2big2, hqlQuery); hqlQuery = @@ -91,7 +91,7 @@ public class TestDenormalizationResolver extends TestQueryRewrite { + getDbName() + "c2_testdim3tbl testdim3 on " + "testdim2.testdim3id = testdim3.id", null, " group by testdim3.name, (testcube.dim2big1)", null, getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", "C2_summary4"), - getNotLatestConditions(cubeName, "it", "C2_summary4")); + null); TestCubeRewriter.compareQueries(expected, hqlQuery); Configuration conf2 = new Configuration(conf); http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryRewrite.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryRewrite.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryRewrite.java index 06de5cd..994a244 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryRewrite.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryRewrite.java @@ -44,6 +44,16 @@ public abstract class TestQueryRewrite { private static CubeTestSetup setup; private static HiveConf hconf = new HiveConf(TestQueryRewrite.class); + public Configuration getConf() { + return hconf; + } + + public Configuration getConfWithStorages(String storages) { + Configuration conf = new Configuration(getConf()); + conf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, storages); + return conf; + } + @BeforeSuite public static void setup() throws Exception { SessionState.start(hconf); http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java index 79d9be3..0805fb5 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java @@ -34,8 +34,10 @@ import org.apache.hadoop.hive.ql.parse.SemanticException; import org.testng.Assert; import org.testng.annotations.Test; -public class TestRewriterPlan extends TestQueryRewrite { +import lombok.Getter; +public class TestRewriterPlan extends TestQueryRewrite { + @Getter Configuration conf = new Configuration(); TestRewriterPlan() { @@ -44,19 +46,12 @@ public class TestRewriterPlan extends TestQueryRewrite { conf.setBoolean(CubeQueryConfUtil.ENABLE_GROUP_BY_TO_SELECT, true); conf.setBoolean(CubeQueryConfUtil.DISABLE_AGGREGATE_RESOLVER, false); } - private Configuration getConf(){ - return new Configuration(conf); - } - private Configuration getConf(String storages) { - Configuration c = getConf(); - c.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, storages); - return c; - } @Test public void testPlanExtractionForSimpleQuery() throws Exception { // simple query - CubeQueryContext ctx = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf("C2")); + Configuration conf = getConfWithStorages("C2"); + CubeQueryContext ctx = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); ctx.toHQL(); RewriterPlan plan = new RewriterPlan(Collections.singleton(ctx)); Assert.assertNotNull(plan); @@ -71,8 +66,9 @@ public class TestRewriterPlan extends TestQueryRewrite { @Test public void testPlanExtractionForComplexQuery() throws Exception { // complex query + Configuration conf = getConfWithStorages("C1,C2"); CubeQueryContext ctx = rewriteCtx("cube select citydim.name, SUM(msr2) from testCube where citydim.name != \"XYZ\"" - + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", getConf("C1,C2")); + + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", conf); ctx.toHQL(); RewriterPlan plan = new RewriterPlan(Collections.singleton(ctx)); Assert.assertNotNull(plan); @@ -91,10 +87,11 @@ public class TestRewriterPlan extends TestQueryRewrite { @Test public void testPlanExtractionForMultipleQueries() throws Exception { // simple query - CubeQueryContext ctx1 = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, getConf("C1,C2")); + Configuration conf = getConfWithStorages("C1,C2"); + CubeQueryContext ctx1 = rewriteCtx("cube select SUM(msr2) from testCube where " + TWO_DAYS_RANGE, conf); ctx1.toHQL(); CubeQueryContext ctx2 = rewriteCtx("cube select citydim.name, SUM(msr2) from testCube where citydim.name != \"XYZ\"" - + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", getConf("C1,C2")); + + " and " + TWO_DAYS_RANGE + " having sum(msr2) > 1000 order by citydim.name limit 50", conf); ctx2.toHQL(); RewriterPlan plan = new RewriterPlan(Arrays.asList(ctx1, ctx2)); Assert.assertNotNull(plan); http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeExtractor.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeExtractor.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeExtractor.java index bd51971..26836fe 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeExtractor.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeExtractor.java @@ -61,7 +61,7 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { @Test public void testTimeRangeValidation() throws Exception { - String timeRange2 = " time_range_in(dt, '" + dateNow + "','" + dateTwoDaysBack + "')"; + String timeRange2 = " time_range_in(d_time, '" + dateNow + "','" + dateTwoDaysBack + "')"; try { // this should throw exception because from date is after to date driver.rewrite("SELECT cityid, testCube.msr2 from" + " testCube where " + timeRange2); @@ -74,7 +74,7 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { @Test public void testEqualTimeRangeValidation() throws Exception { - String equalTimeRange = " time_range_in(dt, '" + dateNow + "','" + dateNow + "')"; + String equalTimeRange = " time_range_in(d_time, '" + dateNow + "','" + dateNow + "')"; try { // this should throw exception because from date and to date are same driver.rewrite("SELECT cityid, testCube.msr2 from" + " testCube where " + equalTimeRange); @@ -87,7 +87,7 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { @Test public void testNoNPE() throws Exception { - String timeRange = " time_range_in(dt, '" + dateTwoDaysBack + "','" + dateNow + "')"; + String timeRange = " time_range_in(d_time, '" + dateTwoDaysBack + "','" + dateNow + "')"; String q1 = "SELECT cityid, testCube.msr2 from testCube where " + timeRange + " AND cityid IS NULL"; rewrite(driver, q1); q1 = "SELECT cityid, testCube.msr2 from testCube where cityid IS NULL AND " + timeRange; @@ -97,7 +97,7 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { @Test public void testTimeRangeASTPosition() throws Exception { // check that time range can be any child of AND - String timeRange = " time_range_in(dt, '" + dateTwoDaysBack + "','" + dateNow + "')"; + String timeRange = " time_range_in(d_time, '" + dateTwoDaysBack + "','" + dateNow + "')"; String q1 = "SELECT cityid, testCube.msr2 from testCube where " + timeRange + " AND cityid=1"; CubeQueryContext cubeql = driver.rewrite(q1); String hql = cubeql.toHQL(); @@ -106,7 +106,7 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { @Test public void testPartitionColNameExtract() throws Exception { String q2 = - "SELECT cityid, testCube.msr3 from testCube where cityid=1 AND " + " time_range_in(dt, '" + dateTwoDaysBack + "SELECT cityid, testCube.msr3 from testCube where cityid=1 AND " + " time_range_in(d_time, '" + dateTwoDaysBack + "','" + dateNow + "')"; CubeQueryContext cubeql = driver.rewrite(q2); String hql = cubeql.toHQL(); @@ -124,10 +124,10 @@ public class TestTimeRangeExtractor extends TestQueryRewrite { String dateNow = getDateUptoHours(NOW); // time range within time range String q3 = - "SELECT cityid, testCube.msr3 FROM testCube where cityid=1 AND" + " (time_range_in(dt, '" + dateTwoDaysBack + "SELECT cityid, testCube.msr3 FROM testCube where cityid=1 AND" + " (time_range_in(d_time, '" + dateTwoDaysBack + "','" + dateNow + "') " // Time range as sibling of the first time range - + " OR " + " time_range_in(dt, '" + dateTwoDaysBack + "', '" + dateNow + "'))"; + + " OR " + " time_range_in(d_time, '" + dateTwoDaysBack + "', '" + dateNow + "'))"; CubeQueryContext cubeql = driver.rewrite(q3); String hql = cubeql.toHQL(); http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/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 7883b15..7ecabfa 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 @@ -163,5 +163,4 @@ public class PopulateSampleMetastore { createFactPartitions("sales-aggr-fact1-mydb-parts.xml", "sales_aggr_fact1", "mydb"); createFactPartitions("sales-aggr-fact2-mydb-parts.xml", "sales_aggr_fact2", "mydb"); } - } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/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 7a0b542..7668f54 100644 --- a/lens-examples/src/main/resources/cube-queries.sql +++ b/lens-examples/src/main/resources/cube-queries.sql @@ -103,3 +103,5 @@ cube select product_details.category, store_sales from sales where time_range_in cube select product_details.category, store_sales from sales where time_range_in(order_time, '2015-04-12-00', '2015-04-13-00') cube select product_details.color, store_sales from sales where time_range_in(delivery_time, '2015-04-11-00', '2015-04-13-00') and product_details.category='Stationary' cube select product_details.color, store_sales from sales where time_range_in(delivery_time, '2015-04-12-00', '2015-04-13-00') and product_details.category='Stationary' +-- The following query sees that ot part col is not present and falls back on querying on dt part col +cube select customer_city_name, store_cost from sales where time_range_in(order_time, '2015-04-13-03', '2015-04-13-04') -- \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-examples/src/main/resources/customer.xml ---------------------------------------------------------------------- diff --git a/lens-examples/src/main/resources/customer.xml b/lens-examples/src/main/resources/customer.xml index 64024f1..1b4f854 100644 --- a/lens-examples/src/main/resources/customer.xml +++ b/lens-examples/src/main/resources/customer.xml @@ -28,7 +28,7 @@ <dim_attribute name="age" type="INT" /> <dim_attribute name="city_id" type="INT" /> <dim_attribute name="customer_city_name" type="string" description="City name to which the customer belongs" - displayString=" Customer City"> + display_string="Customer City"> <ref_spec> <chain_ref_column chain_name="customer_city" ref_col="name" /> </ref_spec> http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-examples/src/main/resources/sales-aggr-fact2-local-parts.xml ---------------------------------------------------------------------- diff --git a/lens-examples/src/main/resources/sales-aggr-fact2-local-parts.xml b/lens-examples/src/main/resources/sales-aggr-fact2-local-parts.xml index 35a8801..a10535a 100644 --- a/lens-examples/src/main/resources/sales-aggr-fact2-local-parts.xml +++ b/lens-examples/src/main/resources/sales-aggr-fact2-local-parts.xml @@ -39,4 +39,10 @@ <part_spec_element key="dt" value="2015-04-13T04:00:00"/> </time_partition_spec> </partition> + <partition fact_or_dimension_table_name="sales_aggr_fact2" location="examples/data/sales_aggr_fact2_local4" + update_period="HOURLY"> + <time_partition_spec> + <part_spec_element key="dt" value="2015-04-13T05:00:00"/> + </time_partition_spec> + </partition> </x_partition_list> http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-examples/src/main/resources/sales-aggr-fact2.xml ---------------------------------------------------------------------- diff --git a/lens-examples/src/main/resources/sales-aggr-fact2.xml b/lens-examples/src/main/resources/sales-aggr-fact2.xml index b535a87..67b7171 100644 --- a/lens-examples/src/main/resources/sales-aggr-fact2.xml +++ b/lens-examples/src/main/resources/sales-aggr-fact2.xml @@ -35,6 +35,7 @@ </columns> <properties> <property name="cube.fact.is.aggregated" value="true"/> + <property name="cube.timedim.relation.order_time" value="delivery_time+[-2 hours,-1hour]" /> </properties> <storage_tables> <storage_table> http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/dc1fafa9/lens-examples/src/main/resources/sales-cube.xml ---------------------------------------------------------------------- diff --git a/lens-examples/src/main/resources/sales-cube.xml b/lens-examples/src/main/resources/sales-cube.xml index f5e2f93..e44141c 100644 --- a/lens-examples/src/main/resources/sales-cube.xml +++ b/lens-examples/src/main/resources/sales-cube.xml @@ -33,6 +33,8 @@ <measure name="max_line_item_price" type="FLOAT" default_aggr="MAX" display_string="Maximum Line item price"/> <measure name="max_line_item_discount" type="FLOAT" default_aggr="MAX" display_string="Maximum Line item discount"/> + <measure name="rating" type="FLOAT" default_aggr="AVG" + display_string="Rating"/> </measures> <expressions> <expression name="profit" type="DOUBLE" display_string="Profit"> @@ -56,19 +58,19 @@ <dim_attribute name="production_city_id" type="INT" /> <dim_attribute name="delivery_city_id" type="INT" /> <dim_attribute name="customer_city_name" type="string" description="City name to which the customer belongs" - displayString=" Customer City"> + display_string="Customer City"> <ref_spec> <chain_ref_column chain_name="customer_city" ref_col="name" /> </ref_spec> </dim_attribute> <dim_attribute name="production_city_name" type="STRING" description="City name in which the product was produced" - displayString=" Production City"> + display_string="Production City"> <ref_spec> <chain_ref_column chain_name="production_city" ref_col="name" /> </ref_spec> </dim_attribute> <dim_attribute name="delivery_city_name" type="STRING" description="City name to which the product was delivered" - displayString=" Delivery City"> + display_string="Delivery City"> <ref_spec> <chain_ref_column chain_name="delivery_city" ref_col="name" /> </ref_spec> @@ -152,5 +154,7 @@ <property name="cube.sales.timed.dimensions.list" value="order_time,delivery_time" /> <property name="cube.timedim.partition.order_time" value="ot" /> <property name="cube.timedim.partition.delivery_time" value="dt" /> + <property name="cube.timedim.relation.order_time" value="delivery_time+[-20 days,-1 hour]" /> + <!-- means dt-20days <= ot <= dt-1hour --> </properties> </x_base_cube>
