Skip to content

calvernaz/time-query

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TimeQuery: Query time library for Java

Timequery is an utility library to query time based events. It's small, slow and unmaintainable.

Requires JDK 1.8.

Latest release

To add a dependency on Guava using Maven, use the following:

<dependency>
  <groupId>org.weirdloop</groupId>
  <artifactId>time-query</artifactId>
  <version>1.0</version>
</dependency>

Usage

TimeEvent

Time events can hold the any type of data, but keys are temporal instances.

    TimeEvent.create(Instant.now());

or

    TimeEvent.create(Instant.now(), 3);

TimeQueue

Holds a queue with time events.

TimeQueue queue = TimeQueue.create(new LinkedList<>());
queue.add(TimeEvent.create(instant, value));

TimeQuery

select count(event) from events where time > now() -1h groupy by time(5m), event

The equivalent of this typical query, at least on time-series databases, using TimeQuery.

    Map<Integer, Long> histogram = TimeQuery.create(events)
                                   .downTo(Span.of(create(minusAnHour), create(now)))
                                   .groupBy(Buckets.of(5, ChronoUnit.MINUTES))
                                   .histogram();

    // Result
    {0, 3}, {1, 5}, {2, 10}, ... {bucket-index, count} 

Or just the interval windows:

    TimeWindow<TimeEvent> windows = TimeQuery.create(events)
                               .groupBy(Buckets.of(5, ChronoUnit.MINUTES))
                               .windows();

    // Result
    TimeWindow:
      [0] -> TimeWindowInterval@{TimeEvent[0], TimeEvent[1], TimeEvent[2], TimeEvent[3], TimeEvent[4]}
      [1] -> TimeWindowInterval@{TimeEvent[5], TimeEvent[6], TimeEvent[7], TimeEvent[8], TimeEvent[9]}

Or using an interval spans:

    TimeWindow<TimeEvent> timeWindow = TimeQuery.create(events)
                                        .interval(Span.openClosed(create(fourHoursAgo), create(twoHoursAgo)))
                                        .windows();

   // Result
   TimeWindow:
     TimeWindowInterval@{TimeEvent[0], TimeEvent[1], ...}

Or even:

    TimeWindow rangeQuery = TimeQuery.create(events)
                             .downTo(Span.closedOpen(create(AnHourAgo), create(now)))
                             .groupBy(Buckets.of(1, ChronoUnit.MINUTES))
                             .windows();

About

Time query is an utility library to query time based events

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages