/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.lens.driver.cube; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.apache.lens.cube.metadata.FactPartition; import org.apache.lens.cube.parse.*; import org.apache.lens.server.api.LensConfConstants; import org.apache.lens.server.api.driver.DriverQueryPlan; import org.apache.lens.server.api.error.LensException; import org.apache.lens.server.api.query.cost.QueryCost; import org.apache.hadoop.hive.ql.metadata.Table; import lombok.extern.slf4j.Slf4j; /** * The Rewriter plan */ @Slf4j public final class RewriterPlan extends DriverQueryPlan { public RewriterPlan(Collection<CubeQueryContext> cubeQueries) { extractPlan(cubeQueries); } @SuppressWarnings("unchecked") // required for (Set<FactPartition>) casting void extractPlan(Collection<CubeQueryContext> cubeQueries) { for (CubeQueryContext ctx : cubeQueries) { if (ctx.getPickedDimTables() != null && !ctx.getPickedDimTables().isEmpty()) { for (CandidateDim dim : ctx.getPickedDimTables()) { addTablesQueried(dim.getStorageTable()); if (partitions.get(dim.getName()) == null || partitions.get(dim.getName()).isEmpty()) { // puts storage table to latest part partitions.put(dim.getName(), dim.getParticipatingPartitions()); } } } if (ctx.getPickedCandidate() != null) { for (StorageCandidate sc : CandidateUtil.getStorageCandidates(ctx.getPickedCandidate())) { addTablesQueried(sc.getAliasForTable("")); Set<FactPartition> factParts = (Set<FactPartition>) partitions.get(sc.getStorageTable()); if (factParts == null) { factParts = new HashSet<FactPartition>(); partitions.put(sc.getStorageTable(), factParts); } factParts.addAll((Set<FactPartition>) sc.getParticipatingPartitions()); } } for (String table : getTablesQueried()) { if (!tableWeights.containsKey(table)) { Table tbl; try { tbl = ctx.getMetastoreClient().getTable(table); } catch (LensException e) { log.error("Error while getting table:" + table, e); continue; } String costStr = tbl.getParameters().get(LensConfConstants.STORAGE_COST); Double weight = 1d; if (costStr != null) { weight = Double.parseDouble(costStr); } tableWeights.put(table, weight); } } } setHasSubQuery(hasSubQuery || cubeQueries.size() > 1); } @Override public String getPlan() { throw new UnsupportedOperationException("Not implemented"); } @Override public QueryCost getCost() { throw new UnsupportedOperationException("Not implemented"); } }