mirror of https://github.com/apache/druid.git
toy SQL runner
This commit is contained in:
parent
4e765f6754
commit
6a40072d50
|
@ -0,0 +1,87 @@
|
||||||
|
package com.metamx.druid.sql;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectWriter;
|
||||||
|
import com.metamx.druid.Druids;
|
||||||
|
import com.metamx.druid.Query;
|
||||||
|
import com.metamx.druid.aggregation.AggregatorFactory;
|
||||||
|
import com.metamx.druid.jackson.DefaultObjectMapper;
|
||||||
|
import com.metamx.druid.query.dimension.DimensionSpec;
|
||||||
|
import com.metamx.druid.query.group.GroupByQuery;
|
||||||
|
import com.metamx.druid.sql.antlr4.DruidSQLLexer;
|
||||||
|
import com.metamx.druid.sql.antlr4.DruidSQLParser;
|
||||||
|
import org.antlr.v4.runtime.ANTLRInputStream;
|
||||||
|
import org.antlr.v4.runtime.CharStream;
|
||||||
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
|
import org.antlr.v4.runtime.TokenStream;
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.httpclient.methods.PostMethod;
|
||||||
|
import org.apache.commons.httpclient.methods.StringRequestEntity;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class SQLRunner
|
||||||
|
{
|
||||||
|
private static final String STATEMENT = "select count(*), sum(count) / count(*) as avg from wikipedia where"
|
||||||
|
+ " timestamp between '2013-02-01' and '2013-02-14'"
|
||||||
|
+ " and namespace = 'article'"
|
||||||
|
+ " and ( language = 'en' or language = 'fr' ) "
|
||||||
|
+ " group by granularity(timestamp, 'day'), language";
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception
|
||||||
|
{
|
||||||
|
String hostname = args.length > 0 ? args[0] : "localhost";
|
||||||
|
String sql = args.length > 1 ? args[1] : STATEMENT;
|
||||||
|
|
||||||
|
ObjectWriter json = new DefaultObjectMapper().writerWithDefaultPrettyPrinter();
|
||||||
|
|
||||||
|
CharStream stream = new ANTLRInputStream(sql);
|
||||||
|
DruidSQLLexer lexer = new DruidSQLLexer(stream);
|
||||||
|
TokenStream tokenStream = new CommonTokenStream(lexer);
|
||||||
|
DruidSQLParser parser = new DruidSQLParser(tokenStream);
|
||||||
|
|
||||||
|
|
||||||
|
DruidSQLParser.QueryContext q = parser.query();
|
||||||
|
|
||||||
|
parser.setBuildParseTree(true);
|
||||||
|
System.err.println(q.toStringTree(parser));
|
||||||
|
|
||||||
|
Query query;
|
||||||
|
|
||||||
|
if(parser.groupByDimensions.isEmpty()) {
|
||||||
|
query = Druids.newTimeseriesQueryBuilder()
|
||||||
|
.dataSource(parser.getDataSource())
|
||||||
|
.aggregators(new ArrayList<AggregatorFactory>(parser.aggregators.values()))
|
||||||
|
.postAggregators(parser.postAggregators)
|
||||||
|
.intervals(parser.intervals)
|
||||||
|
.granularity(parser.granularity)
|
||||||
|
.filters(parser.filter)
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
query = GroupByQuery.builder()
|
||||||
|
.setDataSource(parser.getDataSource())
|
||||||
|
.setAggregatorSpecs(new ArrayList<AggregatorFactory>(parser.aggregators.values()))
|
||||||
|
.setPostAggregatorSpecs(parser.postAggregators)
|
||||||
|
.setInterval(parser.intervals)
|
||||||
|
.setGranularity(parser.granularity)
|
||||||
|
.setDimFilter(parser.filter)
|
||||||
|
.setDimensions(new ArrayList<DimensionSpec>(parser.groupByDimensions.values()))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
String queryStr = json.writeValueAsString(query);
|
||||||
|
System.err.println(queryStr);
|
||||||
|
|
||||||
|
PostMethod req = new PostMethod("http://" + hostname + "/druid/v2/?pretty");
|
||||||
|
req.setRequestEntity(new StringRequestEntity(queryStr, "application/json", "utf-8"));
|
||||||
|
new HttpClient().executeMethod(req);
|
||||||
|
|
||||||
|
BufferedReader stdInput = new BufferedReader(new
|
||||||
|
InputStreamReader(req.getResponseBodyAsStream()));
|
||||||
|
|
||||||
|
String s; while ((s = stdInput.readLine()) != null) System.out.println(s);
|
||||||
|
|
||||||
|
stdInput.close();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue