////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
:documentationPath: /plugins/transforms/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/transforms/joinrows/src/main/doc/joinrows.adoc

= Join Rows

== Description

The Join rows transform allows you to produce combinations (Cartesian product) of all rows in the input streams.

== Options

[width="90%", options="header"]
|===
|Option|Description
|Transform name|Name of the transform this name has to be unique in a single pipeline.
|Temp directory|Specify the name of the directory where the system stores temporary files in case you want to combine more then the cached number of rows.
|TMP-file prefix|This is the prefix of the temporary files that will be generated.
|Max. cache size|The number of rows to cache before the system reads data from temporary files; required when you want to combine large row sets that do not fit into memory.
|Main transform to read from|Specifies the transform from which to read most of the data; while the data from other transforms are cached or spooled to disk, the data from this transform is not.
|The Condition(s)|You can enter a complex condition to limit the number of output row.
|===

== Metadata Injection Support

All fields of this transform support metadata injection. You can use this transform with ETL Metadata Injection to pass metadata to your pipeline at runtime.