/** * destination table : a table whose columns are getting queried intermediate table : a table * which is only used as a link between cube and destination table * * @param alias * @param tblName * @param isOptional pass false when it's a destination table pass true when it's an intermediate * table when join chain destination is being added, this will be false. * @param isChainedDimension pass true when you're adding the dimension as a joinchain * destination, pass false when this table is mentioned by name in the user query * @return true if added * @throws LensException */ private boolean addQueriedTable( String alias, String tblName, boolean isOptional, boolean isChainedDimension) throws LensException { alias = alias.toLowerCase(); if (cubeTbls.containsKey(alias)) { return true; } try { if (metastoreClient.isCube(tblName)) { if (cube != null) { if (!cube.getName().equalsIgnoreCase(tblName)) { throw new LensException( LensCubeErrorCode.MORE_THAN_ONE_CUBE.getLensErrorInfo(), cube.getName(), tblName); } } cube = metastoreClient.getCube(tblName); cubeTbls.put(alias, (AbstractCubeTable) cube); } else if (metastoreClient.isDimension(tblName)) { Dimension dim = metastoreClient.getDimension(tblName); if (!isOptional) { dimensions.add(dim); } if (!isChainedDimension) { nonChainedDimensions.add(dim); } cubeTbls.put(alias, dim); } else { return false; } } catch (HiveException e) { return false; } return true; }
public CubeQueryContext(ASTNode ast, QB qb, Configuration queryConf, HiveConf metastoreConf) throws LensException { this.ast = ast; this.qb = qb; this.conf = queryConf; this.clauseName = getClause(); this.timeRanges = new ArrayList<TimeRange>(); try { metastoreClient = CubeMetastoreClient.getInstance(metastoreConf); } catch (HiveException e) { throw new LensException(e); } if (qb.getParseInfo().getWhrForClause(clauseName) != null) { this.whereAST = qb.getParseInfo().getWhrForClause(clauseName); } if (qb.getParseInfo().getHavingForClause(clauseName) != null) { this.havingAST = qb.getParseInfo().getHavingForClause(clauseName); } if (qb.getParseInfo().getOrderByForClause(clauseName) != null) { this.orderByAST = qb.getParseInfo().getOrderByForClause(clauseName); } if (qb.getParseInfo().getGroupByForClause(clauseName) != null) { this.groupByAST = qb.getParseInfo().getGroupByForClause(clauseName); } if (qb.getParseInfo().getSelForClause(clauseName) != null) { this.selectAST = qb.getParseInfo().getSelForClause(clauseName); } for (ASTNode aggrTree : qb.getParseInfo().getAggregationExprsForClause(clauseName).values()) { String aggr = HQLParser.getString(aggrTree); aggregateExprs.add(aggr); } extractMetaTables(); }
@BeforeTest @Override public void beforeTest() throws Exception { super.beforeTest(); List<FieldSchema> factColumns = new ArrayList<>(); factColumns.add(new FieldSchema("continent", "int", "")); factColumns.add(new FieldSchema("country", "int", "")); factColumns.add(new FieldSchema("region", "int", "")); factColumns.add(new FieldSchema("city", "int", "")); factColumns.add(new FieldSchema("count", "double", "")); factColumns.add(new FieldSchema("added", "double", "")); try { HiveConf hiveConf = new HiveConf(); SessionState.start(hiveConf); Hive.get().dropTable("default.wikipedia"); createHiveTable("default", "wikipedia", factColumns); Table tbl = CubeMetastoreClient.getInstance(hiveConf).getHiveTable("wikipedia"); tbl.setProperty("druid.table.time.dimension", "time"); } catch (HiveException e) { log.error("Exception while creating hive table", e); } }