Search in sources :

Example 51 with StreamsQuery

use of org.apache.rya.streams.api.entity.StreamsQuery in project incubator-rya by apache.

the class StreamResultsCommand method execute.

@Override
public void execute(final String[] args) throws ArgumentsException, ExecutionException {
    requireNonNull(args);
    // Parse the command line arguments.
    final StreamResultsParameters params = new StreamResultsParameters();
    try {
        new JCommander(params, args);
    } catch (final ParameterException e) {
        throw new ArgumentsException("Could not stream the query's results because of invalid command line parameters.", e);
    }
    // Create the Kafka backed QueryChangeLog.
    final String bootstrapServers = params.kafkaIP + ":" + params.kafkaPort;
    final String topic = KafkaTopics.queryChangeLogTopic(params.ryaInstance);
    final QueryChangeLog queryChangeLog = KafkaQueryChangeLogFactory.make(bootstrapServers, topic);
    // Parse the Query ID from the command line parameters.
    final UUID queryId;
    try {
        queryId = UUID.fromString(params.queryId);
    } catch (final IllegalArgumentException e) {
        throw new ArgumentsException("Invalid Query ID " + params.queryId);
    }
    // The DeleteQuery command doesn't use the scheduled service feature.
    final Scheduler scheduler = Scheduler.newFixedRateSchedule(0L, 5, TimeUnit.SECONDS);
    final QueryRepository queryRepo = new InMemoryQueryRepository(queryChangeLog, scheduler);
    // Fetch the SPARQL of the query whose results will be streamed.
    final String sparql;
    try {
        final Optional<StreamsQuery> sQuery = queryRepo.get(queryId);
        if (!sQuery.isPresent()) {
            throw new ExecutionException("Could not read the results for query with ID " + queryId + " because no such query exists.");
        }
        sparql = sQuery.get().getSparql();
    } catch (final Exception e) {
        throw new ExecutionException("Problem encountered while closing the QueryRepository.", e);
    }
    // This command executes until the application is killed, so create a kill boolean.
    final AtomicBoolean finished = new AtomicBoolean(false);
    Runtime.getRuntime().addShutdownHook(new Thread() {

        @Override
        public void run() {
            finished.set(true);
        }
    });
    // Build the interactor based on the type of result the query produces.
    final GetQueryResultStream<?> getQueryResultStream;
    try {
        final TupleExpr tupleExpr = new SPARQLParser().parseQuery(sparql, null).getTupleExpr();
        if (tupleExpr instanceof Reduced) {
            getQueryResultStream = new KafkaGetQueryResultStream<>(params.kafkaIP, params.kafkaPort, VisibilityStatementDeserializer.class);
        } else {
            getQueryResultStream = new KafkaGetQueryResultStream<>(params.kafkaIP, params.kafkaPort, VisibilityBindingSetDeserializer.class);
        }
    } catch (final MalformedQueryException e) {
        throw new ExecutionException("Could not parse the SPARQL for the query: " + sparql, e);
    }
    // Iterate through the results and print them to the console until the program or the stream ends.
    try (final QueryResultStream<?> stream = getQueryResultStream.fromStart(params.ryaInstance, queryId)) {
        while (!finished.get()) {
            for (final Object result : stream.poll(1000)) {
                System.out.println(result);
            }
        }
    } catch (final Exception e) {
        System.err.println("Error while reading the results from the stream.");
        e.printStackTrace();
        System.exit(1);
    }
}
Also used : StreamsQuery(org.apache.rya.streams.api.entity.StreamsQuery) Scheduler(com.google.common.util.concurrent.AbstractScheduledService.Scheduler) InMemoryQueryRepository(org.apache.rya.streams.api.queries.InMemoryQueryRepository) QueryChangeLog(org.apache.rya.streams.api.queries.QueryChangeLog) Reduced(org.openrdf.query.algebra.Reduced) JCommander(com.beust.jcommander.JCommander) MalformedQueryException(org.openrdf.query.MalformedQueryException) ParameterException(com.beust.jcommander.ParameterException) InMemoryQueryRepository(org.apache.rya.streams.api.queries.InMemoryQueryRepository) QueryRepository(org.apache.rya.streams.api.queries.QueryRepository) UUID(java.util.UUID) SPARQLParser(org.openrdf.query.parser.sparql.SPARQLParser) VisibilityBindingSetDeserializer(org.apache.rya.streams.kafka.serialization.VisibilityBindingSetDeserializer) VisibilityStatementDeserializer(org.apache.rya.streams.kafka.serialization.VisibilityStatementDeserializer) ParameterException(com.beust.jcommander.ParameterException) MalformedQueryException(org.openrdf.query.MalformedQueryException) TupleExpr(org.openrdf.query.algebra.TupleExpr) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean)

Aggregations

StreamsQuery (org.apache.rya.streams.api.entity.StreamsQuery)51 Test (org.junit.Test)40 UUID (java.util.UUID)24 RyaStreamsClient (org.apache.rya.streams.api.RyaStreamsClient)14 CountDownLatch (java.util.concurrent.CountDownLatch)10 RyaClient (org.apache.rya.api.client.RyaClient)10 AccumuloConnectionDetails (org.apache.rya.api.client.accumulo.AccumuloConnectionDetails)10 ConsolePrinter (org.apache.rya.shell.util.ConsolePrinter)10 SparqlPrompt (org.apache.rya.shell.util.SparqlPrompt)10 QueryChangeLog (org.apache.rya.streams.api.queries.QueryChangeLog)9 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)8 RyaStreamsException (org.apache.rya.streams.api.exception.RyaStreamsException)8 KafkaStreamsFactory (org.apache.rya.streams.kafka.KafkaStreamsFactory)8 CreateKafkaTopic (org.apache.rya.streams.kafka.interactor.CreateKafkaTopic)8 QueryExecutor (org.apache.rya.streams.querymanager.QueryExecutor)8 ArrayBlockingQueue (java.util.concurrent.ArrayBlockingQueue)7 KafkaStreams (org.apache.kafka.streams.KafkaStreams)7 QueryEvent (org.apache.rya.streams.querymanager.QueryManager.QueryEvent)7 InMemoryQueryChangeLog (org.apache.rya.streams.api.queries.InMemoryQueryChangeLog)6 HashSet (java.util.HashSet)5