StructuredDataWriter

Not available in Community Designer

Short Description
Ports
Metadata
StructuredDataWriter Attributes
Details
Examples
Best Practices
Troubleshooting
See also

Short Description

StructuredDataWriter writes data to files (local or remote, delimited, fixed-length, or mixed) with a user-defined structure. It can also compress output files and write to an output port, or dictionary.

Component Data output Input ports Output ports Transformation Transf. required Java CTL Auto-propagated metadata
StructuredDataWriterstructured flat file1-30-1
no
no
no
no
no

Ports

Port typeNumberRequiredDescriptionMetadata
Input0
yes
Records for bodyAny
1
no
Records for headerAny
2
no
Records for footerAny
Output0
no

For port writing. See Writing to Output Port.

One field (byte, cbyte, string).

Metadata

StructuredDataWriter does not propagate metadata.

StructuredDataWriter has no metadata templates.

Metadata on an output port has one field (byte, cbyte or string).

StructuredDataWriter Attributes

AttributeReqDescriptionPossible values
Basic
File URLyes

An attribute specifying where received data will be written (flat file, output port, dictionary). See Supported File URL Formats for Writers.

 
Charset Encoding of records written to the output.UTF-8 (default) | <other encodings>
Append 

By default, new records overwrite the older ones. If set to true, new records are appended to the older records stored in the output file(s).

false (default) | true
Body mask 

A mask used to write the body of output file(s). It can be based on the records received through the first input port. For more information about the definition of Body mask and resulting output structure, see Masks and Output File Structure.

Default Body Structure (default) | user-defined
Header mask [1]

A mask used to write the header of output file(s). It can be based on the records received through the second input port. For more information about the definition of Header mask and resulting output structure, see Masks and Output File Structure.

empty (default) | user-defined
Footer mask [2]

A mask used to write the footer of output file(s). It can be based on the records received through the third input port. For more information about the definition of Footer mask and resulting output structure, see Masks and Output File Structure.

empty (default) | user-defined
Advanced
Create directories 

By default, non-existing directories are not created. If set to true, they are created.

false (default) | true
Records per file The maximum number of records to be written to one output file.1-N
Bytes per file The maximum size of one output file in bytes.1-N
Number of skipped records 

The number of records to be skipped, see Selecting Output Records.

0-N
Max number of records 

The maximum number of records to be written to all output files. See Selecting Output Records.

0-N
Partition key 

Key whose values define the distribution of records among multiple output files. For more information, see Partitioning Output into Different Output Files.

 
Partition lookup table[1]

An ID of a lookup table serving for selecting records that should be written to output file(s). For more information, see Partitioning Output into Different Output Files.

 
Partition file tag 

By default, output files are numbered. If it is set to Key file tag, output files are named according to the values of Partition key or Partition output fields. For more information, see Partitioning Output into Different Output Files.

Number file tag (default) | Key file tag
Partition output fields[1]

Fields of Partition lookup table whose values serve to name output file(s). For more information, see Partitioning Output into Different Output Files.

 
Partition unassigned file name 

The name of a file into which unassigned records should be written if there are any. If not specified, data records whose key values are not contained in Partition lookup table are discarded. For more information, see Partitioning Output into Different Output Files.

 
Sorted input 

In case the partitioning into multiple output files is turned on, all output files are open at once. This could lead to an undesirable memory footprint for many output files (thousands). Moreover, for example unix-based OS usually have very strict limitation of number of simultaneously open files (1,024) per process. In case you run into one of these limitations, consider sorting the data according to a partition key using one of our standard sorting components and set this attribute to true. The partitioning algorithm does not need to keep open all output files, just the last one is open at one time. For more information, see Partitioning Output into Different Output Files.

false (default) | true
Create empty files 

If set to false, prevents the component from creating an empty output file when there are no input records.

true (default) | false

[1]  Must be specified if the second input port is connected. However, it does not need to be based on input data records.

[2]  Must be specified if third input port is connected. However, does not need to be based on input data records.

Details

Masks and Output File Structure

Output File Structure
  • An output file consists of a header, body, and footer, in this order.

  • Each of them is defined by specifying corresponding mask.

  • Having defined the mask, the mask content is written repeatedly, one mask is written for each incoming record.

  • If the Records per file attribute is defined, the output structure is distributed among various output files, but this attribute applies to Body mask only. The header and footer are the same for all output files.

Defining a Mask

Body mask, Header mask and Footer mask can be defined in the Mask dialog. This dialog opens after clicking a corresponding attribute row. In its window, you can see the Metadata and Mask panes.

You can define the mask either without field values or with field values.

Field values are referred using field names preceded by a dollar sign.

Create Mask Dialog

Figure 56.26. Create Mask Dialog


You do not have to map all input metadata fields.

Output can contain additional text not coming from input metadata. E.g. Return address on figure above.

You can use StructuredDataWriter to generate XML files or to fill in the template.

Default Masks
  1. Default Header mask is empty. But it must be defined if the second input port is connected.

  2. Default Footer mask is empty. But it must be defined if the third input port is connected.

  3. Default Body mask is empty. However, the resulting default body structure looks like the following:

    <recordName>
    	<field1name>field1value</field1name>
    	<field2name>field2value</field2name>
    	...
    	<fieldNname>fieldNvalue</fieldNname>
    </recordName>

    This structure is written to output file(s) for all records.

    If Records per file is set, only the specified number of records are used for body in each output file at most.

Notes and Limitatinos

StructuredDataWriter cannot write lists and maps.

Examples

Writing Page with Header and Footer

Legacy application requires data in the following file structure: header, up to five data records and blank line. Convert data to format accepted by the legacy application:

F0512#4d6f6465726e20616e642070756e6368206361726420636f6d70617469626c65
Francis   Smith     77        
Jonathan  Brown     5         
Kate      Wood      75        
John      Black     3         
Elisabeth Doe       87        
Solution

Connect an edge providing particular records to the first input port of StructuredDataWriter (metadata field body) and edge providing a header to the second input port (metadata field header).

Edit the attributes:

AttributeValue
File URL${DATOUT_DIR}/file_$$.txt
Body mask$body
Header mask$header
Footer mask 
Records per file5

Adjust the line break in the Body mask, Header mask and Footer mask attributes according to the input records. If input records have a line break, do not add a line break after the string $body and $header. If input records do not have a line break, add a line break after $body and $header; fill in the line break to the attribute Footer mask too.

Best Practices

To write record with fixed-length metadata, use FlatFileWriter to convert several fixed-length metadata fields into one field. Subsequently write the output from FlatFileWriter using StructuredDataWriter.

We recommend users to explicitly specify Charset.

Troubleshooting

If you partition unsorted data into many output files, you may reach the limit of simultaneously opened files. This can be avoided by sorting the input and using the attribute sorted input.

See also

ComplexDataReader
MultiLevelReader
FlatFileWriter
XMLWriter
Common Properties of Components
Specific Attribute Types
Common Properties of Writers
Writers Comparison