导入列数少于我要导入的表的 csv 文件?

Posted

技术标签:

【中文标题】导入列数少于我要导入的表的 csv 文件?【英文标题】:Import csv file with less columns than the table to which I'm importing? 【发布时间】:2015-07-29 08:35:12 【问题描述】:

我在 phpMyAdmin 中导出了一个包含四列的 csv 文件,其中包含以下选项:

Columns separated with:  ,
Columns enclosed with:   "
Columns escaped with:    "
Lines terminated with:   AUTO

现在我想将此文件导入到一个有 17 列的表中!? 所以只会填充四列,其他列将保持为空。

【问题讨论】:

您的实际问题是什么?您尝试过什么,结果如何? 我按照@have 的建议尝试过,但它给了我错误 #1064 @JetonThaçi:- 我修改了查询,现在试试。我建议您首先尝试不使用 LINES TERMINATED BY... 子句。让 mysql 为您自动检测。如果这不起作用,请再试一次,这次只使用 \n 或仅使用 \r。抱歉-我无法提供明确的答案,您必须进行测试.. 【参考方案1】:

您可以在从文件中导入数据时指定列名,并在将数据导入表中时使用用户变量通过将输入值分配给用户变量来丢弃输入值。

AS PER MYSQL DOCUMENTATION

您还可以通过将输入值分配给用户变量来丢弃它 并且不将变量分配给表列:

LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);

LOAD DATA INFILE 'filename.csv'  
INTO TABLE sqlTable(column1, column2, column3, column4, @NotInsert2, @NotInsert2... till @NotInsert13);
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'

因此,在您的情况下,只需指定四个列名,并使用任何用户变量代替其他列名,以便列表中的列总数等于 17。

EDIT - 让我们通过示例来理解:-

考虑我们必须加载具有以下内容的文件: 文件名:example.csv

col-2,col-3,col-4
a,2,3
b,4,5
c,6,7

案例:- 当 csv 文件的列数少于目标表时

表结构:表名 col-1 col-2 col-3 col-4

考虑一下,col-1 是自动递增的,在 csv 中没有提供。

LOAD DATA INFILE ‘path/to/example.csv’ 
INTO TABLE tablename 
FIELDS TERMINATED BY ‘,’ 
LINES
TERMINATED BY ‘\n’ 
IGNORE 1 LINES (col-2,col-3,col-4) set col-1=null;

传递空值将使 col-1 采用自增值。 使用 SET,您可以为那些在 csv 中不可用且不为空的列分配值。

更多信息refer here

【讨论】:

csv文件导入成功,但是插入的不是1560行,而是37865行,而且都是空的。知道为什么会这样吗??? 你是否使用了 FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n' 或 not ,这样它就不会插入 csv 中没有数据的所有行 不,我没有使用那条线。应该怎么样? 在那个查询之后使用,所以在你指定的列名之后添加 我阅读了文档,但我仍然不明白,我应该怎么写最后一行,你能帮我吗?在问题中,您可以选择制作 csv 文件的选项。谢谢。【参考方案2】:

试试这个:

 LOAD DATA LOCAL  INFILE 'XYZ.csv'
     INTO TABLE tickets  
FIELDS  terminated by ',' 
ENCLOSED BY '\"'  lines terminated by '\n' IGNORE 1 LINES 
    (column1, column2, column3, column4)(choose your data columns) ";

【讨论】:

我认为@HaveNoDisplayName 的解决方案是有效的,除了最后一行:FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY 'AUTO',它没有根据我的 csv 选项正确设置。 我按照@havenodisplayname 的建议进行了尝试,但它给了我错误 #1064

以上是关于导入列数少于我要导入的表的 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:CSV 导入 MYSQL 总是少于 CSV 文件中的实际行数?

将 CSV 导入 BigQuery 中的表时无法添加字段

导入 CSV 文件时出现问题 (phpmyadmin)

java读取csv写入数据库

将CSV文件导入到hive数据库

macmatlab导入大型csv