////
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/recordsfromstream/src/main/doc/recordsfromstream.adoc
= Get records from stream 

== Description

This transform returns records that were previously generated by another pipeline in a workflow. The records were passed to this transform using either the Copy rows to result transform or the Workflow Executor transform. You can enter the metadata of the fields you are expecting from the previous pipeline in a workflow.

== Options

[width="90%", options="header"]
|===
|Option|Description
|Transform name|Name of the transform.
|Fieldname|Name of the field that contains the records from the previous result.
|Type a|Type of data. Options include:

* Number
* String
* Date
* Boolean
* Integer
* BigNumber
* Serializable
* Binary
* Timestamp
* Internet Address

|Length	a|

* For a field with the type of 'Number', enter the total number of significant figures in a number.
* For a field with the type of 'String', enter the length of the string.

|Precision|For a field with the type of 'Number', enter the number of floating point digits. Otherwise, leave blank.
|===

== 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.