You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by gi...@apache.org on 2020/10/23 19:06:31 UTC

[beam] branch asf-site updated: Publishing website 2020/10/23 19:06:16 at commit c9b7d91

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 9fe1e9c  Publishing website 2020/10/23 19:06:16 at commit c9b7d91
9fe1e9c is described below

commit 9fe1e9c6ea80be894cdc4762a4a81cfd7b7eb311
Author: jenkins <bu...@apache.org>
AuthorDate: Fri Oct 23 19:06:16 2020 +0000

    Publishing website 2020/10/23 19:06:16 at commit c9b7d91
---
 website/generated-content/contribute/index.xml     |  40 +-
 .../contribute/release-guide/index.html            |  19 +-
 website/generated-content/documentation/index.html |   2 +-
 website/generated-content/documentation/index.xml  | 520 ++++++++++++++++++++-
 .../io/built-in/google-bigquery/index.html         |  33 +-
 .../documentation/io/built-in/hadoop/index.html    |   2 +-
 .../documentation/io/built-in/hcatalog/index.html  |   2 +-
 .../documentation/io/built-in/index.html           |   2 +-
 .../documentation/io/built-in/parquet/index.html   |   2 +-
 .../documentation/io/built-in/snowflake/index.html |   2 +-
 .../documentation/io/developing-io-java/index.html |   2 +-
 .../io/developing-io-overview/index.html           |   2 +-
 .../io/developing-io-python/index.html             |   2 +-
 .../documentation/io/testing/index.html            |   2 +-
 .../documentation/patterns/ai-platform/index.html  |   2 +-
 .../documentation/patterns/bigqueryio/index.html   |   2 +-
 .../documentation/patterns/custom-io/index.html    |   2 +-
 .../patterns/custom-windows/index.html             |   2 +-
 .../patterns/file-processing/index.html            |   2 +-
 .../documentation/patterns/overview/index.html     |   2 +-
 .../patterns/pipeline-options/index.html           |   2 +-
 .../documentation/patterns/schema/index.html       |   2 +-
 .../documentation/patterns/side-inputs/index.html  |   2 +-
 .../pipelines/create-your-pipeline/index.html      |   2 +-
 .../pipelines/design-your-pipeline/index.html      |   2 +-
 .../pipelines/test-your-pipeline/index.html        |   2 +-
 .../documentation/programming-guide/index.html     | 417 ++++++++++++++++-
 .../resources/learning-resources/index.html        |   2 +-
 .../resources/videos-and-podcasts/index.html       |   2 +-
 .../documentation/runners/jstorm/index.html        |   2 +-
 .../documentation/runtime/environments/index.html  |   2 +-
 .../documentation/runtime/model/index.html         |   2 +-
 .../runtime/sdk-harness-config/index.html          |   2 +-
 .../aggregation/approximatequantiles/index.html    |   2 +-
 .../java/aggregation/approximateunique/index.html  |   2 +-
 .../java/aggregation/cogroupbykey/index.html       |   2 +-
 .../transforms/java/aggregation/combine/index.html |   2 +-
 .../java/aggregation/combinewithcontext/index.html |   2 +-
 .../transforms/java/aggregation/count/index.html   |   2 +-
 .../java/aggregation/distinct/index.html           |   2 +-
 .../java/aggregation/groupbykey/index.html         |   2 +-
 .../java/aggregation/groupintobatches/index.html   |   2 +-
 .../java/aggregation/hllcount/index.html           |   2 +-
 .../transforms/java/aggregation/latest/index.html  |   2 +-
 .../transforms/java/aggregation/max/index.html     |   2 +-
 .../transforms/java/aggregation/mean/index.html    |   2 +-
 .../transforms/java/aggregation/min/index.html     |   2 +-
 .../transforms/java/aggregation/sample/index.html  |   2 +-
 .../transforms/java/aggregation/sum/index.html     |   2 +-
 .../transforms/java/aggregation/top/index.html     |   2 +-
 .../transforms/java/elementwise/filter/index.html  |   2 +-
 .../java/elementwise/flatmapelements/index.html    |   2 +-
 .../transforms/java/elementwise/keys/index.html    |   2 +-
 .../transforms/java/elementwise/kvswap/index.html  |   2 +-
 .../java/elementwise/mapelements/index.html        |   2 +-
 .../transforms/java/elementwise/pardo/index.html   |   2 +-
 .../java/elementwise/partition/index.html          |   2 +-
 .../transforms/java/elementwise/regex/index.html   |   2 +-
 .../transforms/java/elementwise/reify/index.html   |   2 +-
 .../java/elementwise/tostring/index.html           |   2 +-
 .../transforms/java/elementwise/values/index.html  |   2 +-
 .../java/elementwise/withkeys/index.html           |   2 +-
 .../java/elementwise/withtimestamps/index.html     |   2 +-
 .../transforms/java/other/create/index.html        |   2 +-
 .../transforms/java/other/flatten/index.html       |   2 +-
 .../transforms/java/other/passert/index.html       |   2 +-
 .../transforms/java/other/view/index.html          |   2 +-
 .../transforms/java/other/window/index.html        |   2 +-
 .../transforms/java/overview/index.html            |   2 +-
 .../aggregation/approximatequantiles/index.html    |   2 +-
 .../aggregation/approximateunique/index.html       |   2 +-
 .../python/aggregation/cogroupbykey/index.html     |   2 +-
 .../python/aggregation/combineglobally/index.html  |   2 +-
 .../python/aggregation/combineperkey/index.html    |   2 +-
 .../python/aggregation/combinevalues/index.html    |   2 +-
 .../aggregation/combinewithcontext/index.html      |   2 +-
 .../transforms/python/aggregation/count/index.html |   2 +-
 .../python/aggregation/distinct/index.html         |   2 +-
 .../python/aggregation/groupby/index.html          |   2 +-
 .../python/aggregation/groupbykey/index.html       |   2 +-
 .../python/aggregation/groupintobatches/index.html |   2 +-
 .../python/aggregation/latest/index.html           |   2 +-
 .../transforms/python/aggregation/max/index.html   |   2 +-
 .../transforms/python/aggregation/mean/index.html  |   2 +-
 .../transforms/python/aggregation/min/index.html   |   2 +-
 .../python/aggregation/sample/index.html           |   2 +-
 .../transforms/python/aggregation/sum/index.html   |   2 +-
 .../transforms/python/aggregation/top/index.html   |   2 +-
 .../python/elementwise/filter/index.html           |   2 +-
 .../python/elementwise/flatmap/index.html          |   2 +-
 .../transforms/python/elementwise/keys/index.html  |   2 +-
 .../python/elementwise/kvswap/index.html           |   2 +-
 .../transforms/python/elementwise/map/index.html   |   2 +-
 .../transforms/python/elementwise/pardo/index.html |   2 +-
 .../python/elementwise/partition/index.html        |   2 +-
 .../transforms/python/elementwise/regex/index.html |   2 +-
 .../transforms/python/elementwise/reify/index.html |   2 +-
 .../python/elementwise/tostring/index.html         |   2 +-
 .../python/elementwise/values/index.html           |   2 +-
 .../python/elementwise/withkeys/index.html         |   2 +-
 .../python/elementwise/withtimestamps/index.html   |   2 +-
 .../transforms/python/other/create/index.html      |   2 +-
 .../transforms/python/other/flatten/index.html     |   2 +-
 .../transforms/python/other/passert/index.html     |   2 +-
 .../transforms/python/other/reshuffle/index.html   |   2 +-
 .../transforms/python/other/view/index.html        |   2 +-
 .../transforms/python/other/windowinto/index.html  |   2 +-
 .../transforms/python/overview/index.html          |   2 +-
 .../images/sdf_high_level_overview.svg             | 415 ++++++++++++++++
 website/generated-content/sitemap.xml              |   2 +-
 110 files changed, 1484 insertions(+), 168 deletions(-)

diff --git a/website/generated-content/contribute/index.xml b/website/generated-content/contribute/index.xml
index c01af44..0deb764 100644
--- a/website/generated-content/contribute/index.xml
+++ b/website/generated-content/contribute/index.xml
@@ -413,21 +413,13 @@ or running all commands manually.&lt;/p>
 &lt;/li>
 &lt;/ul>
 &lt;p>&lt;strong>NOTE&lt;/strong>: When generating the key, please make sure you choose the key type as &lt;strong>RSA and RSA (default)&lt;/strong> and key size as &lt;strong>4096 bit&lt;/strong>.&lt;/p>
-&lt;h5 id="run-all-commands-manually">Run all commands manually&lt;/h5>
+&lt;ul>
+&lt;li>To run the commands manually, refer to the contents of &lt;code>preparation_before_release.sh&lt;/code>.&lt;/li>
+&lt;/ul>
+&lt;h5 id="key-id">Key ID&lt;/h5>
 &lt;ul>
 &lt;li>
-&lt;p>Get more entropy for creating a GPG key&lt;/p>
-&lt;pre>&lt;code>sudo apt-get install rng-tools
-sudo rngd -r /dev/urandom
-&lt;/code>&lt;/pre>
-&lt;/li>
-&lt;li>
-&lt;p>Create a GPG key&lt;/p>
-&lt;pre>&lt;code>gpg --full-generate-key
-&lt;/code>&lt;/pre>
-&lt;/li>
-&lt;li>
-&lt;p>Determine your Apache GPG Key and Key ID, as follows:&lt;/p>
+&lt;p>You may need your Key ID for future steps. Determine your Apache GPG Key and Key ID as follows:&lt;/p>
 &lt;pre>&lt;code>gpg --list-sigs --keyid-format LONG
 &lt;/code>&lt;/pre>
 &lt;p>This will list your GPG keys. One of these should reflect your Apache account, for example:&lt;/p>
@@ -437,20 +429,6 @@ uid Nomen Nescio &amp;lt;anonymous@apache.org&amp;gt;
 sub 2048R/BA4D50BE 2016-02-23
 &lt;/code>&lt;/pre>
 &lt;p>Here, the key ID is the 8-digit hex string in the &lt;code>pub&lt;/code> line: &lt;code>845E6689&lt;/code>.&lt;/p>
-&lt;p>Now, add your Apache GPG key to the Beam’s &lt;code>KEYS&lt;/code> file both in &lt;a href="https://dist.apache.org/repos/dist/dev/beam/KEYS">&lt;code>dev&lt;/code>&lt;/a> and &lt;a href="https://dist.apache.org/repos/dist/release/beam/KEYS">&lt;code>release&lt;/code>&lt;/a> repositories at &lt;code>dist.apache.org&lt;/code>. Follow the instructions listed at the top of these files. (Note: Only PMC members have write access to the release repository. If you end up getting 403 error [...]
-&lt;/li>
-&lt;li>
-&lt;p>Configure &lt;code>git&lt;/code> to use this key when signing code by giving it your key ID, as follows:&lt;/p>
-&lt;pre>&lt;code>git config --global user.signingkey 845E6689
-&lt;/code>&lt;/pre>
-&lt;p>You may drop the &lt;code>--global&lt;/code> option if you’d prefer to use this key for the current repository only.&lt;/p>
-&lt;/li>
-&lt;li>
-&lt;p>Start GPG agent in order to unlock your GPG key&lt;/p>
-&lt;pre>&lt;code>eval $(gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info)
-export GPG_TTY=$(tty)
-export GPG_AGENT_INFO
-&lt;/code>&lt;/pre>
 &lt;/li>
 &lt;/ul>
 &lt;h4 id="access-to-apache-nexus-repository">Access to Apache Nexus repository&lt;/h4>
@@ -855,11 +833,11 @@ Make sure they have blocker JIRAs attached and are OK to get into the release by
 &lt;li>JIRA release item for the subsequent release has been created;&lt;/li>
 &lt;li>All test failures from branch verification have associated JIRA issues;&lt;/li>
 &lt;li>There are no release blocking JIRA issues;&lt;/li>
-&lt;li>Combined javadoc has the appropriate contents;&lt;/li>
 &lt;li>Release branch has been created;&lt;/li>
 &lt;li>There are no open pull requests to release branch;&lt;/li>
 &lt;li>Originating branch has the version information updated to the new version;&lt;/li>
 &lt;li>Nightly snapshot is in progress (do revisit it continually);&lt;/li>
+&lt;li>Set &lt;code>JAVA_HOME&lt;/code> to JDK 8 (Example: &lt;code>export JAVA_HOME=/example/path/to/java/jdk8&lt;/code>).&lt;/li>
 &lt;/ul>
 &lt;p>The core of the release process is the build-vote-fix cycle. Each cycle produces one release candidate. The Release Manager repeats this cycle until the community approves one release candidate, which is then finalized.&lt;/p>
 &lt;p>For this step, we recommend you using automation script to create a RC, but you still can perform all steps manually if you want.&lt;/p>
@@ -911,7 +889,7 @@ Need to verify all Python images by replacing &lt;code>${ver}&lt;/code> with eac
 &lt;pre>&lt;code>docker run -it --entrypoint=/bin/bash apache/beam_python${ver}_sdk:${RELEASE}_rc{RC_NUM}
 ls -al /opt/apache/beam/third_party_licenses/ | wc -l
 &lt;/code>&lt;/pre>&lt;ul>
-&lt;li>For Java SDK images, there should be around 1400 dependencies.&lt;/li>
+&lt;li>For Java SDK images, there should be around 200 dependencies.&lt;/li>
 &lt;/ul>
 &lt;pre>&lt;code>docker run -it --entrypoint=/bin/bash apache/beam_java${ver}_sdk:${RELEASE}_rc{RC_NUM}
 ls -al /opt/apache/beam/third_party_licenses/ | wc -l
@@ -981,7 +959,7 @@ It is created by &lt;code>build_release_candidate.sh&lt;/code> (see above).&lt;/
 &lt;li>Update &lt;code>website/www/site/static/.htaccess&lt;/code> to redirect to the new version.&lt;/li>
 &lt;/ul>
 &lt;h3 id="blog-post">Blog post&lt;/h3>
-&lt;p>Write a blog post similar to &lt;a href="https://github.com/apache/beam/blob/master/website/www/site/content/en/blog/beam-2.20.0.md">beam-2.20.0.md&lt;/a>.&lt;/p>
+&lt;p>Write a blog post similar to &lt;a href="https://github.com/apache/beam/commit/b976e7be0744a32e99c841ad790c54920c8737f5#diff-8b1c3fd0d4a6765c16dfd18509182f9d">beam-2.23.0.md&lt;/a>.&lt;/p>
 &lt;ul>
 &lt;li>Update &lt;code>CHANGES.md&lt;/code> by adding a new section for the next release.&lt;/li>
 &lt;li>Copy the changes for the current release from &lt;code>CHANGES.md&lt;/code> to the blog post and edit as necessary.&lt;/li>
@@ -1018,7 +996,7 @@ For more information on changes in {$RELEASE_VERSION}, check out the
 * {$KNOWN_ISSUE_2}
 * See a full list of open [issues that affect](https://issues.apache.org/jira/issues/?jql=project%20%3D%20BEAM%20AND%20affectedVersion%20%3D%20{$RELEASE}%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC) this version.
 ## List of Contributors
-According to git shortlog, the following people contributed to the 2.XX.0 release. Thank you to all contributors!
+According to git shortlog, the following people contributed to the {$RELEASE_VERSION} release. Thank you to all contributors!
 ${CONTRIBUTORS}
 &lt;/code>&lt;/pre>&lt;h4 id="checklist-to-proceed-to-the-next-step-1">Checklist to proceed to the next step&lt;/h4>
 &lt;ol>
diff --git a/website/generated-content/contribute/release-guide/index.html b/website/generated-content/contribute/release-guide/index.html
index 742d8d1..6b973f3 100644
--- a/website/generated-content/contribute/release-guide/index.html
+++ b/website/generated-content/contribute/release-guide/index.html
@@ -4,19 +4,12 @@
 <a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 please follow <a href=https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/>the guide</a> to configure command line access.</p><h3 id=accounts>Accounts</h3><p>Please have these credentials ready at hand, you will likely need to enter them multiple times:</p><ul><li>GPG pass phrase (see the next section);</li><li>Apache ID and Password;</li><li>GitHub ID and Password.</li><li>DockerHub ID and Password. (You should be a member of maintainer team; email at  [...]
 or running all commands manually.</p><h5 id=use-preparation_before_releasesh-to-setup-gpg>Use preparation_before_release.sh to setup GPG</h5><ul><li><p>Script: <a href=https://github.com/apache/beam/blob/master/release/src/main/scripts/preparation_before_release.sh>preparation_before_release.sh</a></p></li><li><p>Usage</p><pre><code>./beam/release/src/main/scripts/preparation_before_release.sh
-</code></pre></li><li><p>Tasks included</p><ol><li><p>Help you create a new GPG key if you want.</p></li><li><p>Configure <code>git user.signingkey</code> with chosen pubkey.</p></li><li><p>Add chosen pubkey into <a href=https://dist.apache.org/repos/dist/dev/beam/KEYS>dev KEYS</a> and <a href=https://dist.apache.org/repos/dist/release/beam/KEYS>release KEYS</a></p><p><strong>NOTES</strong>: Only PMC can write into <a href=https://dist.apache.org/repos/dist/release/beam/>release repo</a> [...]
-sudo rngd -r /dev/urandom
-</code></pre></li><li><p>Create a GPG key</p><pre><code>gpg --full-generate-key
-</code></pre></li><li><p>Determine your Apache GPG Key and Key ID, as follows:</p><pre><code>gpg --list-sigs --keyid-format LONG
+</code></pre></li><li><p>Tasks included</p><ol><li><p>Help you create a new GPG key if you want.</p></li><li><p>Configure <code>git user.signingkey</code> with chosen pubkey.</p></li><li><p>Add chosen pubkey into <a href=https://dist.apache.org/repos/dist/dev/beam/KEYS>dev KEYS</a> and <a href=https://dist.apache.org/repos/dist/release/beam/KEYS>release KEYS</a></p><p><strong>NOTES</strong>: Only PMC can write into <a href=https://dist.apache.org/repos/dist/release/beam/>release repo</a> [...]
 </code></pre><p>This will list your GPG keys. One of these should reflect your Apache account, for example:</p><pre><code>--------------------------------------------------
 pub   2048R/845E6689 2016-02-23
 uid                  Nomen Nescio &lt;anonymous@apache.org&gt;
 sub   2048R/BA4D50BE 2016-02-23
-</code></pre><p>Here, the key ID is the 8-digit hex string in the <code>pub</code> line: <code>845E6689</code>.</p><p>Now, add your Apache GPG key to the Beam’s <code>KEYS</code> file both in <a href=https://dist.apache.org/repos/dist/dev/beam/KEYS><code>dev</code></a> and <a href=https://dist.apache.org/repos/dist/release/beam/KEYS><code>release</code></a> repositories at <code>dist.apache.org</code>. Follow the instructions listed at the top of these files. (Note: Only PMC members have [...]
-</code></pre><p>You may drop the <code>--global</code> option if you’d prefer to use this key for the current repository only.</p></li><li><p>Start GPG agent in order to unlock your GPG key</p><pre><code>eval $(gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info)
-export GPG_TTY=$(tty)
-export GPG_AGENT_INFO
-</code></pre></li></ul><h4 id=access-to-apache-nexus-repository>Access to Apache Nexus repository</h4><p>Configure access to the <a href=https://repository.apache.org/>Apache Nexus repository</a>, which enables final deployment of releases to the Maven Central Repository.</p><ol><li><p>You log in with your Apache account.</p></li><li><p>Confirm you have appropriate access by finding <code>org.apache.beam</code> under <code>Staging Profiles</code>.</p></li><li><p>Navigate to your <code>Pr [...]
+</code></pre><p>Here, the key ID is the 8-digit hex string in the <code>pub</code> line: <code>845E6689</code>.</p></li></ul><h4 id=access-to-apache-nexus-repository>Access to Apache Nexus repository</h4><p>Configure access to the <a href=https://repository.apache.org/>Apache Nexus repository</a>, which enables final deployment of releases to the Maven Central Repository.</p><ol><li><p>You log in with your Apache account.</p></li><li><p>Confirm you have appropriate access by finding <cod [...]
  &lt;settings&gt;
    &lt;servers&gt;
      &lt;server&gt;
@@ -130,12 +123,12 @@ if you want build fails after the first error instead of continuing, it may be e
 to find environment issues this way without having to wait until the full build completes.</p></li></ol></li></ul><h4 id=create-release-blocking-issues-in-jira>Create release-blocking issues in JIRA</h4><p>The verify_release_build.sh script may include failing or flaky tests. For each of the failing tests create a JIRA with the following properties:</p><ul><li><p>Issue Type: Bug</p></li><li><p>Summary: Name of failing gradle task and name of failing test (where applicable) in form of :My [...]
 a list of pending issues and to-be-trigated issues should be included. Afterwards, this list can be refined and updated
 by the release manager and the Beam community.</p><hr><h2 id=6-triage-release-blocking-issues-in-jira>6. Triage release-blocking issues in JIRA</h2><p>There could be outstanding release-blocking issues, which should be triaged before proceeding to build a release candidate. We track them by assigning a specific <code>Fix version</code> field even before the issue resolved.</p><p>The list of release-blocking issues is available at the <a href="https://issues.apache.org/jira/browse/BEAM/?s [...]
-Make sure they have blocker JIRAs attached and are OK to get into the release by checking with community if needed.</p><p>As the Release Manager you are empowered to accept or reject cherry-picks to the release branch. You are encouraged to ask the following questions to be answered on each cherry-pick PR and you can choose to reject cherry-pick requests if these questions are not satisfactorily answered:</p><ul><li>Is this a regression from a previous release? (If no, fix could go to a  [...]
+Make sure they have blocker JIRAs attached and are OK to get into the release by checking with community if needed.</p><p>As the Release Manager you are empowered to accept or reject cherry-picks to the release branch. You are encouraged to ask the following questions to be answered on each cherry-pick PR and you can choose to reject cherry-pick requests if these questions are not satisfactorily answered:</p><ul><li>Is this a regression from a previous release? (If no, fix could go to a  [...]
 </code></pre></li><li><p>The script will:</p><ol><li>Run gradle release to create rc tag and push source release into github repo.</li><li>Run gradle publish to push java artifacts into Maven staging repo.</li><li>Stage source release into dist.apache.org dev <a href=https://dist.apache.org/repos/dist/dev/beam/>repo</a>.</li><li>Stage, sign and hash python source distribution and wheels into dist.apache.org dev repo python dir</li><li>Stage SDK docker images to <a href="https://hub.docke [...]
 Please note that dependencies for the SDKs with different Python versions vary.
 Need to verify all Python images by replacing <code>${ver}</code> with each supported Python version <code>X.Y</code>.</li></ul><pre><code>docker run -it --entrypoint=/bin/bash apache/beam_python${ver}_sdk:${RELEASE}_rc{RC_NUM}
 ls -al /opt/apache/beam/third_party_licenses/ | wc -l
-</code></pre><ul><li>For Java SDK images, there should be around 1400 dependencies.</li></ul><pre><code>docker run -it --entrypoint=/bin/bash apache/beam_java${ver}_sdk:${RELEASE}_rc{RC_NUM}
+</code></pre><ul><li>For Java SDK images, there should be around 200 dependencies.</li></ul><pre><code>docker run -it --entrypoint=/bin/bash apache/beam_java${ver}_sdk:${RELEASE}_rc{RC_NUM}
 ls -al /opt/apache/beam/third_party_licenses/ | wc -l
 </code></pre></li></ol></li><li>Publish staging artifacts<ol><li>Log in to the <a href=https://repository.apache.org/#stagingRepositories>Apache Nexus</a> website.</li><li>Navigate to Build Promotion -> Staging Repositories (in the left sidebar).</li><li>Select repository <code>orgapachebeam-NNNN</code>.</li><li>Click the Close button.</li><li>When prompted for a description, enter “Apache Beam, version X, release candidate Y”.</li><li>Review all staged artifacts on <a href=https://repos [...]
 in and exclude, plus a list of offline URLs that populate links from Beam&rsquo;s
@@ -152,7 +145,7 @@ redirects for the &lsquo;current&rsquo; version, merge these PRs in the order li
 the PR is merged, the new contents will get picked up automatically and served
 to the Beam website, usually within an hour.</p><p><strong>PR 1: apache/beam-site</strong></p><p>This pull request is against the <code>apache/beam-site</code> repo, on the <code>release-docs</code>
 branch (<a href=https://github.com/apache/beam-site/pull/603>example</a>).
-It is created by <code>build_release_candidate.sh</code> (see above).</p><p><strong>PR 2: apache/beam</strong></p><p>This pull request is against the <code>apache/beam</code> repo, on the <code>master</code> branch (<a href=https://github.com/apache/beam/pull/11727>example</a>).</p><ul><li>Update release version in <code>website/www/site/config.toml</code>.</li><li>Add new release in <code>website/www/site/content/en/get-started/downloads.md</code>.<ul><li>Download links will not work un [...]
+It is created by <code>build_release_candidate.sh</code> (see above).</p><p><strong>PR 2: apache/beam</strong></p><p>This pull request is against the <code>apache/beam</code> repo, on the <code>master</code> branch (<a href=https://github.com/apache/beam/pull/11727>example</a>).</p><ul><li>Update release version in <code>website/www/site/config.toml</code>.</li><li>Add new release in <code>website/www/site/content/en/get-started/downloads.md</code>.<ul><li>Download links will not work un [...]
 Make sure to clean it up, as there may be duplicate or incorrect user names.</p><p><strong>NOTE</strong>: Make sure to include any breaking changes, even to <code>@Experimental</code> features,
 all major features and bug fixes, and all known issues.</p><p>Template:</p><pre><code>We are happy to present the new {$RELEASE_VERSION} release of Beam. This release includes both improvements and new functionality.
 See the [download page](/get-started/downloads/{$DOWNLOAD_ANCHOR}) for this release.
@@ -197,7 +190,7 @@ For more information on changes in {$RELEASE_VERSION}, check out the
 
 ## List of Contributors
 
-According to git shortlog, the following people contributed to the 2.XX.0 release. Thank you to all contributors!
+According to git shortlog, the following people contributed to the {$RELEASE_VERSION} release. Thank you to all contributors!
 
 ${CONTRIBUTORS}
 </code></pre><h4 id=checklist-to-proceed-to-the-next-step-1>Checklist to proceed to the next step</h4><ol><li>Maven artifacts deployed to the staging repository of <a href=https://repository.apache.org/content/repositories/>repository.apache.org</a></li><li>Source distribution deployed to the dev repository of <a href=https://dist.apache.org/repos/dist/dev/beam/>dist.apache.org</a></li><li>Website pull request proposed to list the <a href=/get-started/downloads/>release</a>, publish the  [...]
diff --git a/website/generated-content/documentation/index.html b/website/generated-content/documentation/index.html
index f4684ff..b78f786 100644
--- a/website/generated-content/documentation/index.html
+++ b/website/generated-content/documentation/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Learn about Beam</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Speci [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/index.xml b/website/generated-content/documentation/index.xml
index 0d3ea63..0ffa63e 100644
--- a/website/generated-content/documentation/index.xml
+++ b/website/generated-content/documentation/index.xml
@@ -6973,6 +6973,492 @@ we want to batch ten seconds worth of events together in order to reduce the num
 &lt;span class="n">isTimerSetState&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">clear&lt;/span>&lt;span class="o">();&lt;/span>
 &lt;span class="o">}&lt;/span>
 &lt;span class="o">}));&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h2 id="splittable-dofns">12. Splittable &lt;code>DoFns&lt;/code>&lt;/h2>
+&lt;p>A Splittable &lt;code>DoFn&lt;/code> (SDF) enables users to create modular components containing I/Os (and some advanced
+&lt;a href="https://s.apache.org/splittable-do-fn#heading=h.5cep9s8k4fxv">non I/O use cases&lt;/a>). Having modular
+I/O components that can be connected to each other simplify typical patterns that users want.
+For example, a popular use case is to read filenames from a message queue followed by parsing those
+files. Traditionally, users were required to either write a single I/O connector that contained the
+logic for the message queue and the file reader (increased complexity) or choose to reuse a message
+queue I/O followed by a regular &lt;code>DoFn&lt;/code> that read the file (decreased performance). With SDF,
+we bring the richness of Apache Beam’s I/O APIs to a &lt;code>DoFn&lt;/code> enabling modularity while maintaining the
+performance of traditional I/O connectors.&lt;/p>
+&lt;h3 id="sdf-basics">12.1. SDF basics&lt;/h3>
+&lt;p>At a high level, an SDF is responsible for processing element and restriction pairs. A
+restriction represents a subset of work that would have been necessary to have been done when
+processing the element.&lt;/p>
+&lt;p>Executing an SDF follows the following steps:&lt;/p>
+&lt;ol>
+&lt;li>Each element is paired with a restriction (e.g. filename is paired with offset range representing the whole file).&lt;/li>
+&lt;li>Each element and restriction pair is split (e.g. offset ranges are broken up into smaller pieces).&lt;/li>
+&lt;li>The runner redistributes the element and restriction pairs to several workers.&lt;/li>
+&lt;li>Element and restriction pairs are processed in parallel (e.g. the file is read). Within this last step,
+the element and restriction pair can pause its own processing and/or be split into further element and
+restriction pairs.&lt;/li>
+&lt;/ol>
+&lt;p>&lt;img src="/images/sdf_high_level_overview.svg" alt="Diagram of steps that an SDF is composed of">&lt;/p>
+&lt;h4 id="a-basic-sdf">12.1.1. A basic SDF&lt;/h4>
+&lt;p>A basic SDF is composed of three parts: a restriction, a restriction provider, and a
+restriction tracker. The restriction is used to represent a subset of work for a given element.
+The restriction provider lets SDF authors override default implementations for splitting, sizing,
+watermark estimation, and so forth. In &lt;a href="https://github.com/apache/beam/blob/f4c2734261396858e388ebef2eef50e7d48231a8/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFn.java#L92">Java&lt;/a>
+and &lt;a href="https://github.com/apache/beam/blob/0f466e6bcd4ac8677c2bd9ecc8e6af3836b7f3b8/sdks/go/pkg/beam/pardo.go#L226">Go&lt;/a>,
+this is the &lt;code>DoFn&lt;/code>. &lt;a href="https://github.com/apache/beam/blob/f4c2734261396858e388ebef2eef50e7d48231a8/sdks/python/apache_beam/transforms/core.py#L213">Python&lt;/a>
+has a dedicated RestrictionProvider type. The restriction tracker is responsible for tracking
+what subset of the restriction has been completed during processing.&lt;/p>
+&lt;p>To define an SDF, you must choose whether the SDF is bounded (default) or
+unbounded and define a way to initialize an initial restriction for an element.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@BoundedPerElement&lt;/span>
+&lt;span class="kd">private&lt;/span> &lt;span class="kd">static&lt;/span> &lt;span class="kd">class&lt;/span> &lt;span class="nc">FileToWordsFn&lt;/span> &lt;span class="kd">extends&lt;/span> &lt;span class="n">DoFn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Integer&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="nd">@GetInitialRestriction&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="nf">getInitialRestriction&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">fileName&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="kd">throws&lt;/span> &lt;span class="n">IOException&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">0&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">File&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">fileName&lt;/span>&lt;span class="o">).&lt;/span>&lt;span class="na">length&lt;/span>&lt;span class="o">());&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="nd">@ProcessElement&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">processElement&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">RestrictionTracker&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">OutputReceiver&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">outputReceiver&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="kd">throws&lt;/span> &lt;span class="n">IOException&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">RandomAccessFile&lt;/span> &lt;span class="n">file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">RandomAccessFile&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s">&amp;#34;r&amp;#34;&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">seekToNextRecordBoundaryInFile&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">());&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getFilePointer&lt;/span>&lt;span class="o">()))&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">outputReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">readNextRecord&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">));&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="c1">// Providing the coder is only necessary if it can not be inferred at runtime.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nd">@GetRestrictionCoder&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">Coder&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="nf">getRestrictionCoder&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">Coder&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">FileToWordsRestrictionProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionProvider&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">initial_restriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_name&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">stat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">st_size&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">create_tracker&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">restriction_trackers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">OffsetRestrictionTracker&lt;/span>&lt;span class="p">()&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">FileToWordsFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionParam&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FileToWordsRestrictionProvider&lt;/span>&lt;span class="p">())):&lt;/span>
+&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">file_handle&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="n">file_handle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seek&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">())&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_handle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tell&lt;/span>&lt;span class="p">()):&lt;/span>
+&lt;span class="k">yield&lt;/span> &lt;span class="n">read_next_record&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_handle&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="c1"># Providing the coder is only necessary if it can not be inferred at&lt;/span>
+&lt;span class="c1"># runtime.&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">restriction_coder&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="o">...&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-go>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">splittableDoFn&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">CreateInitialRestriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span> &lt;span class="kt">string&lt;/span>&lt;span class="p">)&lt;/span> &lt;sp [...]
+&lt;span class="k">return&lt;/span> &lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Restriction&lt;/span>&lt;span class="p">{&lt;/span>
+&lt;span class="nx">Start&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="nx">End&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">getFileLength&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">splittableDoFn&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">CreateTracker&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">rest&lt;/span> &lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Restriction&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span>&lt;span [...]
+&lt;span class="k">return&lt;/span> &lt;span class="nx">sdf&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">NewLockRTracker&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">NewTracker&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">rest&lt;/span>&lt;span class="p">))&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">splittableDoFn&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">ProcessElement&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">rt&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">sdf&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">LockRTracker&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class=" [...]
+&lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">nil&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="nx">err&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="nx">offset&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nf">seekToNextRecordBoundaryInFile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">rt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">GetRestriction&lt;/span>&lt;span class="p">().(&lt;/span>&lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt; [...]
+&lt;span class="k">if&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">nil&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="nx">err&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="k">for&lt;/span> &lt;span class="nx">rt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">TryClaim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">offset&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="nx">record&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">newOffset&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nf">readNextRecord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nf">emit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">record&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nx">offset&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nx">newOffset&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="kc">nil&lt;/span>
+&lt;span class="p">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;p>At this point, we have an SDF that supports &lt;a href="#runner-initiated-split">runner-initiated splits&lt;/a>
+enabling dynamic work rebalancing. To increase the rate at which initial parallelization of work occurs
+or for those runners that do not support runner-initiated splitting, we recommend providing
+a set of initial splits:&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="kt">void&lt;/span> &lt;span class="nf">splitRestriction&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@Restriction&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OutputReceiver&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">splitReceiver&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="kt">long&lt;/span> &lt;span class="n">splitSize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">64&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">1&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">20&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="kt">long&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getTo&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">splitSize&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Compute and output 64 MiB size ranges to process in parallel
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">end&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">splitSize&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="n">splitReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">));&lt;/span>
+&lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="c1">// Output the last range
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="n">splitReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getTo&lt;/span>&lt;span class="o">()));&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">FileToWordsRestrictionProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionProvider&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="c1"># Compute and output 64 MiB size ranges to process in parallel&lt;/span>
+&lt;span class="n">split_size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">64&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">end&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">split_size&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="k">yield&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">split_size&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">split_size&lt;/span>
+&lt;span class="k">yield&lt;/span> &lt;span class="n">OffsetRange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-go>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">splittableDoFn&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">SplitRestriction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span> &lt;span class="kt">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class [...]
+&lt;span class="nx">size&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="mi">64&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nx">i&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">rest&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Start&lt;/span>
+&lt;span class="k">for&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nx">rest&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">End&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nx">size&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="c1">// Compute and output 64 MiB size ranges to process in parallel
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="nx">size&lt;/span>
+&lt;span class="nx">splits&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">splits&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Restriction&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">end&lt;/span>&lt;span class="p">})&lt;/span>
+&lt;span class="nx">i&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nx">end&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="c1">// Output the last range
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nx">splits&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">splits&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Restriction&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">rest&lt;/span>&lt;span cla [...]
+&lt;span class="k">return&lt;/span> &lt;span class="nx">splits&lt;/span>
+&lt;span class="p">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="sizing-and-progress">12.2. Sizing and progress&lt;/h3>
+&lt;p>Sizing and progress are used during execution of an SDF to inform runners so that they may
+perform intelligent decisions about which restrictions to split and how to parallelize work.&lt;/p>
+&lt;p>Before processing an element and restriction, an initial size may be used by a runner to choose
+how and who processes the restrictions attempting to improve initial balancing and parallelization
+of work. During the processing of an element and restriction, sizing and progress are used to choose
+which restrictions to split and who should process them.&lt;/p>
+&lt;p>By default, we use the restriction tracker’s estimate for work remaining falling back to assuming
+that all restrictions have an equal cost. To override the default, SDF authors can provide the
+appropriate method within the restriction provider.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@GetSize&lt;/span>
+&lt;span class="kt">double&lt;/span> &lt;span class="nf">getSize&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nd">@Restriction&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">fileName&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">contains&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;expensiveRecords&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="n">2&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">1&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span cla [...]
+&lt;span class="o">-&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="c1"># The RestrictionProvider is responsible for calculating the size of given&lt;/span>
+&lt;span class="c1"># restriction.&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">MyRestrictionProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionProvider&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">restriction_size&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="n">weight&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="s2">&amp;#34;expensiveRecords&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">file_name&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="mi">1&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">weight&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-go>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">splittableDoFn&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">RestrictionSize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span> &lt;span class="kt">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class= [...]
+&lt;span class="nx">weight&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nb">float64&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="nx">strings&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Contains&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="err">“&lt;/span>&lt;span class="nx">expensiveRecords&lt;/span>&lt;span class="err">”&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="nx">weight&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mi">2&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="nx">weight&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">rest&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">End&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="nx">rest&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Start&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="p">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="user-initiated-checkpoint">12.3. User-initiated checkpoint&lt;/h3>
+&lt;p>Some I/Os cannot produce all of the data necessary to complete a restriction within the lifetime of a
+single bundle. This typically happens with unbounded restrictions, but can also happen with bounded
+restrictions. For example, there could be more data that needs to be ingested but is not available yet.
+Another cause of this scenario is the source system throttling your data.&lt;/p>
+&lt;p>Your SDF can signal to you that you are not done processing the current restriction. This
+signal can suggest a time to resume at. While the runner tries to honor the resume time, this is not
+guaranteed. This allows execution to continue on a restriction that has available work improving
+resource utilization.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@ProcessElement&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">ProcessContinuation&lt;/span> &lt;span class="nf">processElement&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">RestrictionTracker&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OutputReceiver&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Record&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">outputReceiver&lt;/span>&lt [...]
+&lt;span class="kt">long&lt;/span> &lt;span class="n">currentPosition&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="n">Service&lt;/span> &lt;span class="n">service&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">initializeService&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="k">try&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">List&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Record&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">records&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">service&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">readNextRecords&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">currentPosition&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">records&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">isEmpty&lt;/span>&lt;span class="o">())&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Return a short delay if there is no data to process at the moment.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">ProcessContinuation&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">resume&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">withResumeDelay&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">standardSeconds&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">10&lt;/span>&lt;span class="o">)) [...]
+&lt;span class="o">}&lt;/span>
+&lt;span class="k">for&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">Record&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">records&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="o">(!&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">record&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getPosition&lt;/span>&lt;span class="o">()))&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">ProcessContinuation&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">stop&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="n">currentPosition&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">record&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getPosition&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">1&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="n">outputReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">record&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">ThrottlingException&lt;/span> &lt;span class="n">exception&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Return a longer delay in case we are being throttled.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">ProcessContinuation&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">resume&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">withResumeDelay&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">standardSeconds&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">60&lt;/span>&lt;span class="o">)) [...]
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">MySplittableDoFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionParam&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="n">MyRestrictionProvider&lt;/span>&lt;span class="p">())):&lt;/span>
+&lt;span class="n">current_position&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">()&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="bp">True&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="c1"># Pull records from an external service.&lt;/span>
+&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="n">records&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">external_service&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fetch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">current_position&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="n">records&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">():&lt;/span>
+&lt;span class="c1"># Set a shorter delay in case we are being throttled.&lt;/span>
+&lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">defer_remainder&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">timestamp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">second&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span>
+&lt;span class="k">return&lt;/span>
+&lt;span class="k">for&lt;/span> &lt;span class="n">record&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">records&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">record&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">position&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="n">current_position&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">record&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">position&lt;/span>
+&lt;span class="k">yield&lt;/span> &lt;span class="n">record&lt;/span>
+&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="k">return&lt;/span>
+&lt;span class="k">except&lt;/span> &lt;span class="n">TimeoutError&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="c1"># Set a longer delay in case we are being throttled.&lt;/span>
+&lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">defer_remainder&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">timestamp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">seconds&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">))&lt;/span>
+&lt;span class="k">return&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="runner-initiated-split">12.4. Runner-initiated split&lt;/h3>
+&lt;p>A runner at any time may attempt to split a restriction while it is being processed. This allows the
+runner to either pause processing of the restriction so that other work may be done (common for
+unbounded restrictions to limit the amount of output and/or improve latency) or split the restriction
+into two pieces, increasing the available parallelism within the system. It is important to author a
+SDF with this in mind since the end of the restriction may change. Thus when writing the
+processing loop, it is important to use the result from trying to claim a piece of the restriction
+instead of assuming one can process till the end.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@ProcessElement&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">badTryClaimLoop&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">RestrictionTracker&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">Long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">,&lt;/span>
+&lt;span class="n">OutputReceiver&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Integer&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">outputReceiver&lt;/span>&lt;span class="o">)&lt;/span>
+&lt;span class="kd">throws&lt;/span> &lt;span class="n">IOException&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="n">RandomAccessFile&lt;/span> &lt;span class="n">file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">RandomAccessFile&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="s">&amp;#34;r&amp;#34;&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="n">seekToNextRecordBoundaryInFile&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getFrom&lt;/span>&lt;span class="o">());&lt;/span>
+&lt;span class="c1">// The restriction tracker can be modified by another thread in parallel
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// so storing state locally is ill advised.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">end&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">currentRestriction&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">getTo&lt;/span>&lt;span class="o">();&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getFilePointer&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Only after successfully claiming should we produce any output and/or
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// perform side effects.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">tryClaim&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">getFilePointer&lt;/span>&lt;span class="o">());&lt;/span>
+&lt;span class="n">outputReceiver&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">output&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">readNextRecord&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">file&lt;/span>&lt;span class="o">));&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">BadTryClaimLoop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionParam&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FileToWordsRestrictionProvider&lt;/span>&lt;span class="p">())):&lt;/span>
+&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_name&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">file_handle&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="n">file_handle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">seek&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">start&lt;/span>&lt;span class="p">())&lt;/span>
+&lt;span class="c1"># The restriction tracker can be modified by another thread in parallel&lt;/span>
+&lt;span class="c1"># so storing state locally is ill advised.&lt;/span>
+&lt;span class="n">end&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_restriction&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="p">()&lt;/span>
+&lt;span class="k">while&lt;/span> &lt;span class="n">file_handle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tell&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="c1"># Only after successfully claiming should we produce any output and/or&lt;/span>
+&lt;span class="c1"># perform side effects.&lt;/span>
+&lt;span class="n">tracker&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">try_claim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_handle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tell&lt;/span>&lt;span class="p">())&lt;/span>
+&lt;span class="k">yield&lt;/span> &lt;span class="n">read_next_record&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">file_handle&lt;/span>&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-go>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="kd">func&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">fn&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">badTryClaimLoop&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nf">ProcessElement&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">rt&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nx">sdf&lt;/span>&lt;span class="p">.&lt;/ [...]
+&lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">filename&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">nil&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="nx">err&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="nx">offset&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nf">seekToNextRecordBoundaryInFile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">rt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">GetRestriction&lt;/span>&lt;span class="p">().(&lt;/span>&lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt; [...]
+&lt;span class="k">if&lt;/span> &lt;span class="nx">err&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">nil&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="nx">err&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="c1">// The restriction tracker can be modified by another thread in parallel
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// so storing state locally is ill advised.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nx">rt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">GetRestriction&lt;/span>&lt;span class="p">().(&lt;/span>&lt;span class="nx">offsetrange&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Restriction&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">End&lt;/span>
+&lt;span class="k">for&lt;/span> &lt;span class="nx">offset&lt;/span> &lt;span class="p">&amp;lt;&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="c1">// Only after successfully claiming should we produce any output and/or
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// perform side effects.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nx">rt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">TryClaim&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">offset&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nx">record&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">newOffset&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nf">readNextRecord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">file&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nf">emit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">record&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="nx">offset&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nx">newOffset&lt;/span>
+&lt;span class="p">}&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="kc">nil&lt;/span>
+&lt;span class="p">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="watermark-estimation">12.5. Watermark estimation&lt;/h3>
+&lt;p>The default watermark estimator does not produce a watermark estimate. Therefore, the output watermark
+is solely computed by the minimum of upstream watermarks.&lt;/p>
+&lt;p>An SDF can advance the output watermark by specifying a lower bound for all future output
+that this element and restriction pair will produce. The runner computes the minimum output watermark
+by taking the minimum over all upstream watermarks and the minimum reported by each element and
+restriction pair. The reported watermark must monotonically increase for each element and restriction
+pair across bundle boundaries. When an element and restriction pair stops processing its watermark,
+it is no longer considered part of the above calculation.&lt;/p>
+&lt;p>Tips:&lt;/p>
+&lt;ul>
+&lt;li>If you author an SDF that outputs records with timestamps, you should expose ways to allow users of
+this SDF to configure which watermark estimator to use.&lt;/li>
+&lt;li>Any data produced before the watermark may be considered late. See
+&lt;a href="#watermarks-and-late-data">watermarks and late data&lt;/a> for more details.&lt;/li>
+&lt;/ul>
+&lt;h4 id="controlling-the-watermark">12.5.1. Controlling the watermark&lt;/h4>
+&lt;p>There are two general types of watermark estimators: timestamp observing and external clock observing.
+Timestamp observing watermark estimators use the output timestamp of each record to compute the watermark
+estimate while external clock observing watermark estimators control the watermark by using a clock that
+is not associated to any individual output, such as the local clock of the machine or a clock exposed
+through an external service.&lt;/p>
+&lt;p>The restriction provider lets you override the default watermark estimation logic and use an existing
+watermark estimator implementation. You can also provide your own watermark estimator implementation.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java"> &lt;span class="c1">// (Optional) Define a custom watermark state type to save information between bundle
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// processing rounds.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="kd">public&lt;/span> &lt;span class="kd">static&lt;/span> &lt;span class="kd">class&lt;/span> &lt;span class="nc">MyCustomWatermarkState&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="nf">MyCustomWatermarkState&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">String&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Store data necessary for future watermark computations
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="c1">// (Optional) Choose which coder to use to encode the watermark estimator state.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="nd">@GetWatermarkEstimatorStateCoder&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">Coder&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">MyCustomWatermarkState&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="nf">getWatermarkEstimatorStateCoder&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">AvroCoder&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">MyCustomWatermarkState&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">class&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="c1">// Define a WatermarkEstimator
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="kd">public&lt;/span> &lt;span class="kd">static&lt;/span> &lt;span class="kd">class&lt;/span> &lt;span class="nc">MyCustomWatermarkEstimator&lt;/span>
+&lt;span class="kd">implements&lt;/span> &lt;span class="n">TimestampObservingWatermarkEstimator&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">MyCustomWatermarkState&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="nf">MyCustomWatermarkEstimator&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">MyCustomWatermarkState&lt;/span> &lt;span class="n">type&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Initialize watermark estimator state
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="o">}&lt;/span>
+&lt;span class="nd">@Override&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">observeTimestamp&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">Instant&lt;/span> &lt;span class="n">timestamp&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Will be invoked on each output from the SDF
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="o">}&lt;/span>
+&lt;span class="nd">@Override&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">Instant&lt;/span> &lt;span class="nf">currentWatermark&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Return a monotonically increasing value
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">currentWatermark&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="nd">@Override&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">MyCustomWatermarkState&lt;/span> &lt;span class="nf">getState&lt;/span>&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Return state to resume future watermark estimation after a checkpoint/split
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="c1">// Then, update the DoFn to generate the initial watermark estimator state for all new element
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// and restriction pairs and to create a new instance given watermark estimator state.
+&lt;/span>&lt;span class="c1">&lt;/span>
+&lt;span class="nd">@GetInitialWatermarkEstimatorState&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">MyCustomWatermarkState&lt;/span> &lt;span class="nf">getInitialWatermarkEstimatorState&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nd">@Restriction&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Compute and return the initial watermark estimator state for each element and
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// restriction. All subsequent processing of an element and restriction will be restored
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="c1">// from the existing state.
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">MyCustomWatermarkState&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="nd">@NewWatermarkEstimator&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="n">WatermarkEstimator&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">MyCustomWatermarkState&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="nf">newWatermarkEstimator&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@WatermarkEstimatorState&lt;/span> &lt;span class="n">MyCustomWatermarkState&lt;/span> &lt;span class="n">oldState&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">MyCustomWatermarkEstimator&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">oldState&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="c1"># (Optional) Define a custom watermark state type to save information between&lt;/span>
+&lt;span class="c1"># bundle processing rounds.&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">MyCustomerWatermarkEstimatorState&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">object&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="c1"># Store data necessary for future watermark computations&lt;/span>
+&lt;span class="k">pass&lt;/span>
+&lt;span class="c1"># Define a WatermarkEstimator&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">MyCustomWatermarkEstimator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">WatermarkEstimator&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">estimator_state&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">state&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">estimator_state&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">observe_timestamp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">timestamp&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="c1"># Will be invoked on each output from the SDF&lt;/span>
+&lt;span class="k">pass&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">current_watermark&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="c1"># Return a monotonically increasing value&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">current_watermark&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">get_estimator_state&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="c1"># Return state to resume future watermark estimation after a&lt;/span>
+&lt;span class="c1"># checkpoint/split&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">state&lt;/span>
+&lt;span class="c1"># Then, a WatermarkEstimatorProvider needs to be created for this&lt;/span>
+&lt;span class="c1"># WatermarkEstimator&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">MyWatermarkEstimatorProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">WatermarkEstimatorProvider&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">initial_estimator_state&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">MyCustomerWatermarkEstimatorState&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">create_watermark_estimator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">estimator_state&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">MyCustomWatermarkEstimator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">estimator_state&lt;/span>&lt;span class="p">)&lt;/span>
+&lt;span class="c1"># Finally, define the SDF using your estimator.&lt;/span>
+&lt;span class="k">class&lt;/span> &lt;span class="nc">MySplittableDoFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">restriction_tracker&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionParam&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MyRestrictionProvider&lt;/span>&lt;span class="p">()),&lt;/span>
+&lt;span class="n">watermark_estimator&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WatermarkEstimatorParam&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="n">MyWatermarkEstimatorProvider&lt;/span>&lt;span class="p">())):&lt;/span>
+&lt;span class="c1"># The current watermark can be inspected.&lt;/span>
+&lt;span class="n">watermark_estimator&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">current_watermark&lt;/span>&lt;span class="p">()&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="truncating-during-drain">12.6. Truncating during drain&lt;/h3>
+&lt;p>Runners which support draining pipelines need the ability to drain SDFs; otherwise, the
+pipeline may never stop. By default, bounded restrictions process the remainder of the restriction while
+unbounded restrictions finish processing at the next SDF-initiated checkpoint or runner-initiated split.
+You are able to override this default behavior by defining the appropriate method on the restriction
+provider.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@TruncateRestriction&lt;/span>
+&lt;span class="nd">@Nullable&lt;/span>
+&lt;span class="n">TruncateResult&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">OffsetRange&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="nf">truncateRestriction&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="nd">@Element&lt;/span> &lt;span class="n">String&lt;/span> &lt;span class="n">fileName&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="nd">@Restriction&lt;/span> &lt;span class="n">OffsetRange&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="n">fileName&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">contains&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="s">&amp;#34;optional&amp;#34;&lt;/span>&lt;span class="o">))&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// Skip optional files
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="o">;&lt;/span>
+&lt;span class="o">}&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">TruncateResult&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">of&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">restriction&lt;/span>&lt;span class="o">);&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">MyRestrictionProvider&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">transforms&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RestrictionProvider&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">truncate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">file_name&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="s2">&amp;#34;optional&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">file_name&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="c1"># Skip optional files&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="bp">None&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="n">restriction&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;h3 id="bundle-finalization">12.7. Bundle finalization&lt;/h3>
+&lt;p>Bundle finalization enables a &lt;code>DoFn&lt;/code> to perform side effects by registering a callback.
+The callback is invoked once the runner has acknowledged that it has durably persisted the output.
+For example, a message queue might need to acknowledge messages that it has ingested into the pipeline.
+Bundle finalization is not limited to SDFs but is called out here since this is the primary
+use case.&lt;/p>
+&lt;div class=language-java>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="nd">@ProcessElement&lt;/span>
+&lt;span class="kd">public&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">processElement&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">ProcessContext&lt;/span> &lt;span class="n">c&lt;/span>&lt;span class="o">,&lt;/span> &lt;span class="n">BundleFinalizer&lt;/span> &lt;span class="n">bundleFinalizer&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// ... produce output ...
+&lt;/span>&lt;span class="c1">&lt;/span>
+&lt;span class="n">bundleFinalizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">afterBundleCommit&lt;/span>&lt;span class="o">(&lt;/span>
+&lt;span class="n">Instant&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">now&lt;/span>&lt;span class="o">().&lt;/span>&lt;span class="na">plus&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">Duration&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">standardMinutes&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">5&lt;/span>&lt;span class="o">)),&lt;/span>
+&lt;span class="o">()&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="o">{&lt;/span>
+&lt;span class="c1">// ... perform a side effect ...
+&lt;/span>&lt;span class="c1">&lt;/span> &lt;span class="o">});&lt;/span>
+&lt;span class="o">}&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;/div>
+&lt;div class=language-py>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="k">class&lt;/span> &lt;span class="nc">MySplittableDoFn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">process&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">bundle_finalizer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">DoFn&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BundleFinalizerParam&lt;/span>&lt;span c [...]
+&lt;span class="c1"># ... produce output ...&lt;/span>
+&lt;span class="c1"># Register callback function for this bundle that performs the side&lt;/span>
+&lt;span class="c1"># effect.&lt;/span>
+&lt;span class="n">bundle_finalizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">register&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">my_callback_func&lt;/span>&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div></description></item><item><title>Documentation: BigQuery patterns</title><link>/documentation/patterns/bigqueryio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/documentation/patterns/bigqueryio/</guid><description>
 &lt;!--
 Licensed under the Apache License, Version 2.0 (the "License");
@@ -12004,10 +12490,6 @@ as the previous example.&lt;/p>
 &lt;span class="n">table_schema&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;source:STRING, quote:STRING&amp;#39;&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;h3 id="setting-the-insertion-method">Setting the insertion method&lt;/h3>
-&lt;p class="language-py">&lt;blockquote>
-&lt;p>The Beam SDK for Python does not currently support specifying the insertion
-method.&lt;/p>
-&lt;/blockquote>&lt;/p>
 &lt;p>BigQueryIO supports two methods of inserting data into BigQuery: load jobs and
 streaming inserts. Each insertion method provides different tradeoffs of cost,
 quota, and data consistency. See the BigQuery documentation for
@@ -12140,9 +12622,6 @@ be replaced.&lt;/p>
 You can either keep retrying, or return the failed records in a separate
 &lt;code>PCollection&lt;/code> using the &lt;code>WriteResult.getFailedInserts()&lt;/code> method.&lt;/p>
 &lt;h3 id="using-dynamic-destinations">Using dynamic destinations&lt;/h3>
-&lt;p class="language-py">&lt;blockquote>
-&lt;p>The Beam SDK for Python does not currently support dynamic destinations.&lt;/p>
-&lt;/blockquote>&lt;/p>
 &lt;p>You can use the dynamic destinations feature to write elements in a
 &lt;code>PCollection&lt;/code> to different BigQuery tables, possibly with different schemas.&lt;/p>
 &lt;p>The dynamic destinations feature groups your user type by a user-defined
@@ -12263,12 +12742,22 @@ different table for each year.&lt;/p>
 &lt;span class="o">.&lt;/span>&lt;span class="na">withWriteDisposition&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">WriteDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">WRITE_TRUNCATE&lt;/span>&lt;span class="o">));&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class=language-py>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="c1"># The Beam SDK for Python does not currently support dynamic destinations.&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="n">fictional_characters_view&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pvalue&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">AsDict&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="n">p&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;CreateCharacters&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Create&lt;/span>&lt;span class="p">([(&lt;/span>&lt;span class="s1">&amp;#39;Yoda&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">True&lt;/span>&lt;span class="p">),&lt;/span>
+&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Obi Wan Kenobi&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="bp">True&lt;/span>&lt;span class="p">)]))&lt;/span>
+&lt;span class="k">def&lt;/span> &lt;span class="nf">table_fn&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">element&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fictional_characters&lt;/span>&lt;span class="p">):&lt;/span>
+&lt;span class="k">if&lt;/span> &lt;span class="n">element&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">fictional_characters&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;my_dataset.fictional_quotes&amp;#39;&lt;/span>
+&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
+&lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;my_dataset.real_quotes&amp;#39;&lt;/span>
+&lt;span class="n">quotes&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;WriteWithDynamicDestination&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WriteToBigQuery&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="n">table_fn&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">schema&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">table_schema&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">table_side_inputs&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fictional_characters_view&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">),&lt;/span>
+&lt;span class="n">write_disposition&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BigQueryDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WRITE_TRUNCATE&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">create_disposition&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BigQueryDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CREATE_IF_NEEDED&lt;/span>&lt;span class="p">)&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;h3 id="using-time-partitioning">Using time partitioning&lt;/h3>
-&lt;p class="language-py">&lt;blockquote>
-&lt;p>The Beam SDK for Python does not currently support time partitioning.&lt;/p>
-&lt;/blockquote>&lt;/p>
 &lt;p>BigQuery time partitioning divides your table into smaller partitions, which is
 called a &lt;a href="https://cloud.google.com/bigquery/docs/partitioned-tables">partitioned table&lt;/a>.
 Partitioned tables make it easier for you to manage and query your data.&lt;/p>
@@ -12304,7 +12793,14 @@ only usable if you are writing to a single table.&lt;/p>
 &lt;span class="o">.&lt;/span>&lt;span class="na">withWriteDisposition&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="n">WriteDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="na">WRITE_TRUNCATE&lt;/span>&lt;span class="o">));&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class=language-py>
-&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="c1"># The Beam SDK for Python does not currently support time partitioning.&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
+&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="n">quotes&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="s1">&amp;#39;WriteWithTimePartitioning&amp;#39;&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WriteToBigQuery&lt;/span>&lt;span class="p">(&lt;/span>
+&lt;span class="n">table_spec&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">schema&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">table_schema&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">write_disposition&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BigQueryDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">WRITE_TRUNCATE&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">create_disposition&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">beam&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BigQueryDisposition&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CREATE_IF_NEEDED&lt;/span>&lt;span class="p">,&lt;/span>
+&lt;span class="n">additional_bq_parameters&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;timePartitioning&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
+&lt;span class="s1">&amp;#39;type&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;HOUR&amp;#39;&lt;/span>
+&lt;span class="p">}})&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;h2 id="limitations">Limitations&lt;/h2>
 &lt;p>BigQueryIO currently has the following limitations.&lt;/p>
diff --git a/website/generated-content/documentation/io/built-in/google-bigquery/index.html b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
index 672b70b..bc5d27e 100644
--- a/website/generated-content/documentation/io/built-in/google-bigquery/index.html
+++ b/website/generated-content/documentation/io/built-in/google-bigquery/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Google BigQuery I/O connector</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 to <a href=https://cloud.google.com/bigquery>Google BigQuery</a> tables.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use BigQueryIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=o>&lt;</span><span class=n>dependency</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>google</span><span class=o>-</span><span class=n>cloud</span><span class=o>-</span><span class=n>platform</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
@@ -428,8 +428,7 @@ as the previous example.</p><div class=language-java><div class=highlight><pre c
         <span class=o>+</span> <span class=s>&#34;    }&#34;</span>
         <span class=o>+</span> <span class=s>&#34;  ]&#34;</span>
         <span class=o>+</span> <span class=s>&#34;}&#34;</span><span class=o>;</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=c1># column_name:BIGQUERY_TYPE, ...</span>
-<span class=n>table_schema</span> <span class=o>=</span> <span class=s1>&#39;source:STRING, quote:STRING&#39;</span></code></pre></div></div><h3 id=setting-the-insertion-method>Setting the insertion method</h3><p class=language-py><blockquote><p>The Beam SDK for Python does not currently support specifying the insertion
-method.</p></blockquote></p><p>BigQueryIO supports two methods of inserting data into BigQuery: load jobs and
+<span class=n>table_schema</span> <span class=o>=</span> <span class=s1>&#39;source:STRING, quote:STRING&#39;</span></code></pre></div></div><h3 id=setting-the-insertion-method>Setting the insertion method</h3><p>BigQueryIO supports two methods of inserting data into BigQuery: load jobs and
 streaming inserts. Each insertion method provides different tradeoffs of cost,
 quota, and data consistency. See the BigQuery documentation for
 <a href=https://cloud.google.com/bigquery/loading-data>load jobs</a> and
@@ -523,7 +522,7 @@ be replaced.</p><div class=language-java><div class=highlight><pre class=chroma>
         <span class=o>.</span><span class=na>withCreateDisposition</span><span class=o>(</span><span class=n>CreateDisposition</span><span class=o>.</span><span class=na>CREATE_IF_NEEDED</span><span class=o>)</span>
         <span class=o>.</span><span class=na>withWriteDisposition</span><span class=o>(</span><span class=n>WriteDisposition</span><span class=o>.</span><span class=na>WRITE_TRUNCATE</span><span class=o>));</span></code></pre></div></div><p class=language-java>When you use streaming inserts, you can decide what to do with failed records.
 You can either keep retrying, or return the failed records in a separate
-<code>PCollection</code> using the <code>WriteResult.getFailedInserts()</code> method.</p><h3 id=using-dynamic-destinations>Using dynamic destinations</h3><p class=language-py><blockquote><p>The Beam SDK for Python does not currently support dynamic destinations.</p></blockquote></p><p>You can use the dynamic destinations feature to write elements in a
+<code>PCollection</code> using the <code>WriteResult.getFailedInserts()</code> method.</p><h3 id=using-dynamic-destinations>Using dynamic destinations</h3><p>You can use the dynamic destinations feature to write elements in a
 <code>PCollection</code> to different BigQuery tables, possibly with different schemas.</p><p>The dynamic destinations feature groups your user type by a user-defined
 destination key, uses the key to compute a destination table and/or schema, and
 writes each group&rsquo;s elements to the computed destination.</p><p>In addition, you can also write your own types that have a mapping function to
@@ -625,7 +624,22 @@ different table for each year.</p><div class=language-java><div class=highlight>
                     <span class=o>.</span><span class=na>set</span><span class=o>(</span><span class=s>&#34;day&#34;</span><span class=o>,</span> <span class=n>elem</span><span class=o>.</span><span class=na>day</span><span class=o>)</span>
                     <span class=o>.</span><span class=na>set</span><span class=o>(</span><span class=s>&#34;maxTemp&#34;</span><span class=o>,</span> <span class=n>elem</span><span class=o>.</span><span class=na>maxTemp</span><span class=o>))</span>
         <span class=o>.</span><span class=na>withCreateDisposition</span><span class=o>(</span><span class=n>CreateDisposition</span><span class=o>.</span><span class=na>CREATE_IF_NEEDED</span><span class=o>)</span>
-        <span class=o>.</span><span class=na>withWriteDisposition</span><span class=o>(</span><span class=n>WriteDisposition</span><span class=o>.</span><span class=na>WRITE_TRUNCATE</span><span class=o>));</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=c1># The Beam SDK for Python does not currently support dynamic destinations.</span></code></pre></div></div><h3 id=using-time-partitioning>Usi [...]
+        <span class=o>.</span><span class=na>withWriteDisposition</span><span class=o>(</span><span class=n>WriteDisposition</span><span class=o>.</span><span class=na>WRITE_TRUNCATE</span><span class=o>));</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=n>fictional_characters_view</span> <span class=o>=</span> <span class=n>beam</span><span class=o>.</span><span class=n>pvalue</span><span class [...]
+    <span class=n>p</span> <span class=o>|</span> <span class=s1>&#39;CreateCharacters&#39;</span> <span class=o>&gt;&gt;</span> <span class=n>beam</span><span class=o>.</span><span class=n>Create</span><span class=p>([(</span><span class=s1>&#39;Yoda&#39;</span><span class=p>,</span> <span class=bp>True</span><span class=p>),</span>
+                                           <span class=p>(</span><span class=s1>&#39;Obi Wan Kenobi&#39;</span><span class=p>,</span> <span class=bp>True</span><span class=p>)]))</span>
+
+<span class=k>def</span> <span class=nf>table_fn</span><span class=p>(</span><span class=n>element</span><span class=p>,</span> <span class=n>fictional_characters</span><span class=p>):</span>
+  <span class=k>if</span> <span class=n>element</span> <span class=ow>in</span> <span class=n>fictional_characters</span><span class=p>:</span>
+    <span class=k>return</span> <span class=s1>&#39;my_dataset.fictional_quotes&#39;</span>
+  <span class=k>else</span><span class=p>:</span>
+    <span class=k>return</span> <span class=s1>&#39;my_dataset.real_quotes&#39;</span>
+
+<span class=n>quotes</span> <span class=o>|</span> <span class=s1>&#39;WriteWithDynamicDestination&#39;</span> <span class=o>&gt;&gt;</span> <span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>WriteToBigQuery</span><span class=p>(</span>
+    <span class=n>table_fn</span><span class=p>,</span>
+    <span class=n>schema</span><span class=o>=</span><span class=n>table_schema</span><span class=p>,</span>
+    <span class=n>table_side_inputs</span><span class=o>=</span><span class=p>(</span><span class=n>fictional_characters_view</span><span class=p>,</span> <span class=p>),</span>
+    <span class=n>write_disposition</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>BigQueryDisposition</span><span class=o>.</span><span class=n>WRITE_TRUNCATE</span><span class=p>,</span>
+    <span class=n>create_disposition</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>BigQueryDisposition</span><span class=o>.</span><span class=n>CREATE_IF_NEEDED</span><span class=p>)</span></code></pre></div></div><h3 id=using-time-partitioning>Using time partitioning</h3><p>BigQuery time partitioning divides your table into smaller partitions, which is
 called a <a href=https://cloud.google.com/bigquery/docs/partitioned-tables>partitioned table</a>.
 Partitioned tables make it easier for you to manage and query your data.</p><p class=language-java>To use BigQuery time partitioning, use one of these two methods:</p><span class=language-java><ul><li><p><code>withTimePartitioning</code>: This method takes a <code>TimePartitioning</code> class, and is
 only usable if you are writing to a single table.</p></li><li><p><code>withJsonTimePartitioning</code>: This method is the same as
@@ -643,7 +657,14 @@ only usable if you are writing to a single table.</p></li><li><p><code>withJsonT
         <span class=c1>// NOTE: an existing table without time partitioning set up will not work
 </span><span class=c1></span>        <span class=o>.</span><span class=na>withTimePartitioning</span><span class=o>(</span><span class=k>new</span> <span class=n>TimePartitioning</span><span class=o>().</span><span class=na>setType</span><span class=o>(</span><span class=s>&#34;DAY&#34;</span><span class=o>))</span>
         <span class=o>.</span><span class=na>withCreateDisposition</span><span class=o>(</span><span class=n>CreateDisposition</span><span class=o>.</span><span class=na>CREATE_IF_NEEDED</span><span class=o>)</span>
-        <span class=o>.</span><span class=na>withWriteDisposition</span><span class=o>(</span><span class=n>WriteDisposition</span><span class=o>.</span><span class=na>WRITE_TRUNCATE</span><span class=o>));</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=c1># The Beam SDK for Python does not currently support time partitioning.</span></code></pre></div></div><h2 id=limitations>Limitations</h2><p [...]
+        <span class=o>.</span><span class=na>withWriteDisposition</span><span class=o>(</span><span class=n>WriteDisposition</span><span class=o>.</span><span class=na>WRITE_TRUNCATE</span><span class=o>));</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=n>quotes</span> <span class=o>|</span> <span class=s1>&#39;WriteWithTimePartitioning&#39;</span> <span class=o>&gt;&gt;</span> <span class=n>be [...]
+    <span class=n>table_spec</span><span class=p>,</span>
+    <span class=n>schema</span><span class=o>=</span><span class=n>table_schema</span><span class=p>,</span>
+    <span class=n>write_disposition</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>BigQueryDisposition</span><span class=o>.</span><span class=n>WRITE_TRUNCATE</span><span class=p>,</span>
+    <span class=n>create_disposition</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>BigQueryDisposition</span><span class=o>.</span><span class=n>CREATE_IF_NEEDED</span><span class=p>,</span>
+    <span class=n>additional_bq_parameters</span><span class=o>=</span><span class=p>{</span><span class=s1>&#39;timePartitioning&#39;</span><span class=p>:</span> <span class=p>{</span>
+        <span class=s1>&#39;type&#39;</span><span class=p>:</span> <span class=s1>&#39;HOUR&#39;</span>
+    <span class=p>}})</span></code></pre></div></div><h2 id=limitations>Limitations</h2><p>BigQueryIO currently has the following limitations.</p><ol><li><p>You can’t sequence the completion of a BigQuery write with other steps of
 your pipeline.</p></li><li><p>If you are using the Beam SDK for Python, you might have import size quota
 issues if you write a very large dataset. As a workaround, you can partition
 the dataset (for example, using Beam&rsquo;s <code>Partition</code> transform) and write to
diff --git a/website/generated-content/documentation/io/built-in/hadoop/index.html b/website/generated-content/documentation/io/built-in/hadoop/index.html
index 216aba2..e274d75 100644
--- a/website/generated-content/documentation/io/built-in/hadoop/index.html
+++ b/website/generated-content/documentation/io/built-in/hadoop/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Hadoop Input/Output Format IO</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EI [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <span class=c1>// Set Hadoop InputFormat, key and value class in configuration
 </span><span class=c1></span><span class=n>myHadoopConfiguration</span><span class=o>.</span><span class=na>setClass</span><span class=o>(</span><span class=s>&#34;mapreduce.job.inputformat.class&#34;</span><span class=o>,</span> <span class=n>InputFormatClass</span><span class=o>,</span>
   <span class=n>InputFormat</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
diff --git a/website/generated-content/documentation/io/built-in/hcatalog/index.html b/website/generated-content/documentation/io/built-in/hcatalog/index.html
index 2512c7a..2a9de42 100644
--- a/website/generated-content/documentation/io/built-in/hcatalog/index.html
+++ b/website/generated-content/documentation/io/built-in/hcatalog/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache HCatalog I/O connector</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <span class=n>configProperties</span><span class=o>.</span><span class=na>put</span><span class=o>(</span><span class=s>&#34;hive.metastore.uris&#34;</span><span class=o>,</span><span class=s>&#34;thrift://metastore-host:port&#34;</span><span class=o>);</span>
 <span class=n>pipeline</span>
   <span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>HCatalogIO</span><span class=o>.</span><span class=na>read</span><span class=o>()</span>
diff --git a/website/generated-content/documentation/io/built-in/index.html b/website/generated-content/documentation/io/built-in/index.html
index c958179..af987ff 100644
--- a/website/generated-content/documentation/io/built-in/index.html
+++ b/website/generated-content/documentation/io/built-in/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Built-in I/O Transforms</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domai [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <span class=language-py>pydoc</span>
 <span class=language-go>Godoc</span></th></tr><tr class=language-java><td>FileIO</td><td>General-purpose transforms for working with files: listing files (matching), reading and writing.</td><td style=word-break:break-all><div><a target=_blank href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/FileIO.html>org.apache.beam.sdk.io.FileIO</a></div></td></tr><tr class=language-py><td>FileIO</td><td>General-purpose transforms for working with files: listing files (mat [...]
 <a href=/documentation/io/built-in/parquet/>(guide)</a></td><td>IO for reading from and writing to <a href=https://parquet.apache.org/>Parquet</a> files.</td><td style=word-break:break-all><div><a target=_blank href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/parquet/ParquetIO.html>org.apache.beam.sdk.io.parquet.ParquetIO</a></div></td></tr><tr class=language-py><td>ParquetIO
diff --git a/website/generated-content/documentation/io/built-in/parquet/index.html b/website/generated-content/documentation/io/built-in/parquet/index.html
index a5eb65d..efa1746 100644
--- a/website/generated-content/documentation/io/built-in/parquet/index.html
+++ b/website/generated-content/documentation/io/built-in/parquet/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Parquet I/O connector</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and  [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 to <a href=https://parquet.apache.org>Apache Parquet</a> files.</p><h2 id=before-you-start>Before you start</h2><p class=language-java>To use ParquetIO, add the Maven artifact dependency to your <code>pom.xml</code> file.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=o>&lt;</span><span class=n>dependency</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
     <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>sdks</span><span class=o>-</span><span class=n>java</span><span class=o>-</span><span class=n>io</span><span class=o>-</span><span class=n>parquet</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/io/built-in/snowflake/index.html b/website/generated-content/documentation/io/built-in/snowflake/index.html
index a5004d1..047352c 100644
--- a/website/generated-content/documentation/io/built-in/snowflake/index.html
+++ b/website/generated-content/documentation/io/built-in/snowflake/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Snowflake I/O connector</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) an [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
         <span class=o>.</span><span class=na>fromArgs</span><span class=o>(</span><span class=n>args</span><span class=o>)</span>
         <span class=o>.</span><span class=na>withValidation</span><span class=o>()</span>
         <span class=o>.</span><span class=na>as</span><span class=o>(</span><span class=n>SnowflakePipelineOptions</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
diff --git a/website/generated-content/documentation/io/developing-io-java/index.html b/website/generated-content/documentation/io/developing-io-java/index.html
index 9cc4577..5fd64bf 100644
--- a/website/generated-content/documentation/io/developing-io-java/index.html
+++ b/website/generated-content/documentation/io/developing-io-java/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Beam: Developing I/O connectors for Java</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration P [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 connectors, you must create a custom I/O connector that usually consist of a
 source and a sink. All Beam sources and sinks are composite transforms; however,
 the implementation of your custom I/O depends on your use case. Before you
diff --git a/website/generated-content/documentation/io/developing-io-overview/index.html b/website/generated-content/documentation/io/developing-io-overview/index.html
index f933c80..b380cdd 100644
--- a/website/generated-content/documentation/io/developing-io-overview/index.html
+++ b/website/generated-content/documentation/io/developing-io-overview/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Overview: Developing a new I/O connector</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 the <a href=/documentation/io/built-in/>Built-in I/O connectors</a></em></p><p>To connect to a data store that isn’t supported by Beam’s existing I/O
 connectors, you must create a custom I/O connector. A connector usually consists
 of a source and a sink. All Beam sources and sinks are composite transforms;
diff --git a/website/generated-content/documentation/io/developing-io-python/index.html b/website/generated-content/documentation/io/developing-io-python/index.html
index 3974737..f7121e2 100644
--- a/website/generated-content/documentation/io/developing-io-python/index.html
+++ b/website/generated-content/documentation/io/developing-io-python/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Apache Beam: Developing I/O connectors for Python</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 connectors, you must create a custom I/O connector that usually consist of a
 source and a sink. All Beam sources and sinks are composite transforms; however,
 the implementation of your custom I/O depends on your use case. Before you
diff --git a/website/generated-content/documentation/io/testing/index.html b/website/generated-content/documentation/io/testing/index.html
index fd60a3b..11aec94 100644
--- a/website/generated-content/documentation/io/testing/index.html
+++ b/website/generated-content/documentation/io/testing/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Testing I/O Transforms</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 </code></pre><p>Example usage on HDFS filesystem and Direct runner:</p><p>NOTE: Below setup will only work when /etc/hosts file contains entries with hadoop namenode and hadoop datanodes external IPs. Please see explanation in: <a href=https://github.com/apache/beam/blob/master/.test-infra/kubernetes/hadoop/SmallITCluster/pkb-config.yml>Small Cluster config file</a> and <a href=https://github.com/apache/beam/blob/master/.test-infra/kubernetes/hadoop/LargeITCluster/pkb-config.yml>Large Cl [...]
 
 ./gradlew integrationTest -p sdks/java/io/file-based-io-tests -DintegrationTestPipelineOptions='[&quot;--numberOfRecords=1000&quot;, &quot;--filenamePrefix=hdfs://HDFS_NAMENODE:9000/XMLIOIT&quot;, &quot;--hdfsConfiguration=[{\&quot;fs.defaultFS\&quot;:\&quot;hdfs://HDFS_NAMENODE:9000\&quot;,\&quot;dfs.replication\&quot;:1,\&quot;dfs.client.use.datanode.hostname\&quot;:\&quot;true\&quot; }]&quot; ]' -DintegrationTestRunner=direct -Dfilesystem=hdfs --tests org.apache.beam.sdk.io.xml.XmlIOIT
diff --git a/website/generated-content/documentation/patterns/ai-platform/index.html b/website/generated-content/documentation/patterns/ai-platform/index.html
index 09dcee7..c397f1c 100644
--- a/website/generated-content/documentation/patterns/ai-platform/index.html
+++ b/website/generated-content/documentation/patterns/ai-platform/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>AI Platform integration patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs)  [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <code>AnnotateText</code> produces response object of type <code>AnnotateTextResponse</code> returned from the API. <code>AnnotateTextResponse</code> is a protobuf message which contains a lot of attributes, some of which are complex structures.</p><p>Here is an example of a pipeline that creates in-memory PCollection of strings, changes each string to Document object and invokes Natural Language API. Then, for each response object, a function is called to extract certain results of anal [...]
     <span class=n>extract_entities</span><span class=o>=</span><span class=bp>True</span><span class=p>,</span>
     <span class=n>extract_document_sentiment</span><span class=o>=</span><span class=bp>True</span><span class=p>,</span>
diff --git a/website/generated-content/documentation/patterns/bigqueryio/index.html b/website/generated-content/documentation/patterns/bigqueryio/index.html
index f4c7b4a..65a3db9 100644
--- a/website/generated-content/documentation/patterns/bigqueryio/index.html
+++ b/website/generated-content/documentation/patterns/bigqueryio/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>BigQuery patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spec [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 The samples below print the errors, but in a production system they can be sent to a deadletter table for later correction.</p><p class=language-java>When using <code>STREAMING_INSERTS</code> you can use the <code>WriteResult</code> object to access a <code>PCollection</code> with the <code>TableRows</code> that failed to be inserted into BigQuery.
 If you also set the <code>withExtendedErrorInfo</code> property , you will be able to access a <code>PCollection&lt;BigQueryInsertError></code> from the <code>WriteResult</code>. The <code>PCollection</code> will then include a reference to the table, the data row and the <code>InsertErrors</code>. Which errors are added to the deadletter queue is determined via the <code>InsertRetryPolicy</code>.</p><p class=language-py>In the result tuple you can access <code>FailedRows</code> to acces [...]
           <span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>fromArgs</span><span class=o>(</span><span class=n>args</span><span class=o>).</span><span class=na>withValidation</span><span class=o>().</span><span class=na>as</span><span class=o>(</span><span class=n>BigQueryOptions</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
diff --git a/website/generated-content/documentation/patterns/custom-io/index.html b/website/generated-content/documentation/patterns/custom-io/index.html
index 7758428..7fa975c 100644
--- a/website/generated-content/documentation/patterns/custom-io/index.html
+++ b/website/generated-content/documentation/patterns/custom-io/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Custom I/O patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Sp [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/patterns/custom-windows/index.html b/website/generated-content/documentation/patterns/custom-windows/index.html
index 4162fc3..739164a 100644
--- a/website/generated-content/documentation/patterns/custom-windows/index.html
+++ b/website/generated-content/documentation/patterns/custom-windows/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Custom window patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 
     <span class=c1>// Assign each element into a window from its timestamp until gapDuration in the
 </span><span class=c1></span>    <span class=c1>// future.  Overlapping windows (representing elements within gapDuration of
diff --git a/website/generated-content/documentation/patterns/file-processing/index.html b/website/generated-content/documentation/patterns/file-processing/index.html
index 0f05051..2f583e0 100644
--- a/website/generated-content/documentation/patterns/file-processing/index.html
+++ b/website/generated-content/documentation/patterns/file-processing/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>File processing patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Doma [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 </span><span class=c1></span><span class=n>p</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span>
     <span class=n>FileIO</span><span class=o>.</span><span class=na>match</span><span class=o>()</span>
         <span class=o>.</span><span class=na>filepattern</span><span class=o>(</span><span class=s>&#34;...&#34;</span><span class=o>)</span>
diff --git a/website/generated-content/documentation/patterns/overview/index.html b/website/generated-content/documentation/patterns/overview/index.html
index f796d7a..2d2d680 100644
--- a/website/generated-content/documentation/patterns/overview/index.html
+++ b/website/generated-content/documentation/patterns/overview/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Overview</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/patterns/pipeline-options/index.html b/website/generated-content/documentation/patterns/pipeline-options/index.html
index 9ac2398..36d55cc 100644
--- a/website/generated-content/documentation/patterns/pipeline-options/index.html
+++ b/website/generated-content/documentation/patterns/pipeline-options/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Pipeline option patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Doma [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
   <span class=kd>public</span> <span class=kd>interface</span> <span class=nc>MyOptions</span> <span class=kd>extends</span> <span class=n>PipelineOptions</span> <span class=o>{</span>
     <span class=nd>@Description</span><span class=o>(</span><span class=s>&#34;My option&#34;</span><span class=o>)</span>
     <span class=nd>@Default.String</span><span class=o>(</span><span class=s>&#34;Hello world!&#34;</span><span class=o>)</span>
diff --git a/website/generated-content/documentation/patterns/schema/index.html b/website/generated-content/documentation/patterns/schema/index.html
index 405293e..9bc2ed9 100644
--- a/website/generated-content/documentation/patterns/schema/index.html
+++ b/website/generated-content/documentation/patterns/schema/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Schema Patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specif [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Schemas provide us a type-system for Beam records that is independent of any specific programming-language type. There might be multiple Java classes that all have the same schema (for example a Protocol-Buffer class or a POJO class), and Beam will allow us to seamlessly convert between these types.
 Schemas also provide a simple way to reason about types across different programming-language APIs.
 For more information, see the <a href=/documentation/programming-guide/#what-is-a-schema>programming guide section on Schemas</a>.</p><nav class=language-switcher><strong>Adapt for:</strong><ul><li data-type=language-java class=active>Java SDK</li></ul></nav><h2 id=using-joins>Using Joins</h2><p>Beam supports equijoins on schema <code>PCollections</code> of Schemas where the join condition depends on the equality of a subset of fields.</p><p>Consider using <a href=https://beam.apache.org [...]
diff --git a/website/generated-content/documentation/patterns/side-inputs/index.html b/website/generated-content/documentation/patterns/side-inputs/index.html
index 6be2778..07b12a1 100644
--- a/website/generated-content/documentation/patterns/side-inputs/index.html
+++ b/website/generated-content/documentation/patterns/side-inputs/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Side input patterns</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Sp [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
   <span class=c1>// This pipeline uses View.asSingleton for a placeholder external service.
 </span><span class=c1></span>  <span class=c1>// Run in debug mode to see the output.
 </span><span class=c1></span>  <span class=n>Pipeline</span> <span class=n>p</span> <span class=o>=</span> <span class=n>Pipeline</span><span class=o>.</span><span class=na>create</span><span class=o>();</span>
diff --git a/website/generated-content/documentation/pipelines/create-your-pipeline/index.html b/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
index aeefb87..ef1bb9b 100644
--- a/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/create-your-pipeline/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Create Your Pipeline</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain S [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 </span><span class=c1></span><span class=n>PipelineOptions</span> <span class=n>options</span> <span class=o>=</span> <span class=n>PipelineOptionsFactory</span><span class=o>.</span><span class=na>create</span><span class=o>();</span>
 
 <span class=c1>// Then create the pipeline.
diff --git a/website/generated-content/documentation/pipelines/design-your-pipeline/index.html b/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
index 57f8d78..13beae1 100644
--- a/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/design-your-pipeline/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Design Your Pipeline</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain S [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 PCollection of database table rows.</em></p><p>The following example code applies two transforms to a single input collection.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>dbRowCollection</span> <span class=o>=</span> <span class=o>...;</span>
 
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>aCollection</span> <span class=o>=</span> <span class=n>dbRowCollection</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=s>&#34;aTrans&#34;</span><span class=o>,</span> <span class=n>ParDo</span><span class=o>.</span><span class=na>of</span><span class=o>(</span><span class=k>new</span> <span class=n>DoFn</span><span class=o>& [...]
diff --git a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
index 5f83f6b..1e5852d 100644
--- a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
+++ b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Test Your Pipeline</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
     <span class=o>...</span></code></pre></div></div><blockquote><p><strong>Note:</strong> Read about testing unbounded pipelines in Beam in <a href=/blog/2016/10/20/test-stream.html>this blog post</a>.</p></blockquote><h3 id=using-the-create-transform>Using the Create Transform</h3><p>You can use the <code>Create</code> transform to create a <code>PCollection</code> out of a standard in-memory collection class, such as Java or Python <code>List</code>. See <a href=/documentation/program [...]
 
 <span class=c1>// Check whether a PCollection contains some elements in any order.
diff --git a/website/generated-content/documentation/programming-guide/index.html b/website/generated-content/documentation/programming-guide/index.html
index c78f516..58831b2 100644
--- a/website/generated-content/documentation/programming-guide/index.html
+++ b/website/generated-content/documentation/programming-guide/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Beam Programming Guide</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Beam SDKs to create data processing pipelines. It provides guidance for using
 the Beam SDK classes to build and test your pipeline. It is not intended as an
 exhaustive reference, but as a language-agnostic, high-level guide to
@@ -2756,7 +2756,420 @@ we want to batch ten seconds worth of events together in order to reduce the num
     <span class=n>elementsState</span><span class=o>.</span><span class=na>clear</span><span class=o>();</span>
     <span class=n>isTimerSetState</span><span class=o>.</span><span class=na>clear</span><span class=o>();</span>
   <span class=o>}</span>
-<span class=o>}));</span></code></pre></div></div></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class="footer__cols__col footer__cols__col--md"><div class=footer__cols__col__title> [...]
+<span class=o>}));</span></code></pre></div></div><h2 id=splittable-dofns>12. Splittable <code>DoFns</code></h2><p>A Splittable <code>DoFn</code> (SDF) enables users to create modular components containing I/Os (and some advanced
+<a href="https://s.apache.org/splittable-do-fn#heading=h.5cep9s8k4fxv">non I/O use cases</a>). Having modular
+I/O components that can be connected to each other simplify typical patterns that users want.
+For example, a popular use case is to read filenames from a message queue followed by parsing those
+files. Traditionally, users were required to either write a single I/O connector that contained the
+logic for the message queue and the file reader (increased complexity) or choose to reuse a message
+queue I/O followed by a regular <code>DoFn</code> that read the file (decreased performance). With SDF,
+we bring the richness of Apache Beam’s I/O APIs to a <code>DoFn</code> enabling modularity while maintaining the
+performance of traditional I/O connectors.</p><h3 id=sdf-basics>12.1. SDF basics</h3><p>At a high level, an SDF is responsible for processing element and restriction pairs. A
+restriction represents a subset of work that would have been necessary to have been done when
+processing the element.</p><p>Executing an SDF follows the following steps:</p><ol><li>Each element is paired with a restriction (e.g. filename is paired with offset range representing the whole file).</li><li>Each element and restriction pair is split (e.g. offset ranges are broken up into smaller pieces).</li><li>The runner redistributes the element and restriction pairs to several workers.</li><li>Element and restriction pairs are processed in parallel (e.g. the file is read). Within  [...]
+the element and restriction pair can pause its own processing and/or be split into further element and
+restriction pairs.</li></ol><p><img src=/images/sdf_high_level_overview.svg alt="Diagram of steps that an SDF is composed of"></p><h4 id=a-basic-sdf>12.1.1. A basic SDF</h4><p>A basic SDF is composed of three parts: a restriction, a restriction provider, and a
+restriction tracker. The restriction is used to represent a subset of work for a given element.
+The restriction provider lets SDF authors override default implementations for splitting, sizing,
+watermark estimation, and so forth. In <a href=https://github.com/apache/beam/blob/f4c2734261396858e388ebef2eef50e7d48231a8/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/DoFn.java#L92>Java</a>
+and <a href=https://github.com/apache/beam/blob/0f466e6bcd4ac8677c2bd9ecc8e6af3836b7f3b8/sdks/go/pkg/beam/pardo.go#L226>Go</a>,
+this is the <code>DoFn</code>. <a href=https://github.com/apache/beam/blob/f4c2734261396858e388ebef2eef50e7d48231a8/sdks/python/apache_beam/transforms/core.py#L213>Python</a>
+has a dedicated RestrictionProvider type. The restriction tracker is responsible for tracking
+what subset of the restriction has been completed during processing.</p><p>To define an SDF, you must choose whether the SDF is bounded (default) or
+unbounded and define a way to initialize an initial restriction for an element.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@BoundedPerElement</span>
+<span class=kd>private</span> <span class=kd>static</span> <span class=kd>class</span> <span class=nc>FileToWordsFn</span> <span class=kd>extends</span> <span class=n>DoFn</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Integer</span><span class=o>&gt;</span> <span class=o>{</span>
+  <span class=nd>@GetInitialRestriction</span>
+  <span class=kd>public</span> <span class=n>OffsetRange</span> <span class=nf>getInitialRestriction</span><span class=o>(</span><span class=nd>@Element</span> <span class=n>String</span> <span class=n>fileName</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>IOException</span> <span class=o>{</span>
+    <span class=k>return</span> <span class=k>new</span> <span class=n>OffsetRange</span><span class=o>(</span><span class=n>0</span><span class=o>,</span> <span class=k>new</span> <span class=n>File</span><span class=o>(</span><span class=n>fileName</span><span class=o>).</span><span class=na>length</span><span class=o>());</span>
+  <span class=o>}</span>
+
+  <span class=nd>@ProcessElement</span>
+  <span class=kd>public</span> <span class=kt>void</span> <span class=nf>processElement</span><span class=o>(</span>
+      <span class=nd>@Element</span> <span class=n>String</span> <span class=n>fileName</span><span class=o>,</span>
+      <span class=n>RestrictionTracker</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>,</span> <span class=n>Long</span><span class=o>&gt;</span> <span class=n>tracker</span><span class=o>,</span>
+      <span class=n>OutputReceiver</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>outputReceiver</span><span class=o>)</span>
+      <span class=kd>throws</span> <span class=n>IOException</span> <span class=o>{</span>
+    <span class=n>RandomAccessFile</span> <span class=n>file</span> <span class=o>=</span> <span class=k>new</span> <span class=n>RandomAccessFile</span><span class=o>(</span><span class=n>fileName</span><span class=o>,</span> <span class=s>&#34;r&#34;</span><span class=o>);</span>
+    <span class=n>seekToNextRecordBoundaryInFile</span><span class=o>(</span><span class=n>file</span><span class=o>,</span> <span class=n>tracker</span><span class=o>.</span><span class=na>currentRestriction</span><span class=o>().</span><span class=na>getFrom</span><span class=o>());</span>
+    <span class=k>while</span> <span class=o>(</span><span class=n>tracker</span><span class=o>.</span><span class=na>tryClaim</span><span class=o>(</span><span class=n>file</span><span class=o>.</span><span class=na>getFilePointer</span><span class=o>()))</span> <span class=o>{</span>
+      <span class=n>outputReceiver</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=n>readNextRecord</span><span class=o>(</span><span class=n>file</span><span class=o>));</span>
+    <span class=o>}</span>
+  <span class=o>}</span>
+
+  <span class=c1>// Providing the coder is only necessary if it can not be inferred at runtime.
+</span><span class=c1></span>  <span class=nd>@GetRestrictionCoder</span>
+  <span class=kd>public</span> <span class=n>Coder</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>&gt;</span> <span class=nf>getRestrictionCoder</span><span class=o>()</span> <span class=o>{</span>
+    <span class=k>return</span> <span class=n>OffsetRange</span><span class=o>.</span><span class=na>Coder</span><span class=o>.</span><span class=na>of</span><span class=o>();</span>
+  <span class=o>}</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>FileToWordsRestrictionProvider</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>RestrictionProvider</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>initial_restriction</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>file_name</span><span class=p>):</span>
+    <span class=k>return</span> <span class=n>OffsetRange</span><span class=p>(</span><span class=mi>0</span><span class=p>,</span> <span class=n>os</span><span class=o>.</span><span class=n>stat</span><span class=p>(</span><span class=n>file_name</span><span class=p>)</span><span class=o>.</span><span class=n>st_size</span><span class=p>)</span>
+
+  <span class=k>def</span> <span class=nf>create_tracker</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=k>return</span> <span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>restriction_trackers</span><span class=o>.</span><span class=n>OffsetRestrictionTracker</span><span class=p>()</span>
+
+<span class=k>class</span> <span class=nc>FileToWordsFn</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>process</span><span class=p>(</span>
+      <span class=bp>self</span><span class=p>,</span>
+      <span class=n>file_name</span><span class=p>,</span>
+      <span class=n>tracker</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>RestrictionParam</span><span class=p>(</span><span class=n>FileToWordsRestrictionProvider</span><span class=p>())):</span>
+    <span class=k>with</span> <span class=nb>open</span><span class=p>(</span><span class=n>file_name</span><span class=p>)</span> <span class=k>as</span> <span class=n>file_handle</span><span class=p>:</span>
+      <span class=n>file_handle</span><span class=o>.</span><span class=n>seek</span><span class=p>(</span><span class=n>tracker</span><span class=o>.</span><span class=n>current_restriction</span><span class=o>.</span><span class=n>start</span><span class=p>())</span>
+      <span class=k>while</span> <span class=n>tracker</span><span class=o>.</span><span class=n>try_claim</span><span class=p>(</span><span class=n>file_handle</span><span class=o>.</span><span class=n>tell</span><span class=p>()):</span>
+        <span class=k>yield</span> <span class=n>read_next_record</span><span class=p>(</span><span class=n>file_handle</span><span class=p>)</span>
+
+  <span class=c1># Providing the coder is only necessary if it can not be inferred at</span>
+  <span class=c1># runtime.</span>
+  <span class=k>def</span> <span class=nf>restriction_coder</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
+    <span class=k>return</span> <span class=o>...</span></code></pre></div></div><div class=language-go><div class=highlight><pre class=chroma><code class=language-go data-lang=go><span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>splittableDoFn</span><span class=p>)</span> <span class=nf>CreateInitialRestriction</span><span class=p>(</span><span class=nx>filename</span> <span class=kt>string</span><span class=p>)</span> <span c [...]
+	<span class=k>return</span> <span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>{</span>
+		<span class=nx>Start</span><span class=p>:</span> <span class=mi>0</span><span class=p>,</span>
+		<span class=nx>End</span><span class=p>:</span>   <span class=nf>getFileLength</span><span class=p>(</span><span class=nx>filename</span><span class=p>),</span>
+	<span class=p>}</span>
+<span class=p>}</span>
+
+<span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>splittableDoFn</span><span class=p>)</span> <span class=nf>CreateTracker</span><span class=p>(</span><span class=nx>rest</span> <span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>)</span> <span class=o>*</span><span class=nx>sdf</span><span class=p>.</span><span class=nx>LockRTracker</span> <span class=p>{</span>
+	<span class=k>return</span> <span class=nx>sdf</span><span class=p>.</span><span class=nf>NewLockRTracker</span><span class=p>(</span><span class=nx>offsetrange</span><span class=p>.</span><span class=nf>NewTracker</span><span class=p>(</span><span class=nx>rest</span><span class=p>))</span>
+<span class=p>}</span>
+
+<span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>splittableDoFn</span><span class=p>)</span> <span class=nf>ProcessElement</span><span class=p>(</span><span class=nx>rt</span> <span class=o>*</span><span class=nx>sdf</span><span class=p>.</span><span class=nx>LockRTracker</span><span class=p>,</span> <span class=nx>filename</span> <span class=kt>string</span><span class=p>,</span> <span class=nx>emit</span> <span class=kd>func [...]
+            <span class=nx>file</span><span class=p>,</span> <span class=nx>err</span> <span class=o>:=</span> <span class=nx>os</span><span class=p>.</span><span class=nf>Open</span><span class=p>(</span><span class=nx>filename</span><span class=p>)</span>
+	<span class=k>if</span> <span class=nx>err</span> <span class=o>!=</span> <span class=kc>nil</span> <span class=p>{</span>
+		<span class=k>return</span> <span class=nx>err</span>
+	<span class=p>}</span>
+	<span class=nx>offset</span><span class=p>,</span> <span class=nx>err</span> <span class=o>:=</span> <span class=nf>seekToNextRecordBoundaryInFile</span><span class=p>(</span><span class=nx>file</span><span class=p>,</span> <span class=nx>rt</span><span class=p>.</span><span class=nf>GetRestriction</span><span class=p>().(</span><span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>).</span><span class=nx>Start</span><span class=p>)</span>
+
+	<span class=k>if</span> <span class=nx>err</span> <span class=o>!=</span> <span class=kc>nil</span> <span class=p>{</span>
+		<span class=k>return</span> <span class=nx>err</span>
+	<span class=p>}</span>
+	<span class=k>for</span> <span class=nx>rt</span><span class=p>.</span><span class=nf>TryClaim</span><span class=p>(</span><span class=nx>offset</span><span class=p>)</span> <span class=p>{</span>
+		<span class=nx>record</span><span class=p>,</span> <span class=nx>newOffset</span> <span class=o>:=</span> <span class=nf>readNextRecord</span><span class=p>(</span><span class=nx>file</span><span class=p>)</span>
+		<span class=nf>emit</span><span class=p>(</span><span class=nx>record</span><span class=p>)</span>
+		<span class=nx>offset</span> <span class=p>=</span> <span class=nx>newOffset</span>
+	<span class=p>}</span>
+	<span class=k>return</span> <span class=kc>nil</span>
+<span class=p>}</span></code></pre></div></div><p>At this point, we have an SDF that supports <a href=#runner-initiated-split>runner-initiated splits</a>
+enabling dynamic work rebalancing. To increase the rate at which initial parallelization of work occurs
+or for those runners that do not support runner-initiated splitting, we recommend providing
+a set of initial splits:</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=kt>void</span> <span class=nf>splitRestriction</span><span class=o>(</span>
+    <span class=nd>@Restriction</span> <span class=n>OffsetRange</span> <span class=n>restriction</span><span class=o>,</span> <span class=n>OutputReceiver</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>&gt;</span> <span class=n>splitReceiver</span><span class=o>)</span> <span class=o>{</span>
+  <span class=kt>long</span> <span class=n>splitSize</span> <span class=o>=</span> <span class=n>64</span> <span class=o>*</span> <span class=o>(</span><span class=n>1</span> <span class=o>&lt;&lt;</span> <span class=n>20</span><span class=o>);</span>
+  <span class=kt>long</span> <span class=n>i</span> <span class=o>=</span> <span class=n>restriction</span><span class=o>.</span><span class=na>getFrom</span><span class=o>();</span>
+  <span class=k>while</span> <span class=o>(</span><span class=n>i</span> <span class=o>&lt;</span> <span class=n>restriction</span><span class=o>.</span><span class=na>getTo</span><span class=o>()</span> <span class=o>-</span> <span class=n>splitSize</span><span class=o>)</span> <span class=o>{</span>
+    <span class=c1>// Compute and output 64 MiB size ranges to process in parallel
+</span><span class=c1></span>    <span class=kt>long</span> <span class=n>end</span> <span class=o>=</span> <span class=n>i</span> <span class=o>+</span> <span class=n>splitSize</span><span class=o>;</span>
+    <span class=n>splitReceiver</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=k>new</span> <span class=n>OffsetRange</span><span class=o>(</span><span class=n>i</span><span class=o>,</span> <span class=n>end</span><span class=o>));</span>
+    <span class=n>i</span> <span class=o>=</span> <span class=n>end</span><span class=o>;</span>
+  <span class=o>}</span>
+  <span class=c1>// Output the last range
+</span><span class=c1></span>  <span class=n>splitReceiver</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=k>new</span> <span class=n>OffsetRange</span><span class=o>(</span><span class=n>i</span><span class=o>,</span> <span class=n>restriction</span><span class=o>.</span><span class=na>getTo</span><span class=o>()));</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>FileToWordsRestrictionProvider</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>io</span><span class=o>.</span><span class=n>RestrictionProvider</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>split</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>file_name</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=c1># Compute and output 64 MiB size ranges to process in parallel</span>
+    <span class=n>split_size</span> <span class=o>=</span> <span class=mi>64</span> <span class=o>*</span> <span class=p>(</span><span class=mi>1</span> <span class=o>&lt;&lt;</span> <span class=mi>20</span><span class=p>)</span>
+    <span class=n>i</span> <span class=o>=</span> <span class=n>restriction</span><span class=o>.</span><span class=n>start</span>
+    <span class=k>while</span> <span class=n>i</span> <span class=o>&lt;</span> <span class=n>restriction</span><span class=o>.</span><span class=n>end</span> <span class=o>-</span> <span class=n>split_size</span><span class=p>:</span>
+      <span class=k>yield</span> <span class=n>OffsetRange</span><span class=p>(</span><span class=n>i</span><span class=p>,</span> <span class=n>i</span> <span class=o>+</span> <span class=n>split_size</span><span class=p>)</span>
+      <span class=n>i</span> <span class=o>+=</span> <span class=n>split_size</span>
+    <span class=k>yield</span> <span class=n>OffsetRange</span><span class=p>(</span><span class=n>i</span><span class=p>,</span> <span class=n>restriction</span><span class=o>.</span><span class=n>end</span><span class=p>)</span></code></pre></div></div><div class=language-go><div class=highlight><pre class=chroma><code class=language-go data-lang=go><span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>splittableDoFn</span><span  [...]
+	<span class=nx>size</span> <span class=o>:=</span> <span class=mi>64</span> <span class=o>*</span> <span class=p>(</span><span class=mi>1</span> <span class=o>&lt;&lt;</span> <span class=mi>20</span><span class=p>)</span>
+	<span class=nx>i</span> <span class=o>:=</span> <span class=nx>rest</span><span class=p>.</span><span class=nx>Start</span>
+	<span class=k>for</span> <span class=nx>i</span> <span class=p>&lt;</span> <span class=nx>rest</span><span class=p>.</span><span class=nx>End</span> <span class=o>-</span> <span class=nx>size</span> <span class=p>{</span>
+		<span class=c1>// Compute and output 64 MiB size ranges to process in parallel
+</span><span class=c1></span>		<span class=nx>end</span> <span class=o>:=</span> <span class=nx>i</span> <span class=o>+</span> <span class=nx>size</span>
+     		<span class=nx>splits</span> <span class=p>=</span> <span class=nb>append</span><span class=p>(</span><span class=nx>splits</span><span class=p>,</span> <span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>{</span><span class=nx>i</span><span class=p>,</span> <span class=nx>end</span><span class=p>})</span>
+		<span class=nx>i</span> <span class=p>=</span> <span class=nx>end</span>
+	<span class=p>}</span>
+	<span class=c1>// Output the last range
+</span><span class=c1></span>	<span class=nx>splits</span> <span class=p>=</span> <span class=nb>append</span><span class=p>(</span><span class=nx>splits</span><span class=p>,</span> <span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>{</span><span class=nx>i</span><span class=p>,</span> <span class=nx>rest</span><span class=p>.</span><span class=nx>End</span><span class=p>})</span>
+	<span class=k>return</span> <span class=nx>splits</span>
+<span class=p>}</span></code></pre></div></div><h3 id=sizing-and-progress>12.2. Sizing and progress</h3><p>Sizing and progress are used during execution of an SDF to inform runners so that they may
+perform intelligent decisions about which restrictions to split and how to parallelize work.</p><p>Before processing an element and restriction, an initial size may be used by a runner to choose
+how and who processes the restrictions attempting to improve initial balancing and parallelization
+of work. During the processing of an element and restriction, sizing and progress are used to choose
+which restrictions to split and who should process them.</p><p>By default, we use the restriction tracker’s estimate for work remaining falling back to assuming
+that all restrictions have an equal cost. To override the default, SDF authors can provide the
+appropriate method within the restriction provider.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@GetSize</span>
+<span class=kt>double</span> <span class=nf>getSize</span><span class=o>(</span><span class=nd>@Element</span> <span class=n>String</span> <span class=n>fileName</span><span class=o>,</span> <span class=nd>@Restriction</span> <span class=n>OffsetRange</span> <span class=n>restriction</span><span class=o>)</span> <span class=o>{</span>
+  <span class=k>return</span> <span class=o>(</span><span class=n>fileName</span><span class=o>.</span><span class=na>contains</span><span class=o>(</span><span class=s>&#34;expensiveRecords&#34;</span><span class=o>)</span> <span class=o>?</span> <span class=n>2</span> <span class=o>:</span> <span class=n>1</span><span class=o>)</span> <span class=o>*</span> <span class=n>restriction</span><span class=o>.</span><span class=na>getTo</span><span class=o>()</span>
+      <span class=o>-</span> <span class=n>restriction</span><span class=o>.</span><span class=na>getFrom</span><span class=o>();</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=c1># The RestrictionProvider is responsible for calculating the size of given</span>
+<span class=c1># restriction.</span>
+<span class=k>class</span> <span class=nc>MyRestrictionProvider</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>transforms</span><span class=o>.</span><span class=n>core</span><span class=o>.</span><span class=n>RestrictionProvider</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>restriction_size</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>file_name</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=n>weight</span> <span class=o>=</span> <span class=mi>2</span> <span class=k>if</span> <span class=s2>&#34;expensiveRecords&#34;</span> <span class=ow>in</span> <span class=n>file_name</span> <span class=k>else</span> <span class=mi>1</span>
+    <span class=k>return</span> <span class=n>restriction</span><span class=o>.</span><span class=n>size</span><span class=p>()</span> <span class=o>*</span> <span class=n>weight</span></code></pre></div></div><div class=language-go><div class=highlight><pre class=chroma><code class=language-go data-lang=go><span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>splittableDoFn</span><span class=p>)</span> <span class=nf>RestrictionSi [...]
+	<span class=nx>weight</span> <span class=o>:=</span> <span class=nb>float64</span><span class=p>(</span><span class=mi>1</span><span class=p>)</span>
+	<span class=k>if</span> <span class=nx>strings</span><span class=p>.</span><span class=nf>Contains</span><span class=p>(</span><span class=nx>filename</span><span class=p>,</span> <span class=err>“</span><span class=nx>expensiveRecords</span><span class=err>”</span><span class=p>)</span> <span class=p>{</span>
+		<span class=nx>weight</span> <span class=p>=</span> <span class=mi>2</span>
+	<span class=p>}</span>
+	<span class=k>return</span> <span class=nx>weight</span> <span class=o>*</span> <span class=p>(</span><span class=nx>rest</span><span class=p>.</span><span class=nx>End</span> <span class=o>-</span> <span class=nx>rest</span><span class=p>.</span><span class=nx>Start</span><span class=p>)</span>
+<span class=p>}</span></code></pre></div></div><h3 id=user-initiated-checkpoint>12.3. User-initiated checkpoint</h3><p>Some I/Os cannot produce all of the data necessary to complete a restriction within the lifetime of a
+single bundle. This typically happens with unbounded restrictions, but can also happen with bounded
+restrictions. For example, there could be more data that needs to be ingested but is not available yet.
+Another cause of this scenario is the source system throttling your data.</p><p>Your SDF can signal to you that you are not done processing the current restriction. This
+signal can suggest a time to resume at. While the runner tries to honor the resume time, this is not
+guaranteed. This allows execution to continue on a restriction that has available work improving
+resource utilization.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@ProcessElement</span>
+<span class=kd>public</span> <span class=n>ProcessContinuation</span> <span class=nf>processElement</span><span class=o>(</span>
+    <span class=n>RestrictionTracker</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>,</span> <span class=n>Long</span><span class=o>&gt;</span> <span class=n>tracker</span><span class=o>,</span> <span class=n>OutputReceiver</span><span class=o>&lt;</span><span class=n>Record</span><span class=o>&gt;</span> <span class=n>outputReceiver</span><span class=o>)</span> <span class=o>{</span>
+  <span class=kt>long</span> <span class=n>currentPosition</span> <span class=o>=</span> <span class=n>tracker</span><span class=o>.</span><span class=na>currentRestriction</span><span class=o>().</span><span class=na>getFrom</span><span class=o>();</span>
+  <span class=n>Service</span> <span class=n>service</span> <span class=o>=</span> <span class=n>initializeService</span><span class=o>();</span>
+  <span class=k>try</span> <span class=o>{</span>
+    <span class=k>while</span> <span class=o>(</span><span class=kc>true</span><span class=o>)</span> <span class=o>{</span>
+      <span class=n>List</span><span class=o>&lt;</span><span class=n>Record</span><span class=o>&gt;</span> <span class=n>records</span> <span class=o>=</span> <span class=n>service</span><span class=o>.</span><span class=na>readNextRecords</span><span class=o>(</span><span class=n>currentPosition</span><span class=o>);</span>
+      <span class=k>if</span> <span class=o>(</span><span class=n>records</span><span class=o>.</span><span class=na>isEmpty</span><span class=o>())</span> <span class=o>{</span>
+        <span class=c1>// Return a short delay if there is no data to process at the moment.
+</span><span class=c1></span>        <span class=k>return</span> <span class=n>ProcessContinuation</span><span class=o>.</span><span class=na>resume</span><span class=o>().</span><span class=na>withResumeDelay</span><span class=o>(</span><span class=n>Duration</span><span class=o>.</span><span class=na>standardSeconds</span><span class=o>(</span><span class=n>10</span><span class=o>));</span>
+      <span class=o>}</span>
+      <span class=k>for</span> <span class=o>(</span><span class=n>Record</span> <span class=n>record</span> <span class=o>:</span> <span class=n>records</span><span class=o>)</span> <span class=o>{</span>
+        <span class=k>if</span> <span class=o>(!</span><span class=n>tracker</span><span class=o>.</span><span class=na>tryClaim</span><span class=o>(</span><span class=n>record</span><span class=o>.</span><span class=na>getPosition</span><span class=o>()))</span> <span class=o>{</span>
+          <span class=k>return</span> <span class=n>ProcessContinuation</span><span class=o>.</span><span class=na>stop</span><span class=o>();</span>
+        <span class=o>}</span>
+        <span class=n>currentPosition</span> <span class=o>=</span> <span class=n>record</span><span class=o>.</span><span class=na>getPosition</span><span class=o>()</span> <span class=o>+</span> <span class=n>1</span><span class=o>;</span>
+
+        <span class=n>outputReceiver</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=n>record</span><span class=o>);</span>
+      <span class=o>}</span>
+    <span class=o>}</span>
+  <span class=o>}</span> <span class=k>catch</span> <span class=o>(</span><span class=n>ThrottlingException</span> <span class=n>exception</span><span class=o>)</span> <span class=o>{</span>
+    <span class=c1>// Return a longer delay in case we are being throttled.
+</span><span class=c1></span>    <span class=k>return</span> <span class=n>ProcessContinuation</span><span class=o>.</span><span class=na>resume</span><span class=o>().</span><span class=na>withResumeDelay</span><span class=o>(</span><span class=n>Duration</span><span class=o>.</span><span class=na>standardSeconds</span><span class=o>(</span><span class=n>60</span><span class=o>));</span>
+  <span class=o>}</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>MySplittableDoFn</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>process</span><span class=p>(</span>
+      <span class=bp>self</span><span class=p>,</span>
+      <span class=n>element</span><span class=p>,</span>
+      <span class=n>restriction_tracker</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>RestrictionParam</span><span class=p>(</span>
+          <span class=n>MyRestrictionProvider</span><span class=p>())):</span>
+    <span class=n>current_position</span> <span class=o>=</span> <span class=n>restriction_tracker</span><span class=o>.</span><span class=n>current_restriction</span><span class=o>.</span><span class=n>start</span><span class=p>()</span>
+    <span class=k>while</span> <span class=bp>True</span><span class=p>:</span>
+      <span class=c1># Pull records from an external service.</span>
+      <span class=k>try</span><span class=p>:</span>
+        <span class=n>records</span> <span class=o>=</span> <span class=n>external_service</span><span class=o>.</span><span class=n>fetch</span><span class=p>(</span><span class=n>current_position</span><span class=p>)</span>
+        <span class=k>if</span> <span class=n>records</span><span class=o>.</span><span class=n>empty</span><span class=p>():</span>
+          <span class=c1># Set a shorter delay in case we are being throttled.</span>
+          <span class=n>restriction_tracker</span><span class=o>.</span><span class=n>defer_remainder</span><span class=p>(</span><span class=n>timestamp</span><span class=o>.</span><span class=n>Duration</span><span class=p>(</span><span class=n>second</span><span class=o>=</span><span class=mi>10</span><span class=p>))</span>
+          <span class=k>return</span>
+        <span class=k>for</span> <span class=n>record</span> <span class=ow>in</span> <span class=n>records</span><span class=p>:</span>
+          <span class=k>if</span> <span class=n>restriction_tracker</span><span class=o>.</span><span class=n>try_claim</span><span class=p>(</span><span class=n>record</span><span class=o>.</span><span class=n>position</span><span class=p>):</span>
+            <span class=n>current_position</span> <span class=o>=</span> <span class=n>record</span><span class=o>.</span><span class=n>position</span>
+            <span class=k>yield</span> <span class=n>record</span>
+          <span class=k>else</span><span class=p>:</span>
+            <span class=k>return</span>
+      <span class=k>except</span> <span class=n>TimeoutError</span><span class=p>:</span>
+        <span class=c1># Set a longer delay in case we are being throttled.</span>
+        <span class=n>restriction_tracker</span><span class=o>.</span><span class=n>defer_remainder</span><span class=p>(</span><span class=n>timestamp</span><span class=o>.</span><span class=n>Duration</span><span class=p>(</span><span class=n>seconds</span><span class=o>=</span><span class=mi>60</span><span class=p>))</span>
+        <span class=k>return</span></code></pre></div></div><h3 id=runner-initiated-split>12.4. Runner-initiated split</h3><p>A runner at any time may attempt to split a restriction while it is being processed. This allows the
+runner to either pause processing of the restriction so that other work may be done (common for
+unbounded restrictions to limit the amount of output and/or improve latency) or split the restriction
+into two pieces, increasing the available parallelism within the system. It is important to author a
+SDF with this in mind since the end of the restriction may change. Thus when writing the
+processing loop, it is important to use the result from trying to claim a piece of the restriction
+instead of assuming one can process till the end.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@ProcessElement</span>
+<span class=kd>public</span> <span class=kt>void</span> <span class=nf>badTryClaimLoop</span><span class=o>(</span>
+    <span class=nd>@Element</span> <span class=n>String</span> <span class=n>fileName</span><span class=o>,</span>
+    <span class=n>RestrictionTracker</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>,</span> <span class=n>Long</span><span class=o>&gt;</span> <span class=n>tracker</span><span class=o>,</span>
+    <span class=n>OutputReceiver</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>outputReceiver</span><span class=o>)</span>
+    <span class=kd>throws</span> <span class=n>IOException</span> <span class=o>{</span>
+  <span class=n>RandomAccessFile</span> <span class=n>file</span> <span class=o>=</span> <span class=k>new</span> <span class=n>RandomAccessFile</span><span class=o>(</span><span class=n>fileName</span><span class=o>,</span> <span class=s>&#34;r&#34;</span><span class=o>);</span>
+  <span class=n>seekToNextRecordBoundaryInFile</span><span class=o>(</span><span class=n>file</span><span class=o>,</span> <span class=n>tracker</span><span class=o>.</span><span class=na>currentRestriction</span><span class=o>().</span><span class=na>getFrom</span><span class=o>());</span>
+  <span class=c1>// The restriction tracker can be modified by another thread in parallel
+</span><span class=c1></span>  <span class=c1>// so storing state locally is ill advised.
+</span><span class=c1></span>  <span class=kt>long</span> <span class=n>end</span> <span class=o>=</span> <span class=n>tracker</span><span class=o>.</span><span class=na>currentRestriction</span><span class=o>().</span><span class=na>getTo</span><span class=o>();</span>
+  <span class=k>while</span> <span class=o>(</span><span class=n>file</span><span class=o>.</span><span class=na>getFilePointer</span><span class=o>()</span> <span class=o>&lt;</span> <span class=n>end</span><span class=o>)</span> <span class=o>{</span>
+    <span class=c1>// Only after successfully claiming should we produce any output and/or
+</span><span class=c1></span>    <span class=c1>// perform side effects.
+</span><span class=c1></span>    <span class=n>tracker</span><span class=o>.</span><span class=na>tryClaim</span><span class=o>(</span><span class=n>file</span><span class=o>.</span><span class=na>getFilePointer</span><span class=o>());</span>
+    <span class=n>outputReceiver</span><span class=o>.</span><span class=na>output</span><span class=o>(</span><span class=n>readNextRecord</span><span class=o>(</span><span class=n>file</span><span class=o>));</span>
+  <span class=o>}</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>BadTryClaimLoop</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>process</span><span class=p>(</span>
+      <span class=bp>self</span><span class=p>,</span>
+      <span class=n>file_name</span><span class=p>,</span>
+      <span class=n>tracker</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>RestrictionParam</span><span class=p>(</span><span class=n>FileToWordsRestrictionProvider</span><span class=p>())):</span>
+    <span class=k>with</span> <span class=nb>open</span><span class=p>(</span><span class=n>file_name</span><span class=p>)</span> <span class=k>as</span> <span class=n>file_handle</span><span class=p>:</span>
+      <span class=n>file_handle</span><span class=o>.</span><span class=n>seek</span><span class=p>(</span><span class=n>tracker</span><span class=o>.</span><span class=n>current_restriction</span><span class=o>.</span><span class=n>start</span><span class=p>())</span>
+      <span class=c1># The restriction tracker can be modified by another thread in parallel</span>
+      <span class=c1># so storing state locally is ill advised.</span>
+      <span class=n>end</span> <span class=o>=</span> <span class=n>tracker</span><span class=o>.</span><span class=n>current_restriction</span><span class=o>.</span><span class=n>end</span><span class=p>()</span>
+      <span class=k>while</span> <span class=n>file_handle</span><span class=o>.</span><span class=n>tell</span><span class=p>()</span> <span class=o>&lt;</span> <span class=n>end</span><span class=p>:</span>
+        <span class=c1># Only after successfully claiming should we produce any output and/or</span>
+        <span class=c1># perform side effects.</span>
+        <span class=n>tracker</span><span class=o>.</span><span class=n>try_claim</span><span class=p>(</span><span class=n>file_handle</span><span class=o>.</span><span class=n>tell</span><span class=p>())</span>
+        <span class=k>yield</span> <span class=n>read_next_record</span><span class=p>(</span><span class=n>file_handle</span><span class=p>)</span></code></pre></div></div><div class=language-go><div class=highlight><pre class=chroma><code class=language-go data-lang=go><span class=kd>func</span> <span class=p>(</span><span class=nx>fn</span> <span class=o>*</span><span class=nx>badTryClaimLoop</span><span class=p>)</span> <span class=nf>ProcessElement</span><span class=p>(</span><span  [...]
+            <span class=nx>file</span><span class=p>,</span> <span class=nx>err</span> <span class=o>:=</span> <span class=nx>os</span><span class=p>.</span><span class=nf>Open</span><span class=p>(</span><span class=nx>filename</span><span class=p>)</span>
+	<span class=k>if</span> <span class=nx>err</span> <span class=o>!=</span> <span class=kc>nil</span> <span class=p>{</span>
+		<span class=k>return</span> <span class=nx>err</span>
+	<span class=p>}</span>
+	<span class=nx>offset</span><span class=p>,</span> <span class=nx>err</span> <span class=o>:=</span> <span class=nf>seekToNextRecordBoundaryInFile</span><span class=p>(</span><span class=nx>file</span><span class=p>,</span> <span class=nx>rt</span><span class=p>.</span><span class=nf>GetRestriction</span><span class=p>().(</span><span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>).</span><span class=nx>Start</span><span class=p>)</span>
+
+	<span class=k>if</span> <span class=nx>err</span> <span class=o>!=</span> <span class=kc>nil</span> <span class=p>{</span>
+		<span class=k>return</span> <span class=nx>err</span>
+	<span class=p>}</span>
+
+	<span class=c1>// The restriction tracker can be modified by another thread in parallel
+</span><span class=c1></span>	<span class=c1>// so storing state locally is ill advised.
+</span><span class=c1></span>	<span class=nx>end</span> <span class=p>=</span> <span class=nx>rt</span><span class=p>.</span><span class=nf>GetRestriction</span><span class=p>().(</span><span class=nx>offsetrange</span><span class=p>.</span><span class=nx>Restriction</span><span class=p>).</span><span class=nx>End</span>
+	<span class=k>for</span> <span class=nx>offset</span> <span class=p>&lt;</span> <span class=nx>end</span> <span class=p>{</span>
+		<span class=c1>// Only after successfully claiming should we produce any output and/or
+</span><span class=c1></span>		<span class=c1>// perform side effects.
+</span><span class=c1></span>    	<span class=nx>rt</span><span class=p>.</span><span class=nf>TryClaim</span><span class=p>(</span><span class=nx>offset</span><span class=p>)</span>
+		<span class=nx>record</span><span class=p>,</span> <span class=nx>newOffset</span> <span class=o>:=</span> <span class=nf>readNextRecord</span><span class=p>(</span><span class=nx>file</span><span class=p>)</span>
+		<span class=nf>emit</span><span class=p>(</span><span class=nx>record</span><span class=p>)</span>
+		<span class=nx>offset</span> <span class=p>=</span> <span class=nx>newOffset</span>
+	<span class=p>}</span>
+	<span class=k>return</span> <span class=kc>nil</span>
+<span class=p>}</span></code></pre></div></div><h3 id=watermark-estimation>12.5. Watermark estimation</h3><p>The default watermark estimator does not produce a watermark estimate. Therefore, the output watermark
+is solely computed by the minimum of upstream watermarks.</p><p>An SDF can advance the output watermark by specifying a lower bound for all future output
+that this element and restriction pair will produce. The runner computes the minimum output watermark
+by taking the minimum over all upstream watermarks and the minimum reported by each element and
+restriction pair. The reported watermark must monotonically increase for each element and restriction
+pair across bundle boundaries. When an element and restriction pair stops processing its watermark,
+it is no longer considered part of the above calculation.</p><p>Tips:</p><ul><li>If you author an SDF that outputs records with timestamps, you should expose ways to allow users of
+this SDF to configure which watermark estimator to use.</li><li>Any data produced before the watermark may be considered late. See
+<a href=#watermarks-and-late-data>watermarks and late data</a> for more details.</li></ul><h4 id=controlling-the-watermark>12.5.1. Controlling the watermark</h4><p>There are two general types of watermark estimators: timestamp observing and external clock observing.
+Timestamp observing watermark estimators use the output timestamp of each record to compute the watermark
+estimate while external clock observing watermark estimators control the watermark by using a clock that
+is not associated to any individual output, such as the local clock of the machine or a clock exposed
+through an external service.</p><p>The restriction provider lets you override the default watermark estimation logic and use an existing
+watermark estimator implementation. You can also provide your own watermark estimator implementation.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java>      <span class=c1>// (Optional) Define a custom watermark state type to save information between bundle
+</span><span class=c1></span>      <span class=c1>// processing rounds.
+</span><span class=c1></span>      <span class=kd>public</span> <span class=kd>static</span> <span class=kd>class</span> <span class=nc>MyCustomWatermarkState</span> <span class=o>{</span>
+        <span class=kd>public</span> <span class=nf>MyCustomWatermarkState</span><span class=o>(</span><span class=n>String</span> <span class=n>element</span><span class=o>,</span> <span class=n>OffsetRange</span> <span class=n>restriction</span><span class=o>)</span> <span class=o>{</span>
+          <span class=c1>// Store data necessary for future watermark computations
+</span><span class=c1></span>        <span class=o>}</span>
+      <span class=o>}</span>
+
+      <span class=c1>// (Optional) Choose which coder to use to encode the watermark estimator state.
+</span><span class=c1></span>      <span class=nd>@GetWatermarkEstimatorStateCoder</span>
+      <span class=kd>public</span> <span class=n>Coder</span><span class=o>&lt;</span><span class=n>MyCustomWatermarkState</span><span class=o>&gt;</span> <span class=nf>getWatermarkEstimatorStateCoder</span><span class=o>()</span> <span class=o>{</span>
+        <span class=k>return</span> <span class=n>AvroCoder</span><span class=o>.</span><span class=na>of</span><span class=o>(</span><span class=n>MyCustomWatermarkState</span><span class=o>.</span><span class=na>class</span><span class=o>);</span>
+      <span class=o>}</span>
+
+      <span class=c1>// Define a WatermarkEstimator
+</span><span class=c1></span>      <span class=kd>public</span> <span class=kd>static</span> <span class=kd>class</span> <span class=nc>MyCustomWatermarkEstimator</span>
+          <span class=kd>implements</span> <span class=n>TimestampObservingWatermarkEstimator</span><span class=o>&lt;</span><span class=n>MyCustomWatermarkState</span><span class=o>&gt;</span> <span class=o>{</span>
+
+        <span class=kd>public</span> <span class=nf>MyCustomWatermarkEstimator</span><span class=o>(</span><span class=n>MyCustomWatermarkState</span> <span class=n>type</span><span class=o>)</span> <span class=o>{</span>
+          <span class=c1>// Initialize watermark estimator state
+</span><span class=c1></span>        <span class=o>}</span>
+
+        <span class=nd>@Override</span>
+        <span class=kd>public</span> <span class=kt>void</span> <span class=nf>observeTimestamp</span><span class=o>(</span><span class=n>Instant</span> <span class=n>timestamp</span><span class=o>)</span> <span class=o>{</span>
+          <span class=c1>// Will be invoked on each output from the SDF
+</span><span class=c1></span>        <span class=o>}</span>
+
+        <span class=nd>@Override</span>
+        <span class=kd>public</span> <span class=n>Instant</span> <span class=nf>currentWatermark</span><span class=o>()</span> <span class=o>{</span>
+          <span class=c1>// Return a monotonically increasing value
+</span><span class=c1></span>          <span class=k>return</span> <span class=n>currentWatermark</span><span class=o>;</span>
+        <span class=o>}</span>
+
+        <span class=nd>@Override</span>
+        <span class=kd>public</span> <span class=n>MyCustomWatermarkState</span> <span class=nf>getState</span><span class=o>()</span> <span class=o>{</span>
+          <span class=c1>// Return state to resume future watermark estimation after a checkpoint/split
+</span><span class=c1></span>          <span class=k>return</span> <span class=kc>null</span><span class=o>;</span>
+        <span class=o>}</span>
+      <span class=o>}</span>
+
+      <span class=c1>// Then, update the DoFn to generate the initial watermark estimator state for all new element
+</span><span class=c1></span>      <span class=c1>// and restriction pairs and to create a new instance given watermark estimator state.
+</span><span class=c1></span>
+      <span class=nd>@GetInitialWatermarkEstimatorState</span>
+      <span class=kd>public</span> <span class=n>MyCustomWatermarkState</span> <span class=nf>getInitialWatermarkEstimatorState</span><span class=o>(</span>
+          <span class=nd>@Element</span> <span class=n>String</span> <span class=n>element</span><span class=o>,</span> <span class=nd>@Restriction</span> <span class=n>OffsetRange</span> <span class=n>restriction</span><span class=o>)</span> <span class=o>{</span>
+        <span class=c1>// Compute and return the initial watermark estimator state for each element and
+</span><span class=c1></span>        <span class=c1>// restriction. All subsequent processing of an element and restriction will be restored
+</span><span class=c1></span>        <span class=c1>// from the existing state.
+</span><span class=c1></span>        <span class=k>return</span> <span class=k>new</span> <span class=n>MyCustomWatermarkState</span><span class=o>(</span><span class=n>element</span><span class=o>,</span> <span class=n>restriction</span><span class=o>);</span>
+      <span class=o>}</span>
+
+      <span class=nd>@NewWatermarkEstimator</span>
+      <span class=kd>public</span> <span class=n>WatermarkEstimator</span><span class=o>&lt;</span><span class=n>MyCustomWatermarkState</span><span class=o>&gt;</span> <span class=nf>newWatermarkEstimator</span><span class=o>(</span>
+          <span class=nd>@WatermarkEstimatorState</span> <span class=n>MyCustomWatermarkState</span> <span class=n>oldState</span><span class=o>)</span> <span class=o>{</span>
+        <span class=k>return</span> <span class=k>new</span> <span class=n>MyCustomWatermarkEstimator</span><span class=o>(</span><span class=n>oldState</span><span class=o>);</span>
+      <span class=o>}</span>
+    <span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=c1># (Optional) Define a custom watermark state type to save information between</span>
+<span class=c1># bundle processing rounds.</span>
+<span class=k>class</span> <span class=nc>MyCustomerWatermarkEstimatorState</span><span class=p>(</span><span class=nb>object</span><span class=p>):</span>
+  <span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>element</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=c1># Store data necessary for future watermark computations</span>
+    <span class=k>pass</span>
+
+<span class=c1># Define a WatermarkEstimator</span>
+<span class=k>class</span> <span class=nc>MyCustomWatermarkEstimator</span><span class=p>(</span><span class=n>WatermarkEstimator</span><span class=p>):</span>
+  <span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>estimator_state</span><span class=p>):</span>
+    <span class=bp>self</span><span class=o>.</span><span class=n>state</span> <span class=o>=</span> <span class=n>estimator_state</span>
+
+  <span class=k>def</span> <span class=nf>observe_timestamp</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>timestamp</span><span class=p>):</span>
+    <span class=c1># Will be invoked on each output from the SDF</span>
+    <span class=k>pass</span>
+
+  <span class=k>def</span> <span class=nf>current_watermark</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
+    <span class=c1># Return a monotonically increasing value</span>
+    <span class=k>return</span> <span class=n>current_watermark</span>
+
+  <span class=k>def</span> <span class=nf>get_estimator_state</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
+    <span class=c1># Return state to resume future watermark estimation after a</span>
+    <span class=c1># checkpoint/split</span>
+    <span class=k>return</span> <span class=bp>self</span><span class=o>.</span><span class=n>state</span>
+
+<span class=c1># Then, a WatermarkEstimatorProvider needs to be created for this</span>
+<span class=c1># WatermarkEstimator</span>
+<span class=k>class</span> <span class=nc>MyWatermarkEstimatorProvider</span><span class=p>(</span><span class=n>WatermarkEstimatorProvider</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>initial_estimator_state</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>element</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=k>return</span> <span class=n>MyCustomerWatermarkEstimatorState</span><span class=p>(</span><span class=n>element</span><span class=p>,</span> <span class=n>restriction</span><span class=p>)</span>
+
+  <span class=k>def</span> <span class=nf>create_watermark_estimator</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>estimator_state</span><span class=p>):</span>
+    <span class=k>return</span> <span class=n>MyCustomWatermarkEstimator</span><span class=p>(</span><span class=n>estimator_state</span><span class=p>)</span>
+
+<span class=c1># Finally, define the SDF using your estimator.</span>
+<span class=k>class</span> <span class=nc>MySplittableDoFn</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>process</span><span class=p>(</span>
+      <span class=bp>self</span><span class=p>,</span>
+      <span class=n>element</span><span class=p>,</span>
+      <span class=n>restriction_tracker</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>RestrictionParam</span><span class=p>(</span><span class=n>MyRestrictionProvider</span><span class=p>()),</span>
+      <span class=n>watermark_estimator</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>WatermarkEstimatorParam</span><span class=p>(</span>
+          <span class=n>MyWatermarkEstimatorProvider</span><span class=p>())):</span>
+    <span class=c1># The current watermark can be inspected.</span>
+    <span class=n>watermark_estimator</span><span class=o>.</span><span class=n>current_watermark</span><span class=p>()</span></code></pre></div></div><h3 id=truncating-during-drain>12.6. Truncating during drain</h3><p>Runners which support draining pipelines need the ability to drain SDFs; otherwise, the
+pipeline may never stop. By default, bounded restrictions process the remainder of the restriction while
+unbounded restrictions finish processing at the next SDF-initiated checkpoint or runner-initiated split.
+You are able to override this default behavior by defining the appropriate method on the restriction
+provider.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@TruncateRestriction</span>
+<span class=nd>@Nullable</span>
+<span class=n>TruncateResult</span><span class=o>&lt;</span><span class=n>OffsetRange</span><span class=o>&gt;</span> <span class=nf>truncateRestriction</span><span class=o>(</span>
+    <span class=nd>@Element</span> <span class=n>String</span> <span class=n>fileName</span><span class=o>,</span> <span class=nd>@Restriction</span> <span class=n>OffsetRange</span> <span class=n>restriction</span><span class=o>)</span> <span class=o>{</span>
+  <span class=k>if</span> <span class=o>(</span><span class=n>fileName</span><span class=o>.</span><span class=na>contains</span><span class=o>(</span><span class=s>&#34;optional&#34;</span><span class=o>))</span> <span class=o>{</span>
+    <span class=c1>// Skip optional files
+</span><span class=c1></span>    <span class=k>return</span> <span class=kc>null</span><span class=o>;</span>
+  <span class=o>}</span>
+  <span class=k>return</span> <span class=n>TruncateResult</span><span class=o>.</span><span class=na>of</span><span class=o>(</span><span class=n>restriction</span><span class=o>);</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>MyRestrictionProvider</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>transforms</span><span class=o>.</span><span class=n>core</span><span class=o>.</span><span class=n>RestrictionProvider</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>truncate</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>file_name</span><span class=p>,</span> <span class=n>restriction</span><span class=p>):</span>
+    <span class=k>if</span> <span class=s2>&#34;optional&#34;</span> <span class=ow>in</span> <span class=n>file_name</span><span class=p>:</span>
+      <span class=c1># Skip optional files</span>
+      <span class=k>return</span> <span class=bp>None</span>
+    <span class=k>return</span> <span class=n>restriction</span></code></pre></div></div><h3 id=bundle-finalization>12.7. Bundle finalization</h3><p>Bundle finalization enables a <code>DoFn</code> to perform side effects by registering a callback.
+The callback is invoked once the runner has acknowledged that it has durably persisted the output.
+For example, a message queue might need to acknowledge messages that it has ingested into the pipeline.
+Bundle finalization is not limited to SDFs but is called out here since this is the primary
+use case.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=nd>@ProcessElement</span>
+<span class=kd>public</span> <span class=kt>void</span> <span class=nf>processElement</span><span class=o>(</span><span class=n>ProcessContext</span> <span class=n>c</span><span class=o>,</span> <span class=n>BundleFinalizer</span> <span class=n>bundleFinalizer</span><span class=o>)</span> <span class=o>{</span>
+  <span class=c1>// ... produce output ...
+</span><span class=c1></span>
+  <span class=n>bundleFinalizer</span><span class=o>.</span><span class=na>afterBundleCommit</span><span class=o>(</span>
+      <span class=n>Instant</span><span class=o>.</span><span class=na>now</span><span class=o>().</span><span class=na>plus</span><span class=o>(</span><span class=n>Duration</span><span class=o>.</span><span class=na>standardMinutes</span><span class=o>(</span><span class=n>5</span><span class=o>)),</span>
+      <span class=o>()</span> <span class=o>-&gt;</span> <span class=o>{</span>
+        <span class=c1>// ... perform a side effect ...
+</span><span class=c1></span>      <span class=o>});</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>class</span> <span class=nc>MySplittableDoFn</span><span class=p>(</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=p>):</span>
+  <span class=k>def</span> <span class=nf>process</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>element</span><span class=p>,</span> <span class=n>bundle_finalizer</span><span class=o>=</span><span class=n>beam</span><span class=o>.</span><span class=n>DoFn</span><span class=o>.</span><span class=n>BundleFinalizerParam</span><span class=p>):</span>
+    <span class=c1># ... produce output ...</span>
+
+    <span class=c1># Register callback function for this bundle that performs the side</span>
+    <span class=c1># effect.</span>
+    <span class=n>bundle_finalizer</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=n>my_callback_func</span><span class=p>)</span></code></pre></div></div></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_c [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/resources/learning-resources/index.html b/website/generated-content/documentation/resources/learning-resources/index.html
index a83fec7..3b58b92 100644
--- a/website/generated-content/documentation/resources/learning-resources/index.html
+++ b/website/generated-content/documentation/resources/learning-resources/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Learning Resources</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 that can help you to learn Apache Beam concepts and programming model hands-on.
 Built based on <a href=https://www.jetbrains.com/education/>JetBrains Educational Products</a>, Beam Katas
 objective is to provide a series of structured hands-on learning experiences for learners
diff --git a/website/generated-content/documentation/resources/videos-and-podcasts/index.html b/website/generated-content/documentation/resources/videos-and-podcasts/index.html
index 1694cf4..3bcf1d5 100644
--- a/website/generated-content/documentation/resources/videos-and-podcasts/index.html
+++ b/website/generated-content/documentation/resources/videos-and-podcasts/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Videos and Podcasts</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Sp [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <source src=https://feathercastapache.files.wordpress.com/2017/05/0517-04-mejia.mp3 type=audio/mpeg>Your browser does not support the audio element.</audio>
 ### Universal metrics with Apache Beam<p>ApacheCon, Montreal, 2018</p><p>Presented by Etienne Chauchot, <em>Apache Beam PMC member</em></p><iframe src=//www.slideshare.net/slideshow/embed_code/key/kKJRzR8HxkxLsR width=595 height=485 frameborder=0 marginwidth=0 marginheight=0 scrolling=no style="border:1px solid #ccc;border-width:1px;margin-bottom:5px;max-width:100%" allowfullscreen></iframe><div style=margin-bottom:5px><strong><a href=//www.slideshare.net/EtienneChauchot/universal-metric [...]
 <source src=//feathercastapache.files.wordpress.com/2018/09/03-universal-metrics-with-beam-etienne-chauchot.mp3 type=audio/mpeg>Your browser does not support the audio element.</audio><h2 id=next-steps>Next Steps</h2><ul><li>Take a self-paced tour through our <a href=/documentation/resources/learning-resources>Learning Resources</a>.</li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__lo [...]
diff --git a/website/generated-content/documentation/runners/jstorm/index.html b/website/generated-content/documentation/runners/jstorm/index.html
index 2c4aedb..9eee8ef 100644
--- a/website/generated-content/documentation/runners/jstorm/index.html
+++ b/website/generated-content/documentation/runners/jstorm/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>JStorm Runner</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
   <span class=o>&lt;</span><span class=n>groupId</span><span class=o>&gt;</span><span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>beam</span><span class=o>&lt;/</span><span class=n>groupId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>artifactId</span><span class=o>&gt;</span><span class=n>beam</span><span class=o>-</span><span class=n>runners</span><span class=o>-</span><span class=n>jstorm</span><span class=o>&lt;/</span><span class=n>artifactId</span><span class=o>&gt;</span>
   <span class=o>&lt;</span><span class=n>version</span><span class=o>&gt;</span><span class=n>2</span><span class=o>.</span><span class=na>24</span><span class=o>.</span><span class=na>0</span><span class=o>&lt;/</span><span class=n>version</span><span class=o>&gt;</span>
diff --git a/website/generated-content/documentation/runtime/environments/index.html b/website/generated-content/documentation/runtime/environments/index.html
index c5abbd8..0942709 100644
--- a/website/generated-content/documentation/runtime/environments/index.html
+++ b/website/generated-content/documentation/runtime/environments/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Container environments</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 </code></pre><ol start=2><li><a href=https://docs.docker.com/develop/develop-images/dockerfile_best-practices/>Write a new Dockerfile</a> that <a href=https://docs.docker.com/engine/reference/builder/#from>designates</a> the original as its <a href="https://docs.docker.com/glossary/?term=parent%20image">parent</a>.</li><li><a href=#building-container-images>Build</a> a child image.</li></ol><h3 id=modifying-dockerfiles>Modifying the original Dockerfile</h3><ol><li>Clone the <code>beam</c [...]
 </code></pre><ol start=2><li>Customize the <a href=https://github.com/apache/beam/blob/master/sdks/python/container/Dockerfile>Dockerfile</a>. If you&rsquo;re adding dependencies from <a href=https://pypi.org/>PyPI</a>, use <a href=https://github.com/apache/beam/blob/master/sdks/python/container/base_image_requirements.txt><code>base_image_requirements.txt</code></a> instead.</li><li><a href=#building-container-images>Reimage</a> the container.</li></ol><h3 id=testing-customized-images>T [...]
 --input=/path/to/inputfile \
diff --git a/website/generated-content/documentation/runtime/model/index.html b/website/generated-content/documentation/runtime/model/index.html
index 21a684c..0055156 100644
--- a/website/generated-content/documentation/runtime/model/index.html
+++ b/website/generated-content/documentation/runtime/model/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Execution model</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specif [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 may observe various effects as a result of the runner’s choices. This page
 describes these effects so you can better understand how Beam pipelines execute.</p><h2 id=processing-of-elements>Processing of elements</h2><p>The serialization and communication of elements between machines is one of the
 most expensive operations in a distributed execution of your pipeline. Avoiding
diff --git a/website/generated-content/documentation/runtime/sdk-harness-config/index.html b/website/generated-content/documentation/runtime/sdk-harness-config/index.html
index 5c237dd..a35c592 100644
--- a/website/generated-content/documentation/runtime/sdk-harness-config/index.html
+++ b/website/generated-content/documentation/runtime/sdk-harness-config/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>SDK Harness Configuration</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Dom [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 accommodate varying cluster setups.
 (The options below are for Python, but much of this information should apply to the Java and Go SDKs
 as well.)</p><ul><li><code>environment_type</code> determines where user code will be executed.
diff --git a/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html b/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
index 2d9dd08..6bacf48 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/approximatequantiles/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ApproximateQuantiles</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain S [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Takes a comparison function and the desired number of quantiles <em>n</em>, either
 globally or per-key. Using an approximation algorithm, it returns the
 minimum value, <em>n-2</em> intermediate values, and the maximum value.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>: to compute the quartiles of a <code>PCollection</code> of integers, we
diff --git a/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html b/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
index a070d6a..f026c58 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/approximateunique/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ApproximateUnique</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spec [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for estimating the number of distinct elements in a collection
 or the number of distinct values associated with each key in a collection
 of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/hllcount>HllCount</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html b/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
index df8ab1e..8a4c2d1 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/cogroupbykey/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CoGroupByKey</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific  [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Aggregates all input elements by their key and allows downstream processing
 to consume all values associated with the key. While <code>GroupByKey</code> performs
 this operation over a single input collection and thus a single type of
diff --git a/website/generated-content/documentation/transforms/java/aggregation/combine/index.html b/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
index 493f117..0dd6392 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/combine/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Combine</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>A user-defined <code>CombineFn</code> may be applied to combine all elements in a
 <code>PCollection</code> (global combine) or to combine all elements associated
 with each key.</p><p>While the result is similar to applying a <code>GroupByKey</code> followed by
diff --git a/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html b/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
index 088514a..0bc4a79 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/combinewithcontext/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CombineWithContext</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>A class of transforms that contains combine functions that have access to <code>PipelineOptions</code> and side inputs through <code>CombineWithContext.Context</code>.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/combine>Combine</a>
 for combining all values associated with a key to a single result</li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class="footer__cols__col footer__cols__col--md"><div class= [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/count/index.html b/website/generated-content/documentation/transforms/java/aggregation/count/index.html
index 2a4c51b..0664b7d 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/count/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/count/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Count</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Counts the number of elements within each aggregation. The <code>Count</code>
 transform has three varieties:</p><ul><li><code>Count.globally()</code> counts the number of elements in the entire
 <code>PCollection</code>. The result is a collection with a single element.</li><li><code>Count.perKey()</code> counts how many elements are associated with each
diff --git a/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html b/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
index 2a9aeb1..3965260 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/distinct/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Distinct</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Produces a collection containing distinct elements of the input collection.</p><p>On some data sets, it might be more efficient to compute an approximate
 answer using <code>ApproximateUnique</code>, which also allows for determining distinct
 values for each key.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/count>Count</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html b/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
index ec6df65..24635ee 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/groupbykey/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>GroupByKey</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific La [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Takes a keyed collection of elements and produces a collection where
 each element consists of a key and an <code>Iterable</code> of all values
 associated with that key.</p><p>The results can be combined with windowing to subdivide each key
diff --git a/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html b/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
index 7a81673..8ae7638 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/groupintobatches/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>GroupIntoBatches</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Speci [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Batches inputs to a desired batch size.</p><p>Batches contain only elements of a single key. Elements are buffered until
 <code>batchSize</code> number of elements buffered. Then, these elements are output
 to the output collection.</p><p>Batches contain elements from the same window, so windows are preserved. Batches might contain elements from more than one bundle.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/groupbykey>GroupByKey</a> takes one input collection.</li></ul></div></div><footer class=footer> [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html b/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
index 8113880..df605c3 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/hllcount/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>HllCount</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Estimates the number of distinct elements in a data stream using the
 <a href=https://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/40671.pdf>HyperLogLog++ algorithm</a>.
 The respective transforms to create and merge sketches, and to extract from them, are:</p><ul><li><code>HllCount.Init</code> aggregates inputs into HLL++ sketches.</li><li><code>HllCount.MergePartial</code> merges HLL++ sketches into a new sketch.</li><li><code>HllCount.Extract</code> extracts the estimated count of distinct elements from HLL++ sketches.</li></ul><p>You can read more about what a sketch is at <a href=https://github.com/google/zetasketch>https://github.com/google/zetasket [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/latest/index.html b/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
index 51e3abe..ceee2e8 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/latest/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Latest</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>A transform and <code>Combine.CombineFn</code> for computing the latest element in a collection.</p><ul><li><code>Latest.globally()</code> takes a collection of values and produces the collection
 containing the single value with the latest implicit timestamp.</li><li><code>Latest.perKey()</code> takes a collection of key value pairs, and returns the
 latest value for each key, according to the implicit timestamp.</li></ul><p>For elements with the same timestamp, the output element is arbitrarily selected.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>: compute the latest value for each session<div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java> <span class=n>PCollection</span> <span class=n>input</span> <span class=o>=</span> <span class=o>...;</span>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/max/index.html b/website/generated-content/documentation/transforms/java/aggregation/max/index.html
index 2cc3364..e8a17f6 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/max/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/max/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Max</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Provides a variety of different transforms for computing the maximum
 values in a collection, either globally or for each key.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: get the maximum of a <code>PCollection</code> of <code>Doubles</code>.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>input</span> <span class=o>=</span> <span class=o>...;</span>
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>max</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Max</span><span class=o>.</span><span class=na>doublesGlobally</span><span class=o>());</span></code></pre></div></div><p><strong>Example 2</strong>: calculate the maximum of the <code>Integers</code> associated
diff --git a/website/generated-content/documentation/transforms/java/aggregation/mean/index.html b/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
index 400808a..6b815a4 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/mean/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Mean</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for computing the arithmetic mean of the elements in a collection,
 or the mean of the values associated with each key in a collection of key-value pairs.</p><ul><li><code>Mean.globally()</code> returns a transform that then returns a collection whose contents is the mean of the input collection&rsquo;s elements. If there are no elements in the input collection, it returns 0.</li><li><code>Mean.perKey()</code> returns a transform that returns a collection that contains an output element mapping each distinct key in the input collection to the mean of the [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>mean</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Mean</span><span class=o>.</span><span class=na>globally</span><span class=o>());</span></code></pre></div></div><p><strong>Example 2</strong>: calculate the mean of the <code>Integers</code> associated with each unique ke [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/min/index.html b/website/generated-content/documentation/transforms/java/aggregation/min/index.html
index 2cc5aae..d0d4062 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/min/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/min/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Min</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Provides a variety of different transforms for computing the minimum
 values in a collection, either globally or for each key.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/max>Max</a>
 for computing maximum values in a collection</li><li><a href=/documentation/transforms/java/aggregation/mean>Mean</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/sample/index.html b/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
index d28343c..0ca106b 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/sample/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Sample</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for taking samples of the elements in a collection, or
 samples of the values associated with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/top>Top</a>
 finds the largest (or smallest) set of elements in a collection</li><li><a href=/documentation/transforms/java/aggregation/latest>Latest</a>
diff --git a/website/generated-content/documentation/transforms/java/aggregation/sum/index.html b/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
index fe5e1ea..098261a 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/sum/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Sum</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for computing the sum of the elements in a collection, or the sum of the
 values associated with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: get the sum of a <code>PCollection</code> of <code>Doubles</code>.</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>input</span> <span class=o>=</span> <span class=o>...;</span>
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Double</span><span class=o>&gt;</span> <span class=n>sum</span> <span class=o>=</span> <span class=n>input</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Sum</span><span class=o>.</span><span class=na>doublesGlobally</span><span class=o>());</span></code></pre></div></div><p>Example 2: calculate the sum of the <code>Integers</code> associated with each unique key (which is o [...]
diff --git a/website/generated-content/documentation/transforms/java/aggregation/top/index.html b/website/generated-content/documentation/transforms/java/aggregation/top/index.html
index 82c79f8..8ba8e9a 100644
--- a/website/generated-content/documentation/transforms/java/aggregation/top/index.html
+++ b/website/generated-content/documentation/transforms/java/aggregation/top/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Top</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for finding the largest (or smallest) set of elements in
 a collection, or the largest (or smallest) set of values associated
 with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7703>BEAM-7703</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/aggregation/sample>Sample</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/filter/index.html b/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
index a6465ca..5dde30e 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/filter/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Filter</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Given a predicate, filter out all elements that don&rsquo;t satisfy that predicate.
 May also be used to filter based on an inequality with a given value based
 on the natural ordering of the element.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: Filtering with a predicate</p><p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>allStrings</span> <span class=o>=</span> <span class=n>Create</span><span class=o>.</span><span class=na>of</span><span class=o [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html b/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
index be4e26f..73a6787 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/flatmapelements/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>FlatMapElements</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specif [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Applies a simple 1-to-many mapping function over each element in the
 collection. The many elements are flattened into the resulting collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/filter>Filter</a> is useful if the function is just
 deciding whether to output an element or not.</li><li><a href=/documentation/transforms/java/elementwise/pardo>ParDo</a> is the most general element-wise mapping
diff --git a/website/generated-content/documentation/transforms/java/elementwise/keys/index.html b/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
index 3f0c50d..dc119f7 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/keys/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Keys</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Takes a collection of key-value pairs, and returns the key of each element.</p><h2 id=examples>Examples</h2><p><strong>Example</strong></p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Integer</span><span class=o>&gt;&gt;</span> <span [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>keys</span> <span class=o>=</span> <span class=n>keyValuePairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Keys</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div></div><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/element [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html b/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
index 5711406..17b4762 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/kvswap/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>KvSwap</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Takes a collection of key-value pairs and returns a collection of key-value pairs which has each key and value swapped.</p><h2 id=examples>Examples</h2><p><strong>Example</strong>:</p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Inte [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>,</span> <span class=n>String</span><span class=o>&gt;&gt;</span> <span class=n>intStrPairs</span> <span class=o>=</span> <span class=n>strIntPairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>KvSwap</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html b/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
index 7686cb3..b6ceefc 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/mapelements/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>MapElements</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific L [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Applies a simple 1-to-1 mapping function over each element in the collection.</p><h2 id=examples>Examples</h2><p><strong>Example 1</strong>: providing the mapping function using a <code>SimpleFunction</code></p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>lines</span> <span cla [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>lineLengths</span> <span class=o>=</span> <span class=n>lines</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>MapElements</span><span class=o>.</span><span class=na>via</span><span class=o>(</span>
     <span class=k>new</span> <span class=n>SimpleFunction</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Integer</span><span class=o>&gt;()</span> <span class=o>{</span>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html b/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
index e0d8130..b90391a 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/pardo/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ParDo</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>A transform for generic parallel processing. A <code>ParDo</code> transform considers each
 element in the input <code>PCollection</code>, performs some processing function
 (your user code) on that element, and emits zero or more elements to
diff --git a/website/generated-content/documentation/transforms/java/elementwise/partition/index.html b/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
index 43c0984..ed75711 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/partition/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Partition</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lan [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Separates elements in a collection into multiple output collections. The partitioning function contains the logic that determines how to separate the elements of the input collection into each resulting partition output collection.</p><p>The number of partitions must be determined at graph construction time. You cannot determine the number of partitions in mid-pipeline.</p><p>See more information in the <a href=/documentation/programming-guide/#partition>Bea [...]
 </span><span class=c1>// partitioning function. In this example, we define the PartitionFn in-line. Returns a PCollectionList
 </span><span class=c1>// containing each of the resulting partitions as individual PCollection objects.
diff --git a/website/generated-content/documentation/transforms/java/elementwise/regex/index.html b/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
index 94bd817..264022e 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/regex/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Regex</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Provides a variety of functionality based on regular expressions.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class= [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/reify/index.html b/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
index 43a358a..044df5e 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/reify/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Reify</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Transforms for converting between explicit and implicit form of various Beam values.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/withtimestamps>WithTimestamps</a>
 assigns timestamps to all the elements of a collection</li><li><a href=/documentation/transforms/java/other/window/>Window</a> divides up or
 groups the elements of a collection into finite windows</li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg class=footer__logo alt="Apache logo"></div></div><div class="footer__cols__col footer__cols__col--md"><div class=footer__co [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html b/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
index 68edbc7..6529d30 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/tostring/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ToString</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>A variety of utility transforms for invoking the <code>toString()</code> method
 on every element in the input collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_cir [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
diff --git a/website/generated-content/documentation/transforms/java/elementwise/values/index.html b/website/generated-content/documentation/transforms/java/elementwise/values/index.html
index 1736de1..7e8d3b3 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/values/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/values/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Values</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>The <code>Values</code> transform takes a collection of key-value pairs, and
 returns the value of each element.</p><h2 id=examples>Examples</h2><p><strong>Example</strong></p><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>KV</span><span class=o>&lt;</span><span class=n>String</span><span class=o>,</span> <span class=n>Integer</span><span class=o>&gt;&gt;</span> <span class=n>keyValuePairs</span> <span class=o>=</span> <span class=cm>/*  [...]
 <span class=n>PCollection</span><span class=o>&lt;</span><span class=n>Integer</span><span class=o>&gt;</span> <span class=n>values</span> <span class=o>=</span> <span class=n>keyValuePairs</span><span class=o>.</span><span class=na>apply</span><span class=o>(</span><span class=n>Values</span><span class=o>.</span><span class=na>create</span><span class=o>());</span></code></pre></div></div><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/el [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html b/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
index 25a8071..b21ed9d 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/withkeys/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>WithKeys</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Takes a <code>PCollection&lt;V></code> and produces a <code>PCollection&lt;KV&lt;K, V>></code> by associating
 each input element with a key.</p><p>There are two versions of <code>WithKeys</code>, depending on how the key should be determined:</p><ul><li><code>WithKeys.of(SerializableFunction&lt;V, K> fn)</code> takes a function to
 compute the key from each value.</li><li><code>WithKeys.of(K key)</code> associates each value with the specified key.</li></ul><h2 id=examples>Examples</h2><p><strong>Example</strong><div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>words</span> <span class=o>=</span> <span class=n>Create</span><span class=o>.< [...]
diff --git a/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html b/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
index c28328b..8080dc9 100644
--- a/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
+++ b/website/generated-content/documentation/transforms/java/elementwise/withtimestamps/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>WithTimestamps</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specifi [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Assigns timestamps to all the elements of a collection.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7702>BEAM-7702</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/reify>Reify</a></li></ul></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__log [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/other/create/index.html b/website/generated-content/documentation/transforms/java/other/create/index.html
index 1e68baa..d8f0bee 100644
--- a/website/generated-content/documentation/transforms/java/other/create/index.html
+++ b/website/generated-content/documentation/transforms/java/other/create/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Create</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Creates a collection containing a specified set of elements. This is useful
 for testing, as well as creating an initial input to process in parallel.
 For example, a single element to execute a one-time <code>ParDo</code> or a list of filenames to be read.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><p>N/A</p></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class=footer__cols__col><div class=footer__cols__col__logo><img src=/images/beam_logo_circle.svg class=footer__ [...]
diff --git a/website/generated-content/documentation/transforms/java/other/flatten/index.html b/website/generated-content/documentation/transforms/java/other/flatten/index.html
index 3ce6afb..8707057 100644
--- a/website/generated-content/documentation/transforms/java/other/flatten/index.html
+++ b/website/generated-content/documentation/transforms/java/other/flatten/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Flatten</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Merges multiple <code>PCollection</code> objects into a single logical <code>PCollection</code>.</p><p>By default, the coder for the output <code>PCollection</code> is the same as the coder
 for the first <code>PCollection</code> in the input <code>PCollectionList</code>. However, the
 input <code>PCollection</code> objects can each use different coders, as long as
diff --git a/website/generated-content/documentation/transforms/java/other/passert/index.html b/website/generated-content/documentation/transforms/java/other/passert/index.html
index efe875a..c02fcae 100644
--- a/website/generated-content/documentation/transforms/java/other/passert/index.html
+++ b/website/generated-content/documentation/transforms/java/other/passert/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>PAssert</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p><code>PAssert</code> is a class included in the Beam Java SDK that is an
 assertion on the contents of a <code>PCollection</code>. You can use <code>PAssert</code> to verify
 that a <code>PCollection</code> contains a specific set of expected elements.</p><h2 id=examples>Examples</h2><p>For a given <code>PCollection</code>, you can use <code>PAssert</code> to verify the contents as follows:<div class=language-java><div class=highlight><pre class=chroma><code class=language-java data-lang=java><span class=n>PCollection</span><span class=o>&lt;</span><span class=n>String</span><span class=o>&gt;</span> <span class=n>output</span> <span class=o>=</span> <span cl [...]
diff --git a/website/generated-content/documentation/transforms/java/other/view/index.html b/website/generated-content/documentation/transforms/java/other/view/index.html
index ada8357..c03030b 100644
--- a/website/generated-content/documentation/transforms/java/other/view/index.html
+++ b/website/generated-content/documentation/transforms/java/other/view/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>View</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Operations for turning a collection into view that may be used as a side-input to a <code>ParDo</code>.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/pardo>ParDo</a></li><li><a href=/documentation/transforms/java/aggregation/combinewithcontext>CombineWithContext</a></li></ul [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/transforms/java/other/window/index.html b/website/generated-content/documentation/transforms/java/other/window/index.html
index b0f956a..37f5c23 100644
--- a/website/generated-content/documentation/transforms/java/other/window/index.html
+++ b/website/generated-content/documentation/transforms/java/other/window/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Window</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Javadoc</a></table><br><br><p>Logically divides up or groups the elements of a collection into finite
 windows according to a function.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7704>BEAM-7704</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/java/elementwise/reify>Reify</a>
 converts between explicit and implicit form of various Beam values.</li><li><a href=/documentation/transforms/java/elementwise/withtimestamps>WithTimestamps</a>
diff --git a/website/generated-content/documentation/transforms/java/overview/index.html b/website/generated-content/documentation/transforms/java/overview/index.html
index 1066a0b..b854910 100644
--- a/website/generated-content/documentation/transforms/java/overview/index.html
+++ b/website/generated-content/documentation/transforms/java/overview/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Java transform catalog overview</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) a [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 outputs all resulting elements.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/keys>Keys</a></td><td>Extracts the key from each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/kvswap>KvSwap</a></td><td>Swaps the key and value of each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/mapelements>MapElements</a></td><td>Applies a function to eve [...]
 in the input collection.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/partition>Partition</a></td><td>Routes each input element to a specific output collection based on some partition
 function.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/regex>Regex</a></td><td>Filters input string elements based on a regex. May also transform them based on the matching groups.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/reify>Reify</a></td><td>Transforms for converting between explicit and implicit form of various Beam values.</td></tr><tr><td><a href=/documentation/transforms/java/elementwise/tostring>ToString</a></td><td>Transforms ev [...]
diff --git a/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html b/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
index 255749d..33a48fe 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/approximatequantiles/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ApproximateQuantiles</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain S [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html b/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
index b5845e6..d2b9c46 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/approximateunique/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ApproximateUnique</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spec [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html b/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
index 478eb9e..8773197 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/cogroupbykey/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CoGroupByKey</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific  [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Aggregates all input elements by their key and allows downstream processing
 to consume all values associated with the key. While <code>GroupByKey</code> performs
 this operation over a single input collection and thus a single type of input
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html b/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
index 4ef4911..c103ad5 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combineglobally/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CombineGlobally</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specif [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines all elements in a collection.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombineGlobally</code> in multiple ways to combine all the elements in the <code>PCollection</code>.</p><p><code>CombineGlobally</code> accepts a function that takes an <code>iterable</code> of elements as an input, and combines them to return a single element.</p><h3 id=example-1-combining-with-a-function>Example 1: Combining with a function</h3><p>We define a function <code>get_common_items</code> which takes an <code>iterable</code> of sets as an input, and calcul [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html b/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
index 3db4a98..a825bcb 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combineperkey/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CombinePerKey</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines all elements for each key in a collection.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombinePerKey</code> in multiple ways to combine all the elements in the <code>PCollection</code>.</p><p><code>CombinePerKey</code> accepts a function that takes a list of values as an input, and combines them for each key.</p><h3 id=example-1-combining-with-a-predefined-function>Example 1: Combining with a predefined function</h3><p>We use the function
 <a href=https://docs.python.org/3/library/functions.html#sum><code>sum</code></a>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html b/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
index 60e822f..a24c593 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combinevalues/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CombineValues</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Combines an iterable of values in a keyed collection of elements.</p><p>See more information in the <a href=/documentation/programming-guide/#combine>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce.
 Then, we apply <code>CombineValues</code> in multiple ways to combine the keyed values in the <code>PCollection</code>.</p><p><code>CombineValues</code> accepts a function that takes an <code>iterable</code> of elements as an input, and combines them to return a single element.
 <code>CombineValues</code> expects a keyed <code>PCollection</code> of elements, where the value is an iterable of elements to be combined.</p><h3 id=example-1-combining-with-a-predefined-function>Example 1: Combining with a predefined function</h3><p>We use the function
diff --git a/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html b/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
index fc0c144..1f8794f 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/combinewithcontext/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>CombineWithContext</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Spe [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/aggregation/count/index.html b/website/generated-content/documentation/transforms/python/aggregation/count/index.html
index baee5de..6a5c643 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/count/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/count/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Count</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Counts the number of elements within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with two <code>PCollection</code>s of produce.
 Then, we apply <code>Count</code> to get the total number of elements in different ways.</p><h3 id=example-1-counting-all-elements-in-a-pcollection>Example 1: Counting all elements in a PCollection</h3><p>We use <code>Count.Globally()</code> to count <em>all</em> elements in a <code>PCollection</code>, even if there are duplicate elements.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apac [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html b/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
index 8398028..88e7a1d 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/distinct/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Distinct</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Produces a collection containing distinct elements of the input collection.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with two <code>PCollection</code>s of produce.</p><p>We use <code>Distinct</code> to get rid of duplicate elements, which outputs a <code>PCollection</code> of all the unique elements.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><sp [...]
 
 <span class=k>with</span> <span class=n>beam</span><span class=o>.</span><span class=n>Pipeline</span><span class=p>()</span> <span class=k>as</span> <span class=n>pipeline</span><span class=p>:</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
index b8d91b1..6beee20 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupby/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>GroupBy</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of elements and produces a collection grouped,
 by properties of those elements.</p><p>Unlike <code>GroupByKey</code>, the key is dynamically created from the elements themselves.</p><h2 id=grouping-examples>Grouping Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of fruits.</p><p>We use <code>GroupBy</code> to group all fruits by the first letter of their name.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=k>with</span>  [...]
   <span class=n>grouped</span> <span class=o>=</span> <span class=p>(</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
index 2d344f0..0109df0 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupbykey/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>GroupByKey</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific La [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a keyed collection of elements and produces a collection
 where each element consists of a key and all values associated with that key.</p><p>See more information in the <a href=/documentation/programming-guide/#groupbykey>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of produce keyed by season.</p><p>We use <code>GroupByKey</code> to group all the produce for each season.</p><div class=language-py><div class=highlight><pre class=chroma><code class=l [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html b/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
index ca5dd25..01a3542 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/groupintobatches/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>GroupIntoBatches</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Speci [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Batches the input into desired batch size.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of produce by season.</p><p>We use <code>GroupIntoBatches</code> to get fixed-sized batches for every key, which outputs a list of elements for every key.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span [...]
 
 <span class=k>with</span> <span class=n>beam</span><span class=o>.</span><span class=n>Pipeline</span><span class=p>()</span> <span class=k>as</span> <span class=n>pipeline</span><span class=p>:</span>
diff --git a/website/generated-content/documentation/transforms/python/aggregation/latest/index.html b/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
index 19f584f..9e92d24 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/latest/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Latest</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the latest timestamp.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with a timestamp for their harvest date.</p><p>We use <code>Latest</code> to get the element with the latest timestamp from the <code>PCollection</code>.</p><h3 id=example-1-latest-element-globally>Example 1: Latest element globally</h3><p>We use <code>Latest.Globally()</code>  [...]
 <span class=kn>import</span> <span class=nn>time</span>
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/max/index.html b/website/generated-content/documentation/transforms/python/aggregation/max/index.html
index 85bd48e..745fae8 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/max/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/max/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Max</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the maximum value within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the element with the maximum value in different ways.</p><h3 id=example-1-maximum-element-in-a-pcollection>Example 1: Maximum element in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get the maximum element from the <em>entire</em> <code>PCollection</code>.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/mean/index.html b/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
index 408fc9f..ba7b269 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/mean/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Mean</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for computing the arithmetic mean of the elements in a collection,
 or the mean of the values associated with each key in a collection of
 key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/aggregation/min/index.html b/website/generated-content/documentation/transforms/python/aggregation/min/index.html
index 2bc929b..7c6c1f5 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/min/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/min/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Min</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Gets the element with the minimum value within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the element with the minimum value in different ways.</p><h3 id=example-1-minimum-element-in-a-pcollection>Example 1: Minimum element in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get the minimum element from the <em>entire</em> <code>PCollection</code>.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/sample/index.html b/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
index fc3a364..5b5099b 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/sample/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Sample</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for taking samples of the elements in a collection, or
 samples of the values associated with each key in a collection of
 key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/aggregation/sum/index.html b/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
index fcf970b..aa6056a 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/sum/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Sum</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Sums all the elements within each aggregation.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
 Then, we get the sum of all the element values in different ways.</p><h3 id=example-1-sum-of-the-elements-in-a-pcollection>Example 1: Sum of the elements in a PCollection</h3><p>We use <code>Combine.Globally()</code> to get sum of all the element values from the <em>entire</em> <code>PCollection</code>.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</spa [...]
 
diff --git a/website/generated-content/documentation/transforms/python/aggregation/top/index.html b/website/generated-content/documentation/transforms/python/aggregation/top/index.html
index 46d1170..fc4bf01 100644
--- a/website/generated-content/documentation/transforms/python/aggregation/top/index.html
+++ b/website/generated-content/documentation/transforms/python/aggregation/top/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Top</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms for finding the largest (or smallest) set of elements in
 a collection, or the largest (or smallest) set of values associated
 with each key in a collection of key-value pairs.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code>.
diff --git a/website/generated-content/documentation/transforms/python/elementwise/filter/index.html b/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
index 0d0c510..feef531 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/filter/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Filter</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Given a predicate, filter out all elements that don&rsquo;t satisfy that predicate.
 May also be used to filter based on an inequality with a given value based
 on the comparison ordering of the element.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
diff --git a/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html b/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
index c966b30..f1e6d50 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/flatmap/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>FlatMap</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Applies a simple 1-to-many mapping function over each element in the collection.
 The many elements are flattened into the resulting collection.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
 Then, we apply <code>FlatMap</code> in multiple ways to yield zero or more elements per each input element into the resulting <code>PCollection</code>.</p><p><code>FlatMap</code> accepts a function that returns an <code>iterable</code>,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/keys/index.html b/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
index 07784f1..691476f 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/keys/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Keys</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs and returns the key of each element.</p><h2 id=example>Example</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>Keys</code> to extract the keys and discard the values.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 
diff --git a/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html b/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
index 5bbf5a8..b85c818 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/kvswap/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>KvSwap</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs and returns a collection of key-value pairs
 which has each key and value swapped.</p><h2 id=examples>Examples</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>KvSwap</code> to swap the keys and values.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/map/index.html b/website/generated-content/documentation/transforms/python/elementwise/map/index.html
index 468ed1f..969201a 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/map/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/map/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Map</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languages [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Applies a simple 1-to-1 mapping function over each element in the collection.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of produce with their icon, name, and duration.
 Then, we apply <code>Map</code> in multiple ways to transform every element in the <code>PCollection</code>.</p><p><code>Map</code> accepts a function that returns a single element for every input element in the <code>PCollection</code>.</p><h3 id=example-1-map-with-a-predefined-function>Example 1: Map with a predefined function</h3><p>We use the function <code>str.strip</code> which takes a single <code>str</code> element and outputs a <code>str</code>.
 It strips the input element&rsquo;s whitespaces, including newlines and tabs.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
diff --git a/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html b/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
index ff0e694..702b4a1 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/pardo/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ParDo</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>A transform for generic parallel processing.
 A <code>ParDo</code> transform considers each element in the input <code>PCollection</code>,
 performs some processing function (your user code) on that element,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/partition/index.html b/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
index ad299ac..97aa817 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/partition/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Partition</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lan [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Separates elements in a collection into multiple output
 collections. The partitioning function contains the logic that determines how
 to separate the elements of the input collection into each resulting
diff --git a/website/generated-content/documentation/transforms/python/elementwise/regex/index.html b/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
index 1c1fe9e..063d8f9 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/regex/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Regex</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Filters input string elements based on a regex. May also transform them based on the matching groups.</p><h2 id=examples>Examples</h2><p>In the following examples, we create a pipeline with a <code>PCollection</code> of text strings.
 Then, we use the <code>Regex</code> transform to search, replace, and split through the text elements using
 <a href=https://docs.python.org/3/library/re.html>regular expressions</a>.</p><p>You can use tools to help you create and test your regular expressions, such as
diff --git a/website/generated-content/documentation/transforms/python/elementwise/reify/index.html b/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
index 6f0e4c3..6e80868 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/reify/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Reify</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Languag [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html b/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
index 09f3ef5..c258462 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/tostring/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>ToString</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Transforms every element in an input collection to a string.</p><h2 id=examples>Examples</h2><p>Any non-string element can be converted to a string using standard Python functions and methods.
 Many I/O transforms, such as
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.io.textio.html#apache_beam.io.textio.WriteToText><code>textio.WriteToText</code></a>,
diff --git a/website/generated-content/documentation/transforms/python/elementwise/values/index.html b/website/generated-content/documentation/transforms/python/elementwise/values/index.html
index 99b50b5..94fe755 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/values/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/values/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Values</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></td></table><p><br><br><br></p><p>Takes a collection of key-value pairs, and returns the value of each element.</p><h2 id=example>Example</h2><p>In the following example, we create a pipeline with a <code>PCollection</code> of key-value pairs.
 Then, we apply <code>Values</code> to extract the values and discard the keys.</p><div class=language-py><div class=highlight><pre class=chroma><code class=language-py data-lang=py><span class=kn>import</span> <span class=nn>apache_beam</span> <span class=kn>as</span> <span class=nn>beam</span>
 
diff --git a/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html b/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
index b257466..a77c2b8 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/withkeys/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>WithKeys</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lang [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html b/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
index e3f2534..b600732 100644
--- a/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
+++ b/website/generated-content/documentation/transforms/python/elementwise/withtimestamps/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>WithTimestamps</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specifi [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 When windowing and late data play an important role in streaming pipelines, timestamps are especially useful.</p><h3 id=example-1-timestamp-by-event-time>Example 1: Timestamp by event time</h3><p>The elements themselves often already contain a timestamp field.
 <code>beam.window.TimestampedValue</code> takes a value and a
 <a href=https://en.wikipedia.org/wiki/Unix_time>Unix timestamp</a>
diff --git a/website/generated-content/documentation/transforms/python/other/create/index.html b/website/generated-content/documentation/transforms/python/other/create/index.html
index 15754e0..1791562 100644
--- a/website/generated-content/documentation/transforms/python/other/create/index.html
+++ b/website/generated-content/documentation/transforms/python/other/create/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Create</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langua [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></table><br><br><p>Creates a collection containing a specified set of elements. This is
 useful for testing, as well as creating an initial input to process
 in parallel. For example, a single element to execute a one-time
diff --git a/website/generated-content/documentation/transforms/python/other/flatten/index.html b/website/generated-content/documentation/transforms/python/other/flatten/index.html
index 7b9df73..3c4adfc 100644
--- a/website/generated-content/documentation/transforms/python/other/flatten/index.html
+++ b/website/generated-content/documentation/transforms/python/other/flatten/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Flatten</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></table><br><br><p>Merges multiple <code>PCollection</code> objects into a single logical
 <code>PCollection</code>. A transform for <code>PCollection</code> objects
 that store the same data type.</p><p>See more information in the <a href=/documentation/programming-guide/#flatten>Beam Programming Guide</a>.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7391>BEAM-7391</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/python/elementwise/flatmap>FlatMap</a> applies a simple 1-to-many mapping
diff --git a/website/generated-content/documentation/transforms/python/other/passert/index.html b/website/generated-content/documentation/transforms/python/other/passert/index.html
index f14ee8d..c30e584 100644
--- a/website/generated-content/documentation/transforms/python/other/passert/index.html
+++ b/website/generated-content/documentation/transforms/python/other/passert/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>PAssert</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Langu [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/other/reshuffle/index.html b/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
index 68ad07b..c1388e8 100644
--- a/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
+++ b/website/generated-content/documentation/transforms/python/other/reshuffle/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Reshuffle</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Lan [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></table><br><br><p>Adds a temporary random key to each element in a collection, reshuffles
 these keys, and removes the temporary key. This redistributes the
 elements between workers and returns a collection equivalent to its
diff --git a/website/generated-content/documentation/transforms/python/other/view/index.html b/website/generated-content/documentation/transforms/python/other/view/index.html
index 34e18fe..89c3e37 100644
--- a/website/generated-content/documentation/transforms/python/other/view/index.html
+++ b/website/generated-content/documentation/transforms/python/other/view/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>View</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific Language [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 <a href=http://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
 | <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation. All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/documentation/transforms/python/other/windowinto/index.html b/website/generated-content/documentation/transforms/python/other/windowinto/index.html
index 5f1388e..e652e0e 100644
--- a/website/generated-content/documentation/transforms/python/other/windowinto/index.html
+++ b/website/generated-content/documentation/transforms/python/other/windowinto/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>WindowInto</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) and Domain Specific La [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 Pydoc</a></table><br><br><p>Logically divides up or groups the elements of a collection into finite
 windows according to a function.</p><h2 id=examples>Examples</h2><p>See <a href=https://issues.apache.org/jira/browse/BEAM-7391>BEAM-7391</a> for updates.</p><h2 id=related-transforms>Related transforms</h2><ul><li><a href=/documentation/transforms/python/aggregation/groupbykey>GroupByKey</a>
 produces a collection where each element consists of a key and all values associated
diff --git a/website/generated-content/documentation/transforms/python/overview/index.html b/website/generated-content/documentation/transforms/python/overview/index.html
index bf06643..cf59282 100644
--- a/website/generated-content/documentation/transforms/python/overview/index.html
+++ b/website/generated-content/documentation/transforms/python/overview/index.html
@@ -1,7 +1,7 @@
 <!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Python transform catalog overview</title><meta name=description content="Apache Beam is an open source, unified model and set of language-specific SDKs for defining and executing data processing workflows, and also data ingestion and integration flows, supporting Enterprise Integration Patterns (EIPs) [...]
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span><span class=icon-bar></span><span class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><ul class="nav navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a href=/documentation/>Documentation</a></li><li><a href=/documentation/sdks/java/>Languages</a></li><li><a href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a href=/roadmap/>Roadmap</a></li>< [...]
 outputs all resulting elements.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/keys>Keys</a></td><td>Extracts the key from each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/kvswap>KvSwap</a></td><td>Swaps the key and value of each element in a collection of key-value pairs.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/map>Map</a></td><td>Applies a function to every element [...]
 in the input collection.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/partition>Partition</a></td><td>Routes each input element to a specific output collection based on some partition
 function.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/regex>Regex</a></td><td>Filters input string elements based on a regex. May also transform them based on the matching groups.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/reify>Reify</a></td><td>Transforms for converting between explicit and implicit form of various Beam values.</td></tr><tr><td><a href=/documentation/transforms/python/elementwise/tostring>ToString</a></td><td>Transfo [...]
diff --git a/website/generated-content/images/sdf_high_level_overview.svg b/website/generated-content/images/sdf_high_level_overview.svg
new file mode 100644
index 0000000..9ad596f
--- /dev/null
+++ b/website/generated-content/images/sdf_high_level_overview.svg
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   height="241.89746"
+   width="776.61823"
+   sodipodi:docname="SplittableDoFn 2020 Blog.svg"
+   id="svg121"
+   stroke-miterlimit="10"
+   stroke-linecap="square"
+   stroke="none"
+   fill="none"
+   viewBox="0 0 776.61823 241.89746"
+   version="1.1">
+  <metadata
+     id="metadata127">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs125" />
+  <sodipodi:namedview
+     inkscape:current-layer="svg121"
+     inkscape:window-maximized="1"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:cy="480"
+     inkscape:cx="513.17521"
+     inkscape:zoom="1.0210937"
+     showgrid="false"
+     id="namedview123"
+     inkscape:window-height="1246"
+     inkscape:window-width="2560"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0"
+     guidetolerance="10"
+     gridtolerance="10"
+     objecttolerance="10"
+     borderopacity="1"
+     bordercolor="#666666"
+     pagecolor="#ffffff" />
+  <clipPath
+     id="p.0">
+    <path
+       id="path2"
+       clip-rule="nonzero"
+       d="M 0,0 H 1280 V 960 H 0 Z" />
+  </clipPath>
+  <g
+     id="g119"
+     clip-path="url(#p.0)">
+    <path
+       id="path5"
+       fill-rule="evenodd"
+       d="M 0,0 H 1280 V 960 H 0 Z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path7"
+       fill-rule="evenodd"
+       d="m 46.39895,43.145138 v 0 C 46.39895,21.566464 63.891923,4.07349 85.470598,4.07349 H 696.9336 c 10.36242,0 20.30047,4.116465 27.62781,11.443821 7.32739,7.327356 11.44384,17.26538 11.44384,27.627827 V 199.42704 c 0,21.57867 -17.49298,39.07164 -39.07165,39.07164 H 85.470599 c -21.578674,0 -39.071648,-17.49297 -39.071648,-39.07164 z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path9"
+       fill-rule="evenodd"
+       d="m 46.39895,43.145138 v 0 C 46.39895,21.566464 63.891923,4.07349 85.470598,4.07349 H 696.9336 c 10.36242,0 20.30047,4.116465 27.62781,11.443821 7.32739,7.327356 11.44384,17.26538 11.44384,27.627827 V 199.42704 c 0,21.57867 -17.49298,39.07164 -39.07165,39.07164 H 85.470599 c -21.578674,0 -39.071648,-17.49297 -39.071648,-39.07164 z"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#b7b7b7" />
+    <path
+       id="path11"
+       fill-rule="evenodd"
+       d="m 72,87.2021 h 112 v 78.99213 H 72 Z"
+       fill="#ff9900" />
+    <path
+       id="path13"
+       fill-rule="nonzero"
+       d="m 90.46094,109.10504 v 4.45313 h -1.5 v -11.375 h 4.1875 q 1.875,0 2.921875,0.95312 1.0625,0.95313 1.0625,2.51563 0,1.65625 -1.03125,2.5625 -1.03125,0.89062 -2.96875,0.89062 z m 0,-1.23437 h 2.6875 q 1.203125,0 1.84375,-0.5625 0.640625,-0.5625 0.640625,-1.64063 0,-1.01562 -0.640625,-1.625 -0.640625,-0.60937 -1.75,-0.625 h -2.78125 z m 13.49219,5.6875 q -0.125,-0.25 -0.20313,-0.89063 -1,1.04688 -2.40625,1.04688 -1.25,0 -2.046873,-0.70313 -0.796875,-0.71875 -0.796875,-1.79687 0,- [...]
+       fill="#ffffff" />
+    <path
+       id="path15"
+       fill-rule="nonzero"
+       d="m 100.48047,130.55817 1.625,-6.45313 h 1.45312 l -2.46875,8.45313 h -1.17187 l -2.046875,-6.40625 -2,6.40625 H 94.69922 l -2.453125,-8.45313 h 1.4375 l 1.65625,6.32813 1.96875,-6.32813 h 1.171875 z m 6.11719,2 h -1.45313 v -8.45313 h 1.45313 z m -1.5625,-10.70313 q 0,-0.34375 0.20312,-0.57812 0.21875,-0.25 0.64063,-0.25 0.42187,0 0.64062,0.25 0.21875,0.23437 0.21875,0.59375 0,0.34375 -0.21875,0.57812 -0.21875,0.23438 -0.64062,0.23438 -0.42188,0 -0.64063,-0.23438 -0.20312,-0.234 [...]
+       fill="#ffffff" />
+    <path
+       id="path17"
+       fill-rule="nonzero"
+       d="m 90.30469,144.40192 q -0.328125,-0.0625 -0.71875,-0.0625 -1.421875,0 -1.921875,1.21875 v 6 H 86.21094 v -8.45313 h 1.40625 l 0.03125,0.96875 q 0.703125,-1.125 2.015625,-1.125 0.421875,0 0.640625,0.10938 z m 4.6875,7.3125 q -1.71875,0 -2.796875,-1.125 -1.078125,-1.14063 -1.078125,-3.03125 v -0.26563 q 0,-1.25 0.46875,-2.23437 0.484375,-1 1.34375,-1.54688 0.875,-0.5625 1.875,-0.5625 1.65625,0 2.5625,1.09375 0.921875,1.07813 0.921875,3.09375 v 0.60938 H 92.55469 q 0.03125,1.25 0. [...]
+       fill="#ffffff" />
+    <path
+       id="path19"
+       fill-rule="evenodd"
+       d="M 0,126.53281 H 72"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path21"
+       fill-rule="evenodd"
+       d="M 0,126.53281 H 65.14583"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#4a86e8" />
+    <path
+       id="path23"
+       fill-rule="evenodd"
+       d="m 65.14583,126.53281 -2.249168,2.24918 6.179535,-2.24918 -6.179535,-2.24917 z"
+       stroke-linecap="butt"
+       stroke-width="2"
+       stroke="#4a86e8"
+       fill="#4a86e8" />
+    <path
+       id="path25"
+       fill-rule="evenodd"
+       d="m 16,94.2021 h 40 v 63.33858 H 16 Z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path27"
+       fill-rule="nonzero"
+       d="M 33.71875,118.5621 H 32.203125 L 31.5,116.32773 h -4.25 l -0.71875,2.23437 H 25.078125 L 28.46875,108.34335 H 30.375 Z m -2.625,-3.46875 -1.71875,-5.46875 -1.734375,5.46875 z"
+       fill="#000000" />
+    <path
+       id="path29"
+       fill-rule="evenodd"
+       d="m 184,126.69817 h 96"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path31"
+       fill-rule="evenodd"
+       d="m 184,126.69817 h 89.14584"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#4a86e8" />
+    <path
+       id="path33"
+       fill-rule="evenodd"
+       d="m 273.1458,126.69817 -2.24915,2.24916 6.17954,-2.24916 -6.17954,-2.24917 z"
+       stroke-linecap="butt"
+       stroke-width="2"
+       stroke="#4a86e8"
+       fill="#4a86e8" />
+    <path
+       id="path35"
+       fill-rule="evenodd"
+       d="m 184,94.2021 h 104 v 31.33858 H 184 Z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path37"
+       fill-rule="nonzero"
+       d="m 201.1875,118.5621 h -1.75 l -3.82813,-5.01562 v 5.01562 h -1.39062 v -10.21875 h 1.39062 v 4.75 l 3.75,-4.75 H 201 l -4.03125,4.85938 z m 9.375,-10.21875 -3.46875,10.21875 h -1.875 l -3.39063,-10.21875 h 1.57813 l 2.20312,6.89063 0.625,2.01562 0.64063,-2.01562 2.20312,-6.89063 z m 7.20312,9.48438 -0.84375,0.85937 -5.25,-4.39062 5.25,-4.375 0.84375,0.85937 -4.25,3.5 z m 10.34375,0.73437 h -1.51562 l -0.70313,-2.23437 h -4.25 l -0.71875,2.23437 h -1.45312 l 3.39062,-10.21875 h  [...]
+       fill="#000000" />
+    <path
+       id="path39"
+       fill-rule="evenodd"
+       d="m 280,87.2021 h 176 v 78.99213 H 280 Z"
+       fill="#ff9900" />
+    <path
+       id="path41"
+       fill-rule="nonzero"
+       d="m 330.8711,108.48004 q -1.92187,-0.54687 -2.8125,-1.35937 -0.875,-0.8125 -0.875,-2 0,-1.34375 1.07813,-2.21875 1.07812,-0.875 2.79687,-0.875 1.17188,0 2.07813,0.45312 0.92187,0.45313 1.42187,1.25 0.51563,0.79688 0.51563,1.73438 h -1.51563 q 0,-1.03125 -0.65625,-1.60938 -0.65625,-0.59375 -1.84375,-0.59375 -1.10937,0 -1.73437,0.48438 -0.625,0.48437 -0.625,1.35937 0,0.6875 0.59375,1.17188 0.59375,0.48437 2,0.89062 1.42187,0.39063 2.21875,0.875 0.8125,0.46875 1.1875,1.10938 0.39062 [...]
+       fill="#ffffff" />
+    <path
+       id="path43"
+       fill-rule="nonzero"
+       d="m 326.09766,122.05817 v 2.04688 h 1.57813 v 1.10937 h -1.57813 v 5.25 q 0,0.5 0.20313,0.76563 0.21875,0.25 0.71875,0.25 0.25,0 0.6875,-0.0937 v 1.17187 q -0.5625,0.15625 -1.10938,0.15625 -0.96875,0 -1.46875,-0.57812 -0.48437,-0.59375 -0.48437,-1.67188 v -5.25 h -1.53125 v -1.10937 h 1.53125 v -2.04688 z m 2.72656,6.1875 q 0,-1.23437 0.48438,-2.21875 0.48437,-1 1.35937,-1.53125 0.875,-0.54687 1.98438,-0.54687 1.73437,0 2.79687,1.20312 1.0625,1.1875 1.0625,3.17188 v 0.0937 q 0,1. [...]
+       fill="#ffffff" />
+    <path
+       id="path45"
+       fill-rule="nonzero"
+       d="m 320.51562,147.41754 q 0,1.9375 -0.89062,3.125 -0.875,1.17187 -2.375,1.17187 -1.54688,0 -2.42188,-0.98437 v 4.07812 H 313.375 v -11.70312 h 1.32812 l 0.0625,0.9375 q 0.89063,-1.09375 2.45313,-1.09375 1.53125,0 2.40625,1.15625 0.89062,1.14062 0.89062,3.1875 z m -1.4375,-0.15625 q 0,-1.4375 -0.60937,-2.26563 -0.60938,-0.82812 -1.67188,-0.82812 -1.3125,0 -1.96875,1.17187 v 4.03125 q 0.64063,1.15625 1.98438,1.15625 1.03125,0 1.64062,-0.8125 0.625,-0.82812 0.625,-2.45312 z m 7.3671 [...]
+       fill="#ffffff" />
+    <path
+       id="path47"
+       fill-rule="evenodd"
+       d="M 456,126.53281 H 568"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path49"
+       fill-rule="evenodd"
+       d="M 456,126.53281 H 561.14581"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#4a86e8" />
+    <path
+       id="path51"
+       fill-rule="evenodd"
+       d="m 561.1458,126.53281 -2.24915,2.24918 6.17951,-2.24918 -6.17951,-2.24917 z"
+       stroke-linecap="butt"
+       stroke-width="2"
+       stroke="#4a86e8"
+       fill="#4a86e8" />
+    <path
+       id="path53"
+       fill-rule="evenodd"
+       d="M 460,55.217846 H 564 V 125.86352 H 460 Z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path55"
+       fill-rule="nonzero"
+       d="m 477.1875,79.57785 h -1.75 l -3.82813,-5.015625 v 5.015625 h -1.39062 V 69.3591 h 1.39062 v 4.75 l 3.75,-4.75 H 477 l -4.03125,4.859375 z m 9.375,-10.21875 -3.46875,10.21875 h -1.875 L 477.82812,69.3591 h 1.57813 l 2.20312,6.890625 0.625,2.015625 0.64063,-2.015625 2.20312,-6.890625 z m 7.20312,9.484375 -0.84375,0.859375 -5.25,-4.390625 5.25,-4.375 0.84375,0.859375 -4.25,3.5 z m 10.34375,0.734375 h -1.51562 l -0.70313,-2.234375 h -4.25 l -0.71875,2.234375 h -1.45312 l 3.39062,- [...]
+       fill="#000000" />
+    <path
+       id="path57"
+       fill-rule="nonzero"
+       d="m 535.7656,85.57785 h -4.26563 V 84.7341 h 1.75 v -4.96875 l -1.64062,0.890625 -0.32813,-0.765625 2.15625,-1.140625 h 0.8125 V 84.7341 h 1.51563 z"
+       fill="#000000" />
+    <path
+       id="path59"
+       fill-rule="nonzero"
+       d="m 538.07764,71.7966 0.84375,-0.859375 5.25,4.375 -5.25,4.390625 -0.84375,-0.859375 4.25,-3.515625 z"
+       fill="#000000" />
+    <path
+       id="path61"
+       fill-rule="nonzero"
+       d="m 473.34375,96.1091 q 0.26562,0 0.5,0.109375 0.23437,0.09375 0.40625,0.28125 0.1875,0.171875 0.28125,0.421875 0.10937,0.234375 0.10937,0.5 0,0.265625 -0.10937,0.5 -0.0937,0.234375 -0.28125,0.421875 -0.17188,0.171875 -0.40625,0.265625 -0.23438,0.109375 -0.5,0.109375 -0.28125,0 -0.51563,-0.109375 -0.23437,-0.09375 -0.40625,-0.265625 -0.17187,-0.1875 -0.28125,-0.421875 -0.0937,-0.234375 -0.0937,-0.5 0,-0.265625 0.0937,-0.5 0.10938,-0.25 0.28125,-0.421875 0.17188,-0.1875 0.40625,-0 [...]
+       fill="#000000" />
+    <path
+       id="path63"
+       fill-rule="nonzero"
+       d="m 477.1875,117.57785 h -1.75 l -3.82813,-5.01563 v 5.01563 h -1.39062 V 107.3591 h 1.39062 v 4.75 l 3.75,-4.75 H 477 l -4.03125,4.85937 z m 9.375,-10.21875 -3.46875,10.21875 h -1.875 l -3.39063,-10.21875 h 1.57813 l 2.20312,6.89062 0.625,2.01563 0.64063,-2.01563 2.20312,-6.89062 z m 7.20312,9.48437 -0.84375,0.85938 -5.25,-4.39063 5.25,-4.375 0.84375,0.85938 -4.25,3.5 z m 10.34375,0.73438 h -1.51562 l -0.70313,-2.23438 h -4.25 l -0.71875,2.23438 h -1.45312 l 3.39062,-10.21875 h  [...]
+       fill="#000000" />
+    <path
+       id="path65"
+       fill-rule="nonzero"
+       d="m 535.8281,123.57785 h -1.21875 l -1.96875,-4.23438 -0.57813,-1.375 v 3.4375 2.17188 h -0.85937 v -6.79688 h 1.1875 l 1.89062,4.01563 0.67188,1.54687 v -3.64062 -1.92188 h 0.875 z"
+       fill="#000000" />
+    <path
+       id="path67"
+       fill-rule="nonzero"
+       d="m 538.07764,109.7966 0.84375,-0.85938 5.25,4.375 -5.25,4.39063 -0.84375,-0.85938 4.25,-3.51562 z"
+       fill="#000000" />
+    <path
+       id="path69"
+       fill-rule="evenodd"
+       d="m 568,87.2021 h 152 v 78.99213 H 568 Z"
+       fill="#ff9900" />
+    <path
+       id="path71"
+       fill-rule="nonzero"
+       d="m 580.03906,118.60504 v 4.45313 h -1.5 v -11.375 h 4.1875 q 1.875,0 2.92187,0.95312 1.0625,0.95313 1.0625,2.51563 0,1.65625 -1.03125,2.5625 -1.03125,0.89062 -2.96875,0.89062 z m 0,-1.23437 h 2.6875 q 1.20312,0 1.84375,-0.5625 0.64062,-0.5625 0.64062,-1.64063 0,-1.01562 -0.64062,-1.625 -0.64063,-0.60937 -1.75,-0.625 h -2.78125 z m 12.45312,-1.46875 q -0.32812,-0.0625 -0.71875,-0.0625 -1.42187,0 -1.92187,1.21875 v 6 h -1.45313 v -8.45313 h 1.40625 l 0.0312,0.96875 q 0.70313,-1.12 [...]
+       fill="#ffffff" />
+    <path
+       id="path73"
+       fill-rule="nonzero"
+       d="m 626.78845,142.05817 q -0.125,-0.25 -0.20313,-0.89063 -1,1.04688 -2.40625,1.04688 -1.25,0 -2.04687,-0.70313 -0.79688,-0.71875 -0.79688,-1.79687 0,-1.32813 1,-2.04688 1,-0.73437 2.82813,-0.73437 h 1.40625 v -0.67188 q 0,-0.75 -0.45313,-1.20312 -0.45312,-0.45313 -1.34375,-0.45313 -0.76562,0 -1.29687,0.39063 -0.51563,0.39062 -0.51563,0.95312 h -1.45312 q 0,-0.64062 0.4375,-1.21875 0.45312,-0.59375 1.21875,-0.9375 0.78125,-0.34375 1.70312,-0.34375 1.45313,0 2.28125,0.73438 0.82813 [...]
+       fill="#ffffff" />
+    <path
+       id="path75"
+       fill-rule="nonzero"
+       d="m 664.1869,143.38629 1.82813,-2.90625 h 1.17187 l -2.39062,3.76562 2.45312,3.8125 h -1.1875 l -1.875,-2.95312 -1.85937,2.95312 h -1.1875 l 2.45312,-3.8125 -2.39062,-3.76562 h 1.17187 z"
+       fill="#ffffff" />
+    <path
+       id="path77"
+       fill-rule="evenodd"
+       d="m 736,94.2021 h 32 v 31.33858 h -32 z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path79"
+       fill-rule="nonzero"
+       d="m 752.9375,115.4996 q 0,0.73438 -0.28125,1.3125 -0.28125,0.5625 -0.8125,0.95313 -0.53125,0.39062 -1.28125,0.59375 -0.73438,0.20312 -1.65625,0.20312 h -2.67188 v -10.21875 h 2.92188 q 3.42187,0 3.42187,2.48438 0,0.82812 -0.40625,1.42187 -0.39062,0.59375 -1.28125,0.89063 0.42188,0.0781 0.78125,0.26562 0.375,0.1875 0.65625,0.48438 0.28125,0.29687 0.4375,0.70312 0.17188,0.40625 0.17188,0.90625 z m -1.8125,-4.48437 q 0,-0.3125 -0.0937,-0.57813 -0.0937,-0.28125 -0.32813,-0.48437 -0.2 [...]
+       fill="#000000" />
+    <path
+       id="path81"
+       fill-rule="evenodd"
+       d="m 720,126.69817 56,-0.31497"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path83"
+       fill-rule="evenodd"
+       d="m 720,126.69817 49.14593,-0.27642"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#4a86e8" />
+    <path
+       id="path85"
+       fill-rule="evenodd"
+       d="m 769.14594,126.42175 -2.23651,2.26178 6.16681,-2.28389 -6.19208,-2.21437 z"
+       stroke-linecap="butt"
+       stroke-width="2"
+       stroke="#4a86e8"
+       fill="#4a86e8" />
+    <path
+       id="path87"
+       fill-rule="evenodd"
+       d="M 670.224,165.70341 V 190.2021 H 528 v -63"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path89"
+       fill-rule="evenodd"
+       d="M 670.224,165.70341 V 190.2021 H 528 v -56.14583"
+       stroke-linecap="butt"
+       stroke-linejoin="round"
+       stroke-width="2"
+       stroke="#4a86e8" />
+    <path
+       id="path91"
+       fill-rule="evenodd"
+       d="m 528,134.05627 2.24915,2.24916 L 528,130.1259 l -2.24915,6.17953 z"
+       stroke-linecap="butt"
+       stroke-width="2"
+       stroke="#4a86e8"
+       fill="#4a86e8" />
+    <path
+       id="path93"
+       fill-rule="evenodd"
+       d="m 548.3436,182.09636 v 0 c -0.99908,-2.58107 2.28101,-5.13618 8.4483,-6.5811 6.1673,-1.44492 14.14026,-1.52623 20.53565,-0.20944 v 0 c 2.26544,-1.50074 6.4118,-2.5369 11.185,-2.79506 4.77319,-0.25817 9.61248,0.29201 13.05413,1.48408 v 0 c 1.92987,-1.36067 5.71918,-2.27487 10.02332,-2.41819 4.30414,-0.14331 8.51392,0.50453 11.1355,1.71365 v 0 c 3.48657,-1.44231 9.03381,-2.04959 14.24139,-1.55905 5.20752,0.49054 9.14014,1.99077 10.09607,3.85154 v 0 c 4.27161,0.40963 7.82983,1.450 [...]
+       fill="#ff9900" />
+    <path
+       id="path95"
+       fill-rule="evenodd"
+       d="m 543.22095,190.37572 v 0 c 2.19464,0.4541 4.72998,0.6601 7.26556,0.59032 m 3.32111,6.75872 c 1.09039,-0.0449 2.15918,-0.13984 3.17883,-0.28253 m 27.43964,3.09269 c -0.76691,-0.40433 -1.409,-0.83638 -1.91535,-1.28881 m 36.55225,-0.52661 v 0 c 0.39563,-0.46057 0.65204,-0.93458 0.76477,-1.41415 m 24.6134,-3.48175 c 0.0513,-2.24566 -3.57678,-4.30179 -9.32586,-5.28525 m 21.98626,-5.63465 c -0.93103,0.7647 -2.35235,1.44303 -4.15258,1.98185 m -5.88623,-9.30275 v 0 c 0.15863,0.3088 0. [...]
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path97"
+       fill-rule="nonzero"
+       d="m 572.07404,181.51132 q -0.23438,1.32812 -1.1875,2.10937 -0.95313,0.76563 -2.28125,0.73438 -0.79688,-0.0312 -1.39063,-0.39063 -0.59375,-0.375 -0.92187,-1.07812 -0.32813,-0.70313 -0.35938,-1.54688 -0.0156,-0.48437 0.0469,-0.9375 l 0.0937,-0.70312 q 0.28125,-1.92188 1.34375,-3.03125 1.07812,-1.10938 2.625,-1.09375 1.20312,0.0312 1.90625,0.78125 0.70312,0.75 0.73437,2.09375 h -1.09375 q -0.0781,-1.79688 -1.40625,-1.9375 l -0.1875,-0.0156 q -1.10937,-0.0312 -1.85937,0.82813 -0.7343 [...]
+       fill="#ffffff" />
+    <path
+       id="path99"
+       fill-rule="nonzero"
+       d="m 579.96466,198.96445 h -0.95313 l 5.0625,-9.26563 h 0.95313 z m 11.61133,-2.45313 q 0.0937,-0.65625 -0.71875,-0.92187 l -1.10938,-0.32813 q -1.39062,-0.48437 -1.34375,-1.59375 0.0469,-0.82812 0.76563,-1.35937 0.71875,-0.54688 1.70312,-0.53125 0.95313,0 1.54688,0.5625 0.60937,0.54687 0.59375,1.42187 l -1.0625,-0.0156 q 0.0156,-0.46875 -0.29688,-0.76563 -0.3125,-0.29687 -0.82812,-0.3125 -0.54688,-0.0156 -0.9375,0.26563 -0.375,0.26562 -0.4375,0.70312 -0.0781,0.54688 0.67187,0.796 [...]
+       fill="#ffffff" />
+    <path
+       id="path101"
+       fill-rule="evenodd"
+       d="m 547.1102,195.32545 h 104 v 31.33859 h -104 z"
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path103"
+       fill-rule="nonzero"
+       d="m 564.2977,219.68546 h -1.75 l -3.82813,-5.01563 v 5.01563 h -1.39062 v -10.21875 h 1.39062 v 4.75 l 3.75,-4.75 h 1.64063 l -4.03125,4.85937 z m 9.375,-10.21875 -3.46875,10.21875 h -1.875 l -3.39063,-10.21875 h 1.57813 l 2.20312,6.89062 0.625,2.01563 0.64063,-2.01563 2.20312,-6.89062 z m 7.20312,9.48437 -0.84375,0.85938 -5.25,-4.39063 5.25,-4.375 0.84375,0.85938 -4.25,3.5 z m 10.34375,0.73438 h -1.51562 l -0.70313,-2.23438 h -4.25 l -0.71875,2.23438 h -1.45312 l 3.39062,-10.218 [...]
+       fill="#000000" />
+    <path
+       id="path105"
+       fill-rule="nonzero"
+       d="m 623.4227,225.68546 h -1.17188 l -1.65625,-2.75 -1.65625,2.75 h -1.15625 l 2.26563,-3.46875 -2.07813,-3.32813 h 1.09375 l 1.54688,2.5625 1.57812,-2.5625 h 1.0625 l -2.09375,3.28125 z m 3.65576,-7.35938 -0.15625,2.45313 h -0.89062 l -0.14063,-2.45313 z"
+       fill="#000000" />
+    <path
+       id="path107"
+       fill-rule="nonzero"
+       d="m 631.0467,211.9042 0.84375,-0.85938 5.25,4.375 -5.25,4.39063 -0.84375,-0.85938 4.25,-3.51562 z"
+       fill="#000000" />
+    <path
+       id="path109"
+       fill-rule="evenodd"
+       d="m 433.0334,25.323118 v 0 c -1.55396,-3.918263 3.548,-7.797104 13.14096,-9.99059 9.59299,-2.193486 21.99454,-2.316926 31.94223,-0.317941 v 0 c 3.5238,-2.27824 9.97333,-3.851207 17.3978,-4.24311 7.42444,-0.391903 14.95178,0.443288 20.30508,2.252947 v 0 c 3.00183,-2.065599 8.89594,-3.4534183 15.59076,-3.6709857 6.69489,-0.2175684 13.24304,0.7659057 17.3208,2.6014337 v 0 c 5.42322,-2.1895293 14.0517,-3.1114129 22.1518,-2.3667449 8.10015,0.7446669 14.2171,3.0221369 15.70397,5.846933 [...]
+       fill="#ff9900" />
+    <path
+       id="path111"
+       fill-rule="evenodd"
+       d="m 425.06528,37.891766 v 0 c 3.4137,0.689373 7.35727,1.002087 11.3013,0.89616 m 5.1658,10.260231 c 1.69608,-0.0681 3.35855,-0.212307 4.94455,-0.428902 m 42.68109,4.694912 c -1.1929,-0.613792 -2.19168,-1.269683 -2.97928,-1.956493 m 56.85532,-0.799435 v 0 c 0.61548,-0.699173 1.01422,-1.418773 1.18964,-2.146797 m 38.28503,-5.285549 c 0.0798,-3.40905 -5.56354,-6.530414 -14.50598,-8.023369 m 34.19867,-8.553799 c -1.44818,1.160845 -3.65906,2.190617 -6.45917,3.008572 m -9.15582,-14.122 [...]
+       fill-opacity="0"
+       fill="#000000" />
+    <path
+       id="path113"
+       fill-rule="nonzero"
+       d="m 456.44363,19.39394 h -1.96875 l -0.59375,3.453125 h -1.10938 l 1.48438,-8.531251 h 2.5625 q 1.34375,0.01563 2.04687,0.6875 0.70313,0.671875 0.59375,1.828126 -0.0625,0.8125 -0.59375,1.421875 -0.51562,0.609375 -1.375,0.90625 l 1.32813,3.609375 -0.0156,0.07813 h -1.17187 z m -1.8125,-0.921875 1.625,0.01563 q 0.84375,0 1.42187,-0.453125 0.57813,-0.453125 0.67188,-1.203125 0.0937,-0.734375 -0.29688,-1.140626 -0.375,-0.421875 -1.15625,-0.4375 l -1.70312,-0.01563 z m 9.22461,3.75 q  [...]
+       fill="#ffffff" />
+    <path
+       id="path115"
+       fill-rule="nonzero"
+       d="m 469.0911,36.847065 q -0.0469,-0.171875 -0.0469,-0.328125 l 0.0156,-0.34375 q -0.85938,0.8125 -1.84375,0.796875 -0.84375,-0.01563 -1.375,-0.53125 -0.51563,-0.53125 -0.46875,-1.3125 0.0625,-1 0.875,-1.5625 0.82812,-0.5625 2.17187,-0.5625 h 1.10938 l 0.0781,-0.5 q 0.0469,-0.578127 -0.23437,-0.906252 -0.26563,-0.328125 -0.82813,-0.34375 -0.54687,-0.01563 -0.96875,0.265625 -0.40625,0.28125 -0.5,0.734377 l -1.07812,0.01563 q 0.0625,-0.562502 0.4375,-0.984377 0.375,-0.4375 0.96875,- [...]
+       fill="#ffffff" />
+    <path
+       id="path117"
+       fill-rule="nonzero"
+       d="m 490.21317,49.347065 2.01562,-4.84375 h 1.09375 l -2.89062,6.34375 h -0.85938 l -0.65625,-4.796875 -2.28125,4.796875 h -0.85937 l -0.6875,-6.34375 h 1.01562 l 0.39063,4.71875 2.25,-4.71875 h 0.84375 z m 6.63477,-4.953125 q 0.79687,0 1.35937,0.421875 0.57813,0.421875 0.84375,1.171875 0.28125,0.734375 0.1875,1.625 l -0.0156,0.125 q -0.10938,0.921875 -0.54688,1.671875 -0.4375,0.75 -1.14062,1.171875 -0.6875,0.40625 -1.53125,0.390625 -0.78125,-0.01563 -1.35938,-0.4375 -0.5625,-0.42 [...]
+       fill="#ffffff" />
+  </g>
+</svg>
diff --git a/website/generated-content/sitemap.xml b/website/generated-content/sitemap.xml
index 9ed1d40..9a3febc 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.24.0/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/blog/p [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.24.0/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2020-09-18T12:38:38-07:00</lastmod></url><url><loc>/blog/p [...]
\ No newline at end of file