我有一个 csv 文件,其中一些整数字段为空白(例如,,)或具有 NA 值(例如,NA,)。当我将数据 (LOAD DATA LOCAL INFILE...) 加载到表中时,MySQL 会正确警告字段具有不正确的整数值,但是它会在列中插入 0,而不是 CREATE TABLE DDL 中指定的默认值。如果数据文件中的值不正确,有什么方法可以指定要使用的值吗?
我有一个 csv 文件,其中一些整数字段为空白(例如,,)或具有 NA 值(例如,NA,)。当我将数据 (LOAD DATA LOCAL INFILE...) 加载到表中时,MySQL 会正确警告字段具有不正确的整数值,但是它会在列中插入 0,而不是 CREATE TABLE DDL 中指定的默认值。如果数据文件中的值不正确,有什么方法可以指定要使用的值吗?
当您需要“清理”传入数据时,需要考虑两种技术。假设该列
foo
需要-1
表示"NA"
:使用
@variables
...LOAD
进入 and@variable
,然后SET
在存储值时使用它来操作值。文档中有示例。在您的情况下,您可能会在语句中使用类似SET foo := IF(@foo = 'NA', -1, @foo)
的LOAD DATA
内容。使用临时表...
而不是
LOADing
直接加载到目标表中,而是加载到单独的表中(可能TEMPORARY
)。然后在复制到“真实”表之前,使用一些 SQL 语句来操作该表中的数据。在你的情况下:UPDATE tmp SET foo = -1 WHERE foo = 'NA';
。然后INSERT INTO real SELECT * FROM tmp;
。尽管在.foo
_ _ _VARCHAR
tmp
INT
real
临时表方法可以处理更复杂的转换。