2010-04-30 12 views
9

W MySQL użyłem LOAD DATA LOCAL INFILE, który działa dobrze. Na końcu otrzymuję komunikat:MYSQL: Wyświetl Pominięte rekordy po ZAŁADOWANIU DANYCH INFILE?

Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0 

Jak mogę wyświetlić numer wiersza pominiętych rekordów? SHOW warnings nie działa:

mysql> show warnings; 
Empty set (0.00 sec) 
+0

W moim przypadku brakujące wiersze były spowodowane błędną deklaracją klucza głównego (miałem zduplikowane wiersze), a także brakiem kwalifikatora "null" dla niektórych pól w tabeli (które były czasami puste podczas importowania). Naprawienie schematu stołu rozwiązało mój problem z brakującym rekordem. – patricksurry

Odpowiedz

4

Można by utworzyć tabelę temp usunięcie pierwszorzędowych kluczowych elementów tak, że pozwala powielania, a następnie wstawić dane.

Narysuj SQL jak

select count(column_with_duplicates) AS num_duplicates,column_with_duplicates 
from table 
group by column_with_duplicates 
having num_duplicates > 1; 

To pokaże wiersze z zwolnieniami. Innym sposobem jest po prostu zrzuty wierszy, które faktycznie zostały wstawione do tabeli, i uruchom polecenie różnicowania plików względem oryginału, aby zobaczyć, które nie zostały uwzględnione.

3

Dla każdego, potykając się na to:

Innym rozwiązaniem byłoby zrobić SELECT INTO i diff dwa pliki. Na przykład:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES (title, desc, is_viewable); 

SELECT title, desc, is_viewable INTO OUTFILE 'data_rows.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r' FROM my_table; 

Następnie uruchom FileMerge (na Mac OS X) data.txt data_rows.txt, aby zobaczyć różnice. Jeśli otrzymujesz błąd Odmowa dostępu podczas wykonywania SELECT INTO upewnić Cię:

GRANT FILE ON *.* TO 'mysql_user'@'localhost'; 
flush privileges; 

Jako użytkownik root w kliencie mysql.

+1

Nie wiem, dlaczego głosowanie w dół. To tylko alternatywne podejście, które mi pomogło. –

7

Jeśli nie było żadnych ostrzeżeń, ale niektóre wiersze zostały pominięte, może to oznaczać, że klucz podstawowy został zduplikowany dla pominiętych wierszy.

Najprostszym sposobem na znalezienie duplikatów jest otwarcie lokalnego pliku w programie Excel i wykonanie podwójnego usunięcia w kolumnie klucza głównego, aby sprawdzić, czy są jakieś.

1

Rekordy będą pomijane, gdy nie zostaną spełnione ograniczenia bazy danych. Sprawdź, czy nie spotykane jak

  • klucz podstawowy powielania
  • Unikalne warunek kluczowy
  • stan partycji
1

Używam bash wiersza polecenia, aby znaleźć duplikat wiersz w pliku csv:

awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1" 

, gdy dwie pierwsze kolumny są kluczem podstawowym.

Powiązane problemy