@Override default int compareTo(QueryCost queryCost) { return (new Double(this.getEstimatedResourceUsage())) .compareTo(queryCost.getEstimatedResourceUsage()); }
@Override public Priority decidePriority(@NonNull final QueryCost cost) throws LensException { Priority p = costToPriorityRangeMap.get(cost.getEstimatedResourceUsage()); log.info("cost was: {}, decided priority: {}", cost, p); return p; } }
@Override public QueryCostType decideCostType(@NonNull final QueryCost cost) throws LensException { QueryCostType q = queryCostTypeRangeMap.get(cost.getEstimatedResourceUsage()); log.info("cost was: {}, decided querytype: {}", cost, q); return q; } }
@Override public Priority decidePriority(@NonNull final QueryCost cost) throws LensException { Priority p = costToPriorityRangeMap.get(cost.getEstimatedResourceUsage()); log.info("cost was: {}, decided priority: {}", cost, p); return p; } }
public QueryCostTO build() { Long estimatedExecTimeMillis = null; Double estimatedResourceUsage = null; try { estimatedExecTimeMillis = cost.getEstimatedExecTimeMillis(); } catch (UnsupportedOperationException e) { log.debug("estimated exec time not supported for {}", cost.getClass().getCanonicalName()); } try { estimatedResourceUsage = cost.getEstimatedResourceUsage(); } catch (UnsupportedOperationException e) { log.debug("estimated resource usage not supported for {}", cost.getClass().getCanonicalName()); } return new QueryCostTO(estimatedExecTimeMillis, estimatedResourceUsage, cost.getQueryCostType()); } }
public QueryCostTO build() { Long estimatedExecTimeMillis = null; Double estimatedResourceUsage = null; try { estimatedExecTimeMillis = cost.getEstimatedExecTimeMillis(); } catch (UnsupportedOperationException e) { log.debug("estimated exec time not supported for {}", cost.getClass().getCanonicalName()); } try { estimatedResourceUsage = cost.getEstimatedResourceUsage(); } catch (UnsupportedOperationException e) { log.debug("estimated resource usage not supported for {}", cost.getClass().getCanonicalName()); } return new QueryCostTO(estimatedExecTimeMillis, estimatedResourceUsage, cost.getQueryCostType()); } }
@Test public void testCalculateCost() throws Exception { QueryCost cost = calculator.calculateCost(queryContext, driver); assertTrue(cost.getEstimatedResourceUsage() > 19.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage()); assertTrue(cost.getEstimatedResourceUsage() < 20.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage()); }
@Test public void testGetEstimatedResourceUsage() throws Exception { assertEquals(cost1.getEstimatedResourceUsage(), 0.2); }
private QueryCost getTotalQueryCost(final Collection<QueryContext> queries) { if (queries.isEmpty()) { return new StaticQueryCost(0); } Double totalQueryCost = 0d; for (QueryContext query : queries) { Double queryCost = query.getSelectedDriverQueryCost().getEstimatedResourceUsage(); totalQueryCost = totalQueryCost + queryCost; } log.debug("Total Query Cost:{}", totalQueryCost); return new StaticQueryCost(totalQueryCost); }
@Test public void testDimensionCost() throws Exception { AbstractQueryContext queryContext2 = mock(AbstractQueryContext.class); HashMap<String, Set<?>> partitions = new HashMap<>(); partitions.put("st1", Sets.newHashSet(latest)); partitions.put("st2", Sets.newHashSet(latest)); DriverQueryPlan plan = mock(DriverQueryPlan.class); when(queryContext2.getDriverRewriterPlan(driver)).thenReturn(plan); when(plan.getPartitions()).thenReturn(partitions); when(calculator.getAllPartitions(queryContext2, driver)).thenReturn(partitions); QueryCost cost = calculator.calculateCost(queryContext2, driver); assertTrue(cost.getEstimatedResourceUsage() == 2.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage()); } }
@Test(expectedExceptions = {UnsupportedOperationException.class}) public void testEstimateNativeQuery() throws Exception { createTestTable("test_estimate"); SessionState.setCurrentSessionState(ss); QueryCost cost = driver.estimate(createExplainContext("SELECT ID FROM test_estimate", queryConf)); assertEquals(cost.getEstimatedResourceUsage(), Double.MAX_VALUE); cost.getEstimatedExecTimeMillis(); }
@Test(expectedExceptions = {UnsupportedOperationException.class}) public void testEstimateOlapQuery() throws Exception { SessionState.setCurrentSessionState(ss); ExplainQueryContext ctx = createExplainContext("cube SELECT ID FROM test_cube", queryConf); ctx.setOlapQuery(true); ctx.getDriverContext().setDriverRewriterPlan(driver, new DriverQueryPlan() { @Override public String getPlan() { return null; } @Override public QueryCost getCost() { return null; } @Override public Map<String, Set<?>> getPartitions() { return Maps.newHashMap(); } }); QueryCost cost = driver.estimate(ctx); assertEquals(cost.getEstimatedResourceUsage(), 0.0); cost.getEstimatedExecTimeMillis(); }