This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hop-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 77311879d5 Website updated to 45a48e9
77311879d5 is described below
commit 77311879d5a62718c3469f6cea1a3f9223d0c281
Author: jenkins <[email protected]>
AuthorDate: Wed Sep 23 16:38:30 2026 +0000
Website updated to 45a48e9
---
manual/next/pipeline/transforms/jsonoutput.html | 10 +-
manual/next/pipeline/transforms/rownormaliser.html | 143 ++++++++++++++++++++-
2 files changed, 150 insertions(+), 3 deletions(-)
diff --git a/manual/next/pipeline/transforms/jsonoutput.html
b/manual/next/pipeline/transforms/jsonoutput.html
index d96fdf5a5d..f7d781ee99 100644
--- a/manual/next/pipeline/transforms/jsonoutput.html
+++ b/manual/next/pipeline/transforms/jsonoutput.html
@@ -2908,7 +2908,10 @@ Currently available 3 types of operation:</p>
<p>Nr. rows in a block</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>Number of rows that are combined as one JSON Array <br></p>
+<p>Number of rows that are combined as one JSON Array. Use 0 to combine all
rows in a single block. <br></p>
+</div>
+<div class="paragraph">
+<p>When the number of input rows is not a multiple of this value, the
remaining rows are written as a last, smaller block.</p>
</div>
<div class="admonitionblock note">
<table>
@@ -2928,7 +2931,10 @@ A new file will be generated for each block
<p>Output value</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>Output field name</p>
+<p>Name of the field that will hold the generated JSON.<br></p>
+</div>
+<div class="paragraph">
+<p>When the operation writes an output value, the transform emits one row per
block: the input fields of the last row of that block, followed by the JSON of
the block. The other rows of the block are not passed on. When the operation
only writes to a file, all input rows are passed on unchanged.</p>
</div></div></td>
</tr>
<tr>
diff --git a/manual/next/pipeline/transforms/rownormaliser.html
b/manual/next/pipeline/transforms/rownormaliser.html
index aead2557e5..61bcfd5c54 100644
--- a/manual/next/pipeline/transforms/rownormaliser.html
+++ b/manual/next/pipeline/transforms/rownormaliser.html
@@ -2841,7 +2841,43 @@
<p>You can use this transform to normalize repeating groups of columns.</p>
</div>
<div class="paragraph">
-<p><strong>Important</strong>: When combining multiple columns with different
meta types (e.g., String and Integer) into a new field, no automatic type
conversion is performed. Instead the first meta type is set. This lack of
conversion may lead to issues with subsequent transformations on the resulting
data rows. It is strongly advised to ensure that the data types of values being
put into the same field are aligned before normalization.</p>
+<p>For every row it reads, the transform writes one row per type. Each input
field goes into the new field it names on the row of its type, whatever order
the fields are listed in. A type that has no field for one of the new fields
leaves that field empty (<code>null</code>) on its rows.</p>
+</div>
+<div class="paragraph">
+<p>A type can fill each new field from only one input field: listing two
fields with the same type and the same new field is an error.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_data_types_of_the_new_fields"><a class="link"
href="#_data_types_of_the_new_fields">Data types of the new fields</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>A new field is filled from a different input field on every row, so its
data type depends on all of them:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>When the input fields filling a new field share a data type, the new field
has that type, with the length, precision and format of the first of them. The
values are passed on unchanged.</p>
+</li>
+<li>
+<p>When they do not, the new field is a String, and every value is converted
to text using the format of the input field it comes from. To control how a
number or a date is written, set the format on that input field before this
transform, for example with a <a href="selectvalues.html" class="xref
page">Select Values</a> transform.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>For example, normalising a String, an Integer and a Number into one field
gives a String field holding <code>a</code>, <code>1</code> and
<code>1.2</code>. <strong>Verify</strong> on this transform warns about every
new field that is filled from input fields of different data types.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Before Hop 2.20, a new field took the data type of the first input field
filling it, and the values of the other input fields were passed on unchanged.
Rows with a value that did not match that type failed further down the
pipeline, for example in a Sort rows transform that writes rows to disk.
+</td>
+</tr>
+</table>
</div>
</div>
</div>
@@ -3060,6 +3096,111 @@
</tbody>
</table>
</div>
+<div class="sect2">
+<h3 id="_normalized_data_example_3"><a class="link"
href="#_normalized_data_example_3">Normalized data (example 3)</a></h3>
+<div class="paragraph">
+<p>Several new fields can be filled at once. With this input:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Date</th>
+<th class="tableblock halign-left valign-top">PR1_SL</th>
+<th class="tableblock halign-left valign-top">PR1_NR</th>
+<th class="tableblock halign-left valign-top">PR2_SL</th>
+<th class="tableblock halign-left valign-top">PR2_NR</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">2003-01-01</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">100</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">250</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>set <strong>Typefield</strong> = "Product" and fill the <strong>Fields
table</strong> like this:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 33.3333%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3334%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Fieldname</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">New field</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">PR1_SL</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product1</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Sales</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">PR1_NR</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product1</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Number</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">PR2_NR</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product2</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Number</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">PR2_SL</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product2</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Sales</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The result has one row per product, each value in the new field it
names:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+<col style="width: 25%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Date</th>
+<th class="tableblock halign-left valign-top">Product</th>
+<th class="tableblock halign-left valign-top">Sales</th>
+<th class="tableblock halign-left valign-top">Number</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">2003-01-01</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product1</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">100</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">2003-01-01</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Product2</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">250</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
+</tr>
+</tbody>
+</table>
+</div>
</div>
</div>
</article>