就我而言,我需要以Excel(xls和xlsx)格式处理输入数据。在处理行级数据之前,我需要对Excel文件的顺序和列数进行文件级验证。如果此文件级别验证失败,则排除此文件并通过邮件通知相关文件。
请通过一些示例或示例指导我如何验证excel文件的元数据?我想在一个带有分号分隔的头字段的kettle.properties中放置一个变量,并将其与源excel文件进行比较。但是没有办法从我想要的文件中只提取标题行。
请指导我。
答案 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文件
好招。谢谢。