如何将完整的 csv 文件加载到 table?
How do I load my complete csv file into a table?
我正在尝试将 .csv 文件上传到 mysql table,但目前它只会上传电影中的 1001 行电影 table 当有一对它遗漏的更多行
我尝试将 int 更改为 Bigint 以给它更多空间,因为 int 最多只给出 4 个字符,最大的是 7220,当它在 csv 文件中增加到 6 或 7 个字符时
例如:
Lines included =
6116,Spice World,4.7,123
5902,A Bridge Too Far,6.9,207
Lines not included:
190955,Blood Ties,6,171
206647,Spectre,6.3,4466
13056,Punisher: War Zone,5.6,294
LAST line loaded:
7220,The Punisher,6.1,766 (LINE 1488)
last line not loaded:
7278,Meet the Spartans,3.7,359 (LINE 1608)
我注意到它达到了一个点 (7220) 而不是带来任何更高的东西,但包括 7220 及以下的所有东西。
statement.executeUpdate("CREATE TABLE Movies("
+ "id BIGINT, "
+ "title VARCHAR(100), "
+ "vote_average VARCHAR(100), "
+ "vote_count VARCHAR(100), "
+ "PRIMARY KEY(id))" );
String loadQuery = "LOAD DATA LOCAL INFILE '" + "movies.csv"
+ "' INTO TABLE Movies FIELDS TERMINATED BY ',' ENCLOSED BY '\"'\n" +
"LINES TERMINATED BY '\r\n'\n" +
"IGNORE 1 LINES";
stmt.execute(loadQuery);//executing the query
更新:记住 SELECT "NO LIMIT" 在 MYSQL 内,这解释了为什么 select 只返回 1000 行。
我没有 运行 你的代码,但是,
试试这个:
CREATE TABLE discounts(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
expired_date DATE NOT NULL,
amount DECIMAL(10 , 2 ) NULL,
PRIMARY KEY (id)
);
以下 discounts.csv 文件包含第一行作为列标题和其他三行数据。
以下语句将数据从 c:\tmp\discounts.csv 文件导入到折扣 table.
LOAD DATA INFILE 'c:/tmp/discounts.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
文件的字段以逗号结尾,字段以',
'结尾,并用双引号括起来,由'"
'指定。
csv 文件的每一行都由换行符终止,换行符由 LINES TERMINATED BY '\n
' 指示。
因为文件的第一行包含列标题,不应将其导入 table,因此我们通过指定 IGNORE 1 ROWS
选项忽略它。
现在,我们可以查看折扣table,看看是否导入了数据。
SELECT * FROM discounts;
希望这对您有所帮助。
我正在尝试将 .csv 文件上传到 mysql table,但目前它只会上传电影中的 1001 行电影 table 当有一对它遗漏的更多行
我尝试将 int 更改为 Bigint 以给它更多空间,因为 int 最多只给出 4 个字符,最大的是 7220,当它在 csv 文件中增加到 6 或 7 个字符时 例如:
Lines included =
6116,Spice World,4.7,123
5902,A Bridge Too Far,6.9,207
Lines not included:
190955,Blood Ties,6,171
206647,Spectre,6.3,4466
13056,Punisher: War Zone,5.6,294
LAST line loaded:
7220,The Punisher,6.1,766 (LINE 1488)
last line not loaded:
7278,Meet the Spartans,3.7,359 (LINE 1608)
我注意到它达到了一个点 (7220) 而不是带来任何更高的东西,但包括 7220 及以下的所有东西。
statement.executeUpdate("CREATE TABLE Movies("
+ "id BIGINT, "
+ "title VARCHAR(100), "
+ "vote_average VARCHAR(100), "
+ "vote_count VARCHAR(100), "
+ "PRIMARY KEY(id))" );
String loadQuery = "LOAD DATA LOCAL INFILE '" + "movies.csv"
+ "' INTO TABLE Movies FIELDS TERMINATED BY ',' ENCLOSED BY '\"'\n" +
"LINES TERMINATED BY '\r\n'\n" +
"IGNORE 1 LINES";
stmt.execute(loadQuery);//executing the query
更新:记住 SELECT "NO LIMIT" 在 MYSQL 内,这解释了为什么 select 只返回 1000 行。
我没有 运行 你的代码,但是, 试试这个:
CREATE TABLE discounts(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
expired_date DATE NOT NULL,
amount DECIMAL(10 , 2 ) NULL,
PRIMARY KEY (id)
);
以下 discounts.csv 文件包含第一行作为列标题和其他三行数据。
以下语句将数据从 c:\tmp\discounts.csv 文件导入到折扣 table.
LOAD DATA INFILE 'c:/tmp/discounts.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
文件的字段以逗号结尾,字段以',
'结尾,并用双引号括起来,由'"
'指定。
csv 文件的每一行都由换行符终止,换行符由 LINES TERMINATED BY '\n
' 指示。
因为文件的第一行包含列标题,不应将其导入 table,因此我们通过指定 IGNORE 1 ROWS
选项忽略它。
现在,我们可以查看折扣table,看看是否导入了数据。
SELECT * FROM discounts;
希望这对您有所帮助。