public CubeColumn getColumnByName(String column) { CubeColumn cubeCol = super.getExpressionByName(column); if (cubeCol == null) { cubeCol = getMeasureByName(column); if (cubeCol == null) { cubeCol = getDimAttributeByName(column); } } return cubeCol; }
/** * Create cube defined by measures and dimensions * * @param name Name of the cube * @param measures Measures of the cube * @param dimensions Dimensions of the cube * @throws LensException */ public void createCube(String name, Set<CubeMeasure> measures, Set<CubeDimAttribute> dimensions) throws LensException { Cube cube = new Cube(name, measures, dimensions); createCube(cube); }
@Override public Date getEndTime() { return Collections.min(Lists.newArrayList(getRelativeEndTime(), getAbsoluteEndTime())); }
@Override public Date getStartTime() { return Collections.max(Lists.newArrayList(getRelativeStartTime(), getAbsoluteStartTime())); }
Table cubeTbl = client.getHiveTable(CUBE_NAME); assertTrue(client.isCube(cubeTbl)); Cube cube2 = new Cube(cubeTbl); assertTrue(cube.equals(cube2)); assertFalse(cube2.isDerivedCube()); assertTrue(cube2.getTimedDimensions().isEmpty()); assertEquals(cubeMeasures.size(), cube2.getMeasureNames().size()); assertEquals(cubeDimensions.size() + 8, cube2.getDimAttributeNames().size()); assertEquals(cubeMeasures.size(), cube2.getMeasures().size()); assertEquals(cubeExpressions.size(), cube2.getExpressions().size()); assertEquals(cubeExpressions.size(), cube2.getExpressionNames().size()); assertEquals(cubeDimensions.size(), cube2.getDimAttributes().size()); assertEquals(cubeDimensions.size() + 8 + cubeMeasures.size() + cubeExpressions.size(), cube2 .getAllFieldNames().size()); assertNotNull(cube2.getMeasureByName("msr4")); assertEquals(cube2.getMeasureByName("msr4").getDescription(), "fourth measure"); assertEquals(cube2.getMeasureByName("msr4").getDisplayString(), "Measure4"); assertNotNull(cube2.getDimAttributeByName("location")); assertEquals(cube2.getDimAttributeByName("location").getDescription(), "location hierarchy"); assertNotNull(cube2.getDimAttributeByName("dim1")); assertEquals(cube2.getDimAttributeByName("dim1").getDescription(), "basedim"); assertNull(cube2.getDimAttributeByName("dim1").getDisplayString()); assertNotNull(cube2.getDimAttributeByName("dim2")); assertEquals(cube2.getDimAttributeByName("dim2").getDescription(), "ref dim"); assertEquals(cube2.getDimAttributeByName("dim2").getDisplayString(), "Dim2 refer"); assertNotNull(cube2.getExpressionByName("msr5")); assertEquals(cube2.getExpressionByName("msr5").getDescription(), "fifth measure"); assertEquals(cube2.getExpressionByName("msr5").getDisplayString(), "Avg msr5");
@Test(priority = 1) public void testCubeWithMoreMeasures() throws Exception { String cubeName = "cubeWithMoreMeasures"; Cube cube = new Cube(cubeName, moreCubeMeasures, moreCubeDimensions, cubeExpressions, joinChains, emptyHashMap, 0.0); client.createCube(cubeName, moreCubeMeasures, moreCubeDimensions, cubeExpressions, joinChains, emptyHashMap); Table cubeTbl = client.getHiveTable(cubeName); assertTrue(client.isCube(cubeTbl)); Cube cube2 = new Cube(cubeTbl); assertTrue(cube.equals(cube2)); assertFalse(cube2.isDerivedCube()); assertTrue(cube2.getTimedDimensions().isEmpty()); assertEquals(moreCubeMeasures.size(), cube2.getMeasureNames().size()); assertEquals(moreCubeDimensions.size() + 8, cube2.getDimAttributeNames().size()); assertEquals(moreCubeMeasures.size(), cube2.getMeasures().size()); assertEquals(cubeExpressions.size(), cube2.getExpressions().size()); assertEquals(cubeExpressions.size(), cube2.getExpressionNames().size()); assertEquals(moreCubeDimensions.size(), cube2.getDimAttributes().size()); assertEquals(moreCubeDimensions.size() + 8 + moreCubeMeasures.size() + cubeExpressions.size(), cube2 .getAllFieldNames().size()); assertNotNull(cube2.getMeasureByName("msr4")); assertNotNull(cube2.getMeasureByName("dummy_msr1")); assertNotNull(cube2.getMeasureByName("dummy_msr4000")); assertNotNull(cube2.getDimAttributeByName("location")); assertNotNull(cube2.getDimAttributeByName("dummy_dim1")); assertNotNull(cube2.getDimAttributeByName("dummy_dim4000")); assertTrue(cube2.allFieldsQueriable());
Cube toAlter = new Cube(cubeTbl); toAlter.alterMeasure(new ColumnMeasure(new FieldSchema("testAddMsr1", "int", "testAddMeasure"))); toAlter.alterMeasure(new ColumnMeasure(new FieldSchema("msr3", "float", "third altered measure"), "Measure3Altered", null, "MAX", "alterunit")); toAlter.removeMeasure("msr4"); toAlter.alterDimension(new BaseDimAttribute(new FieldSchema("testAddDim1", "string", "dim to add"))); toAlter.alterDimension(new BaseDimAttribute(new FieldSchema("dim1", "int", "basedim altered"))); toAlter.removeDimension("location2"); toAlter.addTimedDimension("zt"); toAlter.removeTimedDimension("dt"); chain.add(new TableReference("citydim", "id")); cityChain.addPath(chain); toAlter.alterJoinChain(cityChain); toAlter.removeJoinChain("cityFromZip"); assertNotNull(toAlter.getMeasureByName("testAddMsr1")); assertNotNull(toAlter.getMeasureByName("msr3")); assertEquals(toAlter.getMeasureByName("msr3").getDisplayString(), "Measure3Altered"); assertEquals(toAlter.getMeasureByName("msr3").getDescription(), "third altered measure"); assertNull(toAlter.getMeasureByName("msr4")); assertNotNull(toAlter.getDimAttributeByName("testAddDim1")); assertEquals(toAlter.getDimAttributeByName("testAddDim1").getDescription(), "dim to add"); assertNotNull(toAlter.getDimAttributeByName("dim1")); assertEquals(toAlter.getDimAttributeByName("dim1").getDescription(), "basedim altered"); assertNull(toAlter.getDimAttributeByName("location2")); Cube altered = new Cube(alteredHiveTbl);
private Cube getMockCube(Map<String, String> properties) { Cube cube = mock(Cube.class); when(cube.now()).thenReturn(now); when(cube.getProperties()).thenReturn(properties); when(cube.getRelativeStartTime()).thenCallRealMethod(); when(cube.getAbsoluteStartTime()).thenCallRealMethod(); when(cube.getRelativeEndTime()).thenCallRealMethod(); when(cube.getAbsoluteEndTime()).thenCallRealMethod(); when(cube.getStartTime()).thenCallRealMethod(); when(cube.getEndTime()).thenCallRealMethod(); return cube; }
assertEquals(hcube.getDimAttributeByName("dim1").getDescription(), "first dimension"); assertEquals(hcube.getDimAttributeByName("dim1").getDisplayString(), "Dimension1"); assertEquals((((BaseDimAttribute) hcube.getDimAttributeByName("dim1")).getNumOfDistinctValues().get()), Long.valueOf(2000)); assertNotNull(hcube.getDimAttributeByName("testdim2col2")); assertEquals(hcube.getDimAttributeByName("testdim2col2").getDisplayString(), "Chained Dimension"); assertEquals(hcube.getDimAttributeByName("testdim2col2").getDescription(), "ref chained dimension"); assertEquals(((BaseDimAttribute) hcube.getDimAttributeByName("dim4")).getType(), "struct<a:int,b:array<string>,c:map<int,array<struct<x:int,y:array<int>>>"); ReferencedDimAttribute testdim2col2 = (ReferencedDimAttribute) hcube.getDimAttributeByName("testdim2col2"); assertEquals(testdim2col2.getType(), "string"); assertEquals(testdim2col2.getChainRefColumns().get(0).getChainName(), "chain1"); assertEquals(((BaseDimAttribute) hcube.getDimAttributeByName("dim2")).getNumOfDistinctValues().isPresent(), false); assertNotNull(hcube.getMeasureByName("msr1")); assertEquals(hcube.getMeasureByName("msr1").getDescription(), "first measure"); assertEquals(hcube.getMeasureByName("msr1").getDisplayString(), "Measure1"); assertNotNull(hcube.getExpressionByName("expr1")); assertEquals(hcube.getExpressionByName("expr1").getDescription(), "first expression"); assertEquals(hcube.getExpressionByName("expr1").getDisplayString(), "Expression1"); assertNotNull(hcube.getExpressionByName("expr2")); assertEquals(hcube.getExpressionByName("expr2").getExpressions().size(), 4); ExprColumn expr2 = hcube.getExpressionByName("expr2"); Iterator<ExprSpec> esIter = expr2.getExpressionSpecs().iterator(); ExprSpec first = esIter.next();
Table cubeTbl = client.getHiveTable(cubename); assertTrue(client.isCube(cubeTbl)); Cube cube2 = new Cube(cubeTbl); assertNotNull(cube2.getMeasureByName("msr1")); assertTrue(cube2.getMeasureByName("msr1").getTags().keySet().contains("category")); assertTrue(cube2.getMeasureByName("msr1").getTags().values().contains("test")); assertNotNull(cube2.getMeasureByName("msr2")); assertTrue(cube2.getMeasureByName("msr2").getTags().keySet().contains("is_ui_visible")); assertTrue(cube2.getMeasureByName("msr2").getTags().values().contains("true")); assertNotNull(cube2.getDimAttributeByName("dim1")); assertTrue(cube2.getDimAttributeByName("dim1").getTags().keySet().contains("category")); assertTrue(cube2.getDimAttributeByName("dim1").getTags().values().contains("test")); assertNotNull(cube2.getExpressionByName("expr_measure")); assertTrue(cube2.getExpressionByName("expr_measure").getTags().keySet().contains("is_ui_visible")); assertTrue(cube2.getExpressionByName("expr_measure").getTags().values().contains("true")); cube2.getProperties().get("cube.col.msr2.tags.is_ui_visible").equals("cube.col.msr2.tags.true"); cube2.getProperties().get("cube.col.dim1.tags.category").equals("cube.col.dim1.tags.test");
/** * Remove the attribute with name specified * * @param dimName attribute name */ public void removeDimension(@NonNull String dimName) { if (dimMap.containsKey(dimName.toLowerCase())) { log.info("Removing dimension {}", getDimAttributeByName(dimName)); dimensions.remove(getDimAttributeByName(dimName)); dimMap.remove(dimName.toLowerCase()); MetastoreUtil.addNameStrings(getProperties(), MetastoreUtil.getCubeDimensionListKey(getName()), dimensions); } }
/** * Remove the measure with name specified * * @param msrName measure name */ public void removeMeasure(@NonNull String msrName) { if (measureMap.containsKey(msrName.toLowerCase())) { log.info("Removing measure {}", getMeasureByName(msrName)); measures.remove(getMeasureByName(msrName)); measureMap.remove(msrName.toLowerCase()); MetastoreUtil.addNameStrings(getProperties(), MetastoreUtil.getCubeMeasureListKey(getName()), measures); } }
public CubeDimAttribute getDimAttributeByName(String dimension) { if (dimensions.contains(dimension.toLowerCase())) { return parent.getDimAttributeByName(dimension); } return null; }
public CubeMeasure getMeasureByName(String measure) { if (measures.contains(measure.toLowerCase())) { return parent.getMeasureByName(measure); } return null; }
public Optional<Date> getColumnStartTime(String column) { return Optional.ofNullable(getColumnByName(column)).map(CubeColumn::getStartTime); } public Optional<Date> getColumnEndTime(String column) {
@Override public boolean isExpressionEvaluable(ExpressionResolver.ExpressionContext expr) { // expression context is specific to cubequerycontext. So for segmentation candidate, // I can't ask my children to check this context for evaluability. return cubeStream() .map(cube -> cube.getExpressionByName(expr.getExprCol().getName())) .allMatch(Objects::nonNull); }
Cube cube = (Cube) client.getCube(TEST_CUBE_NAME); BaseDimAttribute col = (BaseDimAttribute) cube.getColumnByName("cdim2"); assertNotNull(col); } finally { cube.alterDimension(col); client.alterCube(TEST_CUBE_NAME, cube); new BaseDimAttribute(new FieldSchema(col.getName(), "string", "invalid col"), col.getDisplayString(), oneWeekBack, null, col.getCost(), null); cube.alterDimension(newDim2); client.alterCube(TEST_CUBE_NAME, cube); String hql = rewrite(query, testConf);
private void trimHavingAndOrderby(ASTNode ast, Cube innerCube) { ASTNode havingAst = HQLParser.findNodeByPath(ast, TOK_INSERT, TOK_HAVING); if (havingAst != null) { ASTNode newHavingAst = HQLParser.trimHavingAst(havingAst, innerCube.getAllFieldNames()); if (newHavingAst != null) { havingAst.getParent().setChild(havingAst.getChildIndex(), newHavingAst); } else { havingAst.getParent().deleteChild(havingAst.getChildIndex()); } } ASTNode orderByAst = HQLParser.findNodeByPath(ast, TOK_INSERT, TOK_ORDERBY); if (orderByAst != null) { ASTNode newOrderByAst = HQLParser.trimOrderByAst(orderByAst, innerCube.getAllFieldNames()); if (newOrderByAst != null) { orderByAst.getParent().setChild(orderByAst.getChildIndex(), newOrderByAst); } else { orderByAst.getParent().deleteChild(orderByAst.getChildIndex()); } } }
@Override public boolean equals(Object obj) { if (!super.equals(obj)) { return false; } DerivedCube other = (DerivedCube) obj; if (!this.getParent().equals(other.getParent())) { return false; } if (this.getMeasureNames() == null) { if (other.getMeasureNames() != null) { return false; } } else if (!this.getMeasureNames().equals(other.getMeasureNames())) { return false; } if (this.getDimAttributeNames() == null) { if (other.getDimAttributeNames() != null) { return false; } } else if (!this.getDimAttributeNames().equals(other.getDimAttributeNames())) { return false; } return true; }
@Override public Date getAbsoluteStartTime() { return parent.getAbsoluteStartTime(); }