LOAD DATA INFILE не импортирует все строки в источнике данных CSV - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь загрузить данные из 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$$

У всех есть идеи, почему это так.происходит?Похоже, что только записи действительно вставляются правильно.

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Может быть, ваш первичный ключ предотвращает вставку дополнительных данных?

Найдите запись, которая была вставлена ​​с ProviderNumber «050441» и MeasureCode «H_HSP_RATING_7_8», если у вас есть один из них, то это проблема дублированного ключа.

Вам может понадобиться добавить «AnswerDescription» к первичному ключу, чтобы обойти эту проблему.

С уважением,

Dave

0 голосов
/ 03 апреля 2012

На самом деле я думаю, что, возможно, ваша проблема связана с тем, что первое значение заключено в двойные кавычки (т. Е. Оно указывается дважды, как в «значении»), что, вероятно, приводит к тому, что значение, которое вы пытаетесь вставить, является «050441», а не 050441, как должно быть.

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

Удачи, и пусть весь ваш код работает безупречно!

Родня

...