【问题标题】:File splitting to different files文件拆分到不同的文件
【发布时间】:2018-07-02 04:24:49
【问题描述】:

我有一个文件,其中包含以下格式的数据

Col1
1,a,b,c
1,e,f,g,h,j
2,r,t,y,u,i.o
2,q,s,d,f
3,q,a,s,l
4,r,y,u,p,o
4,o,l,j,f,c,g,b,c
4,d,f,q,
.
.
.
97,w,e,r
3,f,g
100,q,a,x,c

现在我想将此文件拆分为 100 个不同的文件,以便每个文件都有基于第一列的数据。示例 - 第一个文件应该只有第一列中值为 1 的数据,第二个文件应该有第二列中以 2 开头的数据,依此类推,直到 100 个文件。

请告诉我 Informatica、Unix 或 teradata 中的方法

【问题讨论】:

    标签: unix teradata informatica-powercenter


    【解决方案1】:

    请使用事务控制转换来获取针对列值生成的多个文件。

    Take a variable port 
    V_curr - Col1
    V_prev - Col1
    V_flag = IIF(V_curr = V_prev,0,1)
    
    Now import transaction control transformation and pass the pipeline.
    In properties, Transaction Control Condition type,
    IIF(V_flag =0, TC_COMMIT_BEFORE, TC_CONTINUE_TRANSACTION)
    

    执行工作流后,将生成与 Col1 相关的多个文件。

    供参考 - https://kb.informatica.com/h2l/HowTo%20Library/1/0114-GeneratingMultipleTargetsFromOneTargetDefinition.pdf

    同时检查 - https://etlinfromatica.wordpress.com/

    谢谢

    【讨论】:

      【解决方案2】:

      似乎很简单...在平面文件目标上使用文件名端口并进行表达式转换,端口文件名_out动态创建为第一列值的派生值,例如"文件输出" ||端口 1 || “.dat”

      然后将filename_out的输出端口连接到目标上文件名的输入端口

      【讨论】:

      • 这将只创建具有文件名的文件。如何加载文件内的数据?
      • 只要将其余端口发送到目标,它们加载到的文件的名称将由文件名端口确定。从提供的示例记录看来,您只有 1 列,在这种情况下,您可以使用 INSTR(请参阅此处如何使用此函数的示例 google.co.uk/amp/s/informaticareference.wordpress.com/2012/03/… )返回第一个逗号的位置,然后将结果输入LEFT 函数仅提取数字。如果这个问题还有更多,请说明
      • 结果文件不应只包含端口号。它应该包含整行。因此,对于文件 1,它应该包含上表中以 1 开头的所有行。同样 2,3 到 100 。
      • Daniel 的建议实际上正是您所需要的。创建这个新端口用作文件名,将整行连接到目标行 - 就是这样。这正是您所需要的。或者...您可能需要先对数据进行排序,以确保所有行都放在一起。
      • folkstalk.com/2012/02/…。尝试场景 4,对其进行测试,然后返回您在尝试时遇到的确切错误(如果有)。
      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 2020-01-21
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2017-03-10
      相关资源
      最近更新 更多