我正在将高中生的大型文本文件加载到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;
谢谢!
最佳答案
嗯...看起来像是在Windows下执行的操作。我更喜欢使用Unix / Linux进行大型文本操作,但是您应该能够在Windows下使用类似的技术(尝试安装Cygwin)。如果您熟悉,PowerShell也具有一些有用的功能。考虑到这一点,以下是一些适合您的想法:
编写一个脚本,通过创建一个新文件,该文件包含除第一行以外的所有内容,并在每行之前添加学校信息,从而对您的数据文件进行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
对于每所学校,按原样进行加载(跳过第一行),但是将其加载到临时表中,然后为学校添加默认的学校信息列。从临时表复制到最终表。
如果有选择的话,我将始终在数据库外部进行文本操作以使输入文件更友好-许多文本操作工具比数据库的大容量加载工具在格式化数据方面要快得多。