2010-07-11 74 views
1

我正在将高中学生的大文本文件加载到MySQL中,但学校本身只在每个文本文件的第一行中标识。像这样:加载学生的大表,但学校只在第一行标识

897781234Metropolitan High     
340098 1001X 678 AS  Reading    101KAS DOE  KEITH A1 340089 A 7782... 

使用SQL代码,我怎么能生成学号的列(例如,897781234)在接收表的第一列,以便学校将与各行确定了吗?

要加载的文本文件,我使用的是:

LOAD DATA INFILE "f:/school_files/school897781234.txt" 
INTO TABLE my_table FIELDS TERMINATED BY '' 
IGNORE 1 LINES; 

谢谢!

+0

感谢您的编辑! – dave 2010-07-11 02:48:24

回答

0

嗯...看起来像你在Windows下这样做。我更喜欢Unix/Linux进行大文本处理,但是您应该可以在Windows下使用类似的技术(尝试安装Cygwin)。如果你熟悉PowerShell,PowerShell也有一些有用的功能。考虑到这一点,这里有一些想法给你:

  1. 编写一个脚本,将Munge时间你的数据文件,以使他们的MySQL友好,通过创建拥有所有的内容,但于第一线的新文件学校信息预先列在每一行上。从通用文件中加载数据。

    (munge-schools.sh) 
    #!/bin/bash 
    ifile=$1 
    ofile=$2 
    school=$(head -1 ${ifile}) 
    tail --lines=+2 ${ifile} | sed "s/^/${school}/" > ${ofile} 
    
    ./munge-schools school897781234.txt school897781234.munged 
    
  2. 对于每个学校,做为是负载(跳过的第一行),但它加载到一个临时表,然后为学校默认到学校信息添加一列。从临时表复制到最终表中。

如果可以选择,我会一直做与文本操作的数据库之外去使输入文件更友好的 - 有大量的文字处理工具那会快很多,在重新格式化你的数据比你的数据库的批量加载工具。

+0

感谢您的回复。我想我已经有了这个概念。至少,我现在知道没有“隐藏的”MySQL脚本可以完成这种类型的事情。有趣的是(或不),MySQL LOAD DATA INFILE允许IGNORE但不是LIMIT(即,LIMIT 1 LINES)。再次感谢! – dave 2010-07-12 02:50:58