【问题标题】:Comments in SQL Loader, CSV fileSQL Loader 中的注释,CSV 文件
【发布时间】:2015-10-07 04:53:34
【问题描述】:

我正在生成一个 CSV 文件,该文件将使用 sqlldr 读入数据库,我想知道是否可以将兼容的 cmets 放入文件中?

# Currently I am using comments of this format
# and I want to add some information about where the file came from

但是,sqlldr 将这些报告为 rows not loaded due to data errors,这可能会让任何尝试调试导入过程的用户感到困惑。

我查看了sqlldr documentation,它没有提到任何关于 cmets 的内容。 this question 的答案还概述了 CSV 文件没有自己标准的 cmets,但标准由读取文件的应用程序定义(在本例中为 sqlldr)。

是否有可以与sqlldr 一起使用的兼容评论类型?

【问题讨论】:

    标签: csv sql-loader


    【解决方案1】:

    我不相信 sqlldr 允许在数据中使用 cmets,但您可以通过在控制文件中指定 with 子句来绕过它,该子句仅加载第一个字符不等于的行'#'。请注意,'#' 必须始终位于同一位置,而不是在线上的任何位置。

    编辑:我刚试了一下,效果很好。

    数据文件:

    # This is a comment in the data file
    1|\a\ab\|do not "clean" needles|@
    # This is a comment in the data file
    2|\b\bg\|wall "69" side to end|@
    # This is a comment in the data file
    

    控制文件:

    load data
    infile 'x_test.dat'
    into table X_TEST
    when (1:1) <> '#'
    fields terminated by "|" OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    (
      col1,
      col2,
      col3
    )
    

    【讨论】:

    • 感谢您的回答!我看到记录被丢弃在日志文件中。但是,尽管忽略它们是件好事,但这仍然会让用户感到困惑。你也看到Record 1: Discarded - failed all WHEN clauses了吗?还是我需要再修改一下我的 CTL 文件?
    • 我同意,但我认为就是这样。我建议不要将 cmets 放入数据中,但可能会创建一个日志文件或日志表条目,该条目与包含该文件信息的文件一起使用。您始终可以编写自己的程序来读取文件并加载数据。如果您找到更好的方法,请回帖!
    • 你说得对,数据处理干净更重要,如果我必须牺牲一些元数据,那也没关系。
    • 您不必牺牲元数据,只需想出一种不同的方式来处理它来做您需要的事情。即,我们使用一个表驱动的包装程序,它基于文件的条目构建一个 sqlldr 命令行,在保持统计信息的同时运行它,然后将有关负载的信息记录到 load_log 表中。时间流逝,文件中的记录,插入的记录等。数据表中的每一行都带有 load_log 表条目 ID 的标记,以便快速排除故障。这真是一个穷人的ETL工具。您必须决定是否值得为您的需求而烦恼。
    • 为有助于识别其来源的数据文件创建命名约定。
    猜你喜欢
    • 1970-01-01
    • 2014-11-02
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多