如何在 Pentaho Kettle 中处理一对多 SQL(Table 输入)

How to deal with 1 to many SQL (Table inputs) in Pentaho Kettle

我有以下表格。

员工 - emp_id, emp_name, emp_address

Employee_assets - emp_id(FK), asset_id, asset_name (1-many 员工)

Employee_family_members - emp_id(FK), fm_name, fm_relationship (1-many 员工)

现在,我必须 运行 一个预定的 kettle 作业,它以 1000 名员工为单位从这些表中读取数据,并根据关系为这 1000 条记录创建 XML 输出在数据库中与家庭成员和资产。这将是每个员工的嵌套 XML 记录。

请注意,这个 kettle 作业的性能在我的场景中非常重要。

I have two questions here -

  1. 对于模式中的一对多关系,从数据库中提取记录的最佳方法是什么?
  2. 考虑到 XML 连接步骤会影响性能,生成 XML 输出结构的最佳方法是什么?

要提取数据,您可以使用多个数据库查找字段或数据库连接步骤。在性能方面,我认为连接可能会更快,但这完全取决于您使用的查询的复杂性以及它的编写方式等。

我是这样实现的。

因此,有一个 Table 输入步骤来读取基 table 并随后为其创建 XML 块。随后,在流程中,我使用一对多关系(子 table)作为另一个数据库连接步骤,将关系键传递给它。提取数据后,将为子行生成 XMLs。然后将其传递到修改后的 Java 脚本值步骤(合并行),然后使用 trans_Status = SKIP_TRANSFORMATION 合并类似行的内容。一旦相似的行是 merged/concatenated,putRow(row) 用于将其作为输出转储到下一步。 请注意,这需要 SQL 具有基于关系键的顺序 by/sorted。效果不错,我可以继续了。