我有很多大型 csv 文件,其中 NULL 值存储为 ,,
(即没有条目)。使用 LOAD DATA INFILE
会使这些 NULL 值变为零,即使我使用 var DOUBLE DEFAULT NULL
这样的字符串创建表也是如此。经过大量搜索,我发现这是一个 known "bug" ,尽管它可能是某些用户的一项功能。有没有一种方法可以在不进行预处理的情况下即时修复此问题?这些数据都是数字,因此零值与 NULL 有很大不同。
或者如果我必须做预处理,有没有一种最有希望处理数十个 100mb 到 1gb 的 csv 文件?谢谢!
最佳答案
使用 sed
进行最少的预处理,您就可以准备好数据以供导入。
for csvfile in *.csv
do
sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' $csvfile
done
这应该对您的 CSV 文件进行就地编辑,并将空白值替换为 \N
。更新 glob *.csv 以满足您的需求。
之所以有两个相同的正则表达式匹配 ,,
是因为我想不出另一种方法让它替换两个连续的空白值。例如。 ,,,
。
关于mysql - 对于 MySQL 中的 LOAD DATA INFILE,是否有允许缺失数据等于 NULL 的变通方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431378/