/** * Get all derived cubes of the cube, that have all fields queryable together * * @param cube Cube object * @return List of DerivedCube objects * @throws LensException */ public List<DerivedCube> getAllDerivedQueryableCubes(CubeInterface cube) throws LensException { List<DerivedCube> dcubes = new ArrayList<>(); for (CubeInterface cb : getAllCubes()) { if (cb.isDerivedCube() && ((DerivedCube) cb).getParent().getName().equalsIgnoreCase(cube.getName()) && cb.allFieldsQueriable()) { dcubes.add((DerivedCube) cb); } } return dcubes; }
} else if (tabName.equalsIgnoreCase(cubeql.getAliasForTableName(cube.getName()))) { if (cube.getDimAttributeNames().contains(colName)) { if (cube.getDimAttributeByName(colName) instanceof ReferencedDimAttribute) { ReferencedDimAttribute rdim = (ReferencedDimAttribute) cube.getDimAttributeByName(colName); for (ChainRefCol refCol : rdim.getChainRefColumns()) { chainSourceColumns.addAll(cube.getChainByName(refCol.getChainName()).getSourceColumns()); } else if (cube.getExpressionNames().contains(colName)) { if (cubeql.getQueriedExprs().contains(colName)) { for (ASTNode exprNode : cubeql.getExprCtx().getExpressionContext(colName, cubeql.getAliasForTableName(cubeql.getCube().getName())).getAllASTNodes()) { findDimAttrsAndChainSourceColumns(cubeql, exprNode, dimAttributes, chainSourceColumns, nonQueryableColumns);
private void addAllDirectAttributesToFlattenedListFromCube(ObjectFactory objectFactory, CubeInterface cube, List<XFlattenedColumn> columnList) { AbstractBaseTable baseTbl = (AbstractBaseTable) (cube instanceof DerivedCube ? ((DerivedCube) cube).getParent() : cube); for (CubeDimAttribute dim : cube.getDimAttributes()) { XFlattenedColumn fcol = objectFactory.createXFlattenedColumn(); fcol.setDimAttribute(JAXBUtils.xDimAttrFromHiveDimAttr(dim, baseTbl)); fcol.setTableName(cube.getName()); columnList.add(fcol); } }
@Override public List<String> getAllQueryableCubeNames(LensSessionHandle sessionid) throws LensException { try (SessionContext ignored = new SessionContext(sessionid)){ Collection<CubeInterface> cubes = getClient(sessionid).getAllCubes(); if (cubes != null && !cubes.isEmpty()) { List<String> names = new ArrayList<>(cubes.size()); for (CubeInterface cube : cubes) { if (cube.allFieldsQueriable()) { names.add(cube.getName()); } } return names; } } return null; }
@Override public List<String> getAllBaseCubeNames(LensSessionHandle sessionid) throws LensException { try (SessionContext ignored = new SessionContext(sessionid)){ Collection<CubeInterface> cubes = getClient(sessionid).getAllCubes(); if (cubes != null && !cubes.isEmpty()) { List<String> names = new ArrayList<>(cubes.size()); for (CubeInterface cube : cubes) { if (!cube.isDerivedCube()) { names.add(cube.getName()); } } return names; } } return null; }
if (c.isDerivedCube()) { XDerivedCube xdc = XCF.createXDerivedCube(); xdc.setMeasureNames(new XMeasureNames()); xdc.setDimAttrNames(new XDimAttrNames()); xc = xdc; xdc.getMeasureNames().getMeasureName().addAll(c.getMeasureNames()); xdc.getDimAttrNames().getAttrName().addAll(c.getDimAttributeNames()); xdc.setParent(((DerivedCube) c).getParent().getName()); } else { xbc.setJoinChains(new XJoinChains()); xc = xbc; for (CubeMeasure cm : c.getMeasures()) { xbc.getMeasures().getMeasure().add(xMeasureFromHiveMeasure(cm)); for (ExprColumn ec : c.getExpressions()) { xbc.getExpressions().getExpression().add(xExprColumnFromHiveExprColumn(ec)); for (CubeDimAttribute cd : c.getDimAttributes()) { xbc.getDimAttributes().getDimAttribute().add(xDimAttrFromHiveDimAttr(cd, (Cube) c)); for (JoinChain jc : c.getJoinChains()) { xbc.getJoinChains().getJoinChain().add(getXJoinChainFromJoinChain(jc)); xc.setName(c.getName()); xc.setProperties(new XProperties()); xc.getProperties().getProperty().addAll(xPropertiesFromMap(((AbstractCubeTable) c).getProperties()));
private ASTNode findCubeNameNode(ASTNode node) { if (node.getType() == Identifier) { if (node.getText().equalsIgnoreCase(getCubeQueryContext().getCube().getName())) { return node; } else { return null; // should never come here. } } return node.getChildren().stream().map(ASTNode.class::cast).map(this::findCubeNameNode).filter(Objects::nonNull) .findFirst().orElse(null); }
boolean hasMeasures(String expr, CubeInterface cube) { String alias = cubeql.getAliasForTableName(cube.getName()); ExpressionContext ec = getExpressionContext(expr, alias); boolean hasMeasures = false; for (ExprSpecContext esc : ec.allExprs) { if (esc.getTblAliasToColumns().get(alias) != null) { for (String cubeCol : esc.getTblAliasToColumns().get(alias)) { if (cube.getMeasureByName(cubeCol) != null) { hasMeasures = true; break; } } } } ec.hasMeasures = hasMeasures; return hasMeasures; }
/** * Figure out queried dim attributes and measures from the cube query context * @param cubeql * @throws LensException */ private void findExpressionsAndMeasures(CubeQueryContext cubeql) throws LensException { CubeInterface cube = cubeql.getCube(); if (cube != null) { String cubeAlias = cubeql.getAliasForTableName(cube.getName()); for (QueriedPhraseContext qur : cubeql.getQueriedPhrases()) { Set<String> cubeColsQueried = qur.getColumnsQueried(cubeAlias); if (cubeColsQueried != null && !cubeColsQueried.isEmpty()) { for (String col : cubeColsQueried) { if (cube.getMeasureNames().contains(col)) { qur.addQueriedMsr(col); } else if (cube.getDimAttributeNames().contains(col)) { qur.addQueriedDimAttr(col); } else if (cube.getExpressionNames().contains(col)) { qur.addQueriedExprColumn(col); } } } cubeql.addQueriedMsrs(qur.getQueriedMsrs()); cubeql.addQueriedExprs(qur.getQueriedExprColumns()); } } }
private void doColLifeValidation(CubeQueryContext cubeql) throws LensException, ColUnAvailableInTimeRangeException { Set<String> cubeColumns = cubeql.getColumnsQueriedForTable(cubeql.getCube().getName()); if (cubeColumns == null || cubeColumns.isEmpty()) { for (String col : cubeql.getColumnsQueriedForTable(cubeql.getCube().getName())) { CubeColumn column = cubeql.getCube().getColumnByName(col); for (TimeRange range : cubeql.getTimeRanges()) { if (column == null) { if (!cubeql.getCube().getTimedDimensions().contains(col)) { throw new LensException(LensCubeErrorCode.NOT_A_CUBE_COLUMN.getLensErrorInfo(), col); CubeColumn column = cubeql.getCube().getColumnByName(col); for (TimeRange range : cubeql.getTimeRanges()) { if (!column.isColumnAvailableInTimeRange(range)) {
private void addAllMeasuresToFlattenedList(ObjectFactory objectFactory, CubeInterface cube, List<XFlattenedColumn> columnList) { for (CubeMeasure msr : cube.getMeasures()) { XFlattenedColumn fcol = objectFactory.createXFlattenedColumn(); fcol.setMeasure(JAXBUtils.xMeasureFromHiveMeasure(msr)); fcol.setTableName(cube.getName()); columnList.add(fcol); } }
private void addAllDirectExpressionsToFlattenedList(ObjectFactory objectFactory, CubeInterface baseTbl, List<XFlattenedColumn> columnList, String chainName) { if (baseTbl.getExpressions() != null) { for (ExprColumn expr : baseTbl.getExpressions()) { XFlattenedColumn fcol = objectFactory.createXFlattenedColumn(); fcol.setExpression(JAXBUtils.xExprColumnFromHiveExprColumn(expr)); fcol.setTableName(baseTbl.getName()); if (chainName != null) { fcol.setChainName(chainName); } columnList.add(fcol); } } }
assertTrue(hcube.getMeasureByName("msr3").getAggregate().equals("sum")); assertNotNull(hcube.getDimAttributeByName("dim3")); assertEquals(((AbstractCubeTable) hcube).getProperties().get("foo2"), "bar2"); assertTrue(hdcube.getMeasureByName("msr3").getAggregate().equals("sum")); assertNotNull(hdcube.getDimAttributeByName("dim3")); assertEquals(((AbstractCubeTable) hdcube).getProperties().get("foo.derived2"), "bar.derived2");
col = col.trim().toLowerCase(); if (queriedExprs.contains(col)) { return exprCtx.getExpressionContext(col, getAliasForTableName(cube.getName())).hasMeasures(); } else { return cube.getMeasureNames().contains(col); if (cubeName.equalsIgnoreCase(cube.getName()) || cubeName.equals(getAliasForTableName(cube.getName()))) { if (queriedExprs.contains(colName)) { return exprCtx.getExpressionContext(colName, cubeName).hasMeasures(); } else { return cube.getMeasureNames().contains(colName.toLowerCase());
boolean inCube = false; if (cubeql.getCube() != null) { Set<String> cols = cubeql.getCube().getAllFieldNames(); if (cols.contains(col.toLowerCase())) { String cubeAlias = cubeql.getAliasForTableName(cubeql.getCube().getName()); colToTableAlias.put(col.toLowerCase(), cubeAlias); tqc.addColumnsQueried(cubeAlias, col.toLowerCase()); cubeql.getCube().getName(), dim.getName());
CubeMeasure column = cubeql.getCube().getMeasureByName(cubeCol); if (column != null && column.getTags() != null) { String dataCompletenessTag = column.getTags().get(MetastoreConstants.MEASURE_DATACOMPLETENESS_TAG);
if (!cube.allFieldsQueriable()) {
@Override public XJoinChains getAllJoinChains(LensSessionHandle sessionHandle, String tableName) throws LensException { try (SessionContext ignored = new SessionContext(sessionHandle)){ CubeMetastoreClient client = getClient(sessionHandle); Set<JoinChain> chains; if (client.isCube(tableName)) { chains = client.getCube(tableName).getJoinChains(); } else if (client.isDimension(tableName)) { chains = client.getDimension(tableName).getJoinChains(); } else { throw new BadRequestException("Can't get join chains. '" + tableName + "' is neither a cube nor a dimension"); } XJoinChains xJoinChains = new XJoinChains(); List<XJoinChain> joinChains = xJoinChains.getJoinChain(); if (chains != null) { for (JoinChain chain : chains) { joinChains.add(JAXBUtils.getXJoinChainFromJoinChain(chain)); } } return xJoinChains; } }
if (c.isDerivedCube()) { XDerivedCube xdc = XCF.createXDerivedCube(); xdc.setMeasureNames(new XMeasureNames()); xdc.setDimAttrNames(new XDimAttrNames()); xc = xdc; xdc.getMeasureNames().getMeasureName().addAll(c.getMeasureNames()); xdc.getDimAttrNames().getAttrName().addAll(c.getDimAttributeNames()); xdc.setParent(((DerivedCube) c).getParent().getName()); } else { xbc.setJoinChains(new XJoinChains()); xc = xbc; for (CubeMeasure cm : c.getMeasures()) { xbc.getMeasures().getMeasure().add(xMeasureFromHiveMeasure(cm)); for (ExprColumn ec : c.getExpressions()) { xbc.getExpressions().getExpression().add(xExprColumnFromHiveExprColumn(ec)); for (CubeDimAttribute cd : c.getDimAttributes()) { xbc.getDimAttributes().getDimAttribute().add(xDimAttrFromHiveDimAttr(cd, (Cube) c)); for (JoinChain jc : c.getJoinChains()) { xbc.getJoinChains().getJoinChain().add(getXJoinChainFromJoinChain(jc)); xc.setName(c.getName()); xc.setProperties(new XProperties()); xc.getProperties().getProperty().addAll(xPropertiesFromMap(((AbstractCubeTable) c).getProperties()));
private ASTNode findCubeNameNode(ASTNode node) { if (node.getType() == Identifier) { if (node.getText().equalsIgnoreCase(getCubeQueryContext().getCube().getName())) { return node; } else { return null; // should never come here. } } return node.getChildren().stream().map(ASTNode.class::cast).map(this::findCubeNameNode).filter(Objects::nonNull) .findFirst().orElse(null); }