public Map<String, Set<?>> getAllPartitions(AbstractQueryContext queryContext, LensDriver driver) { if (queryContext.getDriverRewriterPlan(driver) != null) { return queryContext.getDriverRewriterPlan(driver).getPartitions(); } return Maps.newHashMap(); } }
/** * To query plan. * * @return the query plan * @throws UnsupportedEncodingException the unsupported encoding exception */ public QueryPlan toQueryPlan() throws UnsupportedEncodingException { return new QueryPlan(new ArrayList<>(tablesQueried), hasSubQuery, execMode != null ? execMode.name() : null, scanMode != null ? scanMode.name() : null, handle, URLEncoder.encode(getPlan(), "UTF-8"), new QueryCostTOBuilder(getCost()).build()); } }
public Map<String, Double> getTableWeights(LensDriver driver) { return getDriverContext().getDriverRewriterPlan(driver).getTableWeights(); }
/** * Test explain output. * * @throws Exception the exception */ @Test public void testExplainOutput() throws Exception { int handleSize = getHandleSize(); createTestTable("explain_test_1"); createTestTable("explain_test_2"); SessionState.setCurrentSessionState(ss); DriverQueryPlan plan = driver.explain(createExplainContext("SELECT explain_test_1.ID, count(1) FROM " + " explain_test_1 join explain_test_2 on explain_test_1.ID = explain_test_2.ID" + " WHERE explain_test_1.ID = 'foo' or explain_test_2.ID = 'bar'" + " GROUP BY explain_test_1.ID", queryConf)); assertHandleSize(handleSize); assertTrue(plan instanceof HiveQueryPlan); assertNotNull(plan.getTablesQueried()); assertEquals(plan.getTablesQueried().size(), 2); assertNotNull(plan.getTableWeights()); assertTrue(plan.getTableWeights().containsKey(dataBase + ".explain_test_1")); assertTrue(plan.getTableWeights().containsKey(dataBase + ".explain_test_2")); assertTrue(plan.getPlan() != null && !plan.getPlan().isEmpty()); driver.closeQuery(plan.getHandle()); }
ctx.getDriverContext().getDriverRewriterPlan(driver).getPartitions().putAll( new HashMap<String, Set<FactPartition>>() { ctx.getDriverContext().getDriverRewriterPlan(driver).getTableWeights().putAll( new HashMap<String, Double>() {
/** * Test explain partitioned table * * @throws Exception the exception */ @Test public void testExplainPartitionedTable() throws Exception { int handleSize = getHandleSize(); createPartitionedTable("test_part_table"); // acquire SessionState.setCurrentSessionState(ss); DriverQueryPlan plan = driver.explain(createExplainContext("SELECT ID FROM test_part_table", queryConf)); assertHandleSize(handleSize); assertTrue(plan instanceof HiveQueryPlan); assertNotNull(plan.getTablesQueried()); assertEquals(plan.getTablesQueried().size(), 1); System.out.println("Tables:" + plan.getTablesQueried()); assertEquals(plan.getTableWeight(dataBase + ".test_part_table"), 500.0); System.out.println("Parts:" + plan.getPartitions()); assertFalse(plan.getPartitions().isEmpty()); assertEquals(plan.getPartitions().size(), 1); assertTrue(((String) plan.getPartitions().get(dataBase + ".test_part_table").iterator().next()).contains("today")); assertTrue(((String) plan.getPartitions().get(dataBase + ".test_part_table").iterator().next()).contains("dt")); }
/** * Test explain output persistent. * * @throws Exception the exception */ @Test public void testExplainOutputPersistent() throws Exception { int handleSize = getHandleSize(); createTestTable("explain_test_1"); queryConf.setBoolean(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, true); SessionState.setCurrentSessionState(ss); String query2 = "SELECT DISTINCT ID FROM explain_test_1"; PreparedQueryContext pctx = createPreparedQueryContext(query2); pctx.setSelectedDriver(driver); pctx.setLensSessionIdentifier(sessionid); DriverQueryPlan plan2 = driver.explainAndPrepare(pctx); // assertNotNull(plan2.getResultDestination()); assertHandleSize(handleSize); assertNotNull(plan2.getTablesQueried()); assertEquals(plan2.getTablesQueried().size(), 1); assertTrue(plan2.getTableWeights().containsKey(dataBase + ".explain_test_1")); QueryContext ctx = createContext(pctx, queryConf); LensResultSet resultSet = driver.execute(ctx); assertHandleSize(handleSize); HivePersistentResultSet persistentResultSet = (HivePersistentResultSet) resultSet; String path = persistentResultSet.getOutputPath(); assertEquals(ctx.getDriverResultPath(), path); driver.closeQuery(plan2.getHandle()); }
@Override public DriverQueryPlan explainAndPrepare(PreparedQueryContext pContext) throws LensException { DriverQueryPlan plan = explain(pContext); plan.setPrepareHandle(pContext.getPrepareHandle()); return plan; }
@Override public QueryPlan explain(final String requestId, LensSessionHandle sessionHandle, String query, LensConf lensConf) throws LensException { try { log.info("Explain: session:{} query:{}", sessionHandle, query); acquire(sessionHandle); Configuration qconf = getLensConf(sessionHandle, lensConf); ExplainQueryContext explainQueryContext = new ExplainQueryContext(requestId, query, getSession(sessionHandle) .getLoggedInUser(), lensConf, qconf, drivers.values()); explainQueryContext.setLensSessionIdentifier(sessionHandle.getPublicId().toString()); accept(query, qconf, SubmitOp.EXPLAIN); rewriteAndSelect(explainQueryContext); addSessionResourcesToDriver(explainQueryContext); return explainQueryContext.getSelectedDriver().explain(explainQueryContext).toQueryPlan(); } catch (UnsupportedEncodingException e) { throw new LensException(e); } finally { release(sessionHandle); } }
DriverQueryPlan plan = driver.explain(createExplainContext("SELECT ID FROM test_explain", queryConf)); assertTrue(plan instanceof HiveQueryPlan); assertEquals(plan.getTableWeight(dataBase + ".test_explain"), 500.0); assertHandleSize(handleSize);
ctx.getDriverContext().getDriverRewriterPlan(driver).getPartitions().putAll( new HashMap<String, Set<String>>() { ctx.getDriverContext().getDriverRewriterPlan(driver).getTableWeights().putAll( new HashMap<String, Double>() {
@Override public DriverQueryPlan explainAndPrepare(PreparedQueryContext pContext) throws LensException { DriverQueryPlan plan = explain(pContext); plan.setPrepareHandle(pContext.getPrepareHandle()); return plan; }
@Override public QueryPlan explainAndPrepare(LensSessionHandle sessionHandle, String query, LensConf lensConf, String queryName) throws LensException { PreparedQueryContext prepared = null; try { log.info("ExplainAndPrepare: session:{} query: {}", sessionHandle, query); acquire(sessionHandle); prepared = prepareQuery(sessionHandle, query, lensConf, SubmitOp.EXPLAIN_AND_PREPARE); prepared.setQueryName(queryName); addSessionResourcesToDriver(prepared); QueryPlan plan = prepared.getSelectedDriver().explainAndPrepare(prepared).toQueryPlan(); plan.setPrepareHandle(prepared.getPrepareHandle()); return plan; } catch (LensException e) { if (prepared != null) { destroyPreparedQuery(prepared); } throw e; } catch (UnsupportedEncodingException e) { if (prepared != null) { destroyPreparedQuery(prepared); } throw new LensException(e); } finally { release(sessionHandle); } }
public Map<String, Set<?>> getAllPartitions(AbstractQueryContext queryContext, LensDriver driver) { if (queryContext.getDriverRewriterPlan(driver) != null) { return queryContext.getDriverRewriterPlan(driver).getPartitions(); } return Maps.newHashMap(); } }
/** * To query plan. * * @return the query plan * @throws UnsupportedEncodingException the unsupported encoding exception */ public QueryPlan toQueryPlan() throws UnsupportedEncodingException { return new QueryPlan(new ArrayList<>(tablesQueried), hasSubQuery, execMode != null ? execMode.name() : null, scanMode != null ? scanMode.name() : null, handle, URLEncoder.encode(getPlan(), "UTF-8"), new QueryCostTOBuilder(getCost()).build()); } }
@Override public DriverQueryPlan explainAndPrepare(PreparedQueryContext pContext) throws LensException { DriverQueryPlan p = new MockQueryPlan(pContext.getSelectedDriverQuery()); p.setPrepareHandle(pContext.getPrepareHandle()); return p; }
public Map<String, Double> getTableWeights(LensDriver driver) { return getDriverContext().getDriverRewriterPlan(driver).getTableWeights(); }
@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()); } }
System.out.println("@@ partitions" + plan.getPartitions()); Assert.assertEquals(plan.getPartitions().size(), 2); Assert.assertTrue(plan.getPartitions().containsKey(dbName + ".table_1")); Assert.assertEquals(plan.getPartitions().get(dbName + ".table_1").size(), 5); Assert.assertTrue(plan.getPartitions().containsKey(dbName + ".table_2")); Assert.assertEquals(plan.getPartitions().get(dbName + ".table_2").size(), 1);
@BeforeTest public void setUp() { driver = mock(LensDriver.class); when(driver.getConf()).thenReturn(new Configuration()); queryContext = mock(AbstractQueryContext.class); calculator.init(driver); ImmutableMap<String, Double> tableWeights = new ImmutableMap.Builder<String, Double>().build(); FactPartition fp1 = mockFactPartition(DAILY, tableWeights, 0.7); FactPartition fp2 = mockFactPartition(HOURLY, tableWeights, 0.8); FactPartition fp3 = mockFactPartition(SECONDLY, tableWeights, 0.4); FactPartition fp4 = mockFactPartition(MONTHLY, tableWeights, 0); when(queryContext.getTableWeights(driver)).thenReturn(tableWeights); HashMap<String, Set<?>> partitions = new HashMap<>(); partitions.put("st1", Sets.newHashSet(fp1, fp2)); partitions.put("st2", Sets.newHashSet(fp3, fp4)); partitions.put("st3", Sets.newHashSet(latest)); DriverQueryPlan plan = mock(DriverQueryPlan.class); when(queryContext.getDriverRewriterPlan(driver)).thenReturn(plan); when(plan.getPartitions()).thenReturn(partitions); when(calculator.getAllPartitions(queryContext, driver)).thenReturn(partitions); }