2011-12-15 13 views
5

wczytuję dane z pliku tekstowego do tabeli MySQL za pomocą następującego zapytania:Omiń linie błąd podczas ładowania danych do tabeli mysql z ograniczonego pliku

LOAD DATA INFILE "myFile.csv" 
INTO TABLE some_table 
COLUMNS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' (admin,consumer); 

Ale kiedy mój plik zawiera kilka linii o błędach nie jest w stanie pominąć te linia i cały proces zatrzymuje się w tym miejscu. To znaczy, jeśli mój format jak:

 
---------- 
sankr : kumar 
---------- 
ramesh:rao 
---------- 
new users add here 
---------- 
sri : vennla 
---------- 
anu : bhavya 
---------- 

muszę załadować omijając linię „nowi użytkownicy dodać tutaj”. Jak to zrobić?

Odpowiedz

-2

Nie można pominąć linii wewnątrz danych przy użyciu LOAD DATA INFILE.

Wystarczy usunąć rekord później, używając osobnego zapytania.

DELETE FROM table WHERE column = "new users add here"; 
+0

Mój plik zawiera wiersz błędu, więc moje zapytanie wygeneruje błąd podczas ładowania i nie załaduje niczego do bazy danych. Jego zatrzymanie wykonania. Alternatywny sposób na osiągnięcie tego? – sankar

+0

@sankar jaki błąd dostałeś? –

+0

"BŁĄD 1261 (01000): Wiersz 73 nie zawiera danych dla wszystkich kolumn." Nie ładuje nawet pojedynczej linii do bazy danych. – sankar

2

Słowo kluczowe szukasz jest IGNORE.

Jak w:

LOAD DATA INFILE "myFile.csv" IGNORE 
INTO TABLE some_table 
COLUMNS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' (admin,consumer); 
+2

Czy jesteś pewien? Z dokumentacji mysql http://dev.mysql.com/doc/refman/5.5/en/load-data.html 'IGNORE' oznacza zignorowanie linii, które mają zduplikowany klucz podstawowy z istniejącym wierszem. – hellojinjie

+0

Hm. Widzę to, ale zadziałało to dla mnie. Nie pamiętam, skąd to wziąłem. Mogę przetestować później, czy nie ignoruje wszystkich błędów lub po prostu powtarza błędy klucza. – Dylan

+0

To nie działa, to nie jest rozwiązanie –

1

znalazłem, że dane LOAD miejscowy plik_we 'filename' replace byłoby rzucić po błędzie formatu danych (nielegalne data), ale LOAD DATA LOCAL plik_we 'filename' i LOAD DATA LOKALNA INFILE 'filename' IGNORE kontynuowana.

Jest to sprzeczne z dokumentacją MySql (wersja 5.0), o ile wiem.

Powiązane problemy