如何将具有 1 列文件的 CSV 导入具有 2 列的 DB 表?

Posted

技术标签:

【中文标题】如何将具有 1 列文件的 CSV 导入具有 2 列的 DB 表?【英文标题】:How to import CSV with 1 column file to DB table with 2 columns? 【发布时间】:2018-08-29 17:19:04 【问题描述】:

我有这张桌子:

CREATE TABLE `search`.`location` (
                 `id` INT NOT NULL AUTO_INCREMENT ,
                 `location` VARCHAR CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
                  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

我有一个 CSV 文件,其中有一列包含一些城市:

New York
Boston
Las Vegas
..

当我尝试将该文件导入表时,我收到此错误:

Invalid column count in CSV input on line 1.

我认为那是因为我在表中有 2 列(id、位置),而 CSV 文件中只有一列,ID 是自动递增的。

如何将 CSV 导入该表,其中 2 列自动递增?

【问题讨论】:

显示您用于重要表的代码。 @GordonLinoff,我不使用SQL导入,我使用手动导入方式 什么是“手动导入方式”? @JNevill ,从 phpmyadmin 有一个用于导入文件的部分 How to import text file to table with primary key as auto-increment的可能重复 【参考方案1】:

您可以定义一个列列表来指定 csv 包含的列,并且(可选)将任何其他列设置为 csv 文件之外的值。

在您的 LOAD DATA INFILE 语句的末尾添加一个列列表来定义列 location 您应该加载的数据。您可以选择将 id 设置为 NULL 以自动增加值,但无论如何它都会这样做。

(`location`)
SET `id` = NULL;

这是一个有效的例子:

mysql> CREATE TABLE `location` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `location` VARCHAR(32) NOT NULL,
  PRIMARY KEY (`id`)
);

mysql> LOAD DATA INFILE '/var/lib/mysql-files/idtest.csv' 
  INTO TABLE`location` 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
  (location) 
  SET id = NULL;
Query OK, 4 rows affected (0.17 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from `location`;
+----+----------+
| id | location |
+----+----------+
|  1 | "London" |
|  2 | "Paris"  |
|  3 | "Rome"   |
|  4 | "Berlin" |
+----+----------+
4 rows in set (0.00 sec)

文档here

【讨论】:

以上是关于如何将具有 1 列文件的 CSV 导入具有 2 列的 DB 表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将火花数据输出到具有单独列的 csv 文件?

导入具有动态列的文件

Dataprep将具有不同列数的文件导入数据集

如何将具有值的行/列添加到数据表 csv 导出

使用 Python 将特定列数据从 CSV 导入不同的 MYSQL 表

将具有不同架构(列)的多个文件 (.csv) 合并/合并为单个文件 .csv - Azure 数据工厂