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

时间:2017-06-21 15:30:37

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

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

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

data-type_yyyymmdd.ref文件布局:

OPERATION_ID                             A 011
USER                                     A 008
DATE_TRANSACTION                         A 0008
TIME_TRANSACTION                         N 0004

第一列是字段名,第二列是数据类型(A =字母数字,N =数字),第三列是字段长度。列沿着线有固定的位置。

重要提示:这些对可能具有不同结构的REF文件,但具有相同类型的REF文件(由文件名中的data-type标识)的对具有相同的结构。

data-type_yyyymmdd.txt文件布局:

此档案的一行

50593749120ABCDEFGH201701021444

此行的字段包含以下值:

OPERATION_ID=50593749120
USER=ABCDEFGH
DATE_TRANSACTION=20170102
TIME_TRANSACTION=1444

因此,pentaho转换必须读取这些文件,检索行/字段并将它们插入表中。

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

密钥是data-type文件名的一部分。我们有一组不同的表,它们的名称由这部分标识。每个表结构都等同于他的相关REF文件。例如:

此文件对userlogins_20170701.refuserlogins_20170701.txt包含userlogins oracle表的数据。让我们假设这一对具有与上述示例相同的结构。因此该表具有以下结构:

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

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

1 个答案:

答案 0 :(得分:0)

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