【问题标题】:Pentaho PDI how to validate source Excel metadata for the order and number of columns?Pentaho PDI 如何验证源 Excel 元数据的顺序和列数?
【发布时间】:2014-09-17 04:37:32
【问题描述】:

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

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

请指导我。

【问题讨论】:

  • 如果您使用的是 excel 文件输入步骤,那么当时单击工作表下的获取工作表名称并从字段下的标题行获取字段,如果文件不是,则会弹出错误xls 或 xlsx 扩展名,所以它本身在任何其他进程之前验证文件..你想要任何其他的东西吗?
  • 感谢您的 cmets。用例是,数百个源 Excel 文件将保存在 FTP 中。有可能少数 excel 文件可能不符合约定的格式,我们需要进行文件级别验证以排除它们并通知数据所有者(客户)进行更正。
  • 我不知道您如何做到这一点,等待其他人回复。

标签: pentaho kettle


【解决方案1】:

您的文件的第 1 行(或任何其他合理接近第 1 行的行)上的列名是吗?您知道每个行最多有多少个字段?如果是这样,也许你可以摆脱它。

第 1 步:您需要了解可能有多少行、它们可能被称为什么、哪些数据类型等。

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

第三步:在标题上施展魔法;根据某些字段的位置进行过滤,将字段名称映射到数据类型等。

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

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

不久前我不得不构建类似的东西(只是它是 CSV 文件而不是 XLS),元数据注入让我能够以 100% 的映射准确度一次性加载每个文件。当然,魔法发生在之前,当您解析标题行时。

【讨论】:

    【解决方案2】:

    感谢 nsousa 的回答。

    在同事的帮助下,我找到了所需的解决方案。这是我所做的

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

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

    (3) 将此模式与实际元数据模式匹配,如果匹配,则通过excel文件

    好把戏。谢谢。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多