我正在使用Informix LOAD FROM命令将CSV文件中的数据批量插入数据库表,例如:
LOAD FROM "file.csv" DELIMITER ";" INSERT INTO table_name(col1, col2, col3)
问题是,每个CSV文件的第一行包含列标题。有没有办法告诉Informix第一行应该被忽略?
答案 0 :(得分:2)
没有;没有办法告诉标准的Informix LOAD statement跳过标题行。另请注意,它不会删除CSV格式的字段周围的引号,也不会像CSV格式正式预期的那样处理事物(但是,因为你有分号分隔值而不是逗号分隔值,所以很难知道正在遵循哪些规则 - 对反斜杠的处理也持谨慎态度。
您可以使用Informix数据库加载实用程序(dbload
)代替;这取决于您的数据是否只是使用;
代替Informix的默认|
分隔符,或者您是否有更多的CSV语义,例如需要删除的字段周围的引号。如果您希望获得异国情调,Informix High-Performance Loader (HPL)可以原生处理它,也可以接受培训来处理它。
或者,您可以考虑使用我的 * SQLCMD程序(它被称为sqlcmd
的时间远远长于微软的johnny-同名的程序)允许您指定:
LOAD FROM "file.csv" DELIMITER ";" SKIP 1 INSERT INTO table_name(col1, col2, col3);
SQLCMD还有一个选项FORMAT CSV(以及其他格式)可能或可能不相关。它处理诸如从完整CSV标准支持的字段周围删除引号之类的事情。
您需要安装Informix ClientSDK和C编译器(以及C开发系统的其余部分)来构建SQLCMD。
* 由于SQLCMD是我的程序,因为我写了它,任何使用它的建议都是固有的偏见;你被警告了。
你也可以考虑一个'外部表'(CREATE EXTERNAL TABLE),但我不确定它是否比它支持的格式或能够跳过第一行的LOAD语句更好。数据
答案 1 :(得分:0)
当我使用LOAD FROM将CSV文件加载到Informix中时,我通常会加载到临时表,这是我随后使用的所有字符列。您只需删除标题行。基本上你只需将整个文件放入一个更易于使用的临时表中。