【问题标题】:Uploading csv file using filters使用过滤器上传 csv 文件
【发布时间】:2012-08-22 18:10:29
【问题描述】:

我正在尝试使用以下查询将 CSV 数据上传到 MYSQL 表。它运行成功。包含 2000 万条数据的 CSV 文件。但是现在上传数据还是有问题。

我的 CSV 文件结构如下:

Name phone_no     DND
xxx  99934034343  A
xxx  99934034345  D
xxx  99934034346  A
xxx  99934034347  D

我只想使用以下命令插入活动的“A”。

LOAD DATA LOCAL INFILE '/root/782012_23.csv'
INTO TABLE tbl_dndno
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';

这样的预期记录

Name phone_no     DND
 xxx  99934034343  A
 xxx  99934034346  A

【问题讨论】:

  • 你的问题是什么?会出现什么错误?
  • 我无法上传“A”记录。
  • 为什么?你期望什么,会发生什么,你看到哪个错误?
  • 我只想存储有效的电话号码。这意味着我想通过 DND 列“A”插入电话无过滤器。
  • 抱歉,您仍然没有回答我的问题:为什么它不起作用?运行命令后,表中有什么?你看到错误了吗?

标签: mysql file-upload csv


【解决方案1】:

我猜你的命令运行良好,但是用 4 行而不是预期的 2 行填充你的表。

LOAD DATA IN FILE documentation 似乎不支持您的要求,它只能逐行排除,因此如果您在创建此 csv 文件时有办法知道行号,则可以使用此功能。否则有两种解决方法:

您可以在加载文件之前(在 mysql 之外)使用(在 Linux 上)过滤文件

grep "D$" /root/782012_23.csv > filteredfile; LOAD DATA LOCAL INFILE 'filteredfile' ...

或通过SQL加载后过滤:

your_command;mysql -u user -ppassword "DELETE FROM yourtable WHERE DND = 'A'";

【讨论】:

  • 感谢您的帮助。我认为您对我投了反对票。我无法提问。非常感谢..
  • 不,我没有否决这个问题,否则我不会费心回答,但你必须意识到你没有说你的加载工作正常,而是加载 4 行而不是预期的 2 行(再次阅读你的问题) ,这对我们有很大帮助,然后是你,并防止了很多反对票:)
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多