【问题标题】:Informix LOAD FROM file with header带有标题的 Informix LOAD FROM 文件
【发布时间】:2015-02-12 13:27:20
【问题描述】:

我正在使用 Informix LOAD FROM 命令将数据从 CSV 文件批量插入到数据库表中,例如:

LOAD FROM "file.csv" DELIMITER ";" INSERT INTO table_name(col1, col2, col3)

问题是,每个 CSV 文件的第一行都包含列标题。有什么方法可以告诉 Informix 第一行应该被忽略?

【问题讨论】:

    标签: csv informix


    【解决方案1】:

    没有;没有办法告诉标准 Informix LOAD statement 跳过标题行。还要注意,它不会从 CSV 格式的字段周围删除引号,并且不会以 CSV 格式正式期望的方式处理事情(但是,由于您有分号分隔的值而不是逗号分隔的值,因此很难知道遵循了哪些规则——也要警惕反斜杠的处理)。

    您或许可以改用 Informix DB-Load 实用程序 (dbload);这取决于您的数据是简单地使用 ; 代替 Informix 的默认 | 分隔符,还是您是否具有更多 CSV 语义,例如需要删除的字段周围的引号。如果您想获得异国情调,Informix High-Performance Loader (HPL) 可以在本地处理它,也可以经过培训来处理它。

    或者,您可以考虑使用 my*SQLCMD 程序(它被称为 sqlcmd 比 Microsoft 的同名 johnny-come-lately 长得多),它允许您指定:

    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 语句更好,无论是它支持的格式还是跳过第一行数据的能力。

    【讨论】:

    • 感谢您的澄清!我使用的文件并不真正遵循标准的 CSV 格式,但由于它们只包含数字和几个日期,所以我不担心格式问题。无论如何,我一定会看看 SQLCMD,谢谢提示!
    【解决方案2】:

    当我使用 LOAD FROM 将 CSV 文件加载到 Informix 中时,我通常会加载到一个临时表,该表是我随后使用的所有字符列。您只需删除标题行。基本上,您只需将整个文件放入一个更易于使用的临时表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多