Using Table Parameters

The Parameters tab of the Job Definition editing pop-up window lets you create Parameters that use the Table Parameter type.

Table Parameters contain data in rows and columns, much like a spreadsheet. Table Parameters come in four types:

  • TableParameterType.Inline: Table Parameters of type Inline hold a String value with an Inline: prefix, followed by XML data. Processing instructions are optional, but if present, must be followed by newline characters before the <table> tag if specified.
  • TableParameterType.JobFile: Table Parameters of type JobFile hold a String value with a JobFile: prefix, followed by reference to a process file in the format <ID>:<file_name>. For example, JobFile:1234:stdout.rtx evaluates to the file stdout.rtx on process with ID 1234.
  • TableParameterType.RelativeFile: Table Parameters of type RelativeFile hold a String value with a RelativeFile: prefix, followed by a file specification of a relative process such as Relative:<step_name>, Job <process_ID>:<file_name>. For example: RelativeFile:Initialization, Job 3:output.rtx.
  • TableParameterType.Table: Table Parameters of type Table contain the Business Key of a table in the format Table:<partition>.<table>. For example: Table:MyPartition.MyTable.

Prerequisites

Table Parameters are supported by the RedwoodScript Job Definition.

API

The TableParameterRuntime interface (Table Parameters at Runtime) has getRTXReader() and getRTXWriter() methods that allow you to read and write Tables, respectively. Each column has a data type (for example, String, DateTimeZone, BigDecimal). The value of each row in a column must be convertible to the data type or the table will be considered invalid. See the com.redwood.scheduler.api.rtx package for classes and how to use them.

Sample RTX File

Copy
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://schema.redwood.com/report/rtx.xsd">
  <metadata>
    <columns>
      <column>
        <name>symbol</name>
        <string></string>
      </column>
      <column>
        <name>value</name>
        <number></number>
      </column>
      <column>
        <name>date</name>
        <date></date>
      </column>
    </columns>
  </metadata>
  <data>
    <r><k></k><v>APPL</v><v>156.41</v><v>2023/07/27</v></r>
    <r><k></k><v>SDY</v><v>93.14</v><v>2023/07/27</v></r>
    <r><k></k><v>INTC</v><v>40.80</v><v>2023/07/27</v></r>
    <r><k></k><v>BRKB</v><v>189.71</v><v>2023/07/27</v></r>
    <r><k></k><v>FB</v><v>170.60</v><v>2023/07/27</v></r>
    <r><k></k><v>GOOG</v><v>973.33</v><v>2023/07/27</v></r>
  </data>
</table>

Writing an RTX File

This technique uses a Table Parameter named outParameter on the definition that is an Out Parameter. The out value of the Parameter will be set to a file reference (for example, JobFile:1234:stdout.rtx ). Use getRTXWriterInline() if you want to have the table data inline.

Copy
import java.math.BigDecimal;
import com.redwood.scheduler.api.date.DateTimeZone;
import com.redwood.scheduler.api.rtx.*;

{
  try (RTXWriter writer = outParameter.getRTXWriterToStandardOutput())
  {
    writer.addColumn(new RTXColumn("symbol", RTXType.String));
    writer.addColumn(new RTXColumn("value", RTXType.Number));
    writer.addColumn(new RTXColumn("date", RTXType.Date));
    writer.addColumn(new RTXColumn("date2", RTXType.String));

    DateTimeZone dtz = DateTimeZone.valueOf("2023/07/27 00:00:00,000 America/New_York");
    String date2 = dtz.toFormattedString("dd-MM-yyyy");

    writer.addRow(new Object [] { "AAPL", "156.41",  dtz, date2, });
    writer.addRow(new Object [] { "SDY",  "93.14" ,  dtz, date2, });
    writer.addRow(new Object [] { "INTC", "40.80" ,  dtz, date2, });
    writer.addRow(new Object [] { "BRKB", "189.71",  dtz, date2, });
    writer.addRow(new Object [] { "FB",   "170.60",  dtz, date2, });
    writer.addRow(new Object [] { "GOOG", "973.33",  dtz, date2, });
  }
}