#mysql #sql #database #csv #load-data-infile
#mysql #sql #База данных #csv #load-data-infile
Вопрос:
Я пытаюсь загрузить данные из файла CSV в базу данных MySQL и заметил, что большое количество записей, похоже, пропускается при импорте файла.
Данные поступают из государственного источника и очень странно отформатированы с использованием одинарных кавычек и т.д. В необычных местах. Вот пример записи, которая не вставляется:
"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_7_8","How do patients rate the hospital overall?","Patients who gave a rating of'7' or '8' (medium)","22","300 or more","37",""
Однако эта запись вставляется:
"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_0_6","How do patients rate the hospital overall?","Patients who gave a rating of '6' or lower (low)","8","300 or more","37",""
SQL, который я использую для загрузки данных, находится здесь:
mysql> load data infile "c:\HQI_HOSP_HCAHPS_MSR.csv" into table hospital_qualit
y_scores fields terminated by "," enclosed by '"' lines terminated by "n" IGNOR
E 1 LINES;
Формат таблицы, в которую я загружаю данные, следующий:
разделитель $$
CREATE TABLE `hospital_quality_scores` (
`ProviderNumber` varchar(8) NOT NULL,
`HospitalName` varchar(50) DEFAULT NULL,
`State` varchar(2) DEFAULT NULL,
`MeasureCode` varchar(25) NOT NULL,
`Question` longtext,
`AnswerDescription` longtext,
`AnswerPercent` int(11) DEFAULT NULL,
`NumberofCompletedSurveys` varchar(50) DEFAULT NULL,
`SurveyResponseRatePercent` varchar(50) DEFAULT NULL,
`Footnote` longtext,
PRIMARY KEY (`ProviderNumber`,`MeasureCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
У кого-нибудь есть идеи, почему это происходит? Кажется, что только одна из записей фактически вставляется правильно.
Ответ №1:
Может быть, ваш первичный ключ предотвращает вставку дополнительных данных?
Найдите вставленную запись с номером поставщика «‘050441′» и кодом измерения «H_HSP_RATING_7_8», если у вас есть один из них, то это проблема с дубликатом ключа.
Возможно, вам потребуется добавить «AnswerDescription» к первичному ключу, чтобы обойти эту проблему.
С уважением,
Дэйв
Ответ №2:
На самом деле я думаю, возможно, ваша проблема больше связана с тем, что первое значение заключено в двойные кавычки (т. Е. оно заключено в кавычки дважды, как в «‘value'»), что, вероятно, приводит к тому, что значение, которое вы пытаетесь вставить, равно ‘050441’, а не 050441, как должно быть.
В любом случае, без специальной обработки вы собираетесь вставить дополнительные одинарные кавычки, которые, я думаю, вы, вероятно, не собирались делать.
Удачи и пусть весь ваш код работает безупречно!
Родни