【问题标题】:Datastage 9.1 - Read Multiple Files from a Folder and Split It Based On NameDatastage 9.1 - 从一个文件夹中读取多个文件并根据名称拆分它
【发布时间】:2015-12-10 03:51:16
【问题描述】:

我正在使用 DataStage 9.1,我向您展示了我的任务,以找到一些最佳实践。

我需要从一个文件夹中读取多个 csv 文件(所有文件),并根据文件名的最后两个字符在十个不同的作业中执行 ETL。那么我的问题是:

目的是:文件fileXX将用作ETL的输入,它将填充tabXX,fileYY填充tabYY等等..

1) 如何从一个文件夹中读取多个文件? 2)如何根据文件名切换作业,或者更好地根据输入文件名的值开发参数化作业?

有人能给我一些建议,让我以最好的方式开始我的工作吗?

【问题讨论】:

    标签: datastage


    【解决方案1】:

    1) 要从您那里读取多个文件,可以使用外部源并将 a 作为参数放入一个返回文件夹中文件的命令(如果您在数据阶段服务器中使用 UNIX 或 Linux,则为 ls) 2)切换也许您可以使用一堆过滤器,或者您可以为每种类型的文件使用多个外部源,例如,如果您使用的是 UNIX 或 Linux,您可以使用参数“ls path_of_the_directory/*XX”创建一个外部源.csv”和一个带有“ls path_of_the_directory/*YY.csv”的文件,因为 ls 支持通配符,但我不知道 Windows 中是否有与之等效的文件

    【讨论】:

    • 您好,我使用的是 Linux,但有没有办法只使用 DataStage 作业来执行这些步骤?有没有办法根据文件名溢出执行?
    • 对不起,我迟到了,但我描述的只是使用 DataStage 作业,然后作业执行 shell 命令
    【解决方案2】:

    要读取多个文件,您可以创建参数化的文件名。考虑您的文件名是 FileXX(将 XX 部分作为参数,例如,让我们使用参数 Var,因此您的文件名将是 File#Var#)。将值传递给该参数。您也可以对 Table 执行相同的公式。如果您想一起读取所有文件,那么您可能需要在 ini 文件中传递值/您可能需要创建不同的源阶段。

    【讨论】:

      【解决方案3】:

      基于 Random 的原始答案和 Linux 功能;

      外部文件阶段使用类似于

      的外部命令
      grep -Han ^ /pathtofile/#pFileMask# > /dev/null
      
      H = file name
      a = forces reading of file as text
      n = line number
      

      这将生成 3 列 文件名 电话号码 全部数据

      然后您可以通过转换器并通过文件名或单独的文件掩码过滤出单个链接

      然后您必须将 AllData 列分开,最简单的方法是使用列导入阶段和每个文件类型的架构文件。

      同样,这是基于 Random 的原始答案,因此任何功劳都应归功于他/她

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2019-11-07
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-31
        相关资源
        最近更新 更多