建议使用php / mysql将各种管道分隔文件导入到基于缓冲表的db中的方法?

时间:2009-12-14 18:21:30

标签: php mysql database

我正在尝试使用php 5.2将各种管道分隔文件导入到mysql数据库中。我正在导入各种格式的管道数据,我的最终目标是尝试将不同的数据放入适当规范化的数据结构中,但需要对数据进行一些后处理才能正确地将其放入我的模型中。

我认为最好的方法是导入一个名为buffer的表,并将数据映射,然后导入到各种表中。我打算创建一个名为“buffer”的表,其中包含表示每列的字段(最多可包含80列),然后应用一些数据转换/映射将其传递到正确的表。

我计划的方法是创建一个基类,通常将管道数据读入缓冲区表,然后通过包含各种预处理语句的函数来扩展此类,以执行SQL魔术,允许我灵活地检查格式通过读取第一行的标题并将其更改为一种格式是相同的。

我的问题是:

  1. 从保存到表中的本地文件中读取数据的第一步是什么?我不太确定我是否应该使用mysql的LOAD DATA(如Best Practice : Import CSV to MYSQL Database using PHP 5.x中所述)或者只是fopen然后逐行插入数据。

  2. 这是最好的方法吗?其他人如何接近这个?

  3. zen框架中有什么可以帮助吗?
  4. 补充:我打算在计划任务中执行此操作。

4 个答案:

答案 0 :(得分:2)

你不需要任何PHP代码来做到这一点,IMO。不要在课堂上浪费时间。 MySQL LOAD DATA INFILE子句允许很多方法导入数据,满足95%的需求。无论分隔符是什么,无论要跳过/选择哪一列。请仔细阅读本手册,值得了解您可以用它做什么。导入数据后,如果您正确编写查询,它可能已经处于良好状态。缓冲表可以是临时表。然后对其进行标准化或非规范化并删除初始表。如果出现错误,请将脚本保存在文件中以重现脚本序列。

最好的方法是编写一个SQL脚本,测试最终数据是否正常,寻找错误,修改,重新运行脚本。如果有大量数据,请在较小的行集上进行测试。

[补充]以sql为主的方法的另一个原因是,如果你不熟悉SQL,但是要使用数据库,那么最好先学习SQL。稍后你会发现它有很多用处,并且会避免程序员表面上常见的陷阱。

答案 1 :(得分:1)

我个人使用免费的ETL software Kettle by Pentaho(这个软件通常被称为水壶)。虽然这个软件远非完美,但我发现我经常可以在一小部分时间内导入数据,而这些时间只需要为一个特定文件编写脚本。您可以选择文本文件输入并指定分隔符,固定宽度等。然后直接导出到您的SQL服务器(它们支持MySql,SQLite,Oracle等等)。

答案 2 :(得分:0)

有几十种方法。如果您具有对MySQL实例的本地文件系统访问权限,则为LOAD DATA。否则,您可以轻松地将每一行转换为SQL(或VALUES行),以便通过PHP定期提交给MySQL。

答案 3 :(得分:0)

最后我使用了dataload并针对不同的情况修改了这个http://codingpad.maryspad.com/2007/09/24/converting-csv-to-sql-using-php/