【问题标题】:How can I import CSV into table if the CSV does not have all the tables fields?如果 CSV 没有所有表格字段,如何将 CSV 导入表格?
【发布时间】:2019-10-07 04:50:37
【问题描述】:

我正在尝试导入包含大量数据的 CSV 文件。数据没有主键或唯一标识符,因此我创建了一个带有“id”字段的表,该字段是主键并自动递增。

假设该表具有三个字段 id、LastName 和 FirstName。我的 CSV 文件只有姓氏,名字。我收到一堆错误,说第 X 行不包含所有列的数据。

我试图明确命名我想添加的字段,认为自动增量会分配一个值,但当我这样做时它不起作用:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (LastName, FirstName);

我得到同样的错误,第 X 行不包含所有列的数据...

然后我尝试通过以下方式将 id 显式设置为 Null:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (id, LastName, FirstName) 
SET id=null;

相同的错误 X 行不包含所有列的数据。我试过了:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n' SET id=null;

当我这样做时,它会尝试获取 CSV 中的第一个值并将其分配给 id 字段,然后在第 1 行为列“id”提供一个不正确的整数值。

如果我使用的 CSV 文件不包含表中的每个字段,我如何向表中添加数据?谢谢!

编辑:

这里是表格字段:

id        | int(11)  | NO   | PRI | NULL    | auto_increment 

LastName  | tinytext | YES  |     | NULL    |                

FirstName | tinytext | YES  |     | NULL    |                

这是 CSV 文件:

Smith,John
Coconut,Joe
Ann,Pattye

那些在差异线上,我无法让 stackoverflow 格式配合。

【问题讨论】:

  • 请在问题正文中发布您的 csv 内容。您可能在行尾缺少逗号、特殊字符等单元格,或者可能没有使用 csv 文件而是另一个分隔符文件。
  • 外来数据与基表的结构或约束不完全匹配是很常见的,这种情况下的典型做法是将数据加载到临时表中,然后移动它到基表中,并根据需要对其进行修改。
  • 史密斯,约翰椰子,乔安,帕蒂
  • 这是一个 CSV,我什至重新导出它以确定。我贴在上面。我什至去创建了第二个新的 csv 来测试并得到同样的错误:(

标签: sql database mariadb load-data-infile


【解决方案1】:

你试过了吗?

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE 数据(NULL、LastName、FirstName);

【讨论】:

  • 我得到:错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 'NULL, LastName, FirstName)' 附近使用正确的语法
【解决方案2】:

我从未亲自使用过 MariaDB,但对于我使用过的大多数数据库,这一切都取决于您如何设置 ID 列。我会检查以确保您将其标记为自动增量。通常,当您将其设置为这样并将该字段留空以进行插入时,它将自动增加(显然)并为您添加数据。没有它也会出错。

【讨论】:

  • id is int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
【解决方案3】:
LOAD DATA LOCAL
    INFILE '/path/insert.csv'
    INTO TABLE data (@x, LastName, FirstName);

也就是说,将你不需要或不需要的东西放入@variables

该技术还提供了一种在实际存储之前以编程方式修改文本的方法。 (参见手册。)

另一种方法是构建一个包含一组与输入文件匹配的列的表; LOAD 进去;然后使用INSERT ... SELECT ... 将内容复制到“真实”表中。这使您可以在将数据存储到实际位置之前更有效地调整数据。

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2020-12-04
    • 2018-08-14
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多