我有一个file.txt来详细说明ODI,它由几个记录组成,具有以下结构:
页脚记录1
Heather Record(father1)
每条记录都包含一组公共字段,每个字段都有自己的结构。出于这个原因,我必须为我的数据库为每个记录类型创建几个表,并在每个记录之间存储关系的事实表。这样做,我不知道如何保持记录父亲和儿子之间的关系。是否可以在ODI中使用某些功能来做到这一点?是否可以使用ODI导入文件并详细说明一种分层系统?
答案 0 :(得分:0)
您可以考虑在临时表中进行初步导入,根据行的类型(标题,type1子,type2子或页脚),您填充两个新列RECORD_ID
和ROW_TYPE
RECORD_ID
将通过序列进行填充,当行类型为标题时使用nextVal()
,而在其他情况下使用lastVal()
。
ROW_TYPE
将填充行类型。
通过这种方式,您可以稍后根据ROW_TYPE
的值填充表格,同时保留RECORD_ID
列中父亲和儿子之间的关系。
编辑(进一步解释)
假设您的文件行具有以下结构
Header: Field1;Field2;Field3
Type1: Field1;Field2
Type2: Field1;Field2;Field3;Field4
Footer: Field1;Field2
然后,您的目标表将需要相应文件行中每个字段的列,以及ID的一个列。它们看起来像这样
Header
ID | Header col1 | Header col2 | Header col3
Type1
ID | Type1 col1 | Type1 col2
Type2
ID | Type2 col1 | Type2 col2 | Type2 col3 | Type2 col4
Footer
ID | Footer col1 | Footer col2
那么你的临时表将有6列(表中有5列有更多,另外一列用于Type
)并且看起来像这样
Temp
Type | ID | Temp col1 | Temp col2 | Temp col3 | Temp col4
使用这种结构,你可以有一个第一个接口来加载表中文件的每一行,根据你正在分析的行,在Type
列中放入一个不同的值,并正确调用nextVal()
列中的序列(lastVal()
或ID
)。
Temp interface
Type <- rowType
ID <- case when rowType = Header then sequence.nextVal() else sequence.lastVal() end
Temp col1 <- File field1
Temp col2 <- File field2
Temp col3 <- File field3
Temp col4 <- File field4
然后你可以有多个接口从这个临时表中分别填充一个目标表,过滤Type列。
Header interface
ID <- ID
Header col1 <- Temp col1
Header col2 <- Temp col2
Header col3 <- Temp col3
where Type = 'Header'