0

我在一个表中有 28 亿条记录。该表使用在 mysql 安装上运行的INFOBRIGHT引擎。我在表中有一些不正确的条目,希望更正它们。

测试有 350 奇数列。我想将数据从P1列交换到P3列以获得一些记录(不是全部)。我计划进行数据迁移的方法如下

  1. 使用 mysql 的INTO OUTFILE 功能从表 Test 中提取数据到 CSV 文件
  2. 从表中删除不需要的记录。
  3. 使用LOAD DATA INFILE导入 CSV 数据并使用SET 子句将数据从 P1 移动到 P3(P1和 SET P1 = P3为空字符串)

这种方法似乎很有意义,直到我意识到 INFOBRIGHT 不支持此处提到的 SET 子句

以下链接的节选

SET 结构由标准 MySQL 下载中的 MySQL 加载程序支持,但 ICE 中包含的 Infobright 加载程序不支持。我能够使用 SET 语句实际执行加载;有趣的是它会运行但 SET 会被 Infobright 忽略。

问题

  1. 有没有更简单的方法来做到这一点?
  2. 当然,我可以编辑 CSV 文件。但是对于 28 亿条记录,我希望有一个确定的方法来做到这一点。任何经过测试的脚本表示赞赏。
  3. 我不想使用 mysql 加载程序并将数据加载到 MISAM 表中,因为涉及的数据量很大。那里有更快的方法吗?
4

1 回答 1

1

Infobright 在从文件导入时不允许 SET,但您可以选择 mysql 加载程序来加载文件。默认情况下,infobright 使用它自己的加载器,但您可以选择 mysql 加载器来加载文件,然后您可以使用 SET。

您可以使用以下方法设置 mysql 加载程序: set @bh_dataformat = 'mysql';

我不知道mysql loader会比IB loader慢多少。我在 1.5 小时内加载了 ~60GB 的文件,其中包含 ~60 列。

于 2016-04-08T15:06:29.813 回答