Pentaho PDI如何为订单和列数验证源Excel元数据?

时间:2014-09-17 04:37:32

标签: pentaho kettle

就我而言,我需要以Excel(xls和xlsx)格式处理输入数据。在处理行级数据之前,我需要对Excel文件的顺序和列数进行文件级验证。如果此文件级别验证失败,则排除此文件并通过邮件通知相关文件。

请通过一些示例或示例指导我如何验证excel文件的元数据?我想在一个带有分号分隔的头字段的kettle.properties中放置一个变量,并将其与源excel文件进​​行比较。但是没有办法从我想要的文件中只提取标题行。

请指导我。

2 个答案:

答案 0 :(得分:0)

您的文件的第1行(或任何其他行合理地靠近第1行)的列名是否都知道每个字段中最多有多少个字段?如果是这样,也许你可以逃脱。

步骤1:您需要了解可能存在的行数,可能调用的内容,数据类型等。

步骤2:读取文件的前N行,确保读取标题行;过滤不是标题的所有内容(如何?取决于具体结构)。因为您不知道字段名称是什么,只需将它们命名为field0,... field999或其他。

Step3:在标题上做一些魔术;基于某些字段的位置过滤,将字段名称映射到数据类型等

步骤4:元数据注入。使用您之前已有的信息,您可以创建一个通用的模板转换,即excel输入步骤中未设置字段名称。元数据注入允许您在运行时设置该步骤,具体取决于您刚应用于标题的整个逻辑。

此页面有几个示例视频:http://wiki.pentaho.com/display/EAI/ETL+Metadata+Injection

我不得不构建类似的东西(只有它是CSV文件,而不是XLS),而元数据注入允许我一次性加载每个文件,具有100%的映射精度。当然,当您解析标题行时,神奇就会发生。

答案 1 :(得分:0)

感谢nsousa的回答。

在我的同事的帮助下,我得到了所需的解决方案。我在这里做了什么

(1)只读源Excel文件的第一行作为普通数据(无标题,限制1),其中字段名称将被称为F1,F2等

(2)连接字段(数据)以获得模式

(3)将此模式与acual元数据模式匹配,如果匹配,则传递excel文件

好招。谢谢。