public CubeColumn getColumnByName(String column) { CubeColumn cubeCol = (CubeColumn) getMeasureByName(column); if (cubeCol == null) { cubeCol = (CubeColumn) getDimAttributeByName(column); } return cubeCol; }
@Override public Set<String> getAllFieldNames() { Set<String> fieldNames = new HashSet<>(); fieldNames.addAll(getMeasureNames()); fieldNames.addAll(getDimAttributeNames()); fieldNames.addAll(getTimedDimensions()); return fieldNames; }
@Override public Set<String> getDimAttributeNames() { Set<String> dimNames = new HashSet<>(); for (CubeDimAttribute f : getDimAttributes()) { MetastoreUtil.addColumnNames(f, dimNames); } return dimNames; }
public DerivedCube(Table tbl, Cube parent) { super(tbl); this.measures.addAll(getMeasures(getName(), getProperties())); this.dimensions.addAll(getDimensions(getName(), getProperties())); this.parent = parent; }
DerivedCube derivedCube = new DerivedCube(derivedCubeName, moreMeasures, moreDimensions, cube); client.createDerivedCube(cubeName, derivedCubeName, moreMeasures, moreDimensions, emptyHashMap, 0L); assertTrue(client.tableExists(derivedCubeName)); Table derivedTbl = client.getHiveTable(derivedCubeName); assertTrue(client.isCube(derivedTbl)); DerivedCube dcube2 = new DerivedCube(derivedTbl, cube); assertTrue(derivedCube.equals(dcube2)); assertTrue(dcube2.isDerivedCube()); assertTrue(dcube2.getTimedDimensions().isEmpty()); assertEquals(moreMeasures.size(), dcube2.getMeasureNames().size()); assertEquals(moreDimensions.size(), dcube2.getDimAttributeNames().size()); assertEquals(moreMeasures.size(), dcube2.getMeasures().size()); assertEquals(moreDimensions.size(), dcube2.getDimAttributes().size()); assertNotNull(dcube2.getMeasureByName("msr3")); assertNull(dcube2.getMeasureByName("msr4")); assertNotNull(dcube2.getMeasureByName("dummy_msr1")); assertNotNull(dcube2.getMeasureByName("dummy_msr4000")); assertNull(dcube2.getDimAttributeByName("location")); assertNotNull(dcube2.getDimAttributeByName("dummy_dim1")); assertNotNull(dcube2.getDimAttributeByName("dummy_dim4000")); assertNotNull(dcube2.getDimAttributeByName("dim1")); assertTrue(dcube2.allFieldsQueriable()); client.dropCube(derivedCubeName); client.dropCube(cubeName);
@Test(priority = 2) public void testAlterDerivedCube() throws Exception { String name = "alter_derived_cube"; client.createDerivedCube(CUBE_NAME, name, measures, dimensions, emptyHashMap, 0L); // Test alter cube Table cubeTbl = client.getHiveTable(name); DerivedCube toAlter = new DerivedCube(cubeTbl, (Cube) client.getCube(CUBE_NAME)); toAlter.addMeasure("msr4"); toAlter.removeMeasure("msr3"); toAlter.addDimension("dim1StartTime"); toAlter.removeDimension("dim1"); assertNotNull(toAlter.getMeasureByName("msr4")); assertNotNull(toAlter.getMeasureByName("msr2")); assertNull(toAlter.getMeasureByName("msr3")); assertNotNull(toAlter.getDimAttributeByName("dim1StartTime")); assertNotNull(toAlter.getDimAttributeByName("dim2")); assertNull(toAlter.getDimAttributeByName("dim1")); client.alterCube(name, toAlter); DerivedCube altered = (DerivedCube) client.getCube(name); assertEquals(toAlter, altered); assertNotNull(altered.getMeasureByName("msr4")); CubeMeasure addedMsr = altered.getMeasureByName("msr4"); assertEquals(addedMsr.getType(), "bigint"); assertNotNull(altered.getDimAttributeByName("dim1StartTime")); BaseDimAttribute addedDim = (BaseDimAttribute) altered.getDimAttributeByName("dim1StartTime"); assertEquals(addedDim.getType(), "string"); assertNotNull(addedDim.getStartTime()); client.dropCube(name); assertFalse(client.tableExists(name)); }
Cube getBaseCube() { return cube instanceof Cube ? (Cube) cube : ((DerivedCube) cube).getParent(); }
@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; }
public Set<String> getTimedDimensions() { String str = getProperties().get(MetastoreUtil.getCubeTimedDimensionListKey(getName())); if (str != null) { Set<String> timedDimensions = new HashSet<>(); timedDimensions.addAll(Arrays.asList(StringUtils.split(str, ','))); return timedDimensions; } else { return parent.getTimedDimensions(); } }
@Override public void addProperties() { super.addProperties(); updateMeasureProperties(); updateDimAttributeProperties(); getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), parent.getName().toLowerCase()); getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), parent.getName().toLowerCase()); } public void updateDimAttributeProperties() {
for (DerivedCube dcube : dcubes) { if (dcube.getDimAttributeNames().containsAll(chainedSrcColumns) && dcube.getDimAttributeNames().containsAll(queriedDimAttrs)) { log.info("Derived cube found: {}", dcube.getName()); queriedMsrs.removeAll(dcube.getMeasureNames()); derivedCubeFound = true;
/** * Create derived cube defined by measures, dimensions and properties * * @param parent Name of the parent cube * @param name Name of the derived cube * @param measures Measures of the derived cube * @param dimensions Dimensions of the derived cube * @param properties Properties of the derived cube * @param weight Weight of the derived cube * @throws LensException */ public void createDerivedCube(String parent, String name, Set<String> measures, Set<String> dimensions, Map<String, String> properties, double weight) throws LensException { DerivedCube cube = new DerivedCube(name, measures, dimensions, properties, weight, (Cube) getCube(parent)); createCube(cube); }
Table derivedTbl = client.getHiveTable(DERIVED_CUBE_NAME); assertTrue(client.isCube(derivedTbl)); DerivedCube dcube2 = new DerivedCube(derivedTbl, cube); assertTrue(derivedCube.equals(dcube2)); assertTrue(dcube2.isDerivedCube()); assertTrue(dcube2.getTimedDimensions().isEmpty()); assertEquals(measures.size(), dcube2.getMeasureNames().size()); assertEquals(dimensions.size(), dcube2.getDimAttributeNames().size()); assertEquals(measures.size(), dcube2.getMeasures().size()); assertEquals(dimensions.size(), dcube2.getDimAttributes().size()); assertNotNull(dcube2.getMeasureByName("msr3")); assertNull(dcube2.getMeasureByName("msr4")); assertNull(dcube2.getDimAttributeByName("location")); assertNotNull(dcube2.getDimAttributeByName("dim1")); assertTrue(dcube2.allFieldsQueriable()); derivedTbl = client.getHiveTable(DERIVED_CUBE_NAME_WITH_PROPS); assertTrue(client.isCube(derivedTbl)); dcube2 = new DerivedCube(derivedTbl, cubeWithProps); assertTrue(derivedCubeWithProps.equals(dcube2)); assertTrue(dcube2.isDerivedCube()); assertNotNull(derivedCubeWithProps.getProperties().get("cube.custom.prop")); assertEquals(derivedCubeWithProps.getProperties().get("cube.custom.prop"), "myval"); assertNull(dcube2.getMeasureByName("msr4")); assertNotNull(dcube2.getMeasureByName("msr3")); assertNull(dcube2.getDimAttributeByName("location")); assertNotNull(dcube2.getDimAttributeByName("dim1")); assertTrue(dcube2.allFieldsQueriable());
Cube getBaseCube() { return cube instanceof Cube ? (Cube) cube : ((DerivedCube) cube).getParent(); }
public DerivedCube(Table tbl, Cube parent) { super(tbl); this.measures.addAll(getMeasures(getName(), getProperties())); this.dimensions.addAll(getDimensions(getName(), getProperties())); this.parent = parent; }
@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; }
public Set<String> getTimedDimensions() { String str = getProperties().get(MetastoreUtil.getCubeTimedDimensionListKey(getName())); if (str != null) { Set<String> timedDimensions = new HashSet<>(); timedDimensions.addAll(Arrays.asList(StringUtils.split(str, ','))); return timedDimensions; } else { return parent.getTimedDimensions(); } }
@Override public void addProperties() { super.addProperties(); updateMeasureProperties(); updateDimAttributeProperties(); getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), parent.getName().toLowerCase()); getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), parent.getName().toLowerCase()); } public void updateDimAttributeProperties() {
for (DerivedCube dcube : dcubes) { if (dcube.getDimAttributeNames().containsAll(chainedSrcColumns) && dcube.getDimAttributeNames().containsAll(queriedDimAttrs)) { log.info("Derived cube found: {}", dcube.getName()); queriedMsrs.removeAll(dcube.getMeasureNames()); derivedCubeFound = true;
/** * Create derived cube defined by measures, dimensions and properties * * @param parent Name of the parent cube * @param name Name of the derived cube * @param measures Measures of the derived cube * @param dimensions Dimensions of the derived cube * @param properties Properties of the derived cube * @param weight Weight of the derived cube * @throws LensException */ public void createDerivedCube(String parent, String name, Set<String> measures, Set<String> dimensions, Map<String, String> properties, double weight) throws LensException { DerivedCube cube = new DerivedCube(name, measures, dimensions, properties, weight, (Cube) getCube(parent)); createCube(cube); }