我有一个txt数据需要导入mysql数据库,数据大致如下形式:
<SUBBEGIN
SI=123456789012345;
MS=1234567890123;
DE=TH11;
AM=DOTH;
CAT=COMMON;
BS=TH11&TH12&TH21&TH22;
SN=1234567890;
CF=C-A-P-N-NO-NO-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
CF=C-A-P-N-NO-Y-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
XT=4-241-33-1-NONE-2-3-9-31-2-0-u-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=2-241-33-1-NONE-2-3-9-31-2-0-p-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=5-241-33-1-NONE-2-3-9-31-2-0-t-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
OP=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
FLAG=NULL-NULL-NULL-NULL-NULL-NULL-NULL;
MME=1234567890;
AY=NO;
<SUBEND
<SUBBEGIN
SI=123456789012543;
MS=8765432190123;
DE=TH11;
AM=DOTH;
CAT=COMMON;
BS=TH11&TH43&TH21&TH22;
SN=1234567866;
CF=C-A-P-N-NO-NO-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
CF=C-A-P-N-NO-Y-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
XT=4-241-33-1-NONE-2-3-9-31-2-0-u-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=2-241-33-1-NONE-2-3-9-31-2-0-p-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=5-241-33-1-NONE-2-3-9-31-2-0-t-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
OP=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
FLAG=NULL-NULL-NULL-NULL-NULL-NULL-NULL;
<SUBEND
<SUBBEGIN
SI=123456789012543;
MS=8765432190123;
DE=TH11;
AM=DOTH;
CAT=COMMON;
DN=NO;
BS=TH11&TH43&TH21&TH22;
SN=1234567866;
XT=4-241-33-1-NONE-2-3-9-31-2-0-u-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=2-241-33-1-NONE-2-3-9-31-2-0-p-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=5-241-33-1-NONE-2-3-9-31-2-0-t-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
XT=4-241-33-1-NONE-2-3-9-31-2-0-u-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
OP=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
FLAG=NULL-NULL-NULL-NULL-NULL-NULL-NULL;
MME=1234567890;
AY=NO;
<SUBEND

每一条记录都是由<SUBBEGIN开始,<SUBEND结束,每条记录中可能存在字段重复,还存在字段数不同(有的字段有的记录里有有的记录没有)。要求将一条记录作为一行。
总共有33万条记录,怎么将其导入mysql数据库呢,最好是能有详细脚本实现数据的自动导入,求各位大神指导!

解决方案 »

  1.   

    这需要处理你的txt文件:
    1、首先将所有的可能的字段全部找出来,假如有100个,然后根据这些字段建立一个表:text_table;
    2、表建好之后,处理你的txt文件,将键值对的name去掉,只保留key。并且每个key之间用固定字符分隔(如 '|' 用竖线进行分隔),空的字段需要保留分隔符(如:  ||  表示在两个分隔符中间的字段为空)。
    例如   
    SI=123456789012345;
    MS=1234567890123;
    DE=TH11;
    AM=DOTH;
    CAT=COMMON;处理之后为:
    123456789012345|1234567890123|TH11|DOTH|COMMON3、假设处理好的文件为test.txt,则使用语句导入:
    load data infile 'test.txt'  into table test_table  character set utf8  terminated by '|';
      

  2.   

    但是txt文件每个都有500M左右,有上亿行,无法进行您说的预处理,那还有办法将数据建库么
      

  3.   


    这个文件是你生成的还是已经存在的?
    如果是你生成的,你可以按照要求生成新文件;
    如果不是的话则需要你编写小程序来处理这个txt文件了。其他方法我暂时不知道,坐等其他人来回答。
      

  4.   


    这个是已有的文件,你说的编写小程序来处理,是指处理成适合导入的数据文本形式么
    这个文件是你生成的还是已经存在的?
    如果是你生成的,你可以按照要求生成新文件;
    如果不是的话则需要你编写小程序来处理这个txt文件了。其他方法我暂时不知道,坐等其他人来回答。
      

  5.   

    CF=C-A-P-N-NO-NO-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
    CF=C-A-P-N-NO-Y-N-Y-12345-NO-NO-NO-NO-NO-NO-NO-NO-NO-NO;
    XT=4-241-33-1-NONE-2-3-9-31-2-0-u-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
    XT=2-241-33-1-NONE-2-3-9-31-2-0-p-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
    XT=5-241-33-1-NONE-2-3-9-31-2-0-t-2-3-2-1-150-151-254-7-4-18-2-104-104-PAID;
    这些算几条?字段名怎么算?如果没有的就按照空值插入?
      

  6.   

    建议在字处理工具比如 ultraEdit, MS WORD 中进行替换处理数据为一行行记录,然后再导入MYSQL表中。