5.1.20 Multi-Query
What is Multi-Query
Note: The concept of Multi-Query is described in our GridDB_TechnicalReference (Section 4.7.2)
Create query
List.1 Create query(MultiQuery.java)
private static List<Query<?>> createQueries(TimeSeries<InstrumentLog> logTs)
throws ParseException, GSException {
// Set TimeSeries conditions
Date start = TimestampUtils.getFormat().parse("2016-07-01T06:00:00Z");
Date end = TimestampUtils.getFormat().parse("2016-07-01T18:00:00Z");
List<Query<?>> queries = new ArrayList<>();
// Get Max Temperture
String maxTempertureTql = String.format(
"SELECT MAX(temperture) WHERE"
+ " TIMESTAMP('%s') < timestamp AND timestamp < TIMESTAMP('%s')",
TimestampUtils.format(start), TimestampUtils.format(end));
Query<AggregationResult> maxTempertureQuery =
logTs.query(maxTempertureTql, AggregationResult.class);
queries.add(maxTempertureQuery);
// Get Min Temperture
String minTempertureTql = String.format(
"SELECT MIN(temperture) WHERE"
+ " TIMESTAMP('%s') < timestamp AND timestamp < TIMESTAMP('%s')",
TimestampUtils.format(start), TimestampUtils.format(end));
Query<AggregationResult> minTempertureQuery =
logTs.query(minTempertureTql, AggregationResult.class);
queries.add(minTempertureQuery);
// Get Average
String avgTempertureTql = String.format(
"SELECT AVG(temperture) WHERE"
+ " TIMESTAMP('%s') < timestamp AND timestamp < TIMESTAMP('%s')",
TimestampUtils.format(start), TimestampUtils.format(end));
Query<AggregationResult> avgTempertureQuery =
logTs.query(avgTempertureTql, AggregationResult.class);
queries.add(avgTempertureQuery);
// Retrieve by time range
Query<InstrumentLog> timeRangeQuery = logTs.query(start, end);
queries.add(timeRangeQuery);
return queries;
}
Multi-Query execution
List.2 Multi-Query execution(MultiQuery.java)
// Create Connection
store = gridLogic.createGridStore();
// Get InstrumentLog
TimeSeries<InstrumentLog> logTs =
store.getTimeSeries("weather_station_1", InstrumentLog.class);
// Create query list
List<Query<?>> queries = createQueries(logTs);
// Execute Multi Query
store.fetchAll(queries);
Result of Multi-Query execution
List.3 Obtain of Multi-Query results(MultiQuery.java)
// Retrieve reulsts
for (Query<?> query : queries) {
RowSet<?> rowSet = query.getRowSet();
while (rowSet.hasNext()) {
Object rowObj = rowSet.next();
if (rowObj instanceof AggregationResult) {
// When retrieve AggregationResult
AggregationResult aggregation = (AggregationResult) rowObj;
System.out.println("AggregationResult:" + aggregation.getDouble());
} else if (rowObj instanceof InstrumentLog) {
// When retrieve InstrumentLog
InstrumentLog log = (InstrumentLog) rowObj;
System.out.println(String.format("%s\t%-20s\t%-10s", log.timestamp,
log.weatherStationId, log.temperture));
} else {
// Do not reach in this sample
System.out.println(rowObj);
}
}
}
List.4 Result of Multi-Get execution
AggregationResult:70.0 AggregationResult:50.0 AggregationResult:60.0 Fri Jul 01 15:00:00 EDT 2016 weather_station_1 75.0 Fri Jul 01 18:00:00 EDT 2016 weather_station_1 70.0 Fri Jul 01 21:00:00 EDT 2016 weather_station_1 60.0 Sat Jul 02 00:00:00 EDT 2016 weather_station_1 50.0 Sat Jul 02 03:00:00 EDT 2016 weather_station_1 60.0 AggregationResult:70.0 AggregationResult:50.0 AggregationResult:60.0 Fri Jul 01 15:00:00 EDT 2016 weather_station_2 75.0 Fri Jul 01 18:00:00 EDT 2016 weather_station_2 70.0 Fri Jul 01 21:00:00 EDT 2016 weather_station_2 60.0 Sat Jul 02 00:00:00 EDT 2016 weather_station_2 50.0 Sat Jul 02 03:00:00 EDT 2016 weather_station_2 60.0
Source Code
Complete source code used in this sample can be downloaded from the following.