@Parameterized.Parameters public static List<Object[]> testParameters() { Object[][] params = { /* left-windowing, right-windowing, join-windowing, expected-failure */ {null, null, null, false}, {GlobalWindowing.get(), GlobalWindowing.get(), null, false}, {GlobalWindowing.get(), null, null, false}, {null, GlobalWindowing.get(), null, false}, {Time.of(Duration.ofMinutes(1)), null, null, true}, {null, Time.of(Duration.ofMinutes(1)), null, true}, {Time.of(Duration.ofMinutes(1)), Time.of(Duration.ofMinutes(1)), null, true}, {GlobalWindowing.get(), Time.of(Duration.ofMinutes(1)), null, true}, {Time.of(Duration.ofMinutes(1)), GlobalWindowing.get(), null, true}, {Time.of(Duration.ofMinutes(1)), null, Time.of(Duration.ofHours(1)), false}, {GlobalWindowing.get(), Time.of(Duration.ofMinutes(1)), Time.of(Duration.ofMinutes(1)), false}, {null, Time.of(Duration.ofMinutes(1)), GlobalWindowing.get(), false}, {Time.of(Duration.ofMinutes(1)), null, Count.of(10), false}, {Time.of(Duration.ofMinutes(1)), Count.of(11), GlobalWindowing.get(), false}, {Time.of(Duration.ofMinutes(1)), Count.of(11), Time.of(Duration.ofMinutes(1)), false} }; return Arrays.asList(params); }
public static <T> Time<T> of(Duration duration) { return new Time<>(duration.toMillis()); }
@Test public void testTimeBuilders() { assertTimeWindowing( Time.of(Duration.ofSeconds(100)), 100 * 1000, null); assertTimeWindowing( Time.of(Duration.ofSeconds(20)).earlyTriggering(Duration.ofSeconds(10)), 20 * 1000, Duration.ofSeconds(10)); assertTimeWindowing( Time.of(Duration.ofSeconds(4)) .earlyTriggering(Duration.ofSeconds(10)), 4 * 1000, Duration.ofSeconds(10)); assertTimeWindowing( Time.of(Duration.ofSeconds(3)) .earlyTriggering(Duration.ofHours(1)), 3 * 1000, Duration.ofHours(1)); assertTimeWindowing( Time.of(Duration.ofSeconds(8)), 8 * 1000, null); }
private <T> void assertTimeWindowing(Time<T> w, long expectDurationMillis, Duration expectEarlyTriggeringPeriod) { assertNotNull(w); assertEquals(expectEarlyTriggeringPeriod, w.getEarlyTriggeringPeriod()); assertEquals(expectDurationMillis, w.getDuration()); }
@Test public void testWindowAssignment() { Time<?> windowing = Time.of(Duration.ofMillis(10)); Iterable<TimeInterval> windows = windowing.assignWindowsToElement(new TimestampedElement<>(11)); assertEquals(1, Iterables.size(windows)); assertEquals(new TimeInterval(10, 20), Iterables.getOnlyElement(windows)); windows = windowing.assignWindowsToElement(new TimestampedElement<>(10)); assertEquals(1, Iterables.size(windows)); assertEquals(new TimeInterval(10, 20), Iterables.getOnlyElement(windows)); windows = windowing.assignWindowsToElement(new TimestampedElement<>(9)); assertEquals(1, Iterables.size(windows)); assertEquals(new TimeInterval(0, 10), Iterables.getOnlyElement(windows)); }
@Parameterized.Parameters public static List<Object[]> testParameters() { Object[][] params = { /* left-windowing, right-windowing, join-windowing, expected-failure */ {null, null, null, false}, {GlobalWindowing.get(), GlobalWindowing.get(), null, false}, {GlobalWindowing.get(), null, null, false}, {null, GlobalWindowing.get(), null, false}, {Time.of(Duration.ofMinutes(1)), null, null, true}, {null, Time.of(Duration.ofMinutes(1)), null, true}, {Time.of(Duration.ofMinutes(1)), Time.of(Duration.ofMinutes(1)), null, true}, {GlobalWindowing.get(), Time.of(Duration.ofMinutes(1)), null, true}, {Time.of(Duration.ofMinutes(1)), GlobalWindowing.get(), null, true}, {Time.of(Duration.ofMinutes(1)), null, Time.of(Duration.ofHours(1)), false}, {GlobalWindowing.get(), Time.of(Duration.ofMinutes(1)), Time.of(Duration.ofMinutes(1)), false}, {null, Time.of(Duration.ofMinutes(1)), GlobalWindowing.get(), false}, {Time.of(Duration.ofMinutes(1)), null, Count.of(10), false}, {Time.of(Duration.ofMinutes(1)), Count.of(11), GlobalWindowing.get(), false}, {Time.of(Duration.ofMinutes(1)), Count.of(11), Time.of(Duration.ofMinutes(1)), false} }; return Arrays.asList(params); }
return s; }) .windowBy(Time.of(Duration.ofMillis(6)) .earlyTriggering(Duration.ofMillis(2))) .output();
public static <T> Time<T> of(Duration duration) { return new Time<>(duration.toMillis()); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { return SumByKey.of(input) .keyBy(e -> e % 2) .valueBy(e -> (long) e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { return SumByKey.of(input) .keyBy(e -> e % 2) .valueBy(e -> (long) e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Integer> getOutput(Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return Distinct.of(input) .mapped(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput( Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return CountByKey.of(input) .keyBy(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Integer> getOutput(Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return Distinct.of(input) .mapped(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput( Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return CountByKey.of(input) .keyBy(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Integer> getOutput(Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return Distinct.of(input) .mapped(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Integer> getOutput(Dataset<Pair<Integer, Long>> input) { input = AssignEventTime.of(input).using(Pair::getSecond).output(); return Distinct.of(input) .mapped(Pair::getFirst) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { // ~ use stable event-time watermark input = AssignEventTime.of(input).using(e -> 0).output(); return CountByKey.of(input) .keyBy(e -> e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { // ~ use stable event-time watermark input = AssignEventTime.of(input).using(e -> 0).output(); return CountByKey.of(input) .keyBy(e -> e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { // ~ use stable event-time watermark input = AssignEventTime.of(input).using(e -> 0).output(); return CountByKey.of(input) .keyBy(e -> e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }
@Override protected Dataset<Pair<Integer, Long>> getOutput(Dataset<Integer> input) { // ~ use stable event-time watermark input = AssignEventTime.of(input).using(e -> 0).output(); return CountByKey.of(input) .keyBy(e -> e) .windowBy(Time.of(Duration.ofSeconds(1))) .output(); }