Pentaho:如何检索存储在两个文件中的数据:一个用于映射,另一个用于行

Pentaho:如何检索存储在两个文件中的数据:一个用于映射,另一个用于行,pentaho,pentaho-spoon,pentaho-data-integration,Pentaho,Pentaho Spoon,Pentaho Data Integration,我需要读取这些数据,然后使用(如果可能的话)单匙转换将它们加载到oracle表中 数据以两个文件成对存储。每对都有一个文件(data-type_yyyymmdd.txt),每行中的每一行都以回车结尾,字段之间没有分隔符。提取这些字段的关键是第二个文件(data-type_yyyymmdd.ref),其中包含沿行映射这些字段的信息。让我们来看一个例子: 数据类型\u yyyymmdd.ref文件布局: OPERATION_ID A 011 U

我需要读取这些数据,然后使用(如果可能的话)单匙转换将它们加载到oracle表中

数据以两个文件成对存储。每对都有一个文件(data-type_yyyymmdd.txt),每行中的每一行都以
回车
结尾,字段之间没有分隔符。提取这些字段的关键是第二个文件(data-type_yyyymmdd.ref),其中包含沿行映射这些字段的信息。让我们来看一个例子:

数据类型\u yyyymmdd.ref文件布局:

OPERATION_ID                             A 011
USER                                     A 008
DATE_TRANSACTION                         A 0008
TIME_TRANSACTION                         N 0004
第一列是字段名,第二列是数据类型(A=字母数字,N=数字),第三列是字段长度。柱沿直线具有固定位置

重要提示:这些对可以具有不同结构的REF文件,但是具有相同类型REF文件(由文件名中的
数据类型
标识)的对具有相同的结构

数据类型\u yyyymmdd.txt文件布局:

这个文件的一行

50593749120ABCDEFGH201701021444
此行的字段具有以下值:

OPERATION_ID=50593749120
USER=ABCDEFGH
DATE_TRANSACTION=20170102
TIME_TRANSACTION=1444
因此pentaho转换必须读取这些文件,检索行/字段并将它们插入表中

如何识别要插入这些数据的表?

键是文件名的
数据类型
部分。我们有一组不同的表,它们的名称由本部分确定。每个表结构都相当于其相关的REF文件。例如:

此文件对
userlogins\u 20170701.ref
userlogins\u 20170701.txt
具有
userlogins
oracle表的数据。让我们假设这对具有与上面示例相同的结构。因此,该表具有以下结构:

ID - numeric(16)
OPERATION_ID - varchar2(11)
USER - varchar2(8)
DATE_TRANSACTION - varchar2(8)
TIME_TRANSACTION - numeric(4)

所有表的ID字段都是由序列数据库填充的主键。其他字段遵循REF文件结构。类型为的字段映射到varchars字段,N映射到数值字段。

如果.ref文件不会更改,则可以将源文件中的数据流复制到“将行复制到结果”中,然后使用设置“为每行运行此作业”应用作业然后为每一行应用剪切字符串组件并设置四个变量,然后您可以将其逐行存储在四列中。

因此,您有一个包含元数据(字段名称、类型和长度)的文件,另一个包含数据(第一个文件中指定长度的固定字段)。还需要两个信息:a)如何创建输出表(手动、自动一次、每个输入自动一个……)b)大小是多少?对于两个或三个使用硬编码输入/输出链进行操作,对于一百个,根据ref文件的值剪切txt行,对于数千个,使用元数据注入,。。。。请指定。a)这些表以前已创建。您可以通过
数据类型
文件名的一部分来识别它们b)我们有一个或多个不同
数据类型
的文件对的输入。每一对都提供了一个名为
数据类型
的表。那么我想这正是所涉及的情况。注意:增量改进代码:在自动化之前,先对一对文件执行此操作,因为此自动机本身就是一个project n。@AlainD,首先,很抱歉我们的反馈太晚了。很好的例子。事实上,这正是Pentaho的解决方案。但是,我们的团队选择使用shell/awk脚本预处理这些文件,以便从这些原始文件对生成csv文件。不管怎样,..ref文件都可以根据文件名进行更改,我们有一对或多对文件来提取数据。为了澄清我的问题,我加入了更多的解释。请您把问题再读一遍好吗?@gwarah首先,将.ref文件的数据复制到表中。我们知道将有三个字段。因此,创建一个包含三列的表。在插入到表中时,使用替换字符串组件,其中将“A”替换为varchar2,将N替换为numeric,并从第三个字段中修剪“0”。现在,表中的数据如下所示。然后根据以下值创建动态表。操作ID varchar2 11 USR varchar2 8日期\u TRN varchar2 8时间\u TRN数字4@gwarah由于注释长度,我已重命名了列。如果您同意上述方法(未完全解释),我们可以进一步讨论。很抱歉我们的反馈太晚。你看到问题下面的评论了吗?有一个建议的解决方案和我们的预处理解决方案。