【问题标题】:Index function : Pentaho Data Integration索引功能:Pentaho 数据集成
【发布时间】:2018-07-22 13:08:36
【问题描述】:

我需要有关使用 pentaho 数据集成 (kettle) 执行索引功能的最合适方法的指导

我的情况如下:

使用 GLOBAL voip 系统报告,我将所有数据存储在一个 Mysql 数据库中,它给了我几个 id 号 + 姓名和姓氏,但没有部门名称。

每个部门名称都有自己的excel报告,可以通过组文件名来识别,这在全局文件中是不可用的。

我想要实现的是查找每个识别号,以使用报告文件名识别他所属的部门并将其存储在适当的列中。

任何帮助将不胜感激。

【问题讨论】:

  • 能否请您详细说明一下您的 Excel 结构。如果我了解每个 Excel 用于一个部门(您从主流中不知道)并且包含一个工作表 par id。
  • 您好阿兰,感谢您的反馈。这是一个包含 ID 和部门名称的 Excel 报告示例。文件名 P004 上还提到的是部门名称的 id。我在数据库列上有所有全局 ID。或/和全局 excel 提取。 github.com/rootinshell/stack/blob/master/…PS。我做了一些改变来隐藏信息问候。
  • 那么,你想知道例如id=784521属于P004_Queue性能,其中784521来自名为P004_Queue performance_*.xls的xls文件的B列?

标签: pentaho etl pentaho-spoon pentaho-data-integration


【解决方案1】:

假设您使用 Excel 文件输入步骤,“附加输出字段”选项卡上有一个选项可让您指定完整文件名字段。您可以随意命名,它会在您传入的 Excel 数据中添加一个附加列,其中包含文件名作为列之一。您可能需要对这些字段进行一些正则表达式清理,因为它是完整的文件路径,而不仅仅是文件名。

就查找而言,设计选项卡的查找类别中有许多查找选项可用于合并流。我认为 Stream Lookup 是您想要的步骤。

【讨论】:

  • 您应该提前知道包含数据的工作表的名称,不是吗?
【解决方案2】:

据我了解您的需求,您必须首先构建一个包含两列的“映射表”:部门(也就是 xls 文件名的开头)和员工(也就是它的 ID)。

此表不需要具体化,可以保留在 PDI 的一个步骤中。所以

  1. 使用Microsoft Excel File 读取所有 xls 文件。如果您不知道如何操作:Browse 到这些文件中的任何一个,按Add 按钮,然后在Selected files 表中,删除文件名以仅保留其目录路径并写入.*\.xls Regex wildcard。检查您选择了带有Show filename button 的适当文件。

    在同一步骤中,将Sheet 定义为“Fiche 技术”(假设它们都相同)。将字段定义为字符串类型的“A”(一个空列)和“ID”类型的字符串(否则您将在“代理 ID”和“总计”上遇到不可捕获的错误。另请关注 @eicherjc建议并保留文件名,尽管我建议您保留 Short file name 并将其命名为文件名。

您应该得到一个两列流:ID 和文件名,在使用之前需要一些数据按摩。 ID 包含非整数字段,文件名包含额外字符。

  1. 最简单的方法是使用Modified Javascript Value。我可能会建议代码:

    var ID = Number(ID);
    var regex = filename.match(/(.*)__\d+\.xls/);
    if(regex) filename = regex[1];

    不要忘记指定 ID 现在有一个 Integer 类型,并在底部的 Fields`` 表的 Replace value in field 中放置一个“Y”。

    第一行会将其值中的任何数字转换为0,将非数字转换为0,这是一个不存在的ID。

    下一行将使用正则表达式从文件名中提取部门。如果您不喜欢正则表达式,您可以使用 filename = filename.substr(0, filename.indexOf('__')) 或任何可以完成这项工作的公式。

现在您已经准备好使用一个流,但某些员工可能(无论对错)在多个部门中。如果不管哪一个,那就这样吧。否则,您必须提供一些逻辑来过滤正确的部门。

  1. 您现在可以使用Lookup Stream 来读取每个员工的部门。 Lookup stepModified Javascript value (或您为此步骤指定的任何名称)。 field to lookup 是 mySql 中 ID 的字段。 Lookup field 是 ID(或您为 xls 文件的 B 列指定的任何名称)。而要检索enter code here 的字段是文件名(或者更准确地说,是从文件名中提取的部门名称)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多