From 3118f247ffbfec418b193e86a75fcd171c02802b Mon Sep 17 00:00:00 2001 From: melissa Date: Wed, 1 Mar 2017 19:54:17 -0800 Subject: [PATCH 1/2] Add windowing section to programming guide --- src/documentation/programming-guide.md | 228 +++++++++++++++++++- src/images/fixed-time-windows.png | Bin 0 -> 12334 bytes src/images/session-windows.png | Bin 0 -> 16697 bytes src/images/sliding-time-windows.png | Bin 0 -> 17906 bytes src/images/unwindowed-pipeline-bounded.png | Bin 0 -> 9589 bytes src/images/windowing-pipeline-bounded.png | Bin 0 -> 13325 bytes src/images/windowing-pipeline-unbounded.png | Bin 0 -> 21890 bytes 7 files changed, 223 insertions(+), 5 deletions(-) create mode 100644 src/images/fixed-time-windows.png create mode 100644 src/images/session-windows.png create mode 100644 src/images/sliding-time-windows.png create mode 100644 src/images/unwindowed-pipeline-bounded.png create mode 100644 src/images/windowing-pipeline-bounded.png create mode 100644 src/images/windowing-pipeline-unbounded.png diff --git a/src/documentation/programming-guide.md b/src/documentation/programming-guide.md index f70d969e1e2..ec3c03e9db4 100644 --- a/src/documentation/programming-guide.md +++ b/src/documentation/programming-guide.md @@ -197,7 +197,7 @@ A `PCollection` can be either **bounded** or **unbounded** in size. A **bounded* The bounded (or unbounded) nature of your `PCollection` affects how Beam processes your data. A bounded `PCollection` can be processed using a batch job, which might read the entire data set once, and perform processing in a job of finite length. An unbounded `PCollection` must be processed using a streaming job that runs continuously, as the entire collection can never be available for processing at any one time. -When performing an operation that groups elements in an unbounded `PCollection`, Beam requires a concept called **Windowing** to divide a continuously updating data set into logical windows of finite size. Beam processes each window as a bundle, and processing continues as the data set is generated. These logical windows are determined by some characteristic associated with a data element, such as a **timestamp**. +When performing an operation that groups elements in an unbounded `PCollection`, Beam requires a concept called **windowing** to divide a continuously updating data set into logical windows of finite size. Beam processes each window as a bundle, and processing continues as the data set is generated. These logical windows are determined by some characteristic associated with a data element, such as a **timestamp**. #### Element timestamps @@ -1090,7 +1090,7 @@ PCollection numbers = p.begin() .apply(TextIO.Read.named("ReadNumbers") .from("gs://my_bucket/path/to/numbers-*.txt") - .withCoder(TextualIntegerCoder.of()));``` + .withCoder(TextualIntegerCoder.of())); ``` ```py @@ -1241,7 +1241,7 @@ To set the default Coder for a Java Integer int values for a pipeline. -```java +```java PipelineOptions options = PipelineOptionsFactory.create(); Pipeline p = Pipeline.create(options); @@ -1283,7 +1283,225 @@ public class MyCustomDataType { {:.language-py} The Beam SDK for Python does not support annotating data types with a default coder. If you would like to set a default coder, use the method described in the previous section, *Setting the default coder for a type*. - - +## Working with windowing + +Windowing subdivides a `PCollection` according to the timestamps of its individual elements. Beam transforms that aggregate multiple elements, such as `GroupByKey` and `Combine`, work implicitly on a per-window basis—that is, they process each `PCollection` as a succession of multiple, finite windows, though the entire collection itself may be of unbounded size. + +A related concept, called **triggers**, determines when to emit the results of aggregation as unbounded data arrives. Using a trigger can help to refine the windowing strategy for your `PCollection` to deal with late-arriving data or to provide early results. See the [triggers](#triggers) section for more information. + +### Windowing basics + +Windowing is most useful with an unbounded `PCollection`, which represents a continuously updating data set of unknown, and possibly infinite size (e.g. streaming data). Some Beam transforms, such as `GroupByKey` and `Combine`, group multiple elements by a common key. Ordinarily, that grouping operation groups all of the elements that have the same key within the entire data set. With an unbounded data set, it is impossible to collect all of the elements, since new elements are constantly being added and may be infinitely many. + +In the Beam model, any `PCollection` can be subdivided into logical windows. Each element in a `PCollection` is assigned to one or more windows according to the `PCollection`'s windowing function, and each individual window contains a finite number of elements. Grouping transforms then consider each `PCollection`'s elements on a per-window basis. `GroupByKey`, for example, implicitly groups the elements of a `PCollection` by _key and window_. + +**Caution:** Default windowing behavior is to assign all elements of a `PCollection` to a single, global window, _even for unbounded `PCollection`s_. Before you use a grouping transform such as `GroupByKey` on an unbounded `PCollection`, you must set a non-global windowing function. See [Setting your PCollection's windowing function](#setwindowingfunction). + +Alternatively, you can set a non-default [trigger](#triggers) for an unbounded `PCollection`. This allows the global window to emit results under other conditions, since the default windowing behavior (waiting for all data to arrive) will never occur. + +If you don't set a non-global windowing function or a non-default trigger for your unbounded `PCollection` and subsequently use a grouping transform such as `GroupByKey` or `Combine`, your pipeline will generate an error upon construction and your job will fail. + +#### Windowing constraints + +After you set the windowing function for a `PCollection`, the elements' windows are used the next time you apply a grouping transform to that `PCollection`. Window grouping occurs on an as-needed basis. If you set a windowing function using the `Window` transform, each element is assigned to a window, but the windows are not considered until `GroupByKey` or `Combine` aggregates across a window and key. This can have different effects on your pipeline. +Consider the example pipeline in the figure below: + +![Diagram of pipeline applying windowing]({{ "/images/windowing-pipeline-unbounded.png" | prepend: site.baseurl }} "Pipeline applying windowing") + +**Figure:** Pipeline applying windowing + +In the above pipeline, we create an unbounded `PCollection` by reading a set of key/value pairs using `KafkaIO`, and then apply a windowing function to that collection using the `Window` transform. We then apply a `ParDo` to the the collection, and then later group the result of that `ParDo` using `GroupByKey`. The windowing function has no effect on the `ParDo` transform, because the windows are not actually used until they're needed for the `GroupByKey`. +Subsequent transforms, however, are applied to the result of the `GroupByKey` -- data is grouped by both key and window. + +#### Using windowing with bounded PCollections + +You can use windowing with fixed-size data sets in **bounded** `PCollection`s. However, note that windowing considers only the implicit timestamps attached to each element of a `PCollection`, and data sources that create fixed data sets (such as `TextIO`) assign the same timestamp to every element. This means that all the elements are by default part of a single, global window. + +To use windowing with fixed data sets, you can assign your own timestamps to each element. To assign timestamps to elements, use a `ParDo` transform with a `DoFn` that outputs each element with a new timestamp (for example, the [WithTimestamps]({{ site.baseurl }}/documentation/sdks/javadoc/{{ site.release_latest }}/index.html?org/apache/beam/sdk/transforms/WithTimestamps.html) transform in the Beam SDK for Java). + +To illustrate how windowing with a bounded `PCollection` can affect how your pipeline processes data, consider the following pipeline: + +![Diagram of GroupByKey and ParDo without windowing, on a bounded collection]({{ "/images/unwindowed-pipeline-bounded.png" | prepend: site.baseurl }} "GroupByKey and ParDo without windowing, on a bounded collection") + +**Figure:** `GroupByKey` and `ParDo` without windowing, on a bounded collection. + +In the above pipeline, we create a bounded `PCollection` by reading a set of key/value pairs using `TextIO`. We then group the collection using `GroupByKey`, and apply a `ParDo` transform to the grouped `PCollection`. In this example, the `GroupByKey` creates a collection of unique keys, and then `ParDo` gets applied exactly once per key. + +Note that even if you don’t set a windowing function, there is still a window -- all elements in your `PCollection` are assigned to a single global window. + +Now, consider the same pipeline, but using a windowing function: + +![Diagram of GroupByKey and ParDo with windowing, on a bounded collection]({{ "/images/windowing-pipeline-bounded.png" | prepend: site.baseurl }} "GroupByKey and ParDo with windowing, on a bounded collection") + +**Figure:** `GroupByKey` and `ParDo` with windowing, on a bounded collection. + +As before, the pipeline creates a bounded `PCollection` of key/value pairs. We then set a [windowing function](#setwindowingfunction) for that `PCollection`. The `GroupByKey` transform groups the elements of the `PCollection` by both key and window, based on the windowing function. The subsequent `ParDo` transform gets applied multiple times per key, once for each window. + +### Windowing functions + +You can define different kinds of windows to divide the elements of your `PCollection`. Beam provides several windowing functions, including: + +* Fixed Time Windows +* Sliding Time Windows +* Per-Session Windows +* Single Global Window +* Calendar-based Windows (not supported by the Beam SDK for Python) + +Note that each element can logically belong to more than one window, depending on the windowing function you use. Sliding time windowing, for example, creates overlapping windows wherein a single element can be assigned to multiple windows. + +#### Fixed time windows + +The simplest form of windowing is using **fixed time windows**: given a timestamped `PCollection` which might be continuously updating, each window might capture (for example) five minutes worth of elements. + +A fixed time window represents a consistent duration, non overlapping time interval in the data stream. Consider windows with a five-minute duration: all of the elements in your unbounded `PCollection` with timestamp values from 0:00:00 up to (but not including) 0:05:00 belong to the first window, elements with timestamp values from 0:05:00 up to (but not including) 0:10:00 belong to the second window, and so on. + +![Diagram of fixed time windows, 30s in duration]({{ "/images/fixed-time-windows.png" | prepend: site.baseurl }} "Fixed time windows, 30s in duration") + +**Figure:** Fixed time windows, 30s in duration. + +#### Sliding time windows + +A **sliding time window** also represents time intervals in the data stream; however, with sliding time windowing, the windows overlap. For example, each window might capture five minutes worth of data, but a new window starts every ten seconds. The frequency with which sliding windows begin is called the _period_. Therefore, our example would have a window _duration_ of five minutes and a _period_ of ten seconds. + +Because multiple windows overlap, most elements in a data set will belong to more than one window. This kind of windowing is useful for taking running averages of data; using sliding time windows, you can compute a running average of the past five minutes' worth of data, updated every ten seconds, in our example. + +![Diagram of sliding time windows, with 1 minute window duration and 30s window period]({{ "/images/sliding-time-windows.png" | prepend: site.baseurl }} "Sliding time windows, with 1 minute window duration and 30s window period") + +**Figure:** Sliding time windows, with 1 minute window duration and 30s window period. + +#### Session windows + +A **session window** function defines windows that contain elements that are within a certain gap duration of another element. Session windowing applies on a per-key basis and is useful for data that is irregularly distributed with respect to time. For example, a data stream representing user mouse activity may have long periods of idle time interspersed with high concentrations of clicks. If data arrives after the minimum specified gap duration time, this initiates the start of a new window. + +![Diagram of session windows with a minimum gap duration]({{ "/images/session-windows.png" | prepend: site.baseurl }} "Session windows, with a minimum gap duration") + +**Figure:** Session windows, with a minimum gap duration. Note how each data key has different windows, according to its data distribution. + +#### Single global window + +By default, all data in a `PCollection` is assigned to a single global window. If your data set is of a fixed size, you can leave the global window default for your `PCollection`. + +You can use a single global window if you are working with an unbounded data set, e.g. from a streaming data source; however, use caution when applying aggregating transforms such as `GroupByKey` and `Combine`. A single global window with a default trigger generally requires the entire data set to be available before processing, which is not possible with continuously updating data. To perform aggregations on an unbounded `PCollection` that uses global windowing, you should specify a non-default trigger for that `PCollection`. + +### Setting your PCollection's windowing function + +You can set the windowing function for a `PCollection` by applying the `Window` transform. When you apply the `Window` transform, you must provide a `WindowFn`. The `WindowFn` determines the windowing function your `PCollection` will use for subsequent grouping transforms, such as a fixed or sliding time window. + +Beam provides pre-defined `WindownFn`s for the basic windowing functions. You can also define your own `WindowFn` if you have a more complex need. + +When setting a windowing function, you may also want to set a trigger for your `PCollection`. The trigger determines when each individual window is aggregated and emitted, and helps refine how the windowing function performs with respect to late data and computing early results. See the [triggers](#triggers) section for more information. + +#### Setting fixed-time windows + +The following example code shows how to apply `Window` to divide a `PCollection` into fixed windows, each one minute in length: +```java + PCollection items = ...; + PCollection fixed_windowed_items = items.apply( + Window.into(FixedWindows.of(Duration.standardMinutes(1)))); +``` +```py +{% github_sample /apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/snippets_test.py tag:setting_fixed_windows +%} +``` + +#### Setting sliding time windows + +The following example code shows how to apply `Window` to divide a `PCollection` into sliding time windows. Each window is 30 minutes in length, and a new window begins every five seconds: +```java + PCollection items = ...; + PCollection sliding_windowed_items = items.apply( + Window.into(SlidingWindows.of(Duration.standardMinutes(30)).every(Duration.standardSeconds(5)))); +``` +```py +{% github_sample /apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/snippets_test.py tag:setting_sliding_windows +%} +``` + +#### Setting session windows + +The following example code shows how to apply `Window` to divide a `PCollection` into session windows, where each session must be separated by a time gap of at least 10 minutes: +```java + PCollection items = ...; + PCollection session_windowed_items = items.apply( + Window.into(Sessions.withGapDuration(Duration.standardMinutes(10)))); +``` +```py +{% github_sample /apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/snippets_test.py tag:setting_session_windows +%} +``` + +Note that the sessions are per-key — each key in the collection will have its own session groupings depending on the data distribution. + +#### Setting a single global window + +If your `PCollection` is bounded (the size is fixed), you can assign all the elements to a single global window. The following example code shows how to set a single global window for a `PCollection`: + +```java + PCollection items = ...; + PCollection batch_items = items.apply( + Window.into(new GlobalWindows())); +``` +```py +{% github_sample /apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/snippets_test.py tag:setting_global_window +%} +``` + +### Time skew, data lag, and late data + +In any data processing system, there is a certain amount of lag between the time a data event occurs (the "event time", determined by the timestamp on the data element itself) and the time the actual data element gets processed at any stage in your pipeline (the "processing time", determined by the clock on the system processing the element). In addition, there are no guarantees that data events will appear in your pipeline in the same order that they were generated in various places on the web. + +For example, let's say we have a `PCollection` that's using fixed-time windowing, with windows that are five minutes long. For each window, Beam must collect all the data with an _event time_ timestamp in the given window range (between 0:00 and 4:59 in the first window, for instance). Data with timestamps outside that range (data from 5:00 or later) belong to a different window. + +However, data isn't always guaranteed to arrive in a pipeline in correct time order, or to always arrive at predictable intervals. Beam tracks a _watermark_, which is the system's notion of when all data in a certain window can be expected to have arrived in the pipeline. Data that arrives with a timestamp after the watermark is considered **late data**. + +From our example, suppose we have a simple watermark that assumes approximately 30s of lag time between the data timestamps (the event time) and the time the data appears in the pipeline (the processing time), then Beam would close the first window at 5:30. If a data record arrives at 5:34, but with a timestamp that would put it in the 0:00-4:59 window (say, 3:38), then that record is late data. + +Note: For simplicity, we've assumed that we're using a very straightforward watermark that estimates the lag time/time skew. In practice, your `PCollection`'s data source determines the watermark, and watermarks can be more precise or complex. + +#### Managing time skew and late data + +> **Note:** Managing time skew and late data is not supported in the Beam SDK for Python. + +You can allow late data by invoking the `.withAllowedLateness` operation when you set your `PCollection`'s windowing strategy. The following code example demonstrates a windowing strategy that will allow late data up to two days after the end of a window. +```java + PCollection items = ...; + PCollection fixed_windowed_items = items.apply( + Window.into(FixedWindows.of(Duration.standardMinutes(1))) + .withAllowedLateness(Duration.standardDays(2))); +``` + +When you set `.withAllowedLateness` on a `PCollection`, that allowed lateness propagates forward to any subsequent `PCollection` derived from the first `PCollection` you applied allowed lateness to. If you want to change the allowed lateness later in your pipeline, you must do so explictly by applying `Window.withAllowedLateness()` again. + +You can also use triggers to help you refine the windowing strategy for a `PCollection`. You can use triggers to determine exactly when each individual window aggregates and reports its results, including how the window emits late elements. + +### Adding timestamps to a PCollection's elements + +An unbounded source provides a timestamp for each element. Depending on your unbounded source, you may need to configure how the timestamp is extracted from the raw data stream. + +However, bounded sources (such as a file from `TextIO`) do not provide timestamps. If you need timestamps, you must add them to your `PCollection`’s elements. + +You can assign new timestamps to the elements of a `PCollection` by applying a [ParDo](#transforms-pardo) transform that outputs new elements with timestamps that you set. + +An example might be if your pipeline reads log records from an input file, and each log record includes a timestamp field; since your pipeline reads the records in from a file, the file source doesn't assign timestamps automatically. You can parse the timestamp field from each record and use a `ParDo` transform with a `DoFn` to attach the timestamps to each element in your `PCollection`. + +```java + PCollection unstampedLogs = ...; + PCollection stampedLogs = + unstampedLogs.apply(ParDo.of(new DoFn() { + public void processElement(ProcessContext c) { + // Extract the timestamp from log entry we're currently processing. + Instant logTimeStamp = extractTimeStampFromLogEntry(c.element()); + // Use ProcessContext.outputWithTimestamp (rather than + // ProcessContext.output) to emit the entry with timestamp attached. + c.outputWithTimestamp(c.element(), logTimeStamp); + } + })); +``` +```py +{% github_sample /apache/beam/blob/master/sdks/python/apache_beam/examples/snippets/snippets_test.py tag:setting_timestamp +%} +``` + +## Working with triggers > **Note:** This guide is still in progress. There is an open issue to finish the guide ([BEAM-193](https://issues.apache.org/jira/browse/BEAM-193)) diff --git a/src/images/fixed-time-windows.png b/src/images/fixed-time-windows.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c79e1e94e047eff478174bfef46cbde549557e GIT binary patch literal 12334 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 literal 0 HcmV?d00001 diff --git a/src/images/session-windows.png b/src/images/session-windows.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce844cad368ff4f78ba7ec02fdd7045689bb073 GIT binary patch literal 16697 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 U`Ly-?O?^Q5iN@pdM;5RDKe`^vg#Z8m literal 0 HcmV?d00001 diff --git a/src/images/sliding-time-windows.png b/src/images/sliding-time-windows.png new file mode 100644 index 0000000000000000000000000000000000000000..275e31fb940baa39870e44ed92d15b1fd130d7f4 GIT binary patch literal 17906 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∓njkj zpYOzD5cq$eu8t`|hcldCn&fUeh@OdD=hT>*Vxwbly367z#=wN*tA!DH1-3b9N*l8V zo}BSSNtK`2wdf(tfy{XOg+2zI%n=rjrMk?Qt_YvR7GtXz>WgH-K-oTL8W!|+zjzWt zosdyyCw>$jxYtvH(=YG#HS81m5BXPuWIs0p=;Rz&+yxF z!!v)Ax8L4@=U<%GS?W(fW8$ASS%oq6@5W~(helc07F^+QxW1}s#e0|(TptYYCKA7Ai8A(~tIS=!ok?~L9_gmw2QDseCn zgVEtzVmN=b(f@o0cYZH_GG66O9z}bZ+_7g8h!Cn_SgFX&_NFXd z4brc!&}Kjf!Mrs;8rpxo5+>g*>a1C8#`kxGRZFhgqM1z*Ccpr`@2S*BG;X4!QREij%uGINx(=dy?jW-q z@4V;{Q-+v^H+7N9J92d(J8R5J%!{X+uhYj5vC$E-F}p|M#`o;y&(hp==IR~vb#!#B z!#;@mms_*+$4sITBS`!#KmEP?3NuMI+ei@dYlpUrrz}?zZ6<^ zl_$E*XuoUr?Y(=JMC2PqR2-)#FY*P=o%_CUvUYzTjZT5#?==PPeLZ)~XTE-^B3CM767XNK&@og1 literal 0 HcmV?d00001 diff --git a/src/images/windowing-pipeline-bounded.png b/src/images/windowing-pipeline-bounded.png new file mode 100644 index 0000000000000000000000000000000000000000..198ed11dd0e240f6a9633c0257af324f5a77addb GIT binary patch literal 13325 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 literal 0 HcmV?d00001 diff --git a/src/images/windowing-pipeline-unbounded.png b/src/images/windowing-pipeline-unbounded.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c5ee0494ff8ee2af4561b9b6d952305efba0ec GIT binary patch literal 21890 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 K8Pw@H$NUeQ&sU-V literal 0 HcmV?d00001 From 0f1d779df4ce6f20eec9cba8ca7022949d8b0c36 Mon Sep 17 00:00:00 2001 From: melissa Date: Mon, 6 Mar 2017 18:23:41 -0800 Subject: [PATCH 2/2] Update with review feedback --- src/documentation/programming-guide.md | 22 +++++++++++----------- src/images/fixed-time-windows.png | Bin 12334 -> 11717 bytes src/images/sliding-time-windows.png | Bin 17906 -> 16537 bytes 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/documentation/programming-guide.md b/src/documentation/programming-guide.md index ec3c03e9db4..a4ff7cb4da2 100644 --- a/src/documentation/programming-guide.md +++ b/src/documentation/programming-guide.md @@ -1285,19 +1285,19 @@ The Beam SDK for Python does not support annotating data types with a default co ## Working with windowing -Windowing subdivides a `PCollection` according to the timestamps of its individual elements. Beam transforms that aggregate multiple elements, such as `GroupByKey` and `Combine`, work implicitly on a per-window basis—that is, they process each `PCollection` as a succession of multiple, finite windows, though the entire collection itself may be of unbounded size. +Windowing subdivides a `PCollection` according to the timestamps of its individual elements. Transforms that aggregate multiple elements, such as `GroupByKey` and `Combine`, work implicitly on a per-window basis—that is, they process each `PCollection` as a succession of multiple, finite windows, though the entire collection itself may be of unbounded size. A related concept, called **triggers**, determines when to emit the results of aggregation as unbounded data arrives. Using a trigger can help to refine the windowing strategy for your `PCollection` to deal with late-arriving data or to provide early results. See the [triggers](#triggers) section for more information. ### Windowing basics -Windowing is most useful with an unbounded `PCollection`, which represents a continuously updating data set of unknown, and possibly infinite size (e.g. streaming data). Some Beam transforms, such as `GroupByKey` and `Combine`, group multiple elements by a common key. Ordinarily, that grouping operation groups all of the elements that have the same key within the entire data set. With an unbounded data set, it is impossible to collect all of the elements, since new elements are constantly being added and may be infinitely many. +Some Beam transforms, such as `GroupByKey` and `Combine`, group multiple elements by a common key. Ordinarily, that grouping operation groups all of the elements that have the same key within the entire data set. With an unbounded data set, it is impossible to collect all of the elements, since new elements are constantly being added and may be infinitely many (e.g. streaming data). If you are working with unbounded `PCollection`s, windowing is especially useful. -In the Beam model, any `PCollection` can be subdivided into logical windows. Each element in a `PCollection` is assigned to one or more windows according to the `PCollection`'s windowing function, and each individual window contains a finite number of elements. Grouping transforms then consider each `PCollection`'s elements on a per-window basis. `GroupByKey`, for example, implicitly groups the elements of a `PCollection` by _key and window_. +In the Beam model, any `PCollection` (including unbounded `PCollection`s) can be subdivided into logical windows. Each element in a `PCollection` is assigned to one or more windows according to the `PCollection`'s windowing function, and each individual window contains a finite number of elements. Grouping transforms then consider each `PCollection`'s elements on a per-window basis. `GroupByKey`, for example, implicitly groups the elements of a `PCollection` by _key and window_. -**Caution:** Default windowing behavior is to assign all elements of a `PCollection` to a single, global window, _even for unbounded `PCollection`s_. Before you use a grouping transform such as `GroupByKey` on an unbounded `PCollection`, you must set a non-global windowing function. See [Setting your PCollection's windowing function](#setwindowingfunction). - -Alternatively, you can set a non-default [trigger](#triggers) for an unbounded `PCollection`. This allows the global window to emit results under other conditions, since the default windowing behavior (waiting for all data to arrive) will never occur. +**Caution:** The default windowing behavior is to assign all elements of a `PCollection` to a single, global window, _even for unbounded `PCollection`s_. Before you use a grouping transform such as `GroupByKey` on an unbounded `PCollection`, you must do at least one of the following: + * Set a non-global windowing function. See [Setting your PCollection's windowing function](#setwindowingfunction). + * Set a non-default [trigger](#triggers). This allows the global window to emit results under other conditions, since the default windowing behavior (waiting for all data to arrive) will never occur. If you don't set a non-global windowing function or a non-default trigger for your unbounded `PCollection` and subsequently use a grouping transform such as `GroupByKey` or `Combine`, your pipeline will generate an error upon construction and your job will fail. @@ -1351,7 +1351,7 @@ Note that each element can logically belong to more than one window, depending o #### Fixed time windows -The simplest form of windowing is using **fixed time windows**: given a timestamped `PCollection` which might be continuously updating, each window might capture (for example) five minutes worth of elements. +The simplest form of windowing is using **fixed time windows**: given a timestamped `PCollection` which might be continuously updating, each window might capture (for example) all elements with timestamps that fall into a five minute interval. A fixed time window represents a consistent duration, non overlapping time interval in the data stream. Consider windows with a five-minute duration: all of the elements in your unbounded `PCollection` with timestamp values from 0:00:00 up to (but not including) 0:05:00 belong to the first window, elements with timestamp values from 0:05:00 up to (but not including) 0:10:00 belong to the second window, and so on. @@ -1361,7 +1361,7 @@ A fixed time window represents a consistent duration, non overlapping time inter #### Sliding time windows -A **sliding time window** also represents time intervals in the data stream; however, with sliding time windowing, the windows overlap. For example, each window might capture five minutes worth of data, but a new window starts every ten seconds. The frequency with which sliding windows begin is called the _period_. Therefore, our example would have a window _duration_ of five minutes and a _period_ of ten seconds. +A **sliding time window** also represents time intervals in the data stream; however, sliding time windows can overlap. For example, each window might capture five minutes worth of data, but a new window starts every ten seconds. The frequency with which sliding windows begin is called the _period_. Therefore, our example would have a window _duration_ of five minutes and a _period_ of ten seconds. Because multiple windows overlap, most elements in a data set will belong to more than one window. This kind of windowing is useful for taking running averages of data; using sliding time windows, you can compute a running average of the past five minutes' worth of data, updated every ten seconds, in our example. @@ -1387,7 +1387,7 @@ You can use a single global window if you are working with an unbounded data set You can set the windowing function for a `PCollection` by applying the `Window` transform. When you apply the `Window` transform, you must provide a `WindowFn`. The `WindowFn` determines the windowing function your `PCollection` will use for subsequent grouping transforms, such as a fixed or sliding time window. -Beam provides pre-defined `WindownFn`s for the basic windowing functions. You can also define your own `WindowFn` if you have a more complex need. +Beam provides pre-defined `WindownFn`s for the basic windowing functions described here. You can also define your own `WindowFn` if you have a more complex need. When setting a windowing function, you may also want to set a trigger for your `PCollection`. The trigger determines when each individual window is aggregated and emitted, and helps refine how the windowing function performs with respect to late data and computing early results. See the [triggers](#triggers) section for more information. @@ -1448,11 +1448,11 @@ If your `PCollection` is bounded (the size is fixed), you can assign all the ele ### Time skew, data lag, and late data -In any data processing system, there is a certain amount of lag between the time a data event occurs (the "event time", determined by the timestamp on the data element itself) and the time the actual data element gets processed at any stage in your pipeline (the "processing time", determined by the clock on the system processing the element). In addition, there are no guarantees that data events will appear in your pipeline in the same order that they were generated in various places on the web. +In any data processing system, there is a certain amount of lag between the time a data event occurs (the "event time", determined by the timestamp on the data element itself) and the time the actual data element gets processed at any stage in your pipeline (the "processing time", determined by the clock on the system processing the element). In addition, there are no guarantees that data events will appear in your pipeline in the same order that they were generated. For example, let's say we have a `PCollection` that's using fixed-time windowing, with windows that are five minutes long. For each window, Beam must collect all the data with an _event time_ timestamp in the given window range (between 0:00 and 4:59 in the first window, for instance). Data with timestamps outside that range (data from 5:00 or later) belong to a different window. -However, data isn't always guaranteed to arrive in a pipeline in correct time order, or to always arrive at predictable intervals. Beam tracks a _watermark_, which is the system's notion of when all data in a certain window can be expected to have arrived in the pipeline. Data that arrives with a timestamp after the watermark is considered **late data**. +However, data isn't always guaranteed to arrive in a pipeline in time order, or to always arrive at predictable intervals. Beam tracks a _watermark_, which is the system's notion of when all data in a certain window can be expected to have arrived in the pipeline. Data that arrives with a timestamp after the watermark is considered **late data**. From our example, suppose we have a simple watermark that assumes approximately 30s of lag time between the data timestamps (the event time) and the time the data appears in the pipeline (the processing time), then Beam would close the first window at 5:30. If a data record arrives at 5:34, but with a timestamp that would put it in the 0:00-4:59 window (say, 3:38), then that record is late data. diff --git a/src/images/fixed-time-windows.png b/src/images/fixed-time-windows.png index e2c79e1e94e047eff478174bfef46cbde549557e..832dc64549d492d4c0ac97d1c907259d97a45735 100644 GIT binary patch literal 11717 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 literal 12334 zcmc(GXH-+`)^$P;y(qniG#kBlq>3~tQl&`?(n9Y|0;n|U0@4Km5m2gtB!mMf2n3ZT zEr1jWReB5GMm_hObKi6Bd&hWxd<@1QgzRTOWv#j9oNM#&maYZ`DKjYu1ftNqp=tmE z;bntB;MXKXz&ole_R_!)0&itaBNE^%gv9;<2y_9Yse0Wg;OXjQxX;i|?&2mNv-lSy zyPTJ{^dr~@xpgJuqlM3(W+!^u5m)%YDE$VD*&q{nV4K=eh9;$L*@~ zM;hraB|Rs0=(HYx${NOfqb}b|`70bewx^dKR_rDHr@?qMQ_@JI&hBpD=`&1dUn!n# zj5pwD{_wj!9-6|HVAtN_k=Hw%KJ9K&N=NdmAS?!wpC1Isto-;T7qmWs(vMd zktoQoc_kRiC1u2bw`jCKsxnCA3OXcViFSii=&;w(N{I9^jp!%R$LwlS!1!QfDk?Zv zOzYASFQ$%kr18mil%qUMQAlupC%)eJ`;cNN(x35gArx#oZg_az0Rm%`>>58fV$~Q=T5?p4;x0f++3JcUdo@{doFZT^V9*>=dc_uXeWkYa;ZMRIBY)TnN4_bJkZ^7|bMxRT6M=r?L2LKkS)A5^gX7#8ipKp#x8)bApv-+Y&D$3$Gitt4`6^|#tDUSRh`HXYw9tjz7i1jOnI40%Cqv`>L48$!N z&@l=)#pc(dqh%5noJrAQKxDgK(KsXP?(p1fz$J)TSb?iLk z3-x9b+*oR2&{su^0>$A9rfib}xSChseOYBHSFToJhVYART+Qo*lp(dyhYN}-qc^6{ zzkDIy%x0mqlo??1IRrC96PC9XQH`giaTqCHIxMuGUCp`uVUMI(Z}ZqYqK|y7gz>=w z1IgQ0@o3^|VX+$$G!4?@jLmKjM|S+-3V|X)d1OUL?2bzUCsoj~Q8L!1UV4m|&F#U} z(D+H>3v5f5QR|ZIg{2&zuwN}bodPxh7 zBKvpw#nWpnPK;1w$Lc7)x8^7^m@rIc!$JAd!_Mx=JZ2q#T8Z!V$YOG$-vUg6T?SVf zipx!p-`56&Ngf;;J&~M*Tgp3WG&+G?AcZ2hBOM+%e3eVCn;er0r*Pwgxrv<`*zm#} zeXKnO?SR8MwIF%x9aNX6hU7)%D2J>p#ixuj&>p%-O~)^r_@46!E~Pni))PCu)gYhB z7?O(PwqeYZe5k&I_* zFv%<*kQDOqsT=aoM7c}a$}$iSGwJ7gCKS5`U)UZ#fm30u9hM~YcmR}oo!6dl5=h=g zJ*?V@C1F`lwyJDl4Dn9PEaz$+b%~rGY-J-4P444n4IW~c#3^u6*U_jG&FYoBgj0Vp z-)i6%X6A`g}#ny9|!BO$PfXK_np;`C`x1Oqy#BG+H5bC=fsh2-btchJz zL*;Rn@J;RhRy^YZ8NaWqteC5_j~SCh&6!XK@rG3ejEl-Pvr(BJKW;}$MpIkOA>6{Z zPt*oiXQ{3%f)y_{%hLrcT~Pe=aY^R^f*Zu3F)_&Ah*9=JnhXab+GB)tCZU)Tk zk{>N4OEy3E#PGeI9qcm4?4%q8ljJWqs1A&?4*BRA*@^z~aC9Q4)vTD zW}_tuQPbhlGof`4sUOH{ls}K%zy-?}5^wp4m<=(BZ8=dCmIpJ1M0N^3&|*62lu5~C zoQP(>s!;VhsnCgIgj)Tg)gyOB=9ewW)G;G8et|krlO?k49=(dO1G5D^DkM*Xfp_9^l8Vt?>hsLk3gC*hgu9KJ5fzQdWbFo%Cztf&} zMETiL0(rG5QJ(&4Z1=NJz{I=&D%fCiw=7`1R@xkQ1=a98btA7nBDqnXfm-+OmEojJ zDdzO+qTw**>55H&BfN=KG#<{n4M1Zp0 zA&u?0crKblQixH^I)0dG&o~lR8L+w8rSjp&JX3` z0m`D3X%*i}Hrpy=W)6uU&Z&sGtrHU$+B$w?|3ogwlPw*}=laC|TpyN`)y_<&s5Ppc zeaRk5GHF~_I9>djx*u7U(fhZ8SVvS zj^M^r19BTPKUnugav7YEx8=nllH43&_TNaA8AsKZUaSi>`8%AqmGzXIdD6oM4|~MX z64fsHgmW7$6T`k}R+-!mlBxdM)(Veq-5m&pBOEp%=0_yerv{VcZIb6bVr`a!$Kv4E zlh;)TYEx?X`Qi(@@x>I`OS?Wc3vd$*j~DG&zgvopkCzNw z&7bHQ-+2cRNv{seMS#8DjQ)GxnO>a^yJ)s`JtH;d)1#B(p8C6|WnM3h-h`898yxg= z-eI3LWEv?9c^#exKPl#}m{R;V`ulgB^Xzt=KdALE)Epw0}*p&3neyWGQh zq@g*gcoT&yf31cD2}xp=fmu>YuE}KnWUT*lvf=Pjj8s|^wKz@E$7t`41RNkMX7p33=cg>bov>U5BMlM3xBEWplMM^vIk)XPy zD09k8=dsuL)_J`d4%Q~jsV8%3_OHXArf8>c4-~0s-p}}ZD*ZnvMx;~jx(JGk)N{BK z`~Ce-T3!}*8qn@n?)q|&`*zU}EzpV6pEob}18CPT$?$i3W-ulbkrUA$kG-YfYXcks z+o)p29pa%ij;KZZMWyQ&6boX%1C+ zZ+FDV8hQ-jg!bdDamJ^t;j=S4OmgK8P6aQ`Yo&0PoA=18dsA%aC^xk{6~YCXycgMl zgDfs($rM3QOJ9rOlZ({qnkGWuA!@-S#n~n8O*CgZ^JA0I+5^YU&D0!{;*{x&tVwU= zvZr-MOG4G&+vPAala51dy_sR`u(eCr(1s=HhD^D|U3`YKOdU?K(%AAK>4r|d$3SGS zLfT*LbLaA+s&)_5wuWgFcUt49b!FAf2I!UFy={P6iP}n@Jh~Zoc4bfsQC}#WF7zHr zx63fzG+(@*g66)SvOidnFJ5lS>ig&sN#v^&>S1plTZSV#BpZ3&7%mmA7-dv?8xB7D zw-5xvD;iGce{&VorX-~arR6*q7706cupYEi9Ej|;@l&-9_aVVrQ-s7&o4OP)9)B#P z7fi_2ML88`id3l_*q>g406ArZ2=9?r_pTE~NeYXxuXDwVvAfo7Dl3nMY*M={eMR;H znal0WTJiP%s@;q^N>hnJ9f;c$N>RX?j0o{Mo5@7hFz%DV_c7<_}~%izg2MT;N#$ zhu!cCJB%7`BhMpCE6MZ){uO~gphCBRE#UIM5B<}r_&eD76Q-5DZw6fscLWn+{u2w>i5*#fh)dT-;}>(hNQER7c+V7d&10 zmY={O z)iZ!5teE&OYoP%tJs2O3y{Q>n5s}HDKTmoF?LWr3HIFMVAAXeR^E~A6Sk<<{W3S)o zv?firF8YburO&nT_{|)@~oLxkU5HR7%E%5u`%o-xIVg5 zdxTTK%G_iUi?q{~Dlgpq`Vi1(tf3PSUpupbPapto99`>asjS5}W8CD%rxrleo=jI;+qy(_m#27|F+SS9P6xjw@ zQ{N{0SS&39_xeU^1=OT}#vtT;+4uPb^6Y<#uz%TkKW=nNSYlL~^wd{@FE@<7Tk>g! z@4sjZR2rZ$`Y+Ejiu19_o<~XJuMz>d4KG48K@2~VaVJzrNC_Uu{5NK!IX4GGtlzv z{K`HSFvWflM>0qW*-NPHA=q@N@KcMAcxhtX#$y8eDU>=$u&!}=dt1n6QfvlLaMF!v z#o{zX1i^<|Yx$~DR&71QW`xZxSyWmp6^=E4~uZh_)rQ!-JcQ-@LN$ky)P~TWqMsLHBI*DX!=?Bx;ucH#=|9- zVt?g85URcpOZj@@$@_b%XXbyb^#7W7W|mVodR{6XOt30=4Ii*>MIQd?u8nlKRe!yD zV<^xRFfz2z&~Y0QxL(>3{}aAGv*_HOtMdL!U*WISx@Y_7IR_?-r}kT58`mG8fW|8z zdt&($jaJvgQ*m!w#!mY!{*>y=k$AW2wHW?|p#K4y&e#SZwJyx}<%hUaa!6xC5)YI@ z|FkLNk@HIb|JP7m3~AjPW|2P$_TRgGxPP+V>Wl7fYsKYtrYk5SSuDpTGHQ>p2;5i? z?rm^$Dp1E(f{*%Wsz-KmV%tQkAC<&sDXvWga>8a_AVTcF0i{CH!EzvZc2d%MTJ&RR zus`nZDo|m(-NmuxpJjvn2M8D5ey4O2 zi|V(nTv%qGf?tX@?dom<(4hHUGyjdUx*6HsTt<5vAqS_t`ilh)9d+0Cmwew*Pc=H@ zSpX9(T0Z$-!lDthgy-mF`M~RU^%-<}){+Vgq&aIh{h(`a0V)5dvbS-66?vKCbT*n# z_gIw^D^oE~WvS;8a?+^hAMbOz$(L{bWc!;muJM_zDx!sEea}BraZ+zG^eFhmgB1pz zqvO+cR+yg?bxhbf#G!Y5uvkRs;e+utqmKR^E%%;gB25)0G01iAkIzr%qRmG1`DI50 z&E(9{ax-5I$($Pa@7$@s@5OyMnGk?Lv>cDs@9_1;Qe|_T8Zn3W=3+CciTk*mTMQ}Y zq@nZ*d+CJTtlH9;Mv)qF9X!>Z=H!eEYWcY4=$~-yHkqbh_xl8veaJ`q{u7 z@p+!)y6~x~qn0(VsM7AA?Yczh&G{BKQ_5|7%Lm_|!*)&1mdAP&N#$Vqvz2DHeWr!2 zJ;XE}WJ`Cs6U*f<|3bTWMdAMoTcihBB3A$sj`L9rm1J>0ArEd)%>Grx><51^#~meb zS#J~NJUZ9|(LNq*Z9CoK@t0czXY;#O{)=+|OUmk}`hpE8C(r2^jP<)(yvuSUs})d@ zb^tnx*ABaB{@RiJD{=t!4`>4#8~_{?IdL}Cl{*M{ciZHrA$*TOb&LDUC>W7Btr(+F5f9!P1noN?)LK1{i^d-`SOpbg7tV@^(t|DjyU%TO) zdltYKG|}-Y3%SU7at;wPxaFFrPEy{Y3$hAosdzEI$V!4}KoBT5!p6?%Ym`~jtP8kr zN+x1&@m2`Ti;j5daG}#BJV{xEtr}89wV#79TT1@#kG=d(&b0HRE0Ao@cN4#DaC(z& zT&f}3w-I{@W(WKQ21s{M|JA^WR_Gh~4ml_5y0(uy9|(-oPUrwFaoHDO2~2RC#%Lks zF^Myppw5m^CwUMGSNcMB=RE%>$~qCLpfPHB|0B*}eGofXCUQMp9|0h6#j}Zmu^Uq0 z#XB~#Fb-m?@6ao@nY*uxzO6y6Lb~=<;I&<~&PgErB=akFt zv|}F1WzzU{b6gYazj(*7JeArncD(OQ$$1t`q&goyYFj68C&-}o%j|Bc@uwEhFbc|T zH%48uca^S*gw3MGFj!(U{}9(DDw3Ajw|-~tfmFt}O!hSXFu0N0FDvj~VLAvzHFowa zfC@>}OC+IMZ#_s)X!}V&C6R`VKXu{}>wA0DW{wsl^7CUrQH%8_be_r}?hAc9xL|8? z=!Fvao(`w!jfHU5;_rvOw;PA>?bdPFvzgHNy$?@^x!&3QoW4yA2pDoq7J$B2GGK6p=UaiBkKRkYbX(I^IMjy^AS1^suak-(036?)xYSkPY!7S6tz z$+0R-t&3-_Lh_<`EbQ?SkS}8W_B;8$?!0#-YqMaxO~3_|qGp7BY;em}NiR(JadKBn zj?_j4=|@iKS~pGr#y&KY&!+*!`}IuseR8ZAVhm!y^_M-0ba;N{Da%-K{JCe z=mT2z^8)~02CR%Htb93C`c-3-)d2ARyX-xS{=f5Ye~^6E=F8d7UgwTAJQf|N|6Pj! zpvLuQ)c=c|{+HM(`Oc3=6!8X-yT@a1!XQbZEyxIs_~g zX`c_9e4fYepBs3uKzsHo>85{}D|<0y<%`$! zN5x~mPoD=orTrqSg~ck{R0E99Fx+B7V!x`bNsLoBS1#ks3DRAo5nK^={j{94m1uY6+)w zxCe&#;z>xZ-DqyjblKVIOBNAXXgLr*-6KjKDdxl}s-v8OZ@f+4BsX%%dyUe?uYb~h zB5iK19p#*3W0>K4GesoJh1U5zMKKVGYyElS;;XGQAF)B?zl_ixr3wNy`twX_zg z;EDwPs9br@11!l$;?OOWLv_r9BRq^wKy9`-@YIZ?MhKd~lx(0cf+^TWPtF5R+Z1xO zIu=`7sWWCq<`RpIW2@onZ3c2Qjtj@wH)?Jg%=>hV$j#8E$8aN!VPO~+x+yBfus>eu zlFIGeDhj3l7S(pU=HB_ro@V+4j*jh4=`4Dnmg+YBNbo-@c6rEKB}uC&?etea>E25I zm8~FqAY(6k{!k9UCyn*Nr2g%eR2?1OHo9^M8s_x~S@uW`$Bva(rY3Y^mc%1$%isCY zA{+}zoz1cOTfPB7!rGdLsv7MGGrT>C_E&tU?MzJm%x}V%^ntAxk8(UOPnqNq(>Kzw zLuNZe2m>RzHr~;Xddc4j=b9MBT{Pf!O(R+aovFcnRz>lJ!X~dB!AZ zBYnZG;}ADAJ#mMo&^PlYiMI7CP4{TE@4?k02y1MZwOh#6nwi`aPyK_r#HL6ar@;Q& zG4D6$_}ZT#q7W8Dy|c+9Z-o45weJfZG9|SRE9q=D$FcfDCMGEm;ov+u4qdPmq(2X|omvC&yVLTy6DzMKFg-!@Zx2cb}7dMUtF>9Juvc@Ugw>5|Ki0;9= zu$bmW%p1IOj_sAiGwu60W9TG^@72@7dQxRd8;X|VsHB_24Y4=KA*ZEs(n_IYAOwG+yTDRGcYq? z(y?5NshmB^yZ^kjy^gso3oL4kd?W#NiE8kzsoH+yem_U1z)t#_ppxws?bWC@4ir@* zGNZGG(MCpl9p1m*vDetKTirgg(B3*!b0{Z8h1$$NL0dQ z+32^ZDQ3%)A6+k{YVg23Q*6aw-$6ACcC0cW?}tZ>_eUA(!oSS0OER_X(;jaG^0w|M zthmJFYq7YU8XU_;0+Z03bikTzKvOBS(L-_DUrB?k?py(ya&@siP}FvT z)KtHDDr`xx&62FXbIU5)gmYzfonmAR4~4J>LZGiEP(<53GDCOi4l%Yr(%TUkPlIz< zgcq$7@3x1Lbac}Z9l0y>v(gFHQ5|;B3egBm;ZfR#veX>;7m(d7?!2h&^J=6T3Lnyl%h>`Tk8h{B91yoy?A> zFKckQQ75zjOjgJV7u{?w3>I|_V`N{0_s7l5Ud24JT5^ls?Vj1xU3v-;Riw)Ih=}3C zJOpMBX10Pe%pn;pC|-;ghF-q58jF*!abj4x!uFQ6KW<}|)Rd;$pXkFVo`p<7F-tQ? zq((!>ZXBklcg8Csz2>`qz_wRYD?`w8WLk6$tZDI-Az)u-|9Gy(Te0=fC4i!UD(?-2 zl@+mNIDEP?Dz`(vjc#oMpGt0^g#l+BaKN-bO>rOO^PjxK0zrwYV zQ*3)$3)@TI5G}Gi0WjUH?C`ykq3!auC+G7I*j!>3%!FQ4ErBM9pwQ^yebWy!c^8znN&~`Lr|6;OQO&d2rKr!w(1d&{6w^Xvs)%9DJ>?x(yTRlL0*Kmu_1wEx&% z{wD_ciwXi=Vx-hyiZ6I>Q~|SR#*mEvcJSHY>c#Ce?r$VEX!5FfUdT#^CxaJ>!>pE#?z$Uzd+TVXwW+DOuLM4jnIUEzs;rT zaMlUa>`~%_xeu$0B^2;J%hCWO5 zH0r`+4hmIaPXZ~313$E{2{yzhYlyOFJh7%~rO>`=Cx3PZ@1fVX!Z5>2N6v7|l~d26I%)WL%UL+eQ*HXYiyNJi_*@ln5hV@bYWm8ZW{7$fbid4DzjE5@?V8 z>j9t3r%- zK+}7YT7IBzDbP`)_m1WFQNqEk;D9s!+SNmmok>5bsF-accR!Gg6QnHF?-fB!sx@-J z%oW?-65+r_Q77NiO&eqCsi5r%7fG=h|tJwHd#ht!BRUmbGE1Gs|WtC))pRq1q zwHw>V50&RM>M~SB_rK%VkIg}_?`v;2IRa@?O|5>L$9dw6Onp3`bTf=<)JhDIEHo=M z0p*43_k0xXozw64Q2)e@(o}2&?VaOi$frP1Y4$t@^iNvV4jg70G&^94q$`$lCnm;a z<~zV`n5bx1E)opkQs(;~w7F}fha8gW&NeH_nq25Be9Q(lqS4@3$x@f1h`A3-q1|HgxAgAC&jPwrUd z={=ztl|i-cKPx=NKjv;eRYCG%u!CEPU;W{9;X!d3N0!@i)P6}Gd@IU=Y)mKMjcG{c znRHB{go)31sn0{X?u^vBuk@Y;>`W0+K;%aL1Ii&HOodO+kGJfv%=}iUA{-4vJ?@?c lOpO0?mi*@tzOSExy-pO(!d3A?fqwu1X{za}Rw>)u|9^`eWy$~m diff --git a/src/images/sliding-time-windows.png b/src/images/sliding-time-windows.png index 275e31fb940baa39870e44ed92d15b1fd130d7f4..056732bbd6a2e4fd32fe22226f92be8fb3418dbb 100644 GIT binary patch literal 16537 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

&zY1M*@iF=A#Gh?1 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 JTE+h9{{gC}USt3O literal 17906 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 v%)8ICD{suMpMQFf`F~#8|N4qxl3T20nk4$SXF