0

我正在使用 Pentaho 数据集成 Spoon。

简短描述:我想获取从流中读取的每一行的值出现在流中的次数。

详细描述:我正在做事实表的转换,当我读取一个csv文件的数据时,我有一个客户在特定时间乘坐了某架飞机。我想添加一个可用座位列,当它出现时读取客户乘坐混凝土飞机旅行的数据,在前面的流程中查看该飞机的可用座位数并减去 1。

例子。

最初,航班 1 有 160 个座位,而航班 2 有 320 个座位。

CSV

Flight | Client

1      |   1

2      |   2

1      |   3

2      |   4

我可以添加一个值是可用座位总数的列。

Flight | Customer | Available seats

1      |     1    |        160

2      |     2    |        320

1      |     3    |        160

2      |     4    |        320

但之后我不知道如何在每次流量读数中获得特定航班的可用座位的最小值。

我想要在我的流程中的最终输出..

Flight | Customer | Available seats

1      |     1    |        159

2      |     2    |        319

1      |     3    |        158

2      |     4    |        318

非常感谢您花时间阅读我的问题。

4

1 回答 1

2

您可以使用Add value fields changing sequence(在“转换”步骤组下可用)步骤为每个航班生成一个计数器。Flight该步骤将要求按字段对输入进行排序。您需要Flight在此步骤中指定字段,以便在新的航班组开始后重置计数器。

然后,您将能够Available seats使用计算器/JavaScript/Java 公式或任何其他步骤从字段中减去计数器以获取当前值。

在此处输入图像描述

这是一个示例,您可以将其复制并粘贴到 Spoon 画布上:

<?xml version="1.0" encoding="UTF-8"?>
<transformation-steps>
<steps>
  <step>
    <name>Add value fields changing sequence</name>
    <type>FieldsChangeSequence</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
      <start>1</start>
      <increment>1</increment>
      <resultfieldName>counter</resultfieldName>
    <fields>
      <field>
        <name>Flight</name>
        </field>
      </fields>
    <cluster_schema/>
    <remotesteps>
      <input>
      </input>
      <output>
      </output>
    </remotesteps>
    <GUI>
      <xloc>352</xloc>
      <yloc>96</yloc>
      <draw>Y</draw>
    </GUI>
    </step>

  <step>
    <name>Data Grid</name>
    <type>DataGrid</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <name>Flight</name>
        <type>Integer</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>Customer</name>
        <type>Integer</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
      <field>
        <name>Total available seats</name>
        <type>Integer</type>
        <format/>
        <currency/>
        <decimal/>
        <group/>
        <length>-1</length>
        <precision>-1</precision>
        <set_empty_string>N</set_empty_string>
      </field>
    </fields>
    <data>
      <line> <item>1</item><item>1</item><item>160</item> </line>
      <line> <item>2</item><item>2</item><item>320</item> </line>
      <line> <item>1</item><item>3</item><item>160</item> </line>
      <line> <item>2</item><item>4</item><item>320</item> </line>
    </data>
    <cluster_schema/>
    <remotesteps>
      <input>
      </input>
      <output>
      </output>
    </remotesteps>
    <GUI>
      <xloc>80</xloc>
      <yloc>96</yloc>
      <draw>Y</draw>
    </GUI>
    </step>

  <step>
    <name>Sort rows &#x28;by flight&#x29;</name>
    <type>SortRows</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
      <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
      <prefix>out</prefix>
      <sort_size>1000000</sort_size>
      <free_memory/>
      <compress>N</compress>
      <compress_variable/>
      <unique_rows>N</unique_rows>
    <fields>
      <field>
        <name>Flight</name>
        <ascending>Y</ascending>
        <case_sensitive>N</case_sensitive>
        <collator_enabled>N</collator_enabled>
        <collator_strength>0</collator_strength>
        <presorted>N</presorted>
      </field>
    </fields>
    <cluster_schema/>
    <remotesteps>
      <input>
      </input>
      <output>
      </output>
    </remotesteps>
    <GUI>
      <xloc>192</xloc>
      <yloc>96</yloc>
      <draw>Y</draw>
    </GUI>
    </step>

  <step>
    <name>Calculator</name>
    <type>Calculator</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <calculation>
      <field_name>Available seats</field_name>
      <calc_type>SUBTRACT</calc_type>
      <field_a>Total available seats</field_a>
      <field_b>counter</field_b>
      <field_c/>
      <value_type>Integer</value_type>
      <value_length>-1</value_length>
      <value_precision>-1</value_precision>
      <remove>N</remove>
      <conversion_mask/>
      <decimal_symbol/>
      <grouping_symbol/>
      <currency_symbol/>
    </calculation>
    <cluster_schema/>
    <remotesteps>
      <input>
      </input>
      <output>
      </output>
    </remotesteps>
    <GUI>
      <xloc>496</xloc>
      <yloc>96</yloc>
      <draw>Y</draw>
    </GUI>
    </step>

</steps>
<order>
    <hop>
      <from>Add value fields changing sequence</from>
      <to>Calculator</to>
      <enabled>Y</enabled>
    </hop>

    <hop>
      <from>Data Grid</from>
      <to>Sort rows &#x28;by flight&#x29;</to>
      <enabled>Y</enabled>
    </hop>

    <hop>
      <from>Sort rows &#x28;by flight&#x29;</from>
      <to>Add value fields changing sequence</to>
      <enabled>Y</enabled>
    </hop>

</order>
<notepads>
</notepads>
<step_error_handling>
</step_error_handling>
</transformation-steps>
于 2017-04-27T18:18:53.393 回答