This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 557b8c2f4fa Publishing website 2022/10/28 16:17:22 at commit a953195
557b8c2f4fa is described below
commit 557b8c2f4fa9f139e5f71c9102f2006157b50c31
Author: jenkins <[email protected]>
AuthorDate: Fri Oct 28 16:17:23 2022 +0000
Publishing website 2022/10/28 16:17:22 at commit a953195
---
website/generated-content/documentation/index.xml | 114 ++++++++++++++++++---
.../documentation/programming-guide/index.html | 43 +++++---
website/generated-content/sitemap.xml | 2 +-
3 files changed, 125 insertions(+), 34 deletions(-)
diff --git a/website/generated-content/documentation/index.xml
b/website/generated-content/documentation/index.xml
index 65516094577..d27182ce04b 100644
--- a/website/generated-content/documentation/index.xml
+++ b/website/generated-content/documentation/index.xml
@@ -9248,8 +9248,19 @@ the user ids from a <code>PCollection</code> of
purchases one would write
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
+<div class='language-py 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 class="chroma"><code class="language-py"
data-lang="py"><span class="n">input_pc</span> <span
class="o">=</span> <span class="o">...</span> <span class="c1">#
{&#34;user_id&#34;: ...,&#34;bank&#34;: ...,
&#34;purchase_amount&#34;: ...}</span>
+<span class="n">output_pc</span> <span class="o">=</span> <span
class="n">input_pc</span> <span class="o">|</span> <span
class="n">beam</span><span class="o">.</span><span
class="n">Select</span><span class="p">(</span><span
class="s2">&#34;user_id&#34;</span><span
class="p">)</span></code></pre></div>
+</div>
+</div>
<h5 id="nested-fields"><strong>Nested fields</strong></h5>
-<p>Individual nested fields can be specified using the dot operator. For
example, to select just the postal code from the
+<p class="language-py">Support for Nested fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for Nested fields hasn&rsquo;t been
developed for the Go SDK yet.</p>
+<p class="language-java">Individual nested fields can be specified using
the dot operator. For example, to select just the postal code from the
shipping address one would write</p>
<div class='language-java snippet'>
<div class="notebook-skip code-snippet">
@@ -9259,8 +9270,21 @@ shipping address one would write</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;shippingAddress.postCode&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
+<!--
+<div class='language-py 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 class="chroma"><code class="language-py"
data-lang="py"><span class="n">input_pc</span> <span
class="o">=</span> <span class="o">...</span> <span class="c1">#
{&#34;user_id&#34;: ..., &#34;shipping_address&#34;:
&#34;post_code&#34;: ..., &#34;bank&#34;: ...,
&#34;purchase_amount&#34;: ...}</span>
+<span class="n">output_pc</span> <span class="o">=</span> <span
class="n">input_pc</span> <span class="o">|</span> <span
class="n">beam</span><span class="o">.</span><span
class="n">Select</span><span class="p">(</span><span
class="n">post_code</span><span class="o">=</span><span
class="k">lambda</span> <span class="n">item</span><span
class="p">:</span> <span class="nb">str</span><span class="p">(<
[...]
+</div>
+</div>
+-->
<h5 id="wildcards"><strong>Wildcards</strong></h5>
-<p>The * operator can be specified at any nesting level to represent all
fields at that level. For example, to select all
+<p class="language-py">Support for wildcards hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for wildcards hasn&rsquo;t been
developed for the Go SDK yet.</p>
+<p class="language-java">The * operator can be specified at any nesting
level to represent all fields at that level. For example, to select all
shipping-address fields one would write</p>
<div class='language-java snippet'>
<div class="notebook-skip code-snippet">
@@ -9270,9 +9294,23 @@ shipping-address fields one would write</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;shippingAddress.*&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
+<!--
+<div class='language-py 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 class="chroma"><code class="language-py"
data-lang="py"><span
class="c1">#TODO(https://github.com/apache/beam/issues/23275): Add support for
projecting nested fields</span>
+<span class="n">input_pc</span> <span class="o">=</span> <span
class="o">...</span> <span class="c1"># {&#34;user_id&#34;: ...,
&#34;shipping_address&#34;: &#34;post_code&#34;: ...,
&#34;bank&#34;: ..., &#34;purchase_amount&#34;: ...}</span>
+<span class="n">output_pc</span> <span class="o">=</span> <span
class="n">input_pc</span> <span class="o">|</span> <span
class="n">beam</span><span class="o">.</span><span
class="n">Select</span><span class="p">(</span><span
class="s2">&#34;shipping_address.*&#34;</span><span
class="p">))</span></code></pre></div>
+</div>
+</div>
+-->
<h5 id="arrays"><strong>Arrays</strong></h5>
-<p>An array field, where the array element type is a row, can also have
subfields of the element type addressed. When
+<p class="language-java">An array field, where the array element type is a
row, can also have subfields of the element type addressed. When
selected, the result is an array of the selected subfield type. For
example</p>
+<p class="language-py">Support for Array fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for Array fields hasn&rsquo;t been
developed for the Go SDK yet.</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">
@@ -9281,9 +9319,9 @@ selected, the result is an array of the selected subfield
type. For example</
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;transactions[].bank&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
-<p>Will result in a row containing an array field with element-type string,
containing the list of banks for each
+<p class="language-java">Will result in a row containing an array field
with element-type string, containing the list of banks for each
transaction.</p>
-<p>While the use of [] brackets in the selector is recommended, to make it
clear that array elements are being selected,
+<p class="language-java">While the use of [] brackets in the selector is
recommended, to make it clear that array elements are being selected,
they can be omitted for brevity. In the future, array slicing will be
supported, allowing selection of portions of the
array.</p>
<h5 id="maps"><strong>Maps</strong></h5>
@@ -9317,6 +9355,8 @@ specific keys from the map. For example, given the
following schema:</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchasesByType</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;purchases{}.userId&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
+<p class="language-py">Support for Map fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for Map fields hasn&rsquo;t been
developed for the Go SDK yet.</p>
<p>Will result in a row containing a map field with key-type string and
value-type string. The selected map will contain
all of the keys from the original map, and the values will be the userId
contained in the purchase record.</p>
<p>While the use of {} brackets in the selector is recommended, to make it
clear that map value elements are being selected,
@@ -9339,6 +9379,8 @@ could select only the userId and streetAddress fields as
follows</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span class="o">,</span>
<span class="s">&#34;shippingAddress [...]
</div>
</div>
+<p class="language-py">Support for Nested fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for Nested fields hasn&rsquo;t been
developed for the Go SDK yet.</p>
<p>The resulting <code>PCollection</code> will have the following
schema</p>
<table>
<thead>
@@ -9368,6 +9410,8 @@ could select only the userId and streetAddress fields as
follows</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span class="o">,</span>
<span class="s">&#34;shippingAddress [...]
</div>
</div>
+<p class="language-py">Support for Wildcards hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for Wildcards hasn&rsquo;t been
developed for the Go SDK yet.</p>
<p>Will result in the following schema</p>
<table>
<thead>
@@ -9415,7 +9459,9 @@ selected field will appear as its own array field. For
example</p>
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">fieldNames</span><span class="o">(</span> <span
class="s">&#34;transactions.bank&#34;</span><span
class="o">,</span> <span class="s">&#34;tra [...]
</div>
</div>
-<p>Will result in the following schema</p>
+<p class="language-py">Support for nested fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for nested fields hasn&rsquo;t been
developed for the Go SDK yet.</p>
+<p class="language-java">Will result in the following schema</p>
<table>
<thead>
<tr class="header">
@@ -9434,7 +9480,7 @@ selected field will appear as its own array field. For
example</p>
</tr>
</tbody>
</table>
-<br/>
+<br/></p>
<p>Wildcard selections are equivalent to separately selecting each
field.</p>
<p>Selecting fields nested inside of maps have the same semantics as
arrays. If you select multiple fields from a map
, then each selected field will be expanded to its own map at the top level.
This means that the set of map keys will
@@ -9451,7 +9497,9 @@ a name conflict, as all selected fields are put in the
same row schema. When thi
<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Select</span><span class="o">.</span><span
class="na">flattenedSchema</span><span
class="o">());</span></code></pre></div>
</div>
</div>
-<p>Will result in the following schema</p>
+<p class="language-py">Support for nested fields hasn&rsquo;t been
developed for the Python SDK yet.</p>
+<p class="language-go">Support for nested fields hasn&rsquo;t been
developed for the Go SDK yet.</p>
+<p class="language-java">Will result in the following schema</p>
<table>
<thead>
<tr class="header">
@@ -9502,22 +9550,37 @@ a name conflict, as all selected fields are put in the
same row schema. When thi
</tr>
</tbody>
</table>
-<br/>
+<br/></p>
<h5 id="grouping-aggregations"><strong>Grouping
aggregations</strong></h5>
-<p>The <code>Group</code> transform allows simply grouping data by
any number of fields in the input schema, applying aggregations to
+<p class="language-java">The <code>Group</code> transform allows
simply grouping data by any number of fields in the input schema, applying
aggregations to
those groupings, and storing the result of those aggregations in a new schema
field. The output of the <code>Group</code> transform
has a schema with one field corresponding to each aggregation performed.</p>
-<p>The simplest usage of <code>Group</code> specifies no
aggregations, in which case all inputs matching the provided set of fields
+<p class="language-py">The <code>GroupBy</code> transform allows
simply grouping data by any number of fields in the input schema, applying
aggregations to
+those groupings, and storing the result of those aggregations in a new schema
field. The output of the <code>GroupBy</code> transform
+has a schema with one field corresponding to each aggregation performed.</p>
+<p class="language-java">The simplest usage of <code>Group</code>
specifies no aggregations, in which case all inputs matching the provided set
of fields
+are grouped together into an <code>ITERABLE</code> field. For
example</p>
+<p class="language-py">The simplest usage of <code>GroupBy</code>
specifies no aggregations, in which case all inputs matching the provided set
of fields
are grouped together into an <code>ITERABLE</code> field. For
example</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 class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Group</span><span class="o">.</span><span
class="na">byFieldNames</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span class="o">,</span>
<span class="s">&#34;shippingAddres [...]
+<div class="highlight"><pre class="chroma"><code
class="language-java" data-lang="java"><span
class="n">purchases</span><span class="o">.</span><span
class="na">apply</span><span class="o">(</span><span
class="n">Group</span><span class="o">.</span><span
class="na">byFieldNames</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span class="o">,</span>
<span class="s">&#34;bank&#34;& [...]
</div>
</div>
-<p>The output schema of this is:</p>
+<div class='language-py 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 class="chroma"><code class="language-py"
data-lang="py"><span class="n">input_pc</span> <span
class="o">=</span> <span class="o">...</span> <span class="c1">#
{&#34;user_id&#34;: ...,&#34;bank&#34;: ...,
&#34;purchase_amount&#34;: ...}</span>
+<span class="n">output_pc</span> <span class="o">=</span> <span
class="n">input_pc</span> <span class="o">|</span> <span
class="n">beam</span><span class="o">.</span><span
class="n">GroupBy</span><span class="p">(</span><span
class="s1">&#39;user_id&#39;</span><span
class="p">,</span><span
class="s1">&#39;bank&#39;</span><span
class="p">)</span></code></pre></div>
+</div>
+</div>
+<p class="language-go">Support for schema-aware grouping hasn&rsquo;t
been developed for the Go SDK yet.</p>
+<p class="lanuage-java">The output schema of this is:</p>
<table>
<thead>
<tr class="header">
@@ -9528,7 +9591,7 @@ are grouped together into an <code>ITERABLE</code>
field. For example</
<tbody>
<tr>
<td>key</td>
-<td>ROW{userId:STRING, streetAddress:STRING}</td>
+<td>ROW{userId:STRING, bank:STRING}</td>
</tr>
<tr>
<td>values</td>
@@ -9565,6 +9628,19 @@ output schema:</p>
<span class="o">.</span><span
class="na">aggregateField</span><span class="o">(</span><span
class="s">&#34;costCents&#34;</span><span class="o">,</span>
<span class="n">Top</span><span class="o">.&lt;</span><span
class="n">Long</span><span class="o">&gt;</span><span
class="n">largestLongsFn</span><span class="o">(</span><span
class="n">10</span><span class="o">),</span> <span class="s">&#
[...]
</div>
</div>
+<div class='language-py 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 class="chroma"><code class="language-py"
data-lang="py"><span class="n">input_pc</span> <span
class="o">=</span> <span class="o">...</span> <span class="c1">#
{&#34;user_id&#34;: ..., &#34;item_Id&#34;: ...,
&#34;cost_cents&#34;: ...}</span>
+<span class="n">output_pc</span> <span class="o">=</span> <span
class="n">input_pc</span> <span class="o">|</span> <span
class="n">beam</span><span class="o">.</span><span
class="n">GroupBy</span><span class="p">(</span><span
class="s2">&#34;user_id&#34;</span><span class="p">)</span>
+<span class="o">.</span><span
class="n">aggregate_field</span><span class="p">(</span><span
class="s2">&#34;item_id&#34;</span><span class="p">,</span>
<span class="n">CountCombineFn</span><span class="p">,</span>
<span class="s2">&#34;num_purchases&#34;</span><span
class="p">)</span>
+<span class="o">.</span><span
class="n">aggregate_field</span><span class="p">(</span><span
class="s2">&#34;cost_cents&#34;</span><span class="p">,</span>
<span class="nb">sum</span><span class="p">,</span> <span
class="s2">&#34;total_spendcents&#34;</span><span
class="p">)</span>
+<span class="o">.</span><span
class="n">aggregate_field</span><span class="p">(</span><span
class="s2">&#34;cost_cents&#34;</span><span class="p">,</span>
<span class="n">TopCombineFn</span><span class="p">,</span>
<span class="s2">&#34;top_purchases&#34;</span><span
class="p">)</span></code></pre></div>
+</div>
+</div>
+<p class="language-go">Support for schema-aware grouping hasn&rsquo;t
been developed for the Go SDK yet.</p>
<p>The result of this aggregation will have the following schema:</p>
<table>
<thead>
@@ -9592,6 +9668,8 @@ subset of fields. For example, the following examples
uses the Purchases schema
that are likely associated with that transaction (both the user and product
match that in the transaction). This is a
&ldquo;natural join&rdquo; - one in which the same field names are
used on both the left-hand and right-hand sides of the join -
and is specified with the <code>using</code> keyword:</p>
+<p class="language-py">Support for joins hasn&rsquo;t been developed
for the Python SDK yet.</p>
+<p class="language-go">Support for joins hasn&rsquo;t been developed
for the Go SDK yet.</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">
@@ -9603,7 +9681,7 @@ and is specified with the <code>using</code>
keyword:</p>
<span class="n">Join</span><span class="o">.</span><span
class="na">innerJoin</span><span class="o">(</span><span
class="n">reviews</span><span class="o">).</span><span
class="na">using</span><span class="o">(</span><span
class="s">&#34;userId&#34;</span><span class="o">,</span>
<span class="s">&#34;productId&#34;</span><span
class="o">));</span></code></pre></div>
</div>
</div>
-<p>The resulting schema is the following:</p>
+<p class="language-java">The resulting schema is the following:</p>
<table>
<thead>
<tr class="header">
@@ -9622,10 +9700,12 @@ and is specified with the <code>using</code>
keyword:</p>
</tr>
</tbody>
</table>
-<br/>
+<br/></p>
<p>Each resulting row contains one Transaction and one Review that matched
the join condition.</p>
<p>If the fields to match in the two schemas have different names, then the
on function can be used. For example, if the
Review schema named those fields differently than the Transaction schema, then
we could write the following:</p>
+<p class="language-py">Support for joins hasn&rsquo;t been developed
for the Python SDK yet.</p>
+<p class="language-go">Support for joins hasn&rsquo;t been developed
for the Go SDK yet.</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">
@@ -9647,6 +9727,8 @@ join record, providing a generalization of outer joins to
joins with greater tha
can optionally be expanded - providing individual joined records, as in the
<code>Join</code> transform. The output can also be
processed in unexpanded format - providing the join key along with Iterables
of all records from each input that matched
that key.</p>
+<p class="language-py">Support for joins hasn&rsquo;t been developed
for the Python SDK yet.</p>
+<p class="language-go">Support for joins hasn&rsquo;t been developed
for the Go SDK yet.</p>
<h5 id="filtering-events"><strong>Filtering events</strong></h5>
<p>The <code>Filter</code> transform can be configured with a set of
predicates, each one based one specified fields. Only records for
which all predicates return true will pass the filter. For example the
following</p>
diff --git
a/website/generated-content/documentation/programming-guide/index.html
b/website/generated-content/documentation/programming-guide/index.html
index 0ae040730a0..eaa1713d9a7 100644
--- a/website/generated-content/documentation/programming-guide/index.html
+++ b/website/generated-content/documentation/programming-guide/index.html
@@ -2768,17 +2768,18 @@ process.</p><p>Addressing fields by name still retains
type safety as Beam will
is constructed. If a field is specified that does not exist in the schema, the
pipeline will fail to launch. In addition,
if a field is specified with a type that does not match the type of that field
in the schema, the pipeline will fail to
launch.</p><p>The following characters are not allowed in field names: . * [ ]
{ }</p><h5 id=top-level-fields><strong>Top-level fields</strong></h5><p>In
order to select a field at the top level of a schema, the name of the field is
specified. For example, to select just
-the user ids from a <code>PCollection</code> of purchases one would write
(using the <code>Select</code> transform)</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><spa [...]
-shipping address one would write</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Select</span><span class=o>.</span><span class=na>f [...]
-shipping-address fields one would write</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Select</span><span class=o>.</span><span cla [...]
-selected, the result is an array of the selected subfield type. For
example</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Select</ [...]
-transaction.</p><p>While the use of [] brackets in the selector is
recommended, to make it clear that array elements are being selected,
+the user ids from a <code>PCollection</code> of purchases one would write
(using the <code>Select</code> transform)</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><spa [...]
+<span class=n>output_pc</span> <span class=o>=</span> <span
class=n>input_pc</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>Select</span><span class=p>(</span><span
class=s2>"user_id"</span><span
class=p>)</span></code></pre></div></div></div><h5
id=nested-fields><strong>Nested fields</strong></h5><p
class=language-py>Support for Nested fields hasn’t been developed for the
Python SDK yet.</p><p class=language-go>Support for Nested [...]
+shipping address one would write</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Select</span><span class=o>.</span><span class=na>f [...]
+shipping-address fields one would write</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Select</span><span class=o>.</span><span cla [...]
+selected, the result is an array of the selected subfield type. For
example</p><p class=language-py>Support for Array fields hasn’t been
developed for the Python SDK yet.</p><p class=language-go>Support for Array
fields hasn’t been developed for the Go SDK yet.</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 [...]
+transaction.</p><p class=language-java>While the use of [] brackets in the
selector is recommended, to make it clear that array elements are being
selected,
they can be omitted for brevity. In the future, array slicing will be
supported, allowing selection of portions of the
array.</p><h5 id=maps><strong>Maps</strong></h5><p>A map field, where the
value type is a row, can also have subfields of the value type addressed. When
selected, the
result is a map where the keys are the same as in the original map but the
value is the specified type. Similar to
arrays, the use of {} curly brackets in the selector is recommended, to make
it clear that map value elements are being
selected, they can be omitted for brevity. In the future, map key selectors
will be supported, allowing selection of
-specific keys from the map. For example, given the following
schema:</p><p><strong>PurchasesByType</strong></p><table><thead><tr
class=header><th><b>Field Name</b></th><th><b>Field
Type</b></th></tr></thead><tbody><tr><td>purchases</td><td>MAP{STRING,
ROW{PURCHASE}</td></tr></tbody></table><br><p>The following</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"><i [...]
+specific keys from the map. For example, given the following
schema:</p><p><strong>PurchasesByType</strong></p><table><thead><tr
class=header><th><b>Field Name</b></th><th><b>Field
Type</b></th></tr></thead><tbody><tr><td>purchases</td><td>MAP{STRING,
ROW{PURCHASE}</td></tr></tbody></table><br><p>The following</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"><i [...]
all of the keys from the original map, and the values will be the userId
contained in the purchase record.</p><p>While the use of {} brackets in the
selector is recommended, to make it clear that map value elements are being
selected,
they can be omitted for brevity. In the future, map slicing will be supported,
allowing selection of specific keys from
the map.</p><h4 id=662-schema-transforms>6.6.2. Schema transforms</h4><p>Beam
provides a collection of transforms that operate natively on schemas. These
transforms are very expressive,
@@ -2786,16 +2787,20 @@ allowing selections and aggregations in terms of named
schema fields. Following
schema transforms.</p><h5 id=selecting-input><strong>Selecting
input</strong></h5><p>Often a computation is only interested in a subset of the
fields in an input <code>PCollection</code>. The <code>Select</code> transform
allows
one to easily project out only the fields of interest. The resulting
<code>PCollection</code> has a schema containing each selected
field as a top-level field. Both top-level and nested fields can be selected.
For example, in the Purchase schema, one
-could select only the userId and streetAddress fields as follows</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Select</span><span
[...]
+could select only the userId and streetAddress fields as follows</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Select</span><span
[...]
top-level field in the resulting row. This means that if multiple fields are
selected from the same nested row, each
-selected field will appear as its own array field. For example</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Select</span><span cl
[...]
+selected field will appear as its own array field. For example</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Select</span><span cl
[...]
, then each selected field will be expanded to its own map at the top level.
This means that the set of map keys will
be copied, once for each selected field.</p><p>Sometimes different nested rows
will have fields with the same name. Selecting multiple of these fields would
result in
a name conflict, as all selected fields are put in the same row schema. When
this situation arises, the
-<code>Select.withFieldNameAs</code> builder method can be used to provide an
alternate name for the selected field.</p><p>Another use of the Select
transform is to flatten a nested schema into a single flat schema. For
example</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 class=chroma><code
class=l [...]
+<code>Select.withFieldNameAs</code> builder method can be used to provide an
alternate name for the selected field.</p><p>Another use of the Select
transform is to flatten a nested schema into a single flat schema. For
example</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 class=chroma><code
class=l [...]
those groupings, and storing the result of those aggregations in a new schema
field. The output of the <code>Group</code> transform
-has a schema with one field corresponding to each aggregation
performed.</p><p>The simplest usage of <code>Group</code> specifies no
aggregations, in which case all inputs matching the provided set of fields
-are grouped together into an <code>ITERABLE</code> field. For example</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Group</span><s [...]
+has a schema with one field corresponding to each aggregation performed.</p><p
class=language-py>The <code>GroupBy</code> transform allows simply grouping
data by any number of fields in the input schema, applying aggregations to
+those groupings, and storing the result of those aggregations in a new schema
field. The output of the <code>GroupBy</code> transform
+has a schema with one field corresponding to each aggregation performed.</p><p
class=language-java>The simplest usage of <code>Group</code> specifies no
aggregations, in which case all inputs matching the provided set of fields
+are grouped together into an <code>ITERABLE</code> field. For example</p><p
class=language-py>The simplest usage of <code>GroupBy</code> specifies no
aggregations, in which case all inputs matching the provided set of fields
+are grouped together into an <code>ITERABLE</code> field. For example</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 class=chroma><code class=language-java
data-lang=java><span class=n>purchases</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Group</span><s [...]
+<span class=n>output_pc</span> <span class=o>=</span> <span
class=n>input_pc</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>GroupBy</span><span class=p>(</span><span
class=s1>'user_id'</span><span class=p>,</span><span
class=s1>'bank'</span><span
class=p>)</span></code></pre></div></div></div><p class=language-go>Support for
schema-aware grouping hasn’t been developed for the Go SDK yet.</p><p
class=lanuage-java>The output [...]
builders, as follows:</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Group</span><span class=o>.</span><span class=na>byFieldNames< [...]
<span class=o>.</span><span class=na>withKeyField</span><span
class=o>(</span><span class=s>"userAndStreet"</span><span
class=o>)</span>
<span class=o>.</span><span class=na>withValueField</span><span
class=o>(</span><span class=s>"matchingPurchases"</span><span
class=o>));</span></code></pre></div></div></div><p>It is quite common to apply
one or more aggregations to the grouped result. Each aggregation can specify
one or more fields
@@ -2804,15 +2809,19 @@ following application computes three aggregations
grouped by userId, with all ag
output schema:</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Group</span><span class=o>.</span><span class=na>byFieldNames</span><
[...]
<span class=o>.</span><span class=na>aggregateField</span><span
class=o>(</span><span class=s>"itemId"</span><span class=o>,</span>
<span class=n>Count</span><span class=o>.</span><span
class=na>combineFn</span><span class=o>(),</span> <span
class=s>"numPurchases"</span><span class=o>)</span>
<span class=o>.</span><span class=na>aggregateField</span><span
class=o>(</span><span class=s>"costCents"</span><span class=o>,</span>
<span class=n>Sum</span><span class=o>.</span><span
class=na>ofLongs</span><span class=o>(),</span> <span
class=s>"totalSpendCents"</span><span class=o>)</span>
- <span class=o>.</span><span class=na>aggregateField</span><span
class=o>(</span><span class=s>"costCents"</span><span class=o>,</span>
<span class=n>Top</span><span class=o>.<</span><span
class=n>Long</span><span class=o>></span><span
class=n>largestLongsFn</span><span class=o>(</span><span class=n>10</span><span
class=o>),</span> <span class=s>"topPurchases"</span><span
class=o>));</span></code></pre></div></div></div><p>The result of this
aggregation will have [...]
+ <span class=o>.</span><span class=na>aggregateField</span><span
class=o>(</span><span class=s>"costCents"</span><span class=o>,</span>
<span class=n>Top</span><span class=o>.<</span><span
class=n>Long</span><span class=o>></span><span
class=n>largestLongsFn</span><span class=o>(</span><span class=n>10</span><span
class=o>),</span> <span class=s>"topPurchases"</span><span
class=o>));</span></code></pre></div></div></div><div class="language-py
snippet"><div class [...]
+<span class=n>output_pc</span> <span class=o>=</span> <span
class=n>input_pc</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>GroupBy</span><span class=p>(</span><span
class=s2>"user_id"</span><span class=p>)</span>
+ <span class=o>.</span><span class=n>aggregate_field</span><span
class=p>(</span><span class=s2>"item_id"</span><span class=p>,</span>
<span class=n>CountCombineFn</span><span class=p>,</span> <span
class=s2>"num_purchases"</span><span class=p>)</span>
+ <span class=o>.</span><span class=n>aggregate_field</span><span
class=p>(</span><span class=s2>"cost_cents"</span><span
class=p>,</span> <span class=nb>sum</span><span class=p>,</span> <span
class=s2>"total_spendcents"</span><span class=p>)</span>
+ <span class=o>.</span><span class=n>aggregate_field</span><span
class=p>(</span><span class=s2>"cost_cents"</span><span
class=p>,</span> <span class=n>TopCombineFn</span><span class=p>,</span> <span
class=s2>"top_purchases"</span><span
class=p>)</span></code></pre></div></div></div><p class=language-go>Support for
schema-aware grouping hasn’t been developed for the Go SDK yet.</p><p>The
result of this aggregation will have the following schema:</p><table><thead><tr
[...]
subset of fields. For example, the following examples uses the Purchases
schema to join transactions with the reviews
that are likely associated with that transaction (both the user and product
match that in the transaction). This is a
“natural join” - one in which the same field names are used on
both the left-hand and right-hand sides of the join -
-and is specified with the <code>using</code> keyword:</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 class=chroma><code class=language-java
data-lang=java><span class=n>PCollection</span><span class=o><</span><span
class=n>Transaction</span><span class=o>></span> <span
class=n>transactions</sp [...]
+and is specified with the <code>using</code> keyword:</p><p
class=language-py>Support for joins hasn’t been developed for the Python
SDK yet.</p><p class=language-go>Support for joins hasn’t been developed
for the Go SDK yet.</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 class=chroma><c [...]
<span class=n>PCollection</span><span class=o><</span><span
class=n>Review</span><span class=o>></span> <span class=n>reviews</span>
<span class=o>=</span> <span class=n>readReviews</span><span class=o>();</span>
<span class=n>PCollection</span><span class=o><</span><span
class=n>Row</span><span class=o>></span> <span class=n>joined</span> <span
class=o>=</span> <span class=n>transactions</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span>
- <span class=n>Join</span><span class=o>.</span><span
class=na>innerJoin</span><span class=o>(</span><span
class=n>reviews</span><span class=o>).</span><span class=na>using</span><span
class=o>(</span><span class=s>"userId"</span><span class=o>,</span>
<span class=s>"productId"</span><span
class=o>));</span></code></pre></div></div></div><p>The resulting schema is the
following:</p><table><thead><tr class=header><th><b>Field
Name</b></th><th><b>Field Type</b></th></tr> [...]
-Review schema named those fields differently than the Transaction schema, then
we could write the following:</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 class=chroma><code
class=language-java data-lang=java><span class=n>PCollection</span><span
class=o><</span><span class=n>Row</span><span cla [...]
+ <span class=n>Join</span><span class=o>.</span><span
class=na>innerJoin</span><span class=o>(</span><span
class=n>reviews</span><span class=o>).</span><span class=na>using</span><span
class=o>(</span><span class=s>"userId"</span><span class=o>,</span>
<span class=s>"productId"</span><span
class=o>));</span></code></pre></div></div></div><p class=language-java>The
resulting schema is the following:</p><table><thead><tr
class=header><th><b>Field Name</b></th><th><b>Fiel [...]
+Review schema named those fields differently than the Transaction schema, then
we could write the following:</p><p class=language-py>Support for joins
hasn’t been developed for the Python SDK yet.</p><p
class=language-go>Support for joins hasn’t been developed for the Go SDK
yet.</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 [...]
<span class=n>Join</span><span class=o>.</span><span
class=na>innerJoin</span><span class=o>(</span><span
class=n>reviews</span><span class=o>).</span><span class=na>on</span><span
class=o>(</span>
<span class=n>FieldsEqual</span>
<span class=o>.</span><span class=na>left</span><span
class=o>(</span><span class=s>"userId"</span><span class=o>,</span>
<span class=s>"productId"</span><span class=o>)</span>
@@ -2822,7 +2831,7 @@ together based on equality of schema fields. Each
<code>PCollection</code> can b
join record, providing a generalization of outer joins to joins with greater
than two input <code>PCollection</code>s. The output
can optionally be expanded - providing individual joined records, as in the
<code>Join</code> transform. The output can also be
processed in unexpanded format - providing the join key along with Iterables
of all records from each input that matched
-that key.</p><h5 id=filtering-events><strong>Filtering
events</strong></h5><p>The <code>Filter</code> transform can be configured with
a set of predicates, each one based one specified fields. Only records for
+that key.</p><p class=language-py>Support for joins hasn’t been
developed for the Python SDK yet.</p><p class=language-go>Support for joins
hasn’t been developed for the Go SDK yet.</p><h5
id=filtering-events><strong>Filtering events</strong></h5><p>The
<code>Filter</code> transform can be configured with a set of predicates, each
one based one specified fields. Only records for
which all predicates return true will pass the filter. For example the
following</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 class=chroma><code
class=language-java data-lang=java><span class=n>purchases</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Fil [...]
<span class=o>.</span><span class=na>whereFieldName</span><span
class=o>(</span><span class=s>"costCents"</span><span class=o>,</span>
<span class=n>c</span> <span class=o>-></span> <span class=n>c</span> <span
class=o>></span> <span class=n>100</span> <span class=o>*</span> <span
class=n>20</span><span class=o>)</span>
<span class=o>.</span><span class=na>whereFieldName</span><span
class=o>(</span><span class=s>"shippingAddress.country"</span><span
class=o>,</span> <span class=n>c</span> <span class=o>-></span> <span
class=n>c</span><span class=o>.</span><span class=na>equals</span><span
class=o>(</span><span class=s>"de"</span><span
class=o>));</span></code></pre></div></div></div><p>Will produce all purchases
made from Germany with a purchase price of greater than twenty cents. [...]
@@ -5156,7 +5165,7 @@ const result: PCollection<string> = await pcoll
)
);
-</code></pre><h3 id=x-lang-transform-runner-support>13.3. Runner
Support</h3><p>Currently, portable runners such as Flink, Spark, and the direct
runner can be used with multi-language pipelines.</p><p>Dataflow supports
multi-language pipelines through the Dataflow Runner v2 backend
architecture.</p><h3 id=x-lang-transform-tips-troubleshooting>13.4 Tips and
Troubleshooting</h3><p>For additional tips and troubleshooting information, see
<a href=https://cwiki.apache.org/confluence/display/B [...]
+</code></pre><h3 id=x-lang-transform-runner-support>13.3. Runner
Support</h3><p>Currently, portable runners such as Flink, Spark, and the direct
runner can be used with multi-language pipelines.</p><p>Dataflow supports
multi-language pipelines through the Dataflow Runner v2 backend
architecture.</p><h3 id=x-lang-transform-tips-troubleshooting>13.4 Tips and
Troubleshooting</h3><p>For additional tips and troubleshooting information, see
<a href=https://cwiki.apache.org/confluence/display/B [...]
<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/sitemap.xml
b/website/generated-content/sitemap.xml
index 2dd728732be..9f75ead9757 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.42.0/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/catego
[...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.42.0/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2022-10-17T09:50:38-07:00</lastmod></url><url><loc>/catego
[...]
\ No newline at end of file