我有几个CSV文件,并且在数据库中具有与CSV相同名称的相应表(与具有相应数据类型的CSV的列相同)。因此,每个CSV都会在数据库中有一个表。
我不知何故需要动态映射这些。运行映射后,应将所有csv文件中的数据传输到相应的表格。
我不希望每个CSV都有不同的映射。
这可以通过informatica吗?
感谢您的帮助。
答案 0 :(得分:1)
PowerCenter不提供开箱即用的功能。除非源文件和目标表的结构相同,否则您需要定义单独的源/目标定义并创建使用它们的映射。
但是,您可以使用Stage Mapping Generator自动为每个文件生成映射。
答案 1 :(得分:1)
PMy了解您是否拥有具有不同列布局的mant CSV文件,您需要将它们加载到数据库中的相应表中。
方法1:如果你使用任何RDBMS,你应该有某种导入选项。探索基于csv文件创建表的路由。这是一项手动任务。
方法2:打开csv文件并使用标头编写formuale以生成create tbale语句。在数据库中执行公式结果。因此,您将创建许多表。现在,使用informatica读取CSV并导入所有表并加载到表中。
方法3:使用Informatica。您需要进行大量编码才能动态创建动态映射。
建议的解决方案: 映射1: 1.读取CSV文件,将头信息传递给java转换 2. java转换应规范化并将标题列拆分为行。你可以把它们写到文本文件中 3.现在,您拥有文本文件中的所有列。阅读此文本文件并使用SQL转换在数据库上创建表
映射2
现在,表格可用,您需要读取不包括标题的CSV文件,并通过映射1创建的SQL转换(插入语句)将数据加载到上表中
您可以对所有CSV文件使用此方法。我没有尝试过这个解决方案,但我相信上述方法可行。
答案 2 :(得分:1)
如果您不使用任何转换,则明智的做法是使用数据库的Import选项。 (例如Teradata中的bteq脚本)。但是如果你正在进行转换,那么你必须创建与你拥有的文件数量一样多的源和目标。
另一方面,您可以在一个映射中实现此目的。 1.在单个映射中为每个文件(即Source-Transformation-Target)创建单独的流。 2.使用目标加载计划选择首先加载哪个文件。 3.在会话中为该映射配置文件名和相应的数据库表名。
答案 3 :(得分:0)
如果所有映射(如果必须单独创建)都相同,请使用间接文件方法。在mappings选项卡下的会话属性source选项..,您将获得此选项。默认选项是直接将其更改为间接。
我现在没有这个工具来探索更多并清楚地指导你。但是在Informatica中探索这种间接文件加载类型。我相信这将解决这个问题。
答案 4 :(得分:0)
我已经在Informatica中编写了一个工作流程,但是在数据库中处理了一些复杂的步骤。工作流程监视新文件的文件夹。一旦它看到构成Feed的所有文件,它就会开始处理Feed。它在带时间戳的文件夹中进行备份,然后将源中文件中的所有数据复制到Oracle表中。 Oracle过程开始工作,然后将数据从Oracle表传输到相应的目标登台表,最后传输到数据仓库。因此,如果我必须添加新文件或Feed,我只需要在配置表中进行更改。无需对Informatica对象或数据库对象进行任何更改。所以简短的回答是肯定的,这是可能的,但它不是一个开箱即用的功能。