0

我的基本任务是尽可能快地将单个文件中的部分数据导入几个不同的表中。

LOAD DATA我目前每个表都有一个文件,并且我设法使用语法将每个文件导入到相关表中。

我们的产品收到客户的新要求,他不再有兴趣向我们发送多个文件,而是希望向我们发送包含所有原始记录的单个文件,而不是维护多个此类文件。

我想到了几个建议:

  1. 我可能会要求客户在文件中的每批行之前写一个原始文件,描述他希望将其加载到的表以及需要导入的前行数。例如

    Table2,500 
    ...
    Table3,400 
    

    然后我可以尝试LOAD DATA为每个这样的行块申请丢弃表和行号描述。可行吗?

  2. 我可能要求每条记录都包含表名作为附加属性,然后我需要迭代每条记录并插入它,尽管我确信它比LOAD DATA.

  3. 我也可以使用例如 Java 预处理这个文件并LOAD DATA在 for 循环中执行 as 语句。

我可能需要几乎任何我想要的格式更改,但它必须是一个文件并且导入必须快速。(我不得不说,我所说的表描述是什么意思,它实际上是一个特性的不同名称,我决定所有与这个特性相关的文件都应该保存在不同的表名中——它对客户端是透明的)

什么听起来是最好的解决方案?他们还有其他建议吗?

4

2 回答 2

1

这取决于您的数据文件。我们正在做类似的事情,并制作了一个小的 perl 脚本来逐行读取数据文件。如果该行包含我们需要的内容(例如以 table1 开头),我们知道它应该在表 1 中,因此我们打印该行。

然后,您可以将该输出保存到文件或命名管道,并将其与 LOAD DATA 一起使用。

将其加载到临时表中并从那里加载到新表中可能会有更好的性能。

perl 脚本(但您可以用任何语言编写)可以非常简单。

于 2012-09-27T18:31:10.337 回答
1

您可能还有另一种选择,即定义一个表并将所有数据加载到该表中,然后使用 select-insert-delete 将该表中的数据传输到您的目标表。根据列的总数,这可能会也可能不会。但是,如果可能的话,您不需要编写外部 java 程序,并且可以完全依赖数据库来加载数据,这也可以为您提供更清洁和更优化的工作方式。您很可能需要一个额外的标记列,它可以是目标表的名称。如果是这样,这可以被视为上述选项 2 的变体。

于 2012-09-23T15:11:16.360 回答