2016-07-03 1 views
0

У меня такая таблица:Пропустив первый столбец с INFILE LOAD DATA

mysql> show create table final\G; 
*************************** 1. row *************************** 
     Table: final 
Create Table: CREATE TABLE `final` (
    `id` int(4) NOT NULL AUTO_INCREMENT, 
    `cdatetime` varchar(255) NOT NULL, 
    `address` varchar(255) NOT NULL, 
    `district` varchar(255) NOT NULL, 
    `beat` varchar(255) NOT NULL, 
    `grid` varchar(255) NOT NULL, 
    `crimedescr` varchar(255) NOT NULL, 
    `ucr_ncic_code` varchar(255) NOT NULL, 
    `latitude` varchar(255) NOT NULL, 
    `longitude` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
1 row in set (0.00 sec) 

И у меня есть CSV-файл, который выглядит следующим образом:

cdatetime,address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude 
1/1/06 0:00,3108 OCCIDENTAL DR,3,3C  ,1115,10851(A)VC TAKE VEH W/O OWNER,2404,38.55042047,-121.3914158 
1/1/06 0:00,2082 EXPEDITION WAY,5,5A  ,1512,459 PC BURGLARY RESIDENCE,2204,38.47350069,-121.4901858 
1/1/06 0:00,4 PALEN CT,2,2A  ,212,10851(A)VC TAKE VEH W/O OWNER,2404,38.65784584,-121.4621009 
1/1/06 0:00,22 BECKFORD CT,6,6C  ,1443,476 PC PASS FICTICIOUS CHECK,2501,38.50677377,-121.4269508 

То, что я хочу сделать, это нагрузка, CSV файл в таблицу final. Проблема в том, что у csv-файла нет столбца ID, поэтому я думаю, что можно каким-то образом сказать mysql пропустить идентификатор столбца и загрузить данные в остальные столбцы, но ID должен использоваться. В идеале это выглядело бы так:

«1/1/06 0: 00,3108 OCCIDENTAL DR, 3,3C, 1115,10851 (A) VC TAKE VEH W/O OWNER, 2404,38.55042047, -121.3914158 «загружается в столбцы, а mysql автоматически добавляет 1 к идентификатору столбца, затем« 1/1/06 0: 00,2082. ПУТЬ ЭКСПЕДИЦИИ, 5,5A, 1512,459 PC BURGLARY RESIDENCE, 2204,38.47350069, -121.4901858 »загружается и MySQL добавить 2 в ID столбца и т.д. и т.д ..

Недавно пользователь «Тень» сказал мне, что я должен указать, какой столбец я хочу, чтобы загрузить, так что я сделал что-то вроде этого:

load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude); 

Mysql возвращает:

Согласно mysql load data infile ручной разделитель полей не является «,», поэтому я попытался изменить его, добавив FIELDS TERMINATED BY ',' в конце моего оператора, но этот запрос прерывает. Какой здесь правильный синтаксис?

Благодаря

ОТВЕТ

mysql> CREATE TABLE `final` (
    -> `id` int(4) NOT NULL AUTO_INCREMENT, 
    -> `cdatetime` longtext NULL, 
    -> `address` longtext NULL, 
    -> `district` longtext NULL, 
    -> `beat` longtext NULL, 
    -> `grid` longtext NULL, 
    -> `crimedescr` longtext NULL, 
    -> `ucr_ncic_code` longtext NULL, 
    -> `latitude` longtext NULL, 
    -> `longitude` longtext NULL, 
    -> PRIMARY KEY (`id`) 
    ->) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
Query OK, 0 rows affected (0.17 sec) 

mysql> LOAD DATA infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final FIELDS TERMINATED BY ',' lines terminated by '\r' IGNORE 1 ROWS (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude); 
Query OK, 7584 rows affected (0.08 sec) 
Records: 7584 Deleted: 0 Skipped: 0 Warnings: 0 

ответ

1

Linux:

LOAD DATA INFILE '/home/frank/try_this123.txt' 
INTO TABLE final 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(cdatetime, address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude) 
set id = NULL; 

или Окна:

LOAD DATA INFILE 'c:\\nate\\try_this123.txt' 
INTO TABLE final 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(cdatetime, address,district,beat,grid,crimedescr,ucr_ncic_code,latitude,longitude) 
set id = NULL; 

.

mysql> select * from final; 
+----+-------------+---------------------+----------+------------+------+-------------------------------+---------------+-------------+---------------+ 
| id | cdatetime | address    | district | beat  | grid | crimedescr     | ucr_ncic_code | latitude | longitude  | 
+----+-------------+---------------------+----------+------------+------+-------------------------------+---------------+-------------+---------------+ 
| 1 | 1/1/06 0:00 | 3108 OCCIDENTAL DR | 3  | 3C   | 1115 | 10851(A)VC TAKE VEH W/O OWNER | 2404   | 38.55042047 | -121.3914158 
| 2 | 1/1/06 0:00 | 2082 EXPEDITION WAY | 5  | 5A   | 1512 | 459 PC BURGLARY RESIDENCE | 2204   | 38.47350069 | -121.4901858 
| 3 | 1/1/06 0:00 | 4 PALEN CT   | 2  | 2A   | 212 | 10851(A)VC TAKE VEH W/O OWNER | 2404   | 38.65784584 | -121.4621009 
| 4 | 1/1/06 0:00 | 22 BECKFORD CT  | 6  | 6C   | 1443 | 476 PC PASS FICTICIOUS CHECK | 2501   | 38.50677377 | -121.4269508 
+----+-------------+---------------------+----------+------------+------+-------------------------------+---------------+-------------+---------------+ 

Я получил это, чтобы работать без каких-либо закрытий демаркаций, таких как одиночные или двойные кавычки. Проблема в том, что произойдет, когда, скажем, у вашего адреса есть запятые, и он сбрасывает все ваши данные с проблемой переключения.

Именно поэтому, в идеале (читай: почти абсолютно), вам нужны данные, завернутые в двойные кавычки, в общем, если ваши данные не будут генерироваться вами и почти упрощенным, как:

1,2,cat,14,8 

Таким образом, в случае сторонних систем, когда нет контроля над тем, как накапливаются данные, людям приходится писать ETL подпрограмм, чтобы сначала очистить данные, чтобы получить данные, готовые для импорта, с адекватными защищенными от отказа оболочками.

1

Я думаю, что нужно добавить enclosed by и ignore rows директивы

LOAD DATA infile '/SacramentocrimeJanuary2006.csv' 
INTO TABLE final 
(cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude); 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '' 
IGNORE 1 ROWS; 
+0

MySQL> LOAD DATA INFILE '' /SacramentocrimeJanuary2006.csv -> в таблице конечных полей TERMINATED BY '', окруженный '' Игнорирует 1 ROWS -> (cdatetime , адрес, район, бит, сетка, crimedescr, ucr_ncic_code, широта, долгота); Query OK, 0 строк (0.00 sec) ** Записи: 0 Удалено: 0 Пропущено: 0 Предупреждения: 0 ** – jonasv

1

Используйте ниже формат:

load data infile '/SacramentocrimeJanuary2006.csv' INTO TABLE final (cdatetime, address, district, beat, grid, crimedescr, ucr_ncic_code, latitude, longitude) 
fields terminated by ',' 
lines terminated by '\r\n' 
ignore 1 lines;