需要动态映射csv文件到目标表



我有几个CSV文件,并在数据库中具有与CSV相同名称的相应表(其中将具有与具有适当数据类型的CSV相同的列)。因此,每个CSV在数据库中将有一个表。

我需要动态地映射它们。一旦运行映射,所有csv文件中的数据都应该被传输到相应的表中。
我不希望每个CSV都有不同的映射。

这是可能通过信息?
谢谢你的帮助。

PowerCenter不提供这种开箱即用的功能。除非源文件和目标表的结构相同,否则您需要定义单独的源/目标定义并创建使用它们的映射。

但是,您可以使用Stage Mapping Generator为每个文件自动生成映射。

我的理解是,您有许多具有不同列布局的CSV文件,您需要将它们加载到数据库中的适当表中。

方法1:如果你使用任何RDBMS,你应该有某种导入选项。探索该路径以基于csv文件创建表。这是一个手动任务。

方法二:打开csv文件,用头写公式,生成create table语句。在DB中执行公式结果。因此,您将创建许多表。现在,使用informatica读取CSV并导入所有表并加载到表中。

方法三:使用Informatica。您需要编写大量代码来动态地创建一个动态映射。

建议解决方案:映射1:1. 读取CSV文件,将头信息传递给java转换2. java转换应该将标题列规范化并拆分为行。您可以将它们写入文本文件3.现在,您在一个文本文件中拥有了所有列。阅读此文本文件并使用SQL转换在数据库

上创建表2

映射

现在,表可用了,您需要读取除去头的CSV文件,并通过映射1

创建的SQL转换(插入语句)将数据加载到上面的表中。

您可以对所有CSV文件遵循此方法。我还没有尝试过这个解决方案,但我相信上面的方法会起作用。

如果不使用任何转换,则使用数据库的Import选项是明智的。(例如Teradata中的bteq脚本)。但是如果你正在进行转换,那么你必须创建尽可能多的源文件和目标文件。

另一方面,您可以在一个映射中实现这一点。1. 为每个文件创建一个单独的流(例如:源-转换-目标)。2. 使用目标加载计划来选择首先加载哪个文件。3.在会话中为该映射配置文件名和相应的数据库表名。

如果所有的映射(如果您必须单独创建它们)都是相同的,则使用间接文件方法。在映射选项卡下的会话属性中,源选项..,你会得到这个选项。默认选项为直接,改为间接。

我现在没有工具来探索更多和清楚地指导你。但是在Informatica中探索这种间接文件加载类型。我相信这将满足需求。

我已经在Informatica中编写了一个工作流来完成它,但是一些复杂的步骤是在数据库中处理的。工作流监视文件夹中是否有新文件。一旦它看到构成提要的所有文件,它就开始处理提要。它在一个带时间戳的文件夹中进行备份,然后将提要文件中的所有数据复制到一个Oracle表中。Oracle过程开始工作,然后将数据从Oracle表传输到相应的目标staging表,最后传输到数据仓库。因此,如果我必须添加一个新文件或提要,我只需要对配置表进行更改。不需要对Informatica Objects或db对象进行更改。所以简短的回答是,是的,这是可能的,但这不是一个开箱即用的功能。

最新更新