/** * Explain and prepare. * * @param sql the sql * @param queryName the query name * @return the string * @throws UnsupportedEncodingException the unsupported encoding exception * @throws LensAPIException */ @CliCommand( value = "prepQuery explain", help = "Explain and prepare query <query-string>. Can optionally provide <query-name>") public String explainAndPrepare( @CliOption( key = {"", "query"}, mandatory = true, help = "<query-string>") String sql, @CliOption( key = {"name"}, mandatory = false, help = "<query-name>") String queryName) throws UnsupportedEncodingException, LensAPIException { PrettyPrintable cliOutput; try { QueryPlan plan = getClient().explainAndPrepare(sql, queryName).getData(); return plan.getPlanString() + "\n" + "Prepare handle:" + plan.getPrepareHandle(); } catch (final LensAPIException e) { BriefError briefError = new BriefError(e.getLensAPIErrorCode(), e.getLensAPIErrorMessage()); cliOutput = new IdBriefErrorTemplate( IdBriefErrorTemplateKey.REQUEST_ID, e.getLensAPIRequestId(), briefError); } catch (final LensBriefErrorException e) { cliOutput = e.getIdBriefErrorTemplate(); } return cliOutput.toPrettyString(); }
/** * Explain query. * * @param sql the sql * @return the string * @throws LensAPIException * @throws UnsupportedEncodingException the unsupported encoding exception */ @CliCommand( value = "query explain", help = "Explain execution plan of query <query-string>. " + "Can optionally save the plan to a file by providing <save_location>") public String explainQuery( @CliOption( key = {"", "query"}, mandatory = true, help = "<query-string>") String sql, @CliOption( key = {"save_location"}, mandatory = false, help = "<save_location>") final File path) throws IOException, LensAPIException { PrettyPrintable cliOutput; try { QueryPlan plan = getClient().getQueryPlan(sql).getData(); if (path != null && StringUtils.isNotBlank(path.getPath())) { String validPath = getValidPath(path, false, false); try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(validPath), Charset.defaultCharset())) { osw.write(plan.getPlanString()); } return "Saved to " + validPath; } return plan.getPlanString(); } catch (final LensAPIException e) { BriefError briefError = new BriefError(e.getLensAPIErrorCode(), e.getLensAPIErrorMessage()); cliOutput = new IdBriefErrorTemplate( IdBriefErrorTemplateKey.REQUEST_ID, e.getLensAPIRequestId(), briefError); } catch (final LensBriefErrorException e) { cliOutput = e.getIdBriefErrorTemplate(); } return cliOutput.toPrettyString(); }