Transactions 在Informatica中逐步使用带有自定义输出文件名的事务控制

Transactions 在Informatica中逐步使用带有自定义输出文件名的事务控制,transactions,informatica,Transactions,Informatica,Informatica开发人员似乎需要一个在映射中使用事务控制转换的分步指南,其中预期的中断是在记录从TC获得输出时创建各种文件。以一个常见的需求为例,每输出x个记录就创建一个新文件,我决定将这个示例放在一起。在我亲自动手之前,我真希望我有一个循序渐进的指南,因为我花了好几天的时间才把事情做好。“不应该那么难,”他们说,我同意。所以我希望这能帮助其他人 问题:您有一个需要输出大量记录的映射。您的内部客户端需要一个可以轻松提供的.csv文件,但他们希望能够将每个.csv文件导入到自己的Excel工

Informatica开发人员似乎需要一个在映射中使用事务控制转换的分步指南,其中预期的中断是在记录从TC获得输出时创建各种文件。以一个常见的需求为例,每输出x个记录就创建一个新文件,我决定将这个示例放在一起。在我亲自动手之前,我真希望我有一个循序渐进的指南,因为我花了好几天的时间才把事情做好。“不应该那么难,”他们说,我同意。所以我希望这能帮助其他人

问题:您有一个需要输出大量记录的映射。您的内部客户端需要一个可以轻松提供的.csv文件,但他们希望能够将每个.csv文件导入到自己的Excel工作表中。他们将进行导入,但不想手动分解大型输出文件,因为它有点超出了他们的技术水平,并且没有意愿学习如何使用高容量文件编辑器打开输出文件,然后复制并粘贴每个“x”个记录,其中“x”是Excel友好的数字。因此,他们希望交付给他们的输出数据已经分解为Excel友好的.csv文件,每个文件包含65000条记录,这接近Excel的行限制
*
。如何确保文件以65000条记录的增量自动分解,在每个65000条记录点创建一个具有不同名称的新文件


*
早期版本。对于Excel,每个工作表的行数限制为略多于65500行。然而,最近的版本。不要。在本例中,我假设您在一家使用旧版本的公司工作。每个工作表具有此记录限制的Excel的。(最新版本的Excel允许每张工作表有超过一百万行。有关详细信息,请参阅此链接:)

解决方案:

  • 首先,您需要在映射中向文件目标添加对自定义文件名的支持。为此,请编辑目标文件,以便向其添加特殊的“文件名”端口。这是通过转到目标中的端口列表并单击目标端口列表区域右上角的阴影“F”来完成的。端口“FileName”将出现,它的固定长度为255,并被着色。用户无法编辑此项。保存目标并将其签入。然后返回到您正在处理的映射。根据需要刷新视图,以便目标的新“文件名”端口显示在映射的目标端口列表中
  • 将表达式转换添加到映射中,并连接要连接的端口,这些端口最终将连接到事务控制转换
  • 编辑表达式转换中“端口”选项卡中的端口列表,以添加名为“PhysicalFileName”的字符串变量端口,长度为255;使其成为端口列表中的第一个端口。它的表达式值应该是要用于输出文件的文件名的第一部分。例如,如果我希望我的输出文件以“ABCReport_x.csv”的形式命名,其中x是一个数字,如1、2、3(例如:“ABC_Report_1.csv”、“ABC_Report_2.csv”等),我将使用以下值:

    'ABC_Report_'
    
  • 然后添加另一个名为“var_recordcount”的变量类型整数端口,对于该端口的表达式值,如下所示:

        var_recordcount + 1
    
        IIF(MOD(var_recordcount,65000)=0, to_char((var_recordcount/65000)+1), IIF(var_filenumber='','1',var_filenumber))
    
        IIF(var_prev_FN = (PhysicalFileName || var_filenumber), 0, 1)
    
    接下来,添加另一个名为“var_filenumber”的变量类型字符串端口,并为其表达式值指示如下:

        var_recordcount + 1
    
        IIF(MOD(var_recordcount,65000)=0, to_char((var_recordcount/65000)+1), IIF(var_filenumber='','1',var_filenumber))
    
        IIF(var_prev_FN = (PhysicalFileName || var_filenumber), 0, 1)
    
    现在添加另一个名为“var_new_FN_flag”的变量类型整型端口,对于它的表达式值,如下所示:

        var_recordcount + 1
    
        IIF(MOD(var_recordcount,65000)=0, to_char((var_recordcount/65000)+1), IIF(var_filenumber='','1',var_filenumber))
    
        IIF(var_prev_FN = (PhysicalFileName || var_filenumber), 0, 1)
    
    (注意“var_prev_FN”尚未定义,但它将作为下一个端口,因此,如果收到解析质询,请单击“确定”,按原样接受输入的表达式值。)

    然后紧接着,添加另一个名为“var_prev_FN”的变量类型字符串端口,其长度为255,表达式值为:

        PhysicalFileName || var_filenumber
    
        PhysicalFileName || var_filenumber || '.csv'
    
        var_new_FN_flag
    
    在该端口之后,添加另一个名为“o_Physical_File_Name”的字符串类型的输出端口,其长度为255,表达式值为:

        PhysicalFileName || var_filenumber
    
        PhysicalFileName || var_filenumber || '.csv'
    
        var_new_FN_flag
    
    最后,在此之后,添加另一个名为“o_new_FN_flag”的输出端口类型整数,其表达式值为:

        PhysicalFileName || var_filenumber
    
        PhysicalFileName || var_filenumber || '.csv'
    
        var_new_FN_flag
    
    在这些端口之后,应该列出您希望看到的其他端口,使其进入输出文件;请注意,我们在端口列表的顶部处理各种变量操作等,只有在操作/设置这些变量之后,才最终列出输出端口。单击“端口”选项卡中的“应用”和“确定”关闭“编辑转换”对话框

  • 添加事务控制转换,并将步骤3中表达式转换的所有输出端口连接到该转换。事务控制转换应该创建两个端口来管理输出文件的名称:o_new_FN_flag和o_Physical_file_name。在事务控制转换的“事务控制条件”框中,其值应为:

    IIF(o_new_FN_flag = 0,TC_CONTINUE_TRANSACTION,TC_COMMIT_BEFORE)
    
  • 单击“应用”,然后单击“确定”,关闭事务控制转换的“编辑转换”对话框

  • 将事务控制转换中的所有端口连接到文件目标,但“o_new_FN_flag”端口除外。“o_Physical_File_Name”端口连接到目标的“FileName”端口,并且在事务控制转换中拥有的实质性端口可以到达目标文件中需要的任何位置
  • 应该这样做。如果您遵循这些指示并遇到问题,请随时发布。我会追踪这篇文章,看看它对其他人有何影响。(我们知道,Informatica有时会非常挑剔……)。最后一点注意:第一个输出文件将包含64999行。其余将容纳65000人。有一种方法可以调整逻辑,使第一个文件也包含65000行,但这只是一个示例。