Informatica开发人员似乎需要在映射中使用事务控制转换的分步指南,其中预期的中断是在记录从TC输出时创建的各种文件。考虑到一个例子的共同需求,每x个记录输出创建一个新文件,我决定把这个例子放在一起。在亲自尝试之前,我真的希望我有一个循序渐进的指南,因为它需要几天时间才能完成工作。 “它应该不那么难”,正如他们所说,我同意。所以我希望这有助于其他人。
问题:您有一个需要输出大量记录的映射。您的内部客户端需要一个可以轻松提供的.csv文件,但他们希望能够将每个.csv文件导入到自己的Excel工作表中。他们会进行导入,但不想手动分解大输出文件,因为它有点超过他们的技术水平,并且没有学习如何使用高容量文件编辑器打开输出文件的意愿然后复制并粘贴每个'x'个记录,其中'x'是一个Excel友好的数字。因此,他们希望传递给他们的输出数据已经分解为Excel友好的.csv文件,每个文件包含65,000条记录,接近Excel的行限制*
。如何确保文件以65,000记录的增量自动分解,在每个65,000记录点创建一个具有不同名称的新文件?
*
早些时候。 Excel的每个工作表的限制超过65,500行。然而更近的vers。不要。为了这个例子,我假设你在一个公司工作。那是使用较旧的版本。具有此工作表记录限制的Excel。 (最新的Excel版本允许每个工作表只有超过一百万行。有关详细信息,请参阅此链接:https://superuser.com/questions/366468/what-is-the-maximum-allowed-rows-in-a-microsoft-excel-xls-or-xlsx)
答案 0 :(得分:2)
解决方案:
在表达式转换的“端口”选项卡中编辑端口列表,以添加长度为255的名为“PhysicalFileName”的字符串变量端口;使其成为端口列表中的第一个端口。其Expression值应该是您要用于输出文件的文件名的第一部分。例如,如果我希望我的输出文件以“ABCReport_x.csv”的形式命名,其中x是一个数字,例如1,2,3(例如:'ABC_Report_1.csv','ABC_Report_2.csv'等) ,这是我将使用的价值:
'ABC_Report_'
然后添加另一个名为'var_recordcount'的变量类型整数端口,并为其表达式值指示如下:
var_recordcount + 1
接下来,添加另一个名为“var_filenumber”的变量类型字符串端口,并为其表达式值指示如下:
IIF(MOD(var_recordcount,65000)=0, to_char((var_recordcount/65000)+1), IIF(var_filenumber='','1',var_filenumber))
现在添加另一个名为“var_new_FN_flag”的变量类型整数端口,并为其表达式值指示如下:
IIF(var_prev_FN = (PhysicalFileName || var_filenumber), 0, 1)
(注意'var_prev_FN'尚未定义,但它将作为下一个端口,因此如果您获得解析质询,请单击“确定”,接受输入的“表达式”值。)
然后立即添加另一个名为'var_prev_FN'的变量类型字符串端口,其长度为255,表达式值为:
PhysicalFileName || var_filenumber
在该端口之后,添加另一个名为“o_Physical_File_Name”的字符串类型的输出端口,其长度为255,表达式值为:
PhysicalFileName || var_filenumber || '.csv'
最后,在那之后,添加另一个名为'o_new_FN_flag'的输出端口类型整数,其表达式值为:
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)
单击“应用”,然后单击“确定”关闭事务控制转换的“编辑转换”对话框。
应该这样做。如果您按照这些说明操作并遇到问题,请随时发布。我会跟踪这篇文章,看看它对别人的影响。 (有时候,Informatica就像我们所知道的那样挑剔......)。最后一点说明:第一个输出文件将包含64,999行。其余的将持有65,000。有一种方法可以调整逻辑,这样第一个文件也可以容纳65,000行,但这只是一个例子。增加那段跳跃式希望只会破坏已经涉及的例子。