MySQL правильный синтаксис для использования рядом с ', поля оканчиваются на', 'оптически заключены в' '' строки, оканчивающиеся на '\ n' ign 'в строке 1 - PullRequest
0 голосов
/ 19 января 2020

У меня есть CSV-файл, который я загрузил здесь https://drive.google.com/file/d/1JfYc-7840utoa3k5iamEC-sScPlzsVVK/view Я создал таблицу Titani c, которая имеет следующую структуру.

mysql> desc Titanic;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| last     | varchar(255) | NO   |     | NULL    |       |
| first    | varchar(255) | NO   |     | NULL    |       |
| gender   | char(2)      | NO   |     | NULL    |       |
| age      | decimal(3,0) | YES  |     | NULL    |       |
| class    | int(3)       | NO   |     | NULL    |       |
| fare     | decimal(5,0) | NO   |     | NULL    |       |
| embarked | varchar(255) | NO   |     | NULL    |       |
| survived | char(3)      | NO   |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
8 rows in set (1.89 sec)

Меня попросили используйте оператор LOAD DATA INFILE, чтобы заполнить эту таблицу, и в соответствии с моим назначением

Пустая запись для возраста означает, что возраст неизвестен. Тариф может иметь более двух цифр, потому что деньги не были базовыми-10 в в этот раз

Я пытаюсь выполнить инструкцию следующим образом

mysql> load data infile '/var/lib/mysql-files/Titanic.csv' into table Titanic,fields terminated by ',' optinally enclosed by '"' lines terminated by '\n' ignore1 lines;

Я получаю ошибку

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',fields terminated by ',' optinally enclosed by '"' lines terminated by '\n' ign' at line 1

Я пытаюсь выполнить

mysql> load data infile '/var/lib/mysql-files/Titanic.csv' into table Titanic,fields terminated by ',' optinally enclosed by '"' lines terminated by '\n' ignore
 1 lines;

ошибка, которую я получаю:

ERROR 1064 (40000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',fields terminated by ',' optinally enclosed by '"' lines terminated by '\n' ign' at line 1

Если вы посмотрите на CSV-файл в ссылке, которую я дал, в строке 7 есть запись

Moran   Mr. James   M       3   8.4583  Queenstown  no

, возраст не указан в приведенной выше строке. age предполагается равным NULL, поэтому при создании таблицы я использовал NULL при создании таблицы для возраста. строка 24 имеет следующую запись

McGowan  Miss Anna "Annie"  F   15  3   8.0292  Queenstown  yes

десятичное значение в тарифе.

строка 87 имеет следующую запись

Backstrom   Mrs. Karl Alfred (Maria Mathilda Gustafsson)    F   33  3   15.85   Southampton yes

имеет квадрат в скобке, заголовок которого является первым. строка 150 имеет следующее

Navratil     Mr. Michel ("Louis M Hoffman") M   36.5    2   26  Southampton no

имеет "", которое у меня есть в некоторых полях не всегда. Я не могу понять, как использовать оператор LOAD DATA INFILE, чтобы использовать этот CSV, который у меня есть. Я делаю это для обучения, поэтому я не хочу использовать какой-либо инструмент GUI. В чем ошибка в приведенном выше операторе LOAD DATA, который я пытаюсь выполнить? Как я могу использовать данные загрузки в этом виде CSV, где некоторые значения, такие как двойные кавычки "" и скобки () появляются в некоторых полях, а в некоторых полях нет ничего, они пустые или пустые.

I Я использую mysql на Ubuntu 19.10. Версия сервера: 8.0.18-0ubuntu0.19.10.1 (Ubuntu)

обновление 1 согласно обсуждению в комментариях здесь, я вставляю файл csv, который у меня есть, как текст

последний, первый, пол, возраст, класс, стоимость, встал, выжил

Браун, г-н. Оуэн Харрис, М, 22,3,7.25, Саутгемптон, нет
Каммингс, миссис. Джон Брэдли (Флоренс Бриггс Тэйер), F, 38,1,71.2833, Шербур, да
Хейккинен, Мисс Лайна, F, 26,3,7.925, Саутгемптон, да
Футрелл, миссис. Жак Хит (Лили Мэй Пил), F, 35,1,53,1, Саутгемптон, да Аллен, г-н. Уильям Генри, М, 35,3,8.05, Саутгемптон, нет
Моран, г-н. Джеймс, M, 3,8,4583, Квинстаун, нет
McGowan, "Мисс Анна", "Ann ie" "", F, 15,3,8,0292, Квинстаун, да
Backstrom, миссис. Карл Альфред (Мария Матильда Густафссон), F, 33,3,15,85, Саутгемптон, да
Форд, "Мисс Робина Магг ie" "Ruby" "", F, 9,3,34.375, Саутгемптон, no
Navratil, "Mr. Michel (" Louis M Hoffman "") ", M, 36.5,2,26, Southampton, no Byles, Rev. Томас Roussel Davids, M, 42,2,13, Саутгемптон, нет

полный CSV в текстовом виде можно увидеть здесь https://pastebin.com/1B1mVYhJ кроме этого вот скриншот того, как это смотрит на мою систему, когда я запускаю запрос данных о загрузке запрос данных о загрузке данных

обновление 2

Я выполнил это назначение, изменив определение таблицы созданы, а не воспринимают все значения как разные типы данных. Я взял их все как varchar. Вопросы, которые я пытался сделать, здесь: http://arshahuja.blogspot.com/2018/01/deit-14610-big-data-analytics-laboratory.html решение также существует, единственная проблема заключалась в использовании такого рода из CSV-файла. Однако я не очень убежден, создав такую ​​таблицу и загрузив данные, как указано выше. Сценарий проблемы ios, следующий за определением таблицы, решил мою проблему. Но что, если мне нужно использовать такие значения, как возраст и класс, тарифы в некоторых математических вычислениях, то как мне будет go для написания запроса, в котором есть все, что называется varchar?

mysql> desc Titanic;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| last     | varchar(255) | NO   |     | NULL    |       |
| first    | varchar(255) | NO   |     | NULL    |       |
| gender   | varchar(255) | NO   |     | NULL    |       |
| age      | varchar(255) | YES  |     | NULL    |       |
| class    | varchar(255) | NO   |     | NULL    |       |
| fare     | varchar(255) | NO   |     | NULL    |       |
| embarked | varchar(255) | NO   |     | NULL    |       |
| survived | varchar(3)   | NO   |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

8 строк в наборе (0,06 сек c)

Ответы [ 2 ]

1 голос
/ 20 января 2020

У вас есть запятая после имени таблицы.

load data infile '/var/lib/mysql-files/Titanic.csv' into table Titanic,fields terminated by ...

Если вы посмотрите документацию по синтаксису на https://dev.mysql.com/doc/refman/8.0/en/load-data.html и пример полного оператора, запятая отсутствует после имени таблицы.

ЗАГРУЗИТЬ ИНФИЛЬ ДАННЫХ '/tmp/test.txt' INTO TABLE test FIELDS TERMINATED BY ',' LINES STARTING BY 'xxx';

В общем, когда MySQL сообщает о синтаксической ошибке, он точно сообщает, в какой точке оператора он нашел то, что, по его мнению, не соответствует правилам синтаксиса.

ОШИБКА 1064 (42000): У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей MySQL версии сервера, на предмет правильного синтаксиса для использования рядом с ', поля заканчиваются на', 'заключены в' '' строки, оканчивающиеся на '\ n' ign 'в строке 1

Приведенная выше ошибка говорит о том, что она запуталась в запятой перед тем, как "поля завершены ..."

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

0 голосов
/ 19 января 2020

Вы ошиблись optionally:

mysql> load data infile '/var/lib/mysql-files/Titanic.csv' into table Titanic,fields terminated by ',' optinally enclosed by '"' lines terminated by '\n' ignore 1 lines;
...