LOAD DATA LOCAL INFILE COMMAND几个错误

时间:2018-08-06 00:28:32

标签: mysql sql datetime-format load-data-infile

我正尝试通过以下链接加载2012年第一季度的数据 https://s3.amazonaws.com/capitalbikeshare-data/index.html

我的代码如下:-

DROP DATABASE IF EXISTS bike;
CREATE DATABASE bike;
USE bike;
DROP TABLE IF EXISTS bike_2012;
CREATE TABLE bike_2012(
bike_duration INT NULL,
bike_start_date TIMESTAMP NULL,
bike_end_date TIMESTAMP NULL,
bike_s_station_no INT(5) NULL,
bike_s_station_name VARCHAR(255) NULL,
bike_e_station_no INT(5) NULL,
bike_e_station_name VARCHAR(255) NULL,
bike_number CHAR(6) NULL,
bike_member_type VARCHAR(25) NULL,
bike_ride_number INT auto_increment PRIMARY KEY);

LOAD DATA LOCAL INFILE 'C:/LAGASA_2018/MSBA/Data_Sources/2012-capitalbikeshare-tripdata/2012Q1-capitalbikeshare-tripdata.csv'
INTO TABLE bike_2012
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '/n'
('bike_duration', @bike_start_date, @bike_end_date, 'bike_s_station_no','bike_s_station_name',
'bike_e_station_no','bike_e_station_name','bike_number','bike_member_type')
SET 'bike_start_date' = STR_TO_DATE(@bike_start_date, '%c/%e/%Y')
SET 'bike_end_date' = STR_TO_DATE(@bike_end_date, '%c/%e/%Y')
IGNORE 1 LINES;

SELECT * FROM bike_2012 LIMIT 10;

我面临以下问题:-

  1. 某些具有整数数据的列也具有字符串数据,因此这些部分无法正确加载。我尝试添加OPTIONALLY ENCLOSED BY '"',但无法正常工作。

  2. 无法将日期更改为SQL日期格式

  3. “行”之类的其他错误并不包含所有列的数据,并且出现了日期列被截断的数据。

我一直在努力纠正这一点。请帮忙。

感谢和问候

1 个答案:

答案 0 :(得分:0)

您将无法简单地将错误的CSV加载到数据库中并进行修复。

如果您可以访问PHP / Python或具有驱动程序以连接到数据库引擎的其他语言,请将该文件加载到数组中,或在php中使用类似于fgets()的内容逐行加载并分别处理每一行,修复/转换数据,然后将其推送到db引擎(我建议甚至将插入分组以提高速度)。

您不仅要处理转换,而且字符串编码可能存在问题(您未在CREATE TABLE中指定任何内容,这本身可能会引起问题。