复杂的固定宽度导入MYSQL

时间:2015-05-06 18:27:51

标签: mysql import fixed-width

我有一些巨大的文件,我必须导入到数据库。它们没有分隔符,所以固定宽度。问题是,我希望将某些字段的平均值作为一列,并且仅从非0的那些字段开始。

示例文本(实际文本中没有空格):

ASDD 000 000 003
BBBB 006 004 000
CCCC 001 002 000

我需要的结果插件是

ASDD | 3
BBBB | 5     [(6+4)/2]
CCCC | 1.5   [(1+2)/2]

现在我正在使用下一个代码,这显然是错误的。

LOAD DATA LOCAL
INFILE '{$file}'
INTO TABLE data
  (@var1)
    SET
    name=SUBSTR(@var1,1,4)
    avg=(SUBSTR(@var1,5,3)+SUBSTR(@var1,8,3)+SUBSTR(@var1,11,3))/3

生成下一个条目:

 ASDD | 1
 BBBB | 3.33
 CCCC | 1   

我的问题是,有没有办法正确使用LOAD DATA LOCAL(或任何其他SQL直接),或者我应该使用php istead?

PHP的问题是真实文件每行有9M行,900列和10k字符,我认为导入速度很慢。

1 个答案:

答案 0 :(得分:0)

name=SUBSTR(@var1,1,4)
num = IF(SUBSTR(@var1,5,3)=0,0,1)+IF(SUBSTR(@var1,8,3)=0,0,1)+IF(SUBSTR(@var1,11,3)=0,0,1) 
avg=(SUBSTR(@var1,5,3)+SUBSTR(@var1,8,3)+SUBSTR(@var1,11,3))/num