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 2024/02/08 23:37:10 UTC

(beam) branch asf-site updated: Publishing website 2024/02/08 23:37:02 at commit e9202ab

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

github-bot 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 55f0bc38973 Publishing website 2024/02/08 23:37:02 at commit e9202ab
55f0bc38973 is described below

commit 55f0bc38973baa3f659313b90b69cbbee59e8d77
Author: runner <ru...@main-runner-zt478-q5qw6>
AuthorDate: Thu Feb 8 23:37:02 2024 +0000

    Publishing website 2024/02/08 23:37:02 at commit e9202ab
---
 .../dataframes/differences-from-pandas/index.html  |   2 +-
 .../dsls/dataframes/overview/index.html            |   2 +-
 .../sql/calcite/aggregate-functions/index.html     |   2 +-
 .../dsls/sql/calcite/data-types/index.html         |   2 +-
 .../dsls/sql/calcite/lexical-structure/index.html  |   2 +-
 .../dsls/sql/calcite/overview/index.html           |   2 +-
 .../dsls/sql/calcite/query-syntax/index.html       |   2 +-
 .../dsls/sql/calcite/scalar-functions/index.html   |   2 +-
 .../extensions/create-external-table/index.html    |   2 +-
 .../dsls/sql/extensions/joins/index.html           |   2 +-
 .../dsls/sql/extensions/set/index.html             |   2 +-
 .../extensions/user-defined-functions/index.html   |   2 +-
 .../extensions/windowing-and-triggering/index.html |   2 +-
 .../documentation/dsls/sql/overview/index.html     |   2 +-
 .../documentation/dsls/sql/shell/index.html        |   2 +-
 .../documentation/dsls/sql/walkthrough/index.html  |   2 +-
 .../sql/zetasql/aggregate-functions/index.html     |   2 +-
 .../sql/zetasql/conditional-expressions/index.html |   2 +-
 .../dsls/sql/zetasql/conversion-rules/index.html   |   2 +-
 .../dsls/sql/zetasql/data-types/index.html         |   2 +-
 .../dsls/sql/zetasql/lexical/index.html            |   2 +-
 .../dsls/sql/zetasql/math-functions/index.html     |   2 +-
 .../dsls/sql/zetasql/operators/index.html          |   2 +-
 .../dsls/sql/zetasql/overview/index.html           |   2 +-
 .../dsls/sql/zetasql/query-syntax/index.html       |   2 +-
 .../dsls/sql/zetasql/string-functions/index.html   |   2 +-
 .../dsls/sql/zetasql/syntax/index.html             |   2 +-
 .../sdks/feature-comparison/index.html             |   2 +-
 .../sdks/go-cross-compilation/index.html           |   2 +-
 .../documentation/sdks/go-dependencies/index.html  |   2 +-
 .../documentation/sdks/go/index.html               |   2 +-
 .../sdks/java-dependencies/index.html              |   2 +-
 .../documentation/sdks/java-extensions/index.html  |   2 +-
 .../sdks/java-multi-language-pipelines/index.html  |   2 +-
 .../documentation/sdks/java-thirdparty/index.html  |   2 +-
 .../documentation/sdks/java/euphoria/index.html    |   2 +-
 .../documentation/sdks/java/index.html             |   2 +-
 .../sdks/java/testing/nexmark/index.html           |   2 +-
 .../sdks/java/testing/tpcds/index.html             |   2 +-
 .../sdks/python-dependencies/index.html            |   2 +-
 .../python-multi-language-pipelines/index.html     |   2 +-
 .../sdks/python-pipeline-dependencies/index.html   |   2 +-
 .../documentation/sdks/python-streaming/index.html |   2 +-
 .../sdks/python-type-safety/index.html             |   2 +-
 .../sdks/python-unrecoverable-errors/index.html    |   2 +-
 .../documentation/sdks/python/index.html           |   2 +-
 .../documentation/sdks/scala/index.html            |   2 +-
 .../documentation/sdks/typescript/index.html       |   2 +-
 .../{java-extensions => yaml-combine}/index.html   | 114 +++--
 .../yaml-errors}/index.html                        | 202 ++++++---
 .../index.html                                     | 177 +++++---
 .../sdks/{scala => yaml-udf}/index.html            | 146 ++++++-
 .../documentation/sdks/yaml/index.html             | 469 +++++++++++++++++++++
 .../generated-content/images/logos/sdks/yaml.png   | Bin 0 -> 6197 bytes
 website/generated-content/index.html               |   2 +-
 website/generated-content/sitemap.xml              |   2 +-
 56 files changed, 1025 insertions(+), 183 deletions(-)

diff --git a/website/generated-content/documentation/dsls/dataframes/differences-from-pandas/index.html b/website/generated-content/documentation/dsls/dataframes/differences-from-pandas/index.html
index 461fab1a6e9..22fc7d3bc11 100644
--- a/website/generated-content/documentation/dsls/dataframes/differences-from-pandas/index.html
+++ b/website/generated-content/documentation/dsls/dataframes/differences-from-pandas/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 </code></pre><p>This is similar to pandas <a href=https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html>read_csv</a>, but <code>df</code> is a deferred Beam DataFrame representing the contents of the file. The input filename can be any file pattern understood by <a href=https://beam.apache.org/releases/pydoc/2.53.0/apache_beam.io.fileio.html#apache_beam.io.fileio.MatchFiles>fileio.MatchFiles</a>.</p><p>For an example of using sources and sinks with the DataFrame [...]
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.dataframe.frames.html#apache_beam.dataframe.frames.DeferredDataFrame.quantile><code>DeferredDataFrame.quantile</code></a>,
 <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.dataframe.frames.html#apache_beam.dataframe.frames.DeferredDataFrame.mode><code>DeferredDataFrame.mode</code></a></p><p>To support distributed processing, Beam invokes DataFrame operations on subsets of data in parallel. Some DataFrame operations can’t be parallelized, and these operations raise a <a href=https://beam.apache.org/releases/pydoc/2.53.0/apache_beam.dataframe.expressions.html#apache_beam.dataframe.expressions [...]
diff --git a/website/generated-content/documentation/dsls/dataframes/overview/index.html b/website/generated-content/documentation/dsls/dataframes/overview/index.html
index adfbc666f12..d1e3011d722 100644
--- a/website/generated-content/documentation/dsls/dataframes/overview/index.html
+++ b/website/generated-content/documentation/dsls/dataframes/overview/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 Run in Colab</a></td></table><p><br><br><br><br></p><p>The Apache Beam Python SDK provides a DataFrame API for working with pandas-like <a href=https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>DataFrame</a> objects. The feature lets you convert a PCollection to a DataFrame and then interact with the DataFrame using the standard methods available on the pandas DataFrame API. The DataFrame API is built on top of the pandas implementation, and pandas DataFram [...]
 </code></pre><p>Note that the <em>same</em> <code>pandas</code> version should be installed on workers when executing DataFrame API pipelines on distributed runners. Reference <a href=https://github.com/apache/beam/blob/master/sdks/python/container/py38/base_image_requirements.txt><code>base_image_requirements.txt</code></a> for the Python version and Beam release you are using to see what version of <code>pandas</code> will be used by default on workers.</p><h2 id=using-dataframes>Using [...]
 
diff --git a/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html b/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
index de5fcd1b054..814d097ac07 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/aggregate-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html b/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
index 33d4d78883e..45ec01313b1 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/data-types/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 including arrays, maps, and nested rows. This page documents supported
 <a href=https://calcite.apache.org/docs/reference.html#data-types>Apache Calcite data types</a> supported by Beam Calcite SQL.</p><p>In Java, these types are mapped to Java types large enough to hold the
 full range of values.</p><div class="table-wrapper table-wrapper--equal-p"><table><thead><tr><th>SQL Type</th><th>Description</th><th>Java class</th></tr></thead><tbody><tr><td>TINYINT</td><td>1 byte signed integer in range -128 to 127</td><td>java.lang.Byte</td></tr><tr><td>SMALLINT</td><td>2 byte signed integer in range -32768 to 32767</td><td>java.lang.Short</td></tr><tr><td>INTEGER</td><td>4 byte signed integer in range -2147483648 to 2147483647</td><td>java.lang.Integer</td></tr><tr [...]
diff --git a/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html b/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
index aab54383c36..3215a47a1dc 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/lexical-structure/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <em>identifiers,</em> <em>quoted identifiers, literals</em>, <em>keywords</em>, <em>operators</em>,
 and <em>special characters</em>. Tokens can be separated by whitespace (space,
 backspace, tab, newline) or comments.</p><h2 id=identifiers>Identifiers</h2><p>Identifiers are names that are associated with columns, tables, and
diff --git a/website/generated-content/documentation/dsls/sql/calcite/overview/index.html b/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
index 1858d2480f2..188f6d85d54 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/overview/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 big data processing with some streaming enhancements. Beam Calcite SQL is the default Beam SQL dialect.</p><p>Beam SQL has additional extensions leveraging Beam’s unified batch/streaming model and processing complex data types. You can use these extensions with all Beam SQL dialects, including Beam Calcite SQL.</p><h2 id=query-syntax>Query syntax</h2><p>Query statements scan one or more tables or expressions and return the computed result rows. For more information about query statements [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html b/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
index 855bac2c851..58fdc585a7d 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/query-syntax/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 result rows.</p><p>Generally, the semantics of queries is standard. See the following
 sections to learn about extensions for supporting Beam&rsquo;s unified
 batch/streaming model:</p><ul><li><a href=/documentation/dsls/sql/extensions/joins>Joins</a></li><li><a href=/documentation/dsls/sql/windowing-and-triggering/>Windowing & Triggering</a></li></ul><p>The main functionality of Beam SQL is the <code>SELECT</code> statement. This is how you
diff --git a/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html b/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
index 1ec82f87095..431110ecbcd 100644
--- a/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/calcite/scalar-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html b/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
index 5743cdb5541..81fbbc5a8d5 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/create-external-table/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=/documentation/io/built-in/>external storage system</a>.
 For some storage systems, <code>CREATE EXTERNAL TABLE</code> does not create a physical table until
 a write occurs. After the physical table exists, you can access the table with
diff --git a/website/generated-content/documentation/dsls/sql/extensions/joins/index.html b/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
index 3f5d0e08d74..af1d38e704f 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/joins/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 with all elements from another input. Due to the fact that both inputs are
 bounded, no windowing or triggering is involved.</p><h2 id=join-unbounded-unbounded>Unbounded JOIN Unbounded</h2><p>Standard join implementation is used. All elements from one input are matched
 with all elements from another input.</p><p><strong>Windowing and Triggering</strong></p><p>The following properties must be satisfied when joining unbounded inputs:</p><ul><li>Inputs must have compatible windows, otherwise <code>IllegalArgumentException</code>
diff --git a/website/generated-content/documentation/dsls/sql/extensions/set/index.html b/website/generated-content/documentation/dsls/sql/extensions/set/index.html
index b4b4764c372..56160c9227c 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/set/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/set/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 Options</a>
 via the SQL shell. These are the same Pipeline Options passed to other Beam
 applications on the command line in the <code>--&lt;option>=&lt;value></code> format.</p><h2 id=syntax>Syntax</h2><pre tabindex=0><code>SET option = value
diff --git a/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html b/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
index 5cd4d032d99..0014012d985 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/user-defined-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 needs, they can be authored in Java and invoked in your SQL query. These
 are commonly called UDF (for scalar functions) and UDAFs (for aggregate functions).</p><h2 id=create-and-specify-a-user-defined-function-udf>Create and specify a User Defined Function (UDF)</h2><p>A UDF can be the following:</p><ul><li>Any Java method that takes zero or more scalar fields and
 returns one scalar value.</li><li>A <code>SerializableFunction</code>.</li></ul><p>Below is an example of UDF and how to use it in DSL:</p><div class='language-java snippet'><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to clipboard"><img src=/images/copy-icon.svg></a><div class=highlight><pre tabindex=0 class=chroma><code class=language-java data-lang=java><span class=line><span class=cl><span class=cm>/**
diff --git a/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html b/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
index 6c90de334c9..a205ca759ca 100644
--- a/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
+++ b/website/generated-content/documentation/dsls/sql/extensions/windowing-and-triggering/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 to a <code>BeamSql</code> transform</li><li>you can use windowing extensions in your windowing query, which will override
 the windowing of your input <code>PCollections</code></li></ul><p>Triggering can only be used by setting it on your input <code>PCollections</code>; there
 are no SQL extensions for specifying triggering.</p><p>This section covers the use of SQL extensions to directly apply windowing.</p><p>Beam SQL supports windowing functions specified in <code>GROUP BY</code> clause.
diff --git a/website/generated-content/documentation/dsls/sql/overview/index.html b/website/generated-content/documentation/dsls/sql/overview/index.html
index 17aacbf66d5..292dee6f969 100644
--- a/website/generated-content/documentation/dsls/sql/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/overview/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 bounded and unbounded <code>PCollections</code> with SQL statements. Your SQL query
 is translated to a <code>PTransform</code>, an encapsulated segment of a Beam pipeline.
 You can freely mix SQL <code>PTransforms</code> and other <code>PTransforms</code> in your pipeline.</p><p>Beam SQL includes the following dialects:</p><ul><li><a href=https://calcite.apache.org>Beam Calcite SQL</a></li><li><a href=https://github.com/google/zetasql>Beam ZetaSQL</a></li></ul><p>Beam Calcite SQL is a variant of Apache Calcite, a dialect widespread in
diff --git a/website/generated-content/documentation/dsls/sql/shell/index.html b/website/generated-content/documentation/dsls/sql/shell/index.html
index e8622949086..61686896609 100644
--- a/website/generated-content/documentation/dsls/sql/shell/index.html
+++ b/website/generated-content/documentation/dsls/sql/shell/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 
 ./sdks/java/extensions/sql/shell/build/install/shell/bin/shell
 </code></pre><p>After you run the commands, the SQL shell starts and you can type queries:</p><pre tabindex=0><code>Welcome to Beam SQL 2.6.0-SNAPSHOT (based on sqlline version 1.4.0)
diff --git a/website/generated-content/documentation/dsls/sql/walkthrough/index.html b/website/generated-content/documentation/dsls/sql/walkthrough/index.html
index 8b3f4222580..bcb54014ee7 100644
--- a/website/generated-content/documentation/dsls/sql/walkthrough/index.html
+++ b/website/generated-content/documentation/dsls/sql/walkthrough/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 where <code>T</code> has a schema registered, or a <code>PCollection&lt;Row></code>. See the
 <a href=/documentation/programming-guide/#what-is-a-schema>schema documentation</a> in
 the Beam Programming Guide for details on registering a schema for a type <code>T</code>.</p><p>If you don&rsquo;t have an existing type <code>T</code>, a <code>PCollection&lt;Row></code> can be obtained
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
index 6c4b1670b38..0c7d79be156 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 </code></pre><p><strong>Description</strong></p><p>Returns the average of non-<code>NULL</code> input values.</p><p><strong>Supported Argument Types</strong></p><p>FLOAT64. Note that, for floating point input types, the return result
 is non-deterministic, which means you might receive a different result each time
 you use this function.</p><p><strong>Returned Data Types</strong></p><ul><li>FLOAT64</li></ul><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT AVG(x) as avg
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
index b14e967f5c8..c2884d388e2 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/conditional-expressions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
   WHEN value THEN result
   [WHEN ...]
   [ELSE else_result]
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html b/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
index 176344ed360..63a74a6b2b7 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/conversion-rules/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 automatically under the conditions described below.</li></ul><p>The table below summarizes all possible <code>CAST</code>s and coercions. &ldquo;Coercion To&rdquo; applies to all <em>expressions</em> of a given data type (e.g. a column).</p><div class=table-wrapper><table class=table-wrapper--equal-p><thead><tr><th>From Type</th><th>CAST to</th><th>Coercion To</th></tr></thead><tbody><tr><td>INT64</td><td><span>INT64</span><br><span>FLOAT64</span><br><span>STRING</span><br></td><td><span [...]
 </code></pre><p>Cast syntax is used in a query to indicate that the result type of an
 expression should be converted to some other type.</p><p>Example:</p><pre tabindex=0><code>CAST(x=1 AS STRING)
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html b/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
index 54d9f58d7eb..a69900b4407 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/data-types/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 each property applies to:</p><div class=table-container-wrapper><div class=table-wrapper><table class=table-wrapper--equal-p><thead><tr><th>Property</th><th>Description</th><th>Applies To</th></tr></thead><tbody><tr><td>Nullable</td><td nowrap><code>NULL</code> is a valid value.</td><td>All data types, with the following exceptions:<ul><li>ARRAYs cannot be <code>NULL</code>.</li><li><code>NULL ARRAY</code> elements cannot persist to a table.</li><li>Queries cannot handle <code>NULL ARRAY [...]
 Field names are ignored. Less than and greater than comparisons are not
 supported.</p><p><br><br><br><br>All types that support comparisons
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html b/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
index bc366b05f09..d9a0ca558c5 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/lexical/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <em>identifiers,</em> <em>quoted identifiers, literals</em>, <em>keywords</em>, <em>operators</em>, and
 <em>special characters</em>. Tokens can be separated by whitespace (space, backspace,
 tab, newline) or comments.</p><p><a id=identifiers></a></p><h2 id=identifiers>Identifiers</h2><p>Identifiers are names that are associated with columns, tables, and other
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
index d83ae2008be..c738e4e13ef 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/math-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 </code></pre><p><strong>Description</strong></p><p>Modulo function: returns the remainder of the division of X by Y. Returned value
 has the same sign as X.</p><h2 id=ceil>CEIL</h2><pre tabindex=0><code>CEIL(X)
 </code></pre><p><strong>Description</strong></p><p>Returns the smallest integral value (with FLOAT64
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html b/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
index 6519cec8c7f..78561f64d69 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/operators/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 function call syntax. An operator manipulates any number of data inputs, also
 called operands, and returns a result.</p><p>Common conventions:</p><ul><li>Unless otherwise specified, all operators return <code>NULL</code> when one of the
 operands is <code>NULL</code>.</li></ul><p>The following table lists all supported operators from highest to
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html b/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
index c1947a4581f..ff1fdd4e7b2 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/overview/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html b/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
index 250872ffcfd..3ba14f6cd34 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/query-syntax/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 the computed result rows.</p><h2 id=sql-syntax>SQL Syntax</h2><pre>
 <span class=var>query_statement</span>:
     <span class=var>query_expr</span>
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html b/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
index 6e92180fb3b..5c92c77d8fc 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/string-functions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 canonical equivalence.</p><div class=table-wrapper><table><thead><tr><th>Operator syntax</th><th>Description</th></tr></thead><tbody><tr><td><a href=#char_length>CHAR_LENGTH(value)</a></td><td>Returns the length of the string in characters</td></tr><tr><td><a href=#character_length>CHARACTER_LENGTH(value)</a></td><td>Synonym for CHAR_LENGTH</td></tr><tr><td><a href=#concat>CONCAT(value1[, &mldr;])</a></td><td>Concatenates up to five values into a single result</td></tr><tr><td><a href=#e [...]
 </code></pre><p><strong>Description</strong></p><p>Returns the length of the STRING in characters.</p><p><strong>Return type</strong></p><p>INT64</p><p><strong>Examples</strong></p><pre tabindex=0><code>
 Table example:
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html b/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
index 9bff58326d7..73b4cf12c30 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
+++ b/website/generated-content/documentation/dsls/sql/zetasql/syntax/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 operand and the other operand is another numeric type, both operands are
 converted to FLOAT64 before the function is
 evaluated.</p></li><li><p>If an operand is <code>NULL</code>, the result is <code>NULL</code>, with the exception of the
diff --git a/website/generated-content/documentation/sdks/feature-comparison/index.html b/website/generated-content/documentation/sdks/feature-comparison/index.html
index 2646f2b0a6d..8994a941abf 100644
--- a/website/generated-content/documentation/sdks/feature-comparison/index.html
+++ b/website/generated-content/documentation/sdks/feature-comparison/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/sdks/go-cross-compilation/index.html b/website/generated-content/documentation/sdks/go-cross-compilation/index.html
index a9784494f73..2ef118c2cc6 100644
--- a/website/generated-content/documentation/sdks/go-cross-compilation/index.html
+++ b/website/generated-content/documentation/sdks/go-cross-compilation/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 To execute a Go binary on a machine, it must be compiled for the matching operating system and processor architecture.
 This has implications for how Go SDK pipelines execute on <a href=/documentation/glossary/#worker>workers</a>.</p><h1 id=development-using-go-run>Development: Using <code>go run</code></h1><p>When starting your in development pipeline against a remote runner, you can use <code>go run</code> from your development environment.
 The Go SDK will cross-compile your pipeline for <code>linux-amd64</code>, and use that as the pipeline&rsquo;s worker binary.</p><p>Alternatively, some local runners support Loopback execution.
diff --git a/website/generated-content/documentation/sdks/go-dependencies/index.html b/website/generated-content/documentation/sdks/go-dependencies/index.html
index c5f4a8a27f7..4a91a102767 100644
--- a/website/generated-content/documentation/sdks/go-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/go-dependencies/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 Compile and runtime dependencies for your Beam SDK version are listed in <code>go.sum</code> in the Beam repository.
 This can be found at</p><pre tabindex=0><code>https://raw.githubusercontent.com/apache/beam/v&lt;VERSION_NUMBER&gt;/sdks/go.sum
 </code></pre><p class=paragraph-wrap>Replace `&lt;VERSION_NUMBER>` with the major.minor.patch version of the SDK. For example, <a href=https://raw.githubusercontent.com/apache/beam/v2.53.0/sdks/go.sum target=_blank rel="noopener noreferrer">https://raw.githubusercontent.com/apache/beam/v2.53.0/sdks/go.sum</a> will provide the dependencies for the 2.53.0 release.</p><p><strong>Note:</strong> To just view direct dependencies, you can view the <code>go.mod</code> file instead, direct dependencies
diff --git a/website/generated-content/documentation/sdks/go/index.html b/website/generated-content/documentation/sdks/go/index.html
index daf58aff93e..d73fddae928 100644
--- a/website/generated-content/documentation/sdks/go/index.html
+++ b/website/generated-content/documentation/sdks/go/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 It is based on the following <a href=https://s.apache.org/beam-go-sdk-design-rfc>design</a>.</p><p>Unlike Java and Python, Go is a statically compiled language.
 This means worker binaries may need to be <a href=/documentation/sdks/go-cross-compilation/>cross-compiled</a> to execute on distributed runners.</p><h2 id=get-started-with-the-go-sdk>Get Started with the Go SDK</h2><p>Get started with the <a href=/get-started/quickstart-go>Beam Go SDK quickstart</a> to set up your development environment and run an example pipeline. Then, read through the <a href=/documentation/programming-guide>Beam programming guide</a> to learn the basic concepts tha [...]
 It&rsquo;s possible to write many kinds of transforms, but specific built in transforms may still be missing, or incomplete.</p><p>Requests for specific transforms may be filed to the <a href="https://github.com/apache/beam/issues?q=is%3Aopen+is%3Aissue+label%3Ago"><code>go</code> component in GitHub Issues</a>.
diff --git a/website/generated-content/documentation/sdks/java-dependencies/index.html b/website/generated-content/documentation/sdks/java-dependencies/index.html
index 517ec366051..66d8fcef727 100644
--- a/website/generated-content/documentation/sdks/java-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/java-dependencies/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 import additional dependencies. You need to manage your dependencies for the following reasons:</p><ul><li>Dependencies might have version collisions or incompatible classes and libraries.</li><li>Some libraries are not forward compatible. When you use these packages in your code,
 you might need to pin to the appropriate versions so that those versions are used
 when you run your pipeline.</li></ul><p>When problems occur with dependencies, you might see unexpected behavior in the service,
diff --git a/website/generated-content/documentation/sdks/java-extensions/index.html b/website/generated-content/documentation/sdks/java-extensions/index.html
index ca6503e78fc..b3aa7d84833 100644
--- a/website/generated-content/documentation/sdks/java-extensions/index.html
+++ b/website/generated-content/documentation/sdks/java-extensions/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 is to simplify the most common cases of join to a simple function call.</p><p>The functions are generic and support joins of any Beam-supported types.
 Input to the join functions are <code>PCollections</code> of <code>Key</code> / <code>Value</code>s. Both
 the left and right <code>PCollection</code>s need the same type for the key. All the join
diff --git a/website/generated-content/documentation/sdks/java-multi-language-pipelines/index.html b/website/generated-content/documentation/sdks/java-multi-language-pipelines/index.html
index 9b39ec29f3c..a4734a3d338 100644
--- a/website/generated-content/documentation/sdks/java-multi-language-pipelines/index.html
+++ b/website/generated-content/documentation/sdks/java-multi-language-pipelines/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 with the Apache Beam SDK for Java. For a more complete discussion of the topic,
 see
 <a href=/documentation/programming-guide/#multi-language-pipelines>Multi-language pipelines</a>.</p><p>A <em>multi-language pipeline</em> is a pipeline that’s built in one Beam SDK language
diff --git a/website/generated-content/documentation/sdks/java-thirdparty/index.html b/website/generated-content/documentation/sdks/java-thirdparty/index.html
index 2a5786df949..295102c37da 100644
--- a/website/generated-content/documentation/sdks/java-thirdparty/index.html
+++ b/website/generated-content/documentation/sdks/java-thirdparty/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 the webserver. The format of these log files is a configuration option in the Apache HTTPD server so parsing this
 into useful data elements is normally very hard to do.</p><p>To solve this problem in an easy way a library was created that works in combination with Apache Beam
 and is capable of doing this for both the Apache HTTPD and NGINX.</p><p>The basic idea is that the logformat specification is the schema used to create the line.
diff --git a/website/generated-content/documentation/sdks/java/euphoria/index.html b/website/generated-content/documentation/sdks/java/euphoria/index.html
index 6f290182b6e..f28d65efc0a 100644
--- a/website/generated-content/documentation/sdks/java/euphoria/index.html
+++ b/website/generated-content/documentation/sdks/java/euphoria/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 In 2015, <a href=https://www.vldb.org/pvldb/vol8/p1792-Akidau.pdf>DataFlow whitepaper</a> inspired original authors to go one step further and also provide the unified API for both stream and batch processing.
 The API has been open-sourced in 2016 and is still in active development. As the Beam&rsquo;s community goal was very similar, we decided to contribute
 the API as a high level DSL over Beam Java SDK and share our effort with the community.</p><p>Euphoria DSL integration is still work in progress and is tracked as part of <a href=https://issues.apache.org/jira/browse/BEAM-3900>BEAM-3900</a>.</p><h2 id=wordcount-example>WordCount Example</h2><p>Lets start with the small example.<div class='language-java snippet'><div class="notebook-skip code-snippet"><a class=copy type=button data-bs-toggle=tooltip data-bs-placement=bottom title="Copy to [...]
diff --git a/website/generated-content/documentation/sdks/java/index.html b/website/generated-content/documentation/sdks/java/index.html
index d2204d2ecf1..2715a2e092a 100644
--- a/website/generated-content/documentation/sdks/java/index.html
+++ b/website/generated-content/documentation/sdks/java/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/sdks/java/testing/nexmark/index.html b/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
index 72de46071e4..e616ae3d4bc 100644
--- a/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
+++ b/website/generated-content/documentation/sdks/java/testing/nexmark/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 queries in <a href=https://web.archive.org/web/20100620010601/http://datalab.cs.pdx.edu/niagaraST/NEXMark/>Nexmark research
 paper</a></p><p>These are multiple queries over a three entities model representing on online
 auction system:</p><ul><li><strong>Person</strong> represents a person submitting an item for auction and/or making
diff --git a/website/generated-content/documentation/sdks/java/testing/tpcds/index.html b/website/generated-content/documentation/sdks/java/testing/tpcds/index.html
index 96940474603..5c9fb2e594c 100644
--- a/website/generated-content/documentation/sdks/java/testing/tpcds/index.html
+++ b/website/generated-content/documentation/sdks/java/testing/tpcds/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 including queries and data maintenance. The benchmark provides a representative evaluation of performance as a general
 purpose decision support system.&rdquo;</p></blockquote><p>In general, TPC-DS is:</p><ul><li>Industry standard benchmark (OLAP/Data Warehouse);<ul><li><a href=https://www.tpc.org/tpcds/>https://www.tpc.org/tpcds/</a></li></ul></li><li>Implemented for many analytical processing systems - RDBMS, Apache Spark, Apache Flink, etc;</li><li>It provides a wide range of different queries (SQL);</li><li>It incorporates the tools to generate input data of different sizes.</li></ul><h2 id=table-sche [...]
 sales channels: stores, catalogs, and the Internet. The schema includes seven fact tables:</p><ul><li>A pair of fact tables focused on the product sales and returns for each of the three channels</li><li>A single fact table that models inventory for the catalog and internet sales channels.</li></ul><p>In addition, the schema includes 17 dimension tables that are associated with all sales channels.</p></blockquote><h3 id=tables>Tables</h3><ul><li><strong>store_sales</strong> - Every row r [...]
diff --git a/website/generated-content/documentation/sdks/python-dependencies/index.html b/website/generated-content/documentation/sdks/python-dependencies/index.html
index d028d68dde9..f97eb2e5ec2 100644
--- a/website/generated-content/documentation/sdks/python-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/python-dependencies/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 import additional dependencies. Version collisions can result in unexpected
 behavior in the service. If you are using any of these packages in your code, be
 aware that some libraries are not forward-compatible and you may need to pin to
diff --git a/website/generated-content/documentation/sdks/python-multi-language-pipelines/index.html b/website/generated-content/documentation/sdks/python-multi-language-pipelines/index.html
index b67f97413e3..e01ba9eefc5 100644
--- a/website/generated-content/documentation/sdks/python-multi-language-pipelines/index.html
+++ b/website/generated-content/documentation/sdks/python-multi-language-pipelines/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 </span></span><span class=line><span class=cl>
 </span></span><span class=line><span class=cl>  <span class=kd>final</span> <span class=n>String</span> <span class=n>prefix</span><span class=o>;</span>
 </span></span><span class=line><span class=cl>
diff --git a/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html b/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
index b6e8f12b27b..4d286aedb06 100644
--- a/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
+++ b/website/generated-content/documentation/sdks/python-pipeline-dependencies/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 </code></pre><p>This command creates a <code>requirements.txt</code> file that lists all packages that are installed on your machine, regardless of where they were installed from.</p></li><li><p>Edit the <code>requirements.txt</code> file and delete all packages that are not relevant to your code.</p></li><li><p>Run your pipeline with the following command-line option:</p><pre><code> --requirements_file requirements.txt
 </code></pre><p>The runner will use the <code>requirements.txt</code> file to install your additional dependencies onto the remote workers.</p></li></ol><blockquote><p><strong>NOTE</strong>: An alternative to <code>pip freeze</code> is to use a library like <a href=https://github.com/jazzband/pip-tools>pip-tools</a> to compile all the dependencies required for the pipeline from a <code>--requirements_file</code>, where only top-level dependencies are mentioned.</p></blockquote><h2 id=cus [...]
 COPY &lt;path to requirements.txt&gt; /tmp/requirements.txt
diff --git a/website/generated-content/documentation/sdks/python-streaming/index.html b/website/generated-content/documentation/sdks/python-streaming/index.html
index b2d0027cb42..c1b130fdf35 100644
--- a/website/generated-content/documentation/sdks/python-streaming/index.html
+++ b/website/generated-content/documentation/sdks/python-streaming/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 <a href=#unsupported-features>limitations</a>) starting with Beam SDK version 2.5.0.</p><h2 id=why-use-streaming-execution>Why use streaming execution?</h2><p>Beam creates an unbounded PCollection if your pipeline reads from a streaming or
 continuously-updating data source (such as Cloud Pub/Sub). A runner must
 process an unbounded PCollection using a streaming job that runs continuously,
diff --git a/website/generated-content/documentation/sdks/python-type-safety/index.html b/website/generated-content/documentation/sdks/python-type-safety/index.html
index 7de83a75896..a59a6baf3be 100644
--- a/website/generated-content/documentation/sdks/python-type-safety/index.html
+++ b/website/generated-content/documentation/sdks/python-type-safety/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 The Beam SDK for Python implements a subset of <a href=https://www.python.org/dev/peps/pep-0484/>PEP 484</a> and aims to follow it as closely as possible in its own typehints module.</p><p>These flags control Beam type safety:</p><ul><li><p><code>--no_pipeline_type_check</code></p><p>Disables type checking during pipeline construction.
 Default is to perform these checks.</p></li><li><p><code>--runtime_type_check</code></p><p>Enables runtime type checking of every element.
 This may affect pipeline performance, so the default is to skip these checks.</p></li><li><p><code>--type_check_additional</code></p><p>Enables additional type checks. These are no enabled by default to preserve
diff --git a/website/generated-content/documentation/sdks/python-unrecoverable-errors/index.html b/website/generated-content/documentation/sdks/python-unrecoverable-errors/index.html
index 595db32328e..077b300fd6e 100644
--- a/website/generated-content/documentation/sdks/python-unrecoverable-errors/index.html
+++ b/website/generated-content/documentation/sdks/python-unrecoverable-errors/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 prevent jobs from ever running successfully. The problem usually stems
 from a misconfiguration. This page provides context about
 common errors and troubleshooting information.</p><h2 id=python-version-mismatch>Job submission or Python runtime version mismatch</h2><p>If the Python version that you use to submit your job doesn&rsquo;t match the
diff --git a/website/generated-content/documentation/sdks/python/index.html b/website/generated-content/documentation/sdks/python/index.html
index e4dd6e084bd..2f6d8961eed 100644
--- a/website/generated-content/documentation/sdks/python/index.html
+++ b/website/generated-content/documentation/sdks/python/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 is available (with some <a href=/documentation/sdks/python-streaming/#unsupported-features>limitations</a>)
 starting with Beam SDK version 2.5.0.</p><h2 id=python-type-safety>Python type safety</h2><p>Python is a dynamically-typed language with no static type checking. The Beam SDK for Python uses type hints during pipeline construction and runtime to try to emulate the correctness guarantees achieved by true static typing. <a href=/documentation/sdks/python-type-safety>Ensuring Python Type Safety</a> walks through how to use type hints, which help you to catch potential bugs up front with the [...]
 new I/O connectors. See the <a href=/documentation/io/developing-io-overview>Developing I/O connectors overview</a>
diff --git a/website/generated-content/documentation/sdks/scala/index.html b/website/generated-content/documentation/sdks/scala/index.html
index ef716185eeb..61f1aa6ebc0 100644
--- a/website/generated-content/documentation/sdks/scala/index.html
+++ b/website/generated-content/documentation/sdks/scala/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 Scio aims to be a thin wrapper on top of Beam while offering idiomatic Scala style API.</p><p>Learn more about Scio <a href=https://spotify.github.io/scio/>here</a>.</p></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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_cir [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/sdks/typescript/index.html b/website/generated-content/documentation/sdks/typescript/index.html
index 1d28b7632e6..dbb388a807d 100644
--- a/website/generated-content/documentation/sdks/typescript/index.html
+++ b/website/generated-content/documentation/sdks/typescript/index.html
@@ -36,7 +36,7 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
 to set up your development environment, get the Beam SDK for Typescript, and run an example pipeline.
 Then, read through the <a href=/documentation/programming-guide>Beam programming guide</a>
 to learn the basic concepts that apply to all SDKs in Beam.</p><h2 id=overview>Overview</h2><p>We generally try to apply the concepts from the Beam API in a TypeScript
diff --git a/website/generated-content/documentation/sdks/java-extensions/index.html b/website/generated-content/documentation/sdks/yaml-combine/index.html
similarity index 61%
copy from website/generated-content/documentation/sdks/java-extensions/index.html
copy to website/generated-content/documentation/sdks/yaml-combine/index.html
index ca6503e78fc..94aaca9e560 100644
--- a/website/generated-content/documentation/sdks/java-extensions/index.html
+++ b/website/generated-content/documentation/sdks/yaml-combine/index.html
@@ -1,4 +1,4 @@
-<!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 Java SDK Extensions</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 [...]
+<!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 YAML Aggregations</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 [...]
 <script type=text/javascript src=/js/language-switch-v2.min.121952b7980b920320ab229551857669209945e39b05ba2b433a565385ca44c6.js defer></script>
 <script type=text/javascript src=/js/fix-menu.min.039174b67107465f2090a493f91e126f7aa797f29420f9edab8a54d9dd4b3d2d.js defer></script>
 <script type=text/javascript src=/js/section-nav.min.1405fd5e70fab5f6c54037c269b1d137487d8f3d1b3009032525f6db3fbce991.js defer></script>
@@ -8,7 +8,7 @@
 <script type=text/javascript src=/js/calendar.min.336664054fa0f52b08bbd4e3c59b5cb6d63dcfb2b4d602839746516b0817446b.js defer></script>
 <script type=text/javascript src=/js/fix-playground-nested-scroll.min.0283f1037cb1b9d5074c6eaf041292b524a8148a7cdb803d5ccd6d1fc4eb3253.js defer></script>
 <script type=text/javascript src=/js/anchor-content-jump-fix.min.22d3240f81632e4c11179b9d2aaf37a40da9414333c43aa97344e8b21a7df0e4.js defer></script>
-<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/java-extensions/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css> [...]
+<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/yaml-combine/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css><sc [...]
 <script>(function(e,t,n,s,o,i,a){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,i=t.createElement(n),a=t.getElementsByTagName(n)[0],i.async=1,i.src=s,a.parentNode.insertBefore(i,a)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-73650088-1","auto"),ga("send","pageview")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:2182 [...]
 <a class=navbar-link href=/get-started/>Get Started</a>
 <a class=navbar-link href=/documentation/>Documentation</a>
@@ -20,7 +20,7 @@
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span>
 <span class=icon-bar></span>
-<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
+<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
 <a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
@@ -28,7 +28,7 @@
 <a class=navbar-link href=/community/>Community</a>
 <a class=navbar-link href=/contribute/>Contribute</a>
 <a class=navbar-link href=/blog/>Blog</a>
-<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
 <a type=button onclick=endSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M21.122 20.827 4.727 4.432M21.122 4.43 4.727 20.827"/></svg></a></div></div></nav><div class=header-push></div><div class="top-banners swiper"><div class=swiper-wrapper><div class=swiper-slide><a href=https://beamcollege.dev/><img class=banner-img-desktop src=/images/c [...]
@@ -36,28 +36,90 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
-is to simplify the most common cases of join to a simple function call.</p><p>The functions are generic and support joins of any Beam-supported types.
-Input to the join functions are <code>PCollections</code> of <code>Key</code> / <code>Value</code>s. Both
-the left and right <code>PCollection</code>s need the same type for the key. All the join
-functions return a <code>Key</code> / <code>Value</code> where <code>Key</code> is the join key and value is
-a <code>Key</code> / <code>Value</code> where the key is the left value and right is the value.</p><p>For outer joins, the user must provide a value that represents <code>null</code> because <code>null</code>
-cannot be serialized.</p><p>Example usage:</p><pre tabindex=0><code>PCollection&lt;KV&lt;String, String&gt;&gt; leftPcollection = ...
-PCollection&lt;KV&lt;String, Long&gt;&gt; rightPcollection = ...
-
-PCollection&lt;KV&lt;String, KV&lt;String, Long&gt;&gt;&gt; joinedPcollection =
-  Join.innerJoin(leftPcollection, rightPcollection);
-</code></pre><h2 id=sorter>Sorter</h2><p>This module provides the <code>SortValues</code> transform, which takes a <code>PCollection&lt;KV&lt;K, Iterable&lt;KV&lt;K2, V>>>></code> and produces a <code>PCollection&lt;KV&lt;K, Iterable&lt;KV&lt;K2, V>>>></code> where, for each primary key <code>K</code> the paired <code>Iterable&lt;KV&lt;K2, V>></code> has been sorted by the byte encoding of secondary key (<code>K2</code>). It is an efficient and scalable sorter for iterables, even if they [...]
-
-// Group by primary key, bringing &lt;SecondaryKey, Value&gt; pairs for the same key together.
-PCollection&lt;KV&lt;String, Iterable&lt;KV&lt;String, Integer&gt;&gt;&gt;&gt; grouped =
-    input.apply(GroupByKey.&lt;String, KV&lt;String, Integer&gt;&gt;create());
-
-// For every primary key, sort the iterable of &lt;SecondaryKey, Value&gt; pairs by secondary key.
-PCollection&lt;KV&lt;String, Iterable&lt;KV&lt;String, Integer&gt;&gt;&gt;&gt; groupedAndSorted =
-    grouped.apply(
-        SortValues.&lt;String, String, Integer&gt;create(BufferedExternalSorter.options()));
-</code></pre></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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-wrapper><div class=wrapper-grid><div class=footer__cols__col><div class=footer__c [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+values across records. The is accomplished via the <code>Combine</code> transform type.
+Currently <code>Combine</code> needs to be in the <code>yaml_experimental_features</code>
+option to use this transform.</p><p>For example, one can write</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: col1
+    combine:
+      total:
+        value: col2
+        fn:
+          type: sum
+</code></pre><p>If the function has no configuration requirements, it can be provided directly
+as a string</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: col1
+    combine:
+      total:
+        value: col2
+        fn: sum
+</code></pre><p>This can be simplified further if the output field name is the same as the input
+field name</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: col1
+    combine:
+      col2: sum
+</code></pre><p>One can aggregate over may fields at once</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: col1
+    combine:
+      col2: sum
+      col3: max
+</code></pre><p>and/or group by more than one field</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: [col1, col2]
+    combine:
+      col3: sum
+</code></pre><p>or none at all (which will result in a global combine with a single output)</p><pre tabindex=0><code>- type: Combine
+  config:
+    group_by: []
+    combine:
+      col2: sum
+      col3: max
+</code></pre><h2 id=windowed-aggregation>Windowed aggregation</h2><p>As with all transforms, <code>Combine</code> can take a windowing parameter</p><pre tabindex=0><code>- type: Combine
+  windowing:
+    type: fixed
+    size: 60
+  config:
+    group_by: col1
+    combine:
+      col2: sum
+      col3: max
+</code></pre><p>If no windowing specification is provided, it inherits the windowing
+parameters from upstream, e.g.</p><pre tabindex=0><code>- type: WindowInto
+  windowing:
+    type: fixed
+    size: 60
+- type: Combine
+  config:
+    group_by: col1
+    combine:
+      col2: sum
+      col3: max
+</code></pre><p>is equivalent to the previous example.</p><h2 id=custom-aggregation-functions>Custom aggregation functions</h2><p>One can use aggregation functions defined in Python by setting the language
+parameter.</p><pre tabindex=0><code>- type: Combine
+  config:
+    language: python
+    group_by: col1
+    combine:
+      biggest:
+        value: &#34;col2 + col2&#34;
+        fn:
+          type: &#39;apache_beam.transforms.combiners.TopCombineFn&#39;
+          config:
+            n: 10
+</code></pre><h2 id=sql-style-aggregations>SQL-style aggregations</h2><p>By setting the language to SQL, one can provide full SQL snippets as the
+combine fn.</p><pre tabindex=0><code>- type: Combine
+  config:
+    language: sql
+    group_by: col1
+    combine:
+      num_values: &#34;count(*)&#34;
+      total: &#34;sum(col2)&#34;
+</code></pre><p>One can of course also use the <code>Sql</code> transform type and provide a query
+directly.</p></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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-wrapper><div class=wrapper-grid><div class=footer__cols__col><div class=footer__c [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html b/website/generated-content/documentation/sdks/yaml-errors/index.html
similarity index 59%
copy from website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
copy to website/generated-content/documentation/sdks/yaml-errors/index.html
index 6c4b1670b38..99c93eaeef2 100644
--- a/website/generated-content/documentation/dsls/sql/zetasql/aggregate-functions/index.html
+++ b/website/generated-content/documentation/sdks/yaml-errors/index.html
@@ -1,4 +1,4 @@
-<!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 ZetaSQL aggregate functions</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)  [...]
+<!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 YAML Error Handling</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 [...]
 <script type=text/javascript src=/js/language-switch-v2.min.121952b7980b920320ab229551857669209945e39b05ba2b433a565385ca44c6.js defer></script>
 <script type=text/javascript src=/js/fix-menu.min.039174b67107465f2090a493f91e126f7aa797f29420f9edab8a54d9dd4b3d2d.js defer></script>
 <script type=text/javascript src=/js/section-nav.min.1405fd5e70fab5f6c54037c269b1d137487d8f3d1b3009032525f6db3fbce991.js defer></script>
@@ -8,7 +8,7 @@
 <script type=text/javascript src=/js/calendar.min.336664054fa0f52b08bbd4e3c59b5cb6d63dcfb2b4d602839746516b0817446b.js defer></script>
 <script type=text/javascript src=/js/fix-playground-nested-scroll.min.0283f1037cb1b9d5074c6eaf041292b524a8148a7cdb803d5ccd6d1fc4eb3253.js defer></script>
 <script type=text/javascript src=/js/anchor-content-jump-fix.min.22d3240f81632e4c11179b9d2aaf37a40da9414333c43aa97344e8b21a7df0e4.js defer></script>
-<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/dsls/sql/zetasql/aggregate-functions/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper [...]
+<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/yaml-errors/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css><scr [...]
 <script>(function(e,t,n,s,o,i,a){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,i=t.createElement(n),a=t.getElementsByTagName(n)[0],i.async=1,i.src=s,a.parentNode.insertBefore(i,a)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-73650088-1","auto"),ga("send","pageview")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:2182 [...]
 <a class=navbar-link href=/get-started/>Get Started</a>
 <a class=navbar-link href=/documentation/>Documentation</a>
@@ -20,7 +20,7 @@
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span>
 <span class=icon-bar></span>
-<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
+<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
 <a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
@@ -28,7 +28,7 @@
 <a class=navbar-link href=/community/>Community</a>
 <a class=navbar-link href=/contribute/>Contribute</a>
 <a class=navbar-link href=/blog/>Blog</a>
-<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
 <a type=button onclick=endSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M21.122 20.827 4.727 4.432M21.122 4.43 4.727 20.827"/></svg></a></div></div></nav><div class=header-push></div><div class="top-banners swiper"><div class=swiper-wrapper><div class=swiper-slide><a href=https://beamcollege.dev/><img class=banner-img-desktop src=/images/c [...]
@@ -36,56 +36,160 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
-</code></pre><p><strong>Description</strong></p><p>Returns the average of non-<code>NULL</code> input values.</p><p><strong>Supported Argument Types</strong></p><p>FLOAT64. Note that, for floating point input types, the return result
-is non-deterministic, which means you might receive a different result each time
-you use this function.</p><p><strong>Returned Data Types</strong></p><ul><li>FLOAT64</li></ul><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT AVG(x) as avg
-FROM UNNEST([0, 2, NULL, 4, 4, 5]) as x;
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+data that is malformatted, doesn&rsquo;t handle the proper preconditions, or otherwise
+breaks during processing. Generally any such record will cause the pipeline to
+permanently fail, but often it is desirable to allow the pipeline to continue,
+re-directing bad records to another path for special handling or simply
+recording them for later off-line analysis. This is often called the
+&ldquo;dead letter queue&rdquo; pattern.</p><p>Beam YAML has special support for this pattern if the transform supports a
+<code>error_handling</code> config parameter with an <code>output</code> field. For example,
+the following code will write all &ldquo;good&rdquo; processed records to one file and
+any &ldquo;bad&rdquo; records to a separate file.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
 
-+-----+
-| avg |
-+-----+
-| 3   |
-+-----+
-</code></pre><h2 id=count>COUNT</h2><ol><li><p><code>COUNT(*)</code></p></li><li><p><code>COUNT(expression)</code></p></li></ol><p><strong>Description</strong></p><ol><li>Returns the number of rows in the input.</li><li>Returns the number of rows with <code>expression</code> evaluated to any value other
-than <code>NULL</code>.</li></ol><p><strong>Supported Argument Types</strong></p><p><code>expression</code> can be any data type.</p><p><strong>Return Data Types</strong></p><p>INT64</p><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT COUNT(*) AS count_star, COUNT(x) AS count_x
-FROM UNNEST([1, 4, NULL, 4, 5]) AS x;
+    - type: MapToFields
+      input: ReadFromCsv
+      config:
+        language: python
+        fields:
+          col1: col1
+          # This could raise a divide-by-zero error.
+          ratio: col2 / col3
+        error_handling:
+          output: my_error_output
 
-+------------+---------+
-| count_star | count_x |
-+------------+---------+
-| 5          | 4       |
-+------------+---------+
-</code></pre><h2 id=max>MAX</h2><pre tabindex=0><code>MAX(expression)
-</code></pre><p><strong>Description</strong></p><p>Returns the maximum value of non-<code>NULL</code> expressions. Returns <code>NULL</code> if there
-are zero input rows or <code>expression</code> evaluates to <code>NULL</code> for all rows.</p><p><strong>Supported Argument Types</strong></p><p>Any data type except:</p><ul><li><code>ARRAY</code></li><li><code>STRUCT</code></li></ul><p><strong>Return Data Types</strong></p><p>Same as the data type used as the input values.</p><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT MAX(x) AS max
-FROM UNNEST([8, NULL, 37, 4, NULL, 55]) AS x;
+    - type: WriteToJson
+      input: MapToFields
+      config:
+        path: /path/to/output.json
 
-+-----+
-| max |
-+-----+
-| 55  |
-+-----+
-</code></pre><h2 id=min>MIN</h2><pre tabindex=0><code>MIN(expression)
-</code></pre><p><strong>Description</strong></p><p>Returns the minimum value of non-<code>NULL</code> expressions. Returns <code>NULL</code> if there
-are zero input rows or <code>expression</code> evaluates to <code>NULL</code> for all rows.</p><p><strong>Supported Argument Types</strong></p><p>Any data type except:</p><ul><li><code>ARRAY</code></li><li><code>STRUCT</code></li></ul><p><strong>Return Data Types</strong></p><p>Same as the data type used as the input values.</p><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT MIN(x) AS min
-FROM UNNEST([8, NULL, 37, 4, NULL, 55]) AS x;
+    - type: WriteToJson
+      name: WriteErrorsToJson
+      input: MapToFields.my_error_output
+      config:
+        path: /path/to/errors.json
+</code></pre><p>Note that with <code>error_handling</code> declared, <code>MapToFields.my_error_output</code>
+<strong>must</strong> be consumed; to ignore it will be an error. Any use is fine, e.g.
+logging the bad records to stdout would be sufficient (though not recommended
+for a robust pipeline).</p><p>Note also that the exact format of the error outputs is still being finalized.
+They can be safely printed and written to outputs, but their precise schema
+may change in a future version of Beam and should not yet be depended on.</p><p>Some transforms allow for extra arguments in their error_handling config, e.g.
+for Python functions one can give a <code>threshold</code> which limits the relative number
+of records that can be bad before considering the entire pipeline a failure</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
 
-+-----+
-| min |
-+-----+
-| 4   |
-+-----+
-</code></pre><h2 id=sum>SUM</h2><pre tabindex=0><code>SUM(expression)
-</code></pre><p><strong>Description</strong></p><p>Returns the sum of non-null values.</p><p>If the expression is a floating point value, the sum is non-deterministic, which means you might receive a different result each time you use this function.</p><p><strong>Supported Argument Types</strong></p><p>Any supported numeric data types.</p><p><strong>Return Data Types</strong></p><ul><li>Returns INT64 if the input is an integer.</li><li>Returns FLOAT64 if the input is a floating point
-value.</li></ul><p>Returns <code>NULL</code> if the input contains only <code>NULL</code>s.</p><p><strong>Examples</strong></p><pre tabindex=0><code>SELECT SUM(x) AS sum
-FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;
+    - type: MapToFields
+      input: ReadFromCsv
+      config:
+        language: python
+        fields:
+          col1: col1
+          # This could raise a divide-by-zero error.
+          ratio: col2 / col3
+        error_handling:
+          output: my_error_output
+          # If more than 10% of records throw an error, stop the pipeline.
+          threshold: 0.1
 
-+-----+
-| sum |
-+-----+
-| 25  |
-+-----+
+    - type: WriteToJson
+      input: MapToFields
+      config:
+        path: /path/to/output.json
+
+    - type: WriteToJson
+      name: WriteErrorsToJson
+      input: MapToFields.my_error_output
+      config:
+        path: /path/to/errors.json
+</code></pre><p>One can do arbitrary further processing on these failed records if desired,
+e.g.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+
+    - type: MapToFields
+      name: ComputeRatio
+      input: ReadFromCsv
+      config:
+        language: python
+        fields:
+          col1: col1
+          # This could raise a divide-by-zero error.
+          ratio: col2 / col3
+        error_handling:
+          output: my_error_output
+
+    - type: MapToFields
+      name: ComputeRatioForBadRecords
+      input: ComputeRatio.my_error_output
+      config:
+        language: python
+        fields:
+          col1: col1
+          ratio: col2 / (col3 + 1)
+        error_handling:
+          output: still_bad
+
+    - type: WriteToJson
+      # Takes as input everything from the &#34;success&#34; path of both transforms.
+      input: [ComputeRatio, ComputeRatioForBadRecords]
+      config:
+        path: /path/to/output.json
+
+    - type: WriteToJson
+      name: WriteErrorsToJson
+      # These failed the first and the second transform.
+      input: ComputeRatioForBadRecords.still_bad
+      config:
+        path: /path/to/errors.json
+</code></pre><p>When using the <code>chain</code> syntax, the required error consumption can happen
+in an <code>extra_transforms</code> block.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+
+    - type: MapToFields
+      name: SomeStep
+      config:
+        language: python
+        fields:
+          col1: col1
+          # This could raise a divide-by-zero error.
+          ratio: col2 / col3
+        error_handling:
+          output: errors
+
+    - type: MapToFields
+      name: AnotherStep
+      config:
+        language: python
+        fields:
+          col1: col1
+          # This could raise a divide-by-zero error.
+          inverse_ratio: 1 / ratio
+        error_handling:
+          output: errors
+
+    - type: WriteToJson
+      config:
+        path: /path/to/output.json
+
+  extra_transforms:
+    - type: WriteToJson
+      name: WriteErrors
+      input: [SomeStep.errors, AnotherStep.errors]
+      config:
+        path: /path/to/errors.json
 </code></pre></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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-wrapper><div class=wrapper-grid><div class=footer__cols__col><div class=footer__c [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/sdks/java-thirdparty/index.html b/website/generated-content/documentation/sdks/yaml-inline-python/index.html
similarity index 62%
copy from website/generated-content/documentation/sdks/java-thirdparty/index.html
copy to website/generated-content/documentation/sdks/yaml-inline-python/index.html
index 2a5786df949..eb75eaa3f47 100644
--- a/website/generated-content/documentation/sdks/java-thirdparty/index.html
+++ b/website/generated-content/documentation/sdks/yaml-inline-python/index.html
@@ -1,4 +1,4 @@
-<!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 3rd Party Java Extensions</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 [...]
+<!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 YAML Inline 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 Patterns (EIPs) an [...]
 <script type=text/javascript src=/js/language-switch-v2.min.121952b7980b920320ab229551857669209945e39b05ba2b433a565385ca44c6.js defer></script>
 <script type=text/javascript src=/js/fix-menu.min.039174b67107465f2090a493f91e126f7aa797f29420f9edab8a54d9dd4b3d2d.js defer></script>
 <script type=text/javascript src=/js/section-nav.min.1405fd5e70fab5f6c54037c269b1d137487d8f3d1b3009032525f6db3fbce991.js defer></script>
@@ -8,7 +8,7 @@
 <script type=text/javascript src=/js/calendar.min.336664054fa0f52b08bbd4e3c59b5cb6d63dcfb2b4d602839746516b0817446b.js defer></script>
 <script type=text/javascript src=/js/fix-playground-nested-scroll.min.0283f1037cb1b9d5074c6eaf041292b524a8148a7cdb803d5ccd6d1fc4eb3253.js defer></script>
 <script type=text/javascript src=/js/anchor-content-jump-fix.min.22d3240f81632e4c11179b9d2aaf37a40da9414333c43aa97344e8b21a7df0e4.js defer></script>
-<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/java-thirdparty/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css> [...]
+<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/yaml-inline-python/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.c [...]
 <script>(function(e,t,n,s,o,i,a){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,i=t.createElement(n),a=t.getElementsByTagName(n)[0],i.async=1,i.src=s,a.parentNode.insertBefore(i,a)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-73650088-1","auto"),ga("send","pageview")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:2182 [...]
 <a class=navbar-link href=/get-started/>Get Started</a>
 <a class=navbar-link href=/documentation/>Documentation</a>
@@ -20,7 +20,7 @@
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span>
 <span class=icon-bar></span>
-<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
+<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
 <a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
@@ -28,7 +28,7 @@
 <a class=navbar-link href=/community/>Community</a>
 <a class=navbar-link href=/contribute/>Contribute</a>
 <a class=navbar-link href=/blog/>Blog</a>
-<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
 <a type=button onclick=endSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M21.122 20.827 4.727 4.432M21.122 4.43 4.727 20.827"/></svg></a></div></div></nav><div class=header-push></div><div class="top-banners swiper"><div class=swiper-wrapper><div class=swiper-slide><a href=https://beamcollege.dev/><img class=banner-img-desktop src=/images/c [...]
@@ -36,58 +36,131 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
-the webserver. The format of these log files is a configuration option in the Apache HTTPD server so parsing this
-into useful data elements is normally very hard to do.</p><p>To solve this problem in an easy way a library was created that works in combination with Apache Beam
-and is capable of doing this for both the Apache HTTPD and NGINX.</p><p>The basic idea is that the logformat specification is the schema used to create the line.
-This parser is simply initialized with this schema and the list of fields you want to extract.</p><h3 id=project-page>Project page</h3><p><a href=https://github.com/nielsbasjes/logparser>https://github.com/nielsbasjes/logparser</a></p><h3 id=license>License</h3><p>Apache License 2.0</p><h3 id=download>Download</h3><pre><code>&lt;dependency&gt;
-  &lt;groupId&gt;nl.basjes.parse.httpdlog&lt;/groupId&gt;
-  &lt;artifactId&gt;httpdlog-parser&lt;/artifactId&gt;
-  &lt;version&gt;5.0&lt;/version&gt;
-&lt;/dependency&gt;
-</code></pre><h3 id=code-example>Code example</h3><p>Assuming a WebEvent class that has a setters setIP, setQueryImg and setQueryStringValues</p><pre><code>PCollection&lt;WebEvent&gt; filledWebEvents = input
-  .apply(&quot;Extract Elements from logline&quot;,
-    ParDo.of(new DoFn&lt;String, WebEvent&gt;() {
-      private Parser&lt;WebEvent&gt; parser;
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+<code>PyTransform</code> type, simply referencing them by fully qualified name.
+For example,</p><pre tabindex=0><code>- type: PyTransform
+  config:
+    constructor: apache_beam.pkg.module.SomeTransform
+    args: [1, &#39;foo&#39;]
+    kwargs:
+       baz: 3
+</code></pre><p>will invoke the transform <code>apache_beam.pkg.mod.SomeTransform(1, 'foo', baz=3)</code>.
+This fully qualified name can be any PTransform class or other callable that
+returns a PTransform. Note, however, that PTransforms that do not accept or
+return schema&rsquo;d data may not be as useable to use from YAML.
+Restoring the schema-ness after a non-schema returning transform can be done
+by using the <code>callable</code> option on <code>MapToFields</code> which takes the entire element
+as an input, e.g.</p><pre tabindex=0><code>- type: PyTransform
+  config:
+    constructor: apache_beam.pkg.module.SomeTransform
+    args: [1, &#39;foo&#39;]
+    kwargs:
+       baz: 3
+- type: MapToFields
+  config:
+    language: python
+    fields:
+      col1:
+        callable: &#39;lambda element: element.col1&#39;
+        output_type: string
+      col2:
+        callable: &#39;lambda element: element.col2&#39;
+        output_type: integer
+</code></pre><p>This can be used to call arbitrary transforms in the Beam SDK, e.g.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: PyTransform
+      name: ReadFromTsv
+      input: {}
+      config:
+        constructor: apache_beam.io.ReadFromCsv
+        kwargs:
+           path: &#39;/path/to/*.tsv&#39;
+           sep: &#39;\t&#39;
+           skip_blank_lines: True
+           true_values: [&#39;yes&#39;]
+           false_values: [&#39;no&#39;]
+           comment: &#39;#&#39;
+           on_bad_lines: &#39;skip&#39;
+           binary: False
+           splittable: False
+</code></pre><h2 id=defining-a-transform-inline-using-__constructor__>Defining a transform inline using <code>__constructor__</code></h2><p>If the desired transform does not exist, one can define it inline as well.
+This is done with the special <code>__constructor__</code> keywords,
+similar to how cross-language transforms are done.</p><p>With the <code>__constuctor__</code> keyword, one defines a Python callable that, on
+invocation, <em>returns</em> the desired transform. The first argument (or <code>source</code>
+keyword argument, if there are no positional arguments)
+is interpreted as the Python code. For example</p><pre tabindex=0><code>- type: PyTransform
+  config:
+    constructor: __constructor__
+    kwargs:
+      source: |
+        import apache_beam as beam
 
-      @Setup
-      public void setup() throws NoSuchMethodException {
-        parser = new HttpdLoglineParser&lt;&gt;(WebEvent.class,
-            &quot;%h %l %u %t \&quot;%r\&quot; %&gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot; \&quot;%{Cookie}i\&quot;&quot;);
-        parser.addParseTarget(&quot;setIP&quot;,                  &quot;IP:connection.client.host&quot;);
-        parser.addParseTarget(&quot;setQueryImg&quot;,            &quot;STRING:request.firstline.uri.query.img&quot;);
-        parser.addParseTarget(&quot;setQueryStringValues&quot;,   &quot;STRING:request.firstline.uri.query.*&quot;);
-      }
+        def create_my_transform(inc):
+          return beam.Map(lambda x: beam.Row(a=x.col2 + inc))
 
-      @ProcessElement
-      public void processElement(ProcessContext c) throws InvalidDissectorException, MissingDissectorsException, DissectionFailure {
-        c.output(parser.parse(c.element()));
-      }
-    })
-  );
-</code></pre><h2 id=analyzing-the-useragent-string>Analyzing the Useragent string</h2><h3 id=summary-1>Summary</h3><p>Parse and analyze the useragent string and extract as many relevant attributes as possible.</p><h3 id=project-page-1>Project page</h3><p><a href=https://github.com/nielsbasjes/yauaa>https://github.com/nielsbasjes/yauaa</a></p><h3 id=license-1>License</h3><p>Apache License 2.0</p><h3 id=download-1>Download</h3><pre><code>&lt;dependency&gt;
-  &lt;groupId&gt;nl.basjes.parse.useragent&lt;/groupId&gt;
-  &lt;artifactId&gt;yauaa-beam&lt;/artifactId&gt;
-  &lt;version&gt;4.2&lt;/version&gt;
-&lt;/dependency&gt;
-</code></pre><h3 id=code-example-1>Code example</h3><pre><code>PCollection&lt;WebEvent&gt; filledWebEvents = input
-    .apply(&quot;Extract Elements from Useragent&quot;,
-      ParDo.of(new UserAgentAnalysisDoFn&lt;WebEvent&gt;() {
-        @Override
-        public String getUserAgentString(WebEvent record) {
-          return record.useragent;
-        }
+      inc: 10
+</code></pre><p>will apply <code>beam.Map(lambda x: beam.Row(a=x.col2 + 10))</code> to the incoming
+PCollection.</p><p>As a class object can be invoked as its own constructor, this allows one to
+define a <code>beam.PTransform</code> inline, e.g.</p><pre tabindex=0><code>- type: PyTransform
+  config:
+    constructor: __constructor__
+    kwargs:
+      source: |
+        class MyPTransform(beam.PTransform):
+          def __init__(self, inc):
+            self._inc = inc
+          def expand(self, pcoll):
+            return pcoll | beam.Map(lambda x: beam.Row(a=x.col2 + self._inc))
 
-        @YauaaField(&quot;DeviceClass&quot;)
-        public void setDC(WebEvent record, String value) {
-          record.deviceClass = value;
-        }
+      inc: 10
+</code></pre><p>which works exactly as one would expect.</p><h2 id=defining-a-transform-inline-using-__callable__>Defining a transform inline using <code>__callable__</code></h2><p>The <code>__callable__</code> keyword works similarly, but instead of defining a
+callable that returns an applicable <code>PTransform</code> one simply defines the
+expansion to be performed as a callable. This is analogous to BeamPython&rsquo;s
+<code>ptransform.ptransform_fn</code> decorator.</p><p>In this case one can simply write</p><pre tabindex=0><code>- type: PyTransform
+  config:
+    constructor: __callable__
+    kwargs:
+      source: |
+        def my_ptransform(pcoll, inc):
+          return pcoll | beam.Map(lambda x: beam.Row(a=x.col2 + inc))
 
-        @YauaaField(&quot;AgentNameVersion&quot;)
-        public void setANV(WebEvent record, String value) {
-          record.agentNameVersion = value;
-        }
-    }));
+      inc: 10
+</code></pre><h1 id=external-transforms>External transforms</h1><p>One can also invoke PTransforms define elsewhere via a <code>python</code> provider,
+for example</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - ...
+    - type: MyTransform
+      config:
+        kwarg: whatever
+
+providers:
+  - ...
+  - type: python
+    input: ...
+    config:
+      packages:
+        - &#39;some_pypi_package&gt;=version&#39;
+    transforms:
+      MyTransform: &#39;pkg.module.MyTransform&#39;
+</code></pre><p>These can be defined inline as well, with or without dependencies, e.g.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - ...
+    - type: ToCase
+      input: ...
+      config:
+        upper: True
+
+providers:
+  - type: python
+    config: {}
+    transforms:
+      &#39;ToCase&#39;: |
+        @beam.ptransform_fn
+        def ToCase(pcoll, upper):
+          if upper:
+            return pcoll | beam.Map(lambda x: str(x).upper())
+          else:
+            return pcoll | beam.Map(lambda x: str(x).lower())
 </code></pre></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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-wrapper><div class=wrapper-grid><div class=footer__cols__col><div class=footer__c [...]
 <a href=https://www.apache.org>The Apache Software Foundation</a>
 | <a href=/privacy_policy>Privacy Policy</a>
diff --git a/website/generated-content/documentation/sdks/scala/index.html b/website/generated-content/documentation/sdks/yaml-udf/index.html
similarity index 52%
copy from website/generated-content/documentation/sdks/scala/index.html
copy to website/generated-content/documentation/sdks/yaml-udf/index.html
index ef716185eeb..616b06ca511 100644
--- a/website/generated-content/documentation/sdks/scala/index.html
+++ b/website/generated-content/documentation/sdks/yaml-udf/index.html
@@ -1,4 +1,4 @@
-<!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 Scala SDK</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  [...]
+<!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 YAML UDFs</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  [...]
 <script type=text/javascript src=/js/language-switch-v2.min.121952b7980b920320ab229551857669209945e39b05ba2b433a565385ca44c6.js defer></script>
 <script type=text/javascript src=/js/fix-menu.min.039174b67107465f2090a493f91e126f7aa797f29420f9edab8a54d9dd4b3d2d.js defer></script>
 <script type=text/javascript src=/js/section-nav.min.1405fd5e70fab5f6c54037c269b1d137487d8f3d1b3009032525f6db3fbce991.js defer></script>
@@ -8,7 +8,7 @@
 <script type=text/javascript src=/js/calendar.min.336664054fa0f52b08bbd4e3c59b5cb6d63dcfb2b4d602839746516b0817446b.js defer></script>
 <script type=text/javascript src=/js/fix-playground-nested-scroll.min.0283f1037cb1b9d5074c6eaf041292b524a8148a7cdb803d5ccd6d1fc4eb3253.js defer></script>
 <script type=text/javascript src=/js/anchor-content-jump-fix.min.22d3240f81632e4c11179b9d2aaf37a40da9414333c43aa97344e8b21a7df0e4.js defer></script>
-<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/scala/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css><script as [...]
+<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/yaml-udf/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css><script [...]
 <script>(function(e,t,n,s,o,i,a){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,i=t.createElement(n),a=t.getElementsByTagName(n)[0],i.async=1,i.src=s,a.parentNode.insertBefore(i,a)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-73650088-1","auto"),ga("send","pageview")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:2182 [...]
 <a class=navbar-link href=/get-started/>Get Started</a>
 <a class=navbar-link href=/documentation/>Documentation</a>
@@ -20,7 +20,7 @@
 <span class=sr-only>Toggle navigation</span>
 <span class=icon-bar></span>
 <span class=icon-bar></span>
-<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
+<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
 <a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
@@ -28,7 +28,7 @@
 <a class=navbar-link href=/community/>Community</a>
 <a class=navbar-link href=/contribute/>Contribute</a>
 <a class=navbar-link href=/blog/>Blog</a>
-<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
 &nbsp;Apache
 <span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
 <a type=button onclick=endSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M21.122 20.827 4.727 4.432M21.122 4.43 4.727 20.827"/></svg></a></div></div></nav><div class=header-push></div><div class="top-banners swiper"><div class=swiper-wrapper><div class=swiper-slide><a href=https://beamcollege.dev/><img class=banner-img-desktop src=/images/c [...]
@@ -36,8 +36,142 @@
 <img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
-<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
-Scio aims to be a thin wrapper on top of Beam while offering idiomatic Scala style API.</p><p>Learn more about Scio <a href=https://spotify.github.io/scio/>here</a>.</p></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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_cir [...]
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+get data into the correct shape. The simplest of these is <code>MaptoFields</code>
+which creates records with new fields defined in terms of the input fields.</p><h2 id=field-renames>Field renames</h2><p>To rename fields one can write</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    fields:
+      new_col1: col1
+      new_col2: col2
+</code></pre><p>will result in an output where each record has two fields,
+<code>new_col1</code> and <code>new_col2</code>, whose values are those of <code>col1</code> and <code>col2</code>
+respectively (which are the names of two fields from the input schema).</p><p>One can specify the append parameter which indicates the original fields should
+be retained similar to the use of <code>*</code> in an SQL select statement. For example</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    append: true
+    fields:
+      new_col1: col1
+      new_col2: col2
+</code></pre><p>will output records that have <code>new_col1</code> and <code>new_col2</code> as <em>additional</em>
+fields. When the append field is specified, one can drop fields as well, e.g.</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    append: true
+    drop:
+      - col3
+    fields:
+      new_col1: col1
+      new_col2: col2
+</code></pre><p>which includes all original fiels <em>except</em> col3 in addition to outputting the
+two new ones.</p><h2 id=mapping-functions>Mapping functions</h2><p>Of course one may want to do transformations beyond just dropping and renaming
+fields. Beam YAML has the ability to inline simple UDFs.
+This requires a language specification. For example, we can provide a
+Python expression referencing the input fields</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col: &#34;col1.upper()&#34;
+      another_col: &#34;col2 + col3&#34;
+</code></pre><p>In addition, one can provide a full Python callable that takes the row as an
+argument to do more complex mappings
+(see <a href=https://beam.apache.org/releases/pydoc/current/apache_beam.utils.python_callable.html#apache_beam.utils.python_callable.PythonCallableWithSource>PythonCallableSource</a>
+for acceptable formats). Thus one can write</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col:
+        callable: |
+          import re
+          def my_mapping(row):
+            if re.match(&#34;[0-9]+&#34;, row.col1) and row.col2 &gt; 0:
+              return &#34;good&#34;
+            else:
+              return &#34;bad&#34;
+</code></pre><p>Once one reaches a certain level of complexity, it may be preferable to package
+this up as a dependency and simply refer to it by fully qualified name, e.g.</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col:
+        callable: pkg.module.fn
+</code></pre><p>Currently, in addition to Python, Java, SQL, and JavaScript (experimental)
+expressions are supported as well</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: sql
+    fields:
+      new_col: &#34;UPPER(col1)&#34;
+      another_col: &#34;col2 + col3&#34;
+</code></pre><h2 id=flatmap>FlatMap</h2><p>Sometimes it may be desirable to emit more (or less) than one record for each
+input record. This can be accomplished by mapping to an iterable type and
+following the mapping with an Explode operation, e.g.</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col: &#34;[col1.upper(), col1.lower(), col1.title()]&#34;
+      another_col: &#34;col2 + col3&#34;
+- type: Explode
+  config:
+    fields: new_col
+</code></pre><p>will result in three output records for every input record.</p><p>If more than one record is to be exploded, one must specify whether the cross
+product over all fields should be taken. For example</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col: &#34;[col1.upper(), col1.lower(), col1.title()]&#34;
+      another_col: &#34;[col2 - 1, col2, col2 + 1]&#34;
+- type: Explode
+  config:
+    fields: [new_col, another_col]
+    cross_product: true
+</code></pre><p>will emit nine records whereas</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col: &#34;[col1.upper(), col1.lower(), col1.title()]&#34;
+      another_col: &#34;[col2 - 1, col2, col2 + 1]&#34;
+- type: Explode
+  config:
+    fields: [new_col, another_col]
+    cross_product: false
+</code></pre><p>will only emit three.</p><p>The <code>Explode</code> operation can be used on its own if the field in question is
+already an iterable type.</p><pre tabindex=0><code>- type: Explode
+  config:
+    fields: [col1]
+</code></pre><h2 id=filtering>Filtering</h2><p>Sometimes it can be desirable to only keep records that satisfy a certain
+criteria. This can be accomplished with a <code>Filter</code> transform, e.g.</p><pre tabindex=0><code>- type: Filter
+  config:
+    language: sql
+    keep: &#34;col2 &gt; 0&#34;
+</code></pre><h2 id=types>Types</h2><p>Beam will try to infer the types involved in the mappings, but sometimes this
+is not possible. In these cases one can explicitly denote the expected output
+type, e.g.</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col:
+        expression: &#34;col1.upper()&#34;
+        output_type: string
+</code></pre><p>The expected type is given in json schema notation, with the addition that
+a top-level basic types may be given as a literal string rather than requiring
+a <code>{type: 'basic_type_name'}</code> nesting.</p><pre tabindex=0><code>- type: MapToFields
+  config:
+    language: python
+    fields:
+      new_col:
+        expression: &#34;col1.upper()&#34;
+        output_type: string
+      another_col:
+        expression: &#34;beam.Row(a=col1, b=[col2])&#34;
+        output_type:
+          type: &#39;object&#39;
+          properties:
+            a:
+              type: &#39;string&#39;
+            b:
+              type: &#39;array&#39;
+              items:
+                type: &#39;number&#39;
+</code></pre><p>This can be especially useful to resolve errors involving the inability to
+handle the <code>beam:logical:pythonsdk_any:v1</code> type.</p></div></div><footer class=footer><div class=footer__contained><div class=footer__cols><div class="footer__cols__col footer__cols__col__logos"><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-wrapper><div class=wrapper-grid [...]
 <a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/documentation/sdks/yaml/index.html b/website/generated-content/documentation/sdks/yaml/index.html
new file mode 100644
index 00000000000..115182eb4e3
--- /dev/null
+++ b/website/generated-content/documentation/sdks/yaml/index.html
@@ -0,0 +1,469 @@
+<!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 YAML API</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 [...]
+<script type=text/javascript src=/js/language-switch-v2.min.121952b7980b920320ab229551857669209945e39b05ba2b433a565385ca44c6.js defer></script>
+<script type=text/javascript src=/js/fix-menu.min.039174b67107465f2090a493f91e126f7aa797f29420f9edab8a54d9dd4b3d2d.js defer></script>
+<script type=text/javascript src=/js/section-nav.min.1405fd5e70fab5f6c54037c269b1d137487d8f3d1b3009032525f6db3fbce991.js defer></script>
+<script type=text/javascript src=/js/page-nav.min.af231204c9c52c5089d53a4c02739eacbb7f939e3be1c6ffcc212e0ac4dbf879.js defer></script>
+<script type=text/javascript src=/js/expandable-list.min.75a4526624a3b8898fe7fb9e3428c205b581f8b38c7926922467aef17eac69f2.js defer></script>
+<script type=text/javascript src=/js/copy-to-clipboard.min.364c06423d7e8993fc42bb4abc38c03195bc8386db26d18774ce775d08d5b18d.js defer></script>
+<script type=text/javascript src=/js/calendar.min.336664054fa0f52b08bbd4e3c59b5cb6d63dcfb2b4d602839746516b0817446b.js defer></script>
+<script type=text/javascript src=/js/fix-playground-nested-scroll.min.0283f1037cb1b9d5074c6eaf041292b524a8148a7cdb803d5ccd6d1fc4eb3253.js defer></script>
+<script type=text/javascript src=/js/anchor-content-jump-fix.min.22d3240f81632e4c11179b9d2aaf37a40da9414333c43aa97344e8b21a7df0e4.js defer></script>
+<link rel=alternate type=application/rss+xml title="Apache Beam" href=/feed.xml><link rel=canonical href=/documentation/sdks/yaml/ data-proofer-ignore><link rel="shortcut icon" type=image/x-icon href=/images/favicon.ico><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.4.1/css/all.css integrity=sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz crossorigin=anonymous><link rel=stylesheet href=https://unpkg.com/swiper@8/swiper-bundle.min.css><script asy [...]
+<script>(function(e,t,n,s,o,i,a){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,i=t.createElement(n),a=t.getElementsByTagName(n)[0],i.async=1,i.src=s,a.parentNode.insertBefore(i,a)})(window,document,"script","//www.google-analytics.com/analytics.js","ga"),ga("create","UA-73650088-1","auto"),ga("send","pageview")</script><script>(function(e,t,n,s,o,i){e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:2182 [...]
+<a class=navbar-link href=/get-started/>Get Started</a>
+<a class=navbar-link href=/documentation/>Documentation</a>
+<button type=button class="navbar-toggle menu-open" aria-expanded=false aria-controls=navbar onclick=openMenu()>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span>
+<span class=icon-bar></span>
+<span class=icon-bar></span></button></div><div class="navbar-mask closed"></div><div id=navbar class="navbar-container closed"><button type=button class=navbar-toggle aria-expanded=false aria-controls=navbar id=closeMenu>
+<span class=sr-only>Toggle navigation</span>
+<span class=icon-bar></span>
+<span class=icon-bar></span>
+<span class=icon-bar></span></button><ul class="nav navbar-nav"><li><div class=searchBar-mobile><script>(function(){var t,n="012923275103528129024:4emlchv9wzi",e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cse.google.com/cse.js?cx="+n,t=document.getElementsByTagName("script")[0],t.parentNode.insertBefore(e,t)})()</script><gcse:search></gcse:search></div></li><li><a class=navbar-link href=/about>About</a></li><li><a class=navbar-link href=/get-start [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class="dropdown-menu dropdown-menu-right"><li><a target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a target=_blank href=https://www.apache.org/licenses/>License</ [...]
+<a class=navbar-link href=/get-started/>Get Started</a><li class="dropdown navbar-dropdown navbar-dropdown-documentation"><a href=# class="dropdown-toggle navbar-link" role=button aria-haspopup=true aria-expanded=false>Documentation
+<span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="11" fill="none" viewBox="0 0 12 11"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.666 4.535 5.847 9.108 1.444 4.535"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link href=/documentation/>General</a></li><li><a class=navbar-dropdown-menu-link href=/documentation/sdks/java/>Languages</a></li><li><a class=navbar-dropdown-menu-link href=/documentati [...]
+<a class=navbar-link href=/community/>Community</a>
+<a class=navbar-link href=/contribute/>Contribute</a>
+<a class=navbar-link href=/blog/>Blog</a>
+<a class=navbar-link href=/case-studies/>Case Studies</a></div><div id=iconsBar><a type=button onclick=showSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M10.191 17c3.866.0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm11 4-6-6"/></svg></a><a target=_blank href=https://github.com/apache/beam/edit/master/website/www/site/content/en/docum [...]
+&nbsp;Apache
+<span class=arrow-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 20 20"><circle cx="10" cy="10" r="10" fill="#ff6d00"/><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.535 5.28l4.573 4.818-4.573 4.403"/></svg></span></a><ul class=dropdown-menu><li><a class=navbar-dropdown-menu-link target=_blank href=https://www.apache.org/>ASF Homepage</a></li><li><a class=navbar-dropdown-menu-link target=_blank href= [...]
+<a type=button onclick=endSearch()><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25"><path stroke="#ff6d00" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.75" d="M21.122 20.827 4.727 4.432M21.122 4.43 4.727 20.827"/></svg></a></div></div></nav><div class=header-push></div><div class="top-banners swiper"><div class=swiper-wrapper><div class=swiper-slide><a href=https://beamcollege.dev/><img class=banner-img-desktop src=/images/c [...]
+<img class=banner-img-mobile src=/images/college_2023_banner_mobile.png alt=banner-mobile></a></div><div class=swiper-slide><a href=https://tour.beam.apache.org><img class=banner-img-desktop src=/images/banners/tour-of-beam/tour-of-beam-desktop.png alt="Start Tour of Beam">
+<img class=banner-img-mobile src=/images/banners/tour-of-beam/tour-of-beam-mobile.png alt="Start Tour of Beam"></a></div><div class=swiper-slide><a href=https://beam.apache.org/documentation/ml/overview/><img class=banner-img-desktop src=/images/banners/machine-learning/machine-learning-desktop.jpg alt="Machine Learning">
+<img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
+<script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
+<script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
+processing pipelines, it often still has too high a barrier for
+getting started and authoring simple pipelines. Even setting up the
+environment, installing the dependencies, and setting up the project
+can be an overwhelming amount of boilerplate for some (though
+<a href=https://beam.apache.org/blog/beam-starter-projects/>https://beam.apache.org/blog/beam-starter-projects/</a> has gone a long
+way in making this easier).</p><p>Here we provide a simple declarative syntax for describing pipelines
+that does not require coding experience or learning how to use an
+SDK—any text editor will do.
+Some installation may be required to actually <em>execute</em> a pipeline, but
+we envision various services (such as Dataflow) to accept yaml pipelines
+directly obviating the need for even that in the future.
+We also anticipate the ability to generate code directly from these
+higher-level yaml descriptions, should one want to graduate to a full
+Beam SDK (and possibly the other direction as well as far as possible).</p><p>Though we intend this syntax to be easily authored (and read) directly by
+humans, this may also prove a useful intermediate representation for
+tools to use as well, either as output (e.g. a pipeline authoring GUI)
+or consumption (e.g. a lineage analysis tool) and expect it to be more
+easily manipulated and semantically meaningful than the Beam protos
+themselves (which concern themselves more with execution).</p><p>It should be noted that everything here is still under development, but any
+features already included are considered stable. Feedback is welcome at
+<a href=mailto:dev@apache.beam.org>dev@apache.beam.org</a>.</p><h2 id=running-pipelines>Running pipelines</h2><p>The Beam yaml parser is currently included as part of the Apache Beam Python SDK.
+This can be installed (e.g. within a virtual environment) as</p><pre tabindex=0><code>pip install apache_beam[yaml,gcp]
+</code></pre><p>In addition, several of the provided transforms (such as SQL) are implemented
+in Java and their expansion will require a working Java interpeter. (The
+requisite artifacts will be automatically downloaded from the apache maven
+repositories, so no further installs will be required.)
+Docker is also currently required for local execution of these
+cross-language-requiring transforms, but not for submission to a non-local
+runner such as Flink or Dataflow.</p><p>Once the prerequisites are installed, you can execute a pipeline defined
+in a yaml file as</p><pre tabindex=0><code>python -m apache_beam.yaml.main --yaml_pipeline_file=/path/to/pipeline.yaml [other pipeline options such as the runner]
+</code></pre><p>You can do a dry-run of your pipeline using the render runner to see what the
+execution graph is, e.g.</p><pre tabindex=0><code>python -m apache_beam.yaml.main --yaml_pipeline_file=/path/to/pipeline.yaml --runner=apache_beam.runners.render.RenderRunner --render_output=out.png [--render_port=0]
+</code></pre><p>(This requires <a href=https://graphviz.org/download/>Graphviz</a> to be installed to render the pipeline.)</p><p>We intend to support running a pipeline on Dataflow by directly passing the
+yaml specification to a template, no local installation of the Beam SDKs required.</p><h2 id=example-pipelines>Example pipelines</h2><p>Here is a simple pipeline that reads some data from csv files and
+writes it out in json format.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+    - type: WriteToJson
+      config:
+        path: /path/to/output.json
+      input: ReadFromCsv
+</code></pre><p>We can also add a transformation</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+    - type: Filter
+      config:
+        language: python
+        keep: &#34;col3 &gt; 100&#34;
+      input: ReadFromCsv
+    - type: WriteToJson
+      config:
+        path: /path/to/output.json
+      input: Filter
+</code></pre><p>or two.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+    - type: Filter
+      config:
+        language: python
+        keep: &#34;col3 &gt; 100&#34;
+      input: ReadFromCsv
+    - type: Sql
+      config:
+        query: &#34;select col1, count(*) as cnt from PCOLLECTION group by col1&#34;
+      input: Filter
+    - type: WriteToJson
+      config:
+        path: /path/to/output.json
+      input: Sql
+</code></pre><p>Transforms can be named to help with monitoring and debugging.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      name: ReadMyData
+      config:
+        path: /path/to/input*.csv
+    - type: Filter
+      name: KeepBigRecords
+      config:
+        language: python
+        keep: &#34;col3 &gt; 100&#34;
+      input: ReadMyData
+    - type: Sql
+      name: MySqlTransform
+      config:
+        query: &#34;select col1, count(*) as cnt from PCOLLECTION group by col1&#34;
+      input: KeepBigRecords
+    - type: WriteToJson
+      name: WriteTheOutput
+      config:
+        path: /path/to/output.json
+      input: MySqlTransform
+</code></pre><p>(This is also needed to disambiguate if more than one transform of the same
+type is used.)</p><p>If the pipeline is linear, we can let the inputs be implicit by designating
+the pipeline as a <code>chain</code> type.</p><pre tabindex=0><code>pipeline:
+  type: chain
+
+  transforms:
+    - type: ReadFromCsv
+      config:
+        path: /path/to/input*.csv
+    - type: Filter
+      config:
+        language: python
+        keep: &#34;col3 &gt; 100&#34;
+    - type: Sql
+      name: MySqlTransform
+      config:
+        query: &#34;select col1, count(*) as cnt from PCOLLECTION group by col1&#34;
+    - type: WriteToJson
+      config:
+        path: /path/to/output.json
+</code></pre><p>As syntactic sugar, we can name the first and last transforms in our pipeline
+as <code>source</code> and <code>sink</code>.</p><pre tabindex=0><code>pipeline:
+  type: chain
+
+  source:
+    type: ReadFromCsv
+    config:
+      path: /path/to/input*.csv
+
+  transforms:
+    - type: Filter
+      config:
+        language: python
+        keep: &#34;col3 &gt; 100&#34;
+
+    - type: Sql
+      name: MySqlTransform
+      config:
+        query: &#34;select col1, count(*) as cnt from PCOLLECTION group by col1&#34;
+
+  sink:
+    type: WriteToJson
+    config:
+      path: /path/to/output.json
+</code></pre><p>Arbitrary non-linear pipelines are supported as well, though in this case
+inputs must be explicitly named.
+Here we read two sources, join them, and write two outputs.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      name: ReadLeft
+      config:
+        path: /path/to/left*.csv
+
+    - type: ReadFromCsv
+      name: ReadRight
+      config:
+        path: /path/to/right*.csv
+
+    - type: Sql
+      config:
+        query: select A.col1, B.col2 from A join B using (col3)
+      input:
+        A: ReadLeft
+        B: ReadRight
+
+    - type: WriteToJson
+      name: WriteAll
+      input: Sql
+      config:
+        path: /path/to/all.json
+
+    - type: Filter
+      name: FilterToBig
+      input: Sql
+      config:
+        language: python
+        keep: &#34;col2 &gt; 100&#34;
+
+    - type: WriteToCsv
+      name: WriteBig
+      input: FilterToBig
+      config:
+        path: /path/to/big.csv
+</code></pre><p>One can, however, nest <code>chains</code> within a non-linear pipeline.
+For example, here <code>ExtraProcessingForBigRows</code> is itself a &ldquo;chain&rdquo; transform
+that has a single input and contains its own sink.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromCsv
+      name: ReadLeft
+      config:
+        path: /path/to/left*.csv
+
+    - type: ReadFromCsv
+      name: ReadRight
+      config:
+        path: /path/to/right*.csv
+
+    - type: Sql
+      config:
+        query: select A.col1, B.col2 from A join B using (col3)
+      input:
+        A: ReadLeft
+        B: ReadRight
+
+    - type: WriteToJson
+      name: WriteAll
+      input: Sql
+      config:
+        path: /path/to/all.json
+
+    - type: chain
+      name: ExtraProcessingForBigRows
+      input: Sql
+      transforms:
+        - type: Filter
+          config:
+            language: python
+            keep: &#34;col2 &gt; 100&#34;
+        - type: Filter
+          config:
+            language: python
+            keep: &#34;len(col1) &gt; 10&#34;
+        - type: Filter
+          config:
+            language: python
+            keep: &#34;col1 &gt; &#39;z&#39;&#34;
+      sink:
+        type: WriteToCsv
+        config:
+          path: /path/to/big.csv
+</code></pre><h2 id=windowing>Windowing</h2><p>This API can be used to define both streaming and batch pipelines.
+In order to meaningfully aggregate elements in a streaming pipeline,
+some kind of windowing is typically required. Beam&rsquo;s
+<a href=https://beam.apache.org/documentation/programming-guide/#windowing>windowing</a>
+and <a href=https://beam.apache.org/documentation/programming-guide/#triggers>triggering</a>
+can be declared using the same WindowInto transform available in all other
+SDKs.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromPubSub
+      config:
+        topic: myPubSubTopic
+        format: json
+        schema:
+          type: object
+          properties:
+            col1: {type: string}
+            col2: {type: integer}
+            col3: {type: number}
+    - type: WindowInto
+      windowing:
+        type: fixed
+        size: 60s
+    - type: SomeGroupingTransform
+      config:
+        arg: ...
+    - type: WriteToPubSub
+      config:
+        topic: anotherPubSubTopic
+        format: json
+</code></pre><p>Rather than using an explicit <code>WindowInto</code> operation, one may instead tag a
+transform itself with a specified windowing which will cause its inputs
+(and hence the transform itself) to be applied with that windowing.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromPubSub
+      config:
+        topic: myPubSubTopic
+        format: ...
+        schema: ...
+    - type: SomeGroupingTransform
+      config:
+        arg: ...
+      windowing:
+        type: sliding
+        size: 60s
+        period: 10s
+    - type: WriteToPubSub
+      config:
+        topic: anotherPubSubTopic
+        format: json
+</code></pre><p>Note that the <code>Sql</code> operation itself is often a from of aggregation, and
+applying a windowing (or consuming an already windowed input) will cause all
+grouping to be done per window.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromPubSub
+      config:
+        topic: myPubSubTopic
+        format: ...
+        schema: ...
+    - type: Sql
+      config:
+        query: &#34;select col1, count(*) as c from PCOLLECTION&#34;
+      windowing:
+        type: sessions
+        gap: 60s
+    - type: WriteToPubSub
+      config:
+        topic: anotherPubSubTopic
+        format: json
+</code></pre><p>The specified windowing is applied to all inputs, in this case resulting in
+a join per window.</p><pre tabindex=0><code>pipeline:
+  transforms:
+    - type: ReadFromPubSub
+      name: ReadLeft
+      config:
+        topic: leftTopic
+        format: ...
+        schema: ...
+
+    - type: ReadFromPubSub
+      name: ReadRight
+      config:
+        topic: rightTopic
+        format: ...
+        schema: ...
+
+    - type: Sql
+      config:
+        query: select A.col1, B.col2 from A join B using (col3)
+      input:
+        A: ReadLeft
+        B: ReadRight
+      windowing:
+        type: fixed
+        size: 60s
+</code></pre><p>For a transform with no inputs, the specified windowing is instead applied to
+its output(s). As per the Beam model, the windowing is then inherited by all
+consuming operations. This is especially useful for root operations like Read.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromPubSub
+      config:
+        topic: myPubSubTopic
+        format: ...
+        schema: ...
+      windowing:
+        type: fixed
+        size: 60s
+    - type: Sql
+      config:
+        query: &#34;select col1, count(*) as c from PCOLLECTION&#34;
+    - type: WriteToPubSub
+      config:
+        topic: anotherPubSubTopic
+        format: json
+</code></pre><p>One can also specify windowing at the top level of a pipeline (or composite),
+which is a shorthand to simply applying this same windowing to all root
+operations (that don&rsquo;t otherwise specify their own windowing),
+and can be an effective way to apply it everywhere.</p><pre tabindex=0><code>pipeline:
+  type: chain
+  transforms:
+    - type: ReadFromPubSub
+      config:
+        topic: myPubSubTopic
+        format: ...
+        schema: ...
+    - type: Sql
+      config:
+        query: &#34;select col1, count(*) as c from PCOLLECTION&#34;
+    - type: WriteToPubSub
+      config:
+        topic: anotherPubSubTopic
+        format: json
+  windowing:
+    type: fixed
+    size: 60
+</code></pre><p>Note that all these windowing specifications are compatible with the <code>source</code>
+and <code>sink</code> syntax as well</p><pre tabindex=0><code>pipeline:
+  type: chain
+
+  source:
+    type: ReadFromPubSub
+    config:
+      topic: myPubSubTopic
+      format: ...
+      schema: ...
+    windowing:
+      type: fixed
+      size: 10s
+
+  transforms:
+    - type: Sql
+      config:
+        query: &#34;select col1, count(*) as c from PCOLLECTION&#34;
+
+  sink:
+    type: WriteToCsv
+    config:
+      path: /path/to/output.json
+    windowing:
+      type: fixed
+      size: 5m
+</code></pre><h2 id=providers>Providers</h2><p>Though we aim to offer a large suite of built-in transforms, it is inevitable
+that people will want to be able to author their own. This is made possible
+through the notion of Providers which leverage expansion services and
+schema transforms.</p><p>For example, one could build a jar that vends a
+<a href=https://beam.apache.org/documentation/sdks/python-multi-language-pipelines/>cross language transform</a>
+or <a href=https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/schemas/transforms/SchemaTransformProvider.html>schema transform</a>
+and then use it in a transform as follows</p><pre tabindex=0><code>pipeline:
+  type: chain
+  source:
+    type: ReadFromCsv
+    config:
+      path: /path/to/input*.csv
+
+  transforms:
+    - type: MyCustomTransform
+      config:
+        arg: whatever
+
+  sink:
+    type: WriteToJson
+    config:
+      path: /path/to/output.json
+
+providers:
+  - type: javaJar
+    jar: /path/or/url/to/myExpansionService.jar
+    transforms:
+       MyCustomTransform: &#34;urn:registered:in:expansion:service&#34;
+</code></pre><p>Arbitrary Python transforms can be provided as well, using the syntax</p><pre tabindex=0><code>providers:
+  - type: pythonPackage
+    packages:
+        - my_pypi_package&gt;=version
+        - /path/to/local/package.zip
+    transforms:
+       MyCustomTransform: &#34;pkg.subpkg.PTransformClassOrCallable&#34;
+</code></pre><h2 id=other-resources>Other Resources</h2><ul><li><a href=https://gist.github.com/robertwb/2cb26973f1b1203e8f5f8f88c5764da0>Example pipelines</a></li><li><a href=https://github.com/Polber/beam/tree/jkinard/bug-bash/sdks/python/apache_beam/yaml/examples>More examples</a></li><li><a href=https://gist.github.com/robertwb/64e2f51ff88320eeb6ffd96634202df7>Transform glossary</a></li></ul><p>Additional documentation in this directory</p><ul><li><a href=yaml_mapping.md>Mapping</a>< [...]
+<a href=https://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></div><div class="footer__cols__col footer__cols__col__logos"><div class=footer__cols__col--group><div class=footer__cols__col__logo><a href=https://github.com/apache/beam><im [...]
\ No newline at end of file
diff --git a/website/generated-content/images/logos/sdks/yaml.png b/website/generated-content/images/logos/sdks/yaml.png
new file mode 100644
index 00000000000..1f8b192114a
Binary files /dev/null and b/website/generated-content/images/logos/sdks/yaml.png differ
diff --git a/website/generated-content/index.html b/website/generated-content/index.html
index a3916375e73..5f468cde037 100644
--- a/website/generated-content/index.html
+++ b/website/generated-content/index.html
@@ -34,7 +34,7 @@
 <img class=banner-img-mobile src=/images/banners/machine-learning/machine-learning-mobile.jpg alt="Machine Learning"></a></div></div><div class=swiper-pagination></div></div><script src=/js/swiper-bundle.min.min.e0e8f81b0b15728d35ff73c07f42ddbb17a108d6f23df4953cb3e60df7ade675.js></script>
 <script src=/js/sliders/top-banners.min.91104c476b3d8123ebee5ed9a8168556ec546abb698549551b38a0cee187ee1c.js></script>
 <script>function showSearch(){addPlaceholder();var e,t=document.querySelector(".searchBar");t.classList.remove("disappear"),e=document.querySelector("#iconsBar"),e.classList.add("disappear")}function addPlaceholder(){$("input:text").attr("placeholder","What are you looking for?")}function endSearch(){var e,t=document.querySelector(".searchBar");t.classList.add("disappear"),e=document.querySelector("#iconsBar"),e.classList.remove("disappear")}function blockScroll(){$("body").toggleClass(" [...]
-<span>Link to GitHub Repo</span></button></a></div></div><div id=hero-mobile class=hero-mobile><div class=hero-content><h3>Introducing Apache Beam</h3><h1>The Unified Apache Beam Model</h1><h2>The easiest way to do batch and streaming data processing. Write once, run anywhere data processing for mission-critical production workloads.</h2></div></div><div class=ctas><div class=ctas_row><a class=ctas_button href=/get-started/beam-overview/><img src=images/info_icon.svg> Learn more</a></div [...]
+<span>Link to GitHub Repo</span></button></a></div></div><div id=hero-mobile class=hero-mobile><div class=hero-content><h3>Introducing Apache Beam</h3><h1>The Unified Apache Beam Model</h1><h2>The easiest way to do batch and streaming data processing. Write once, run anywhere data processing for mission-critical production workloads.</h2></div></div><div class=ctas><div class=ctas_row><a class=ctas_button href=/get-started/beam-overview/><img src=images/info_icon.svg> Learn more</a></div [...]
 You can try the Apache Beam examples at <a href=https://play.beam.apache.org/>Beam Playground</a>.</p><br><br><div class=playground_or_image><a class=playground__mobile href=https://play.beam.apache.org/><img src=images/playground.png alt="beam playground"></a><div class=playground-wrapper><div class=playground-snippets><div class="language-java playground-snippet" data-sdk=java></div><div class="language-py playground-snippet" data-sdk=python></div><div class="language-go playground-sni [...]
 <img src=/images/arrow-right.svg alt="Go to the case study"></a></div><div class=case-study-row-button-container><a href=https://github.com/apache/beam/blob/master/website/ADD_CASE_STUDY.md class=case-study-primary-button target=_blank rel="noopener noreferrer">Share your story</a></div><div class=quote-img-container><div class=quote-img><img src=images/logos/powered-by/linkedin.png alt="Quote Logo"></div></div></div></div></div><div class=swiper-slide><div class=wrap-slide><div class=qu [...]
 <img src=/images/arrow-right.svg alt="Go to the case study"></a></div><div class=case-study-row-button-container><a href=https://github.com/apache/beam/blob/master/website/ADD_CASE_STUDY.md class=case-study-primary-button target=_blank rel="noopener noreferrer">Share your story</a></div><div class=quote-img-container><div class=quote-img><img src=images/logos/powered-by/octo.png alt="Quote Logo"></div></div></div></div></div><div class=swiper-slide><div class=wrap-slide><div class=quote- [...]
diff --git a/website/generated-content/sitemap.xml b/website/generated-content/sitemap.xml
index ad5ad86bdf8..f957b0e0c6c 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/apache-beam-flink-and-kubernetes-part3/</loc><lastmod>2024-02-08T02:00:15-08:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2024-02-08T02:00:15-08:00</lastmod></url><url><loc>/blog/</loc><lastmod>2024-02-08T02:00:15-08:00</lastmod></url><url><loc>/categories/</loc><lastmod>2024-02-08T02:00:15-08:00</last [...]
\ 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/apache-beam-flink-and-kubernetes-part3/</loc><lastmod>2024-02-08T11:56:06-08:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2024-02-08T11:56:06-08:00</lastmod></url><url><loc>/blog/</loc><lastmod>2024-02-08T11:56:06-08:00</lastmod></url><url><loc>/categories/</loc><lastmod>2024-02-08T11:56:06-08:00</last [...]
\ No newline at end of file