Big TXT import
Ik heb een vraag en ben er al een tijdje mee bezig.
Ik krijg van een klant elke 3 weken een txt file van 180MB met 1062301 regels.
Deze moet ik dan importeren in mijn database (MYSQL) alleen eerst deed ik gewoon via Excel als CSV opslaan, maar nu heeft de TXT file een limiet bereikt en kan ik hem niet meer importeren in excel dus zal ik een script moeten gaan schrijven waarmee ik een bestand van 180MB regel voor regel naar mijn MYSQL server kan sturen.
De server waar ik het bestand op wil importeren is volledig in eigen beheer dus ik kan limieten van upload en dergelijke aanpassen.
Dit is ongeveer de opbouw van een regel:
"xxx";"xxx";;;"xxx";"xxx";"xxx";;;"xxx";
Wie kan mij helpen met het maken van zoon script.
Ik zat te denken het bestand kan ik makkelijk met FTP op de server zetten, en dat er dan een script is wat het bestand split in files van 25 mb. Daarna een script wat deze (nieuwe) bestanden dan regel per regel in de database importeert.
Mark.
Via de commandline heb je geen limieten. Je zou dan bijv een cronjob kunnen overwegen.
Ja, dat begrijp ik maar het gaat mij vooral op het script, daar kom ik maar niet uit.
Zie http://dev.mysql.com/doc/refman/5.1/en/load-data.html
en bedenk dan wat eventuele vervolgstapen moeten zijn om in geval dat data verschillende tabellen in moet de stappen kunnen zijn.
En ja er komt in het geheel geen php bij om de hoek kijken.
Toevoeging op 07/01/2012 12:18:56:
Vraagje;
Mijn eerste regels van mijn txt bestand is zo:
"1";"2";"3";"4";"5";"6";"7";"8";"9";"10";"11";"12";"13";"14";"15";"16";"17";"18";"19";"20"
Ik gebruik dit om te importeren:
LOAD DATA LOCAL INFILE '".$localfile."' INTO TABLE `mark` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'
Nu krijg ik in mijn database het volgende:
Ik krijg in elke regel in de database in vakje 20 de waarde van 20 en de waarde van 1 te staan. wat doe ik verkeerd ik verwacht iets van Lines terminated by
Toevoeging op 07/01/2012 14:05:42:
Probleem opgelost: LINES TERMINATED BY '\n' verandert in LINES TERMINATED BY '\r\n'
Nu nog een vraag kun je in je query zeggen dat als 1 veld een bepaalde waarde bevat hij deze vervangt voor iets anders.
Toevoeging op 07/01/2012 14:33:17:
Dat lukt ook al, met:
UPDATE `mark` SET `veld1` = REPLACE(`veld1`, 'Orderbaar', 'sts')
nu nog een update query die werkt met een WHERE.
Toevoeging op 07/01/2012 14:45:01:
Sorry een update query met replace functie met een where,