Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/08/2010, 11:30
AlanChavez
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 12 años, 1 mes
Puntos: 95
load data local infile... errores

hola companeros, he estado trabajando en un algoritmo desde hace algunos dias y necesito almacenar 10 millones de registro en una base de datos. Estuve investigando para estas cantidades, que me conviene mas si Oracle o MySQL, y me di cuenta que MySQL puede manejar esa cantidad de registros sin sudar ni una gota, asi que como estoy muy acostumbrado a utilizar MySQL, decidi quedarme con MySQL.

(Aunque alguna sugerencia sobre Oracle, tambien es bien recibida).
El punto es que tengo, un archivo .dat , que contiene 10 millones de registros,

la informacion en mi archivo .dat tiene el siguiente formato

Código movies.dat:
Ver original
  1. 71420::5335::2.5::1205382999
  2. 71420::5349::4::1170717409
  3. 71420::5374::0.5::1191693940
  4. 71420::5377::3::1170717861
  5. 71420::5378::4.5::1122962739
  6. 71420::5400::3.5::1184708469
  7. 71420::5418::4.5::1122961830
  8. 71420::5427::4::1188275462
  9. 71420::5444::3.5::1179869232
  10. 71420::5445::4::1122963148
  11. 71420::5449::3::1184708865
  12. 71420::5452::3::1208486911
  13. 71420::5459::3.5::1179867329
  14. 71420::5463::3::1184709456
  15. 71420::5464::3.5::1184708953
  16. 71420::5476::0.5::1195964324
Que corresponde a los siguientes campos:
UserID::MovieID::Rating::Timestamp

La estructura de mi tabla Rating es la siguiente:

Código SQL:
Ver original
  1. CREATE TABLE Ratings (
  2. UserID INT(5) UNSIGNED PRIMARY KEY,
  3. MovieID INT(5) UNSIGNED,
  4. Rating FLOAT(5,2),
  5. TIMESTAMP BIGINT(10) UNSIGNED);

Utilizo un BIGINT, aunque creo que un INT funcionaria, pero como son 10 millones de registros, no se cual sea el timestamp mas grande que tenga.

el problema es que cuando MySQL llega a la linea

Código SQL:
Ver original
  1. LOAD DATA LOCAL INFILE 'ratings.dat' INTO TABLE Ratings FIELDS TERMINATED BY '::' (UserID,MovieID,Rating,TIMESTAMP);

Me aparece:

Query OK, 69878 rows affected (20.15 sec)
Records: 10000054 Deleted: 0 Skipped: 9930176 Warnings: 0

Eso quiere decir, que de mis 10 millones de registros, solamente 69,878 se insertaron... he consultado ya la documentacion y este error se debe a que la estructura de mis datos no es uniforme... sin embargo he checado rapidamente la estructura de la misma y es congruente, todos los datos tienen esa forma
UserID::MovieID::Rating::Timestamp

Y es aqui donde me surge mi duda...
Existe alguna otra manera de introducir ese archivo en mi base de datos?