Sql 从多个文本文件加载数据,将不同列数加载到一个大表中

Sql 从多个文本文件加载数据,将不同列数加载到一个大表中,sql,oracle,text-files,sql-loader,Sql,Oracle,Text Files,Sql Loader,我有30k+个文本文件,它们的列数不同,用空格分隔,任务是将数据按列加载到一个大的oracle表中。详情和可能的方法如下: 文本文件1- Date Time SiteName CompName ipAdd jkl mno pqr stu vwx 文本文件2- Date CompName ipAdd abc def ghi 文本文件3- Date SiteName mno pqr 预期的Oracle表- Date Time SiteName CompName ipAdd jkl mno p

我有30k+个文本文件,它们的列数不同,用空格分隔,任务是将数据按列加载到一个大的oracle表中。详情和可能的方法如下:

文本文件1-

Date Time SiteName CompName ipAdd
jkl mno pqr stu vwx
文本文件2-

Date CompName ipAdd
abc def ghi
文本文件3-

Date SiteName 
mno pqr
预期的Oracle表-

Date Time SiteName CompName ipAdd
jkl mno pqr stu vwx
abc         def ghi
mno     pqr
现在,正如您所看到的,在多个文本文件中分布着不同数量的“相同”列。我必须将数据加载到一个大的oracle表中

请注意:

在所有文本文件中,第一列始终为“日期”,并且各列按顺序出现,即从日期到时间..或从日期到名称。。。(从日期起增加的订单)

问题是,我找不到一种使用SQL Loader的方法,它可以区分两个不同文本文件中的2列和15列,即使我在第一行文本文件中有它们的名称,然后将它们加载到一个大表中

方法:

  • 将所有文本文件合并到一个大文本文件中并执行某些操作-失败
  • 尝试为所有文本文件(25列)中可以包含的最大列数设置分隔符,并执行某些操作-无法
  • 在35k+oracle表中加载35k+文本文件,然后坐下来,将这些35k+oracle表合并到一个大表中——这是我周围的PPL推荐的,但太长了,可能空间和时间/精力效率低下,所以我寻找一个真正的替代方案

请给出你最好的方法-(

将每个数据加载到与文件结构匹配的暂存表中。然后使用sql代码清理数据并将其移动到最终的生产表中


或者,将文件返回给将其发送给yhou的人员,并拒绝接受符合标准文件规范的文件。

假设您发布的示例是准确的,并且每个文件的第一行是列标题,这里是我将采取的一般方法。(如果每个文件的第一行不是列标题,我认为您已经很饱了)

这一切在*nix上要比在Windows上容易得多,尽管我希望Powershell能够处理这些任务(我不是Powershell的人)

  • 编写一个shell脚本,读取每个文件的第一行,并将其与文件名一起写入列表文件
  • 按所有列对列表文件的内容进行排序。这将按列对所有文件名进行分组。您需要这样做,因为只知道列的数量是不够的:我假设一些包含三列的文件将具有
    日期时间SiteName
    ,而其他文件将具有
    日期时间ipAdd
  • 我建议您在列表文件中标记每个组。这将非常繁琐,值得使用文本处理器进行自动处理,尽管目前我不确定如何做到这一点
  • 您需要为前面阶段中标识的每个列排列编写一个加载程序文件
  • 然后,您需要将每个文本文件与相应的控制文件一起提交给加载器。这就是为什么用组标记每个文件名是一个好主意:这将使此阶段更容易自动化
  • 另一方面,它比SQL加载器更易于使用。外部表的DDL比加载器控制文件更易于编写,您可以使用SQL查询它们。基本上,外部表是临时表,但数据在操作系统文件中而不是数据库中


    请注意,您不需要35000个临时表。您只需要为每个不同的列组合和所有文本文件创建一个临时表。当然,考虑到目标表中有25列,可能的排列数是huuuuge,但我们假设它实际上是一个可管理的数。

    感谢您的回复。.这很快。.而且你指的是上面的第三个appraoch..对吗?另外,通过匹配文件结构,你指的是,3列文本文件到3列暂存表..正确吗?!数据在..所以不能发回..哈哈!(希望我能成为一个标准).我将等待更多的答案。谢谢!如果数据不符合我们的标准,我们总是会发回数据。当然,我们有时会很不走运地更改它,但当我们告诉他们这将花费多少钱时,他们通常会过来。这里的大时间不走运..因为它的日志文件有点数据..我们已经有了这样的数据..而且从那时起这是一个非技术客户端,所以他们对任何格式都帮不了什么忙。摇头请不要重复标题中的问题标签()@APC,谢谢你的格式设置。我已经尽力了。:)@Jim,这不是一个很有建设性的评论。我看到了SQL加载器的问题是如何被问到的,在按标签搜索之后,所以有了标题。但是好的。我会记住它,下次。谢谢。每个文本文件的第一行是列名吗?你使用的是哪种操作系统?很抱歉没有在上面的评论中提及,所以是的,eac的第一行h tex文件是列名。您所建议的方式似乎很长,很难,也很乏味。感谢您回复APC。仍在寻找答案:(