View Full Version : [mysql] LOAD DATA INFILE
salve,
sto utilizzando mysql e sto importando dei file di testo prodotti da terze persone. Su questi file (di dati DOUBLE) i valori NULL sono indicati con NA; vorrei poter specificare nella query che in corrispondenza dei valori NA mi metta dei NULL e non degli zeri come ora accade. Come posso fare?
grazie
cipi
wingman87
19-05-2007, 18:59
Non puoi modificare direttamente il file di testo?
purtroppo no... sono file di testo della grandezza media di 1,5 GB... :D
Non puoi passare il file di testo da un programma che fa le sostituzioni prima dell'importazione ? Qualcosa tipo awk...
Non puoi passare il file di testo da un programma che fa le sostituzioni prima dell'importazione ? Qualcosa tipo awk...
in effetti si... volevo sapere se era già gestibile via sql... comunque gli darò giù di awk...
grazie
yorkeiser
21-05-2007, 10:09
Non puoi importare i dati e poi fare una semplice query di update del tipo
update tabella set campo = null where campo = 'NA' ?
In effetti potrebbe andare bene anche così....
Non puoi importare i dati e poi fare una semplice query di update del tipo
update tabella set campo = null where campo = 'NA' ?
il problema è che importando, dove vede 'NA' sql ci mette 0 (zero). Quindi poi non riesco a risalire a ciò che VERAMENTE è zero e distinguerlo da ciò che era 'NA'...
Eh già, se hai un NA su un numero sbaglia l'importazione...
scusate ma, cambiati i files, mi rimangono i problemi... dunque, con la seguente:
sed 's/ NA/ /g' file1.txt > file2.txt
ho tolto gli 'NA' e ho lascito uno spazio vuoto. Cercando di caricare questi file di testo ancora mysql mi mette 0 anziché NULL. Cosa devo fare?
Dimenticavo: la tabella è stata così creata:
CREATE TABLE `db`.`table` (
`ID` VARCHAR(45) NOT NULL,
`a` BIGINT DEFAULT NULL,
`b` BIGINT DEFAULT NULL,
`c` DOUBLE DEFAULT NULL,
PRIMARY KEY (`ID`)
)
ENGINE = MyISAM;
e i dati li carico così:
LOAD DATA LOCAL INFILE 'path'
INTO TABLE table
fields terminated by '\t' IGNORE 1 LINES
(`ID` ,
`a` ,
`b` ,
`c` );
please, helpme :help:
RaouL_BennetH
29-05-2007, 12:14
domanda stupida:
Non è che il campo della tabella dove ti mette gli zeri ha come base un bel `not null` ?!?
domanda stupida:
Non è che il campo della tabella dove ti mette gli zeri ha come base un bel `not null` ?!?
no, no... :stordita:
Hai provato a scriverci NULL nel campo invece di lasciarlo vuoto ?
Hai provato a scriverci NULL nel campo invece di lasciarlo vuoto ?
:fagiano: :fagiano: :fagiano:
emmmhhhh, no...!
Ora provo! ;)
Hai provato a scriverci NULL nel campo invece di lasciarlo vuoto ?
Niente da fare:
Incorrect integer value: 'NULL' for column 'a' at row 1
...
e sulle colonne mette 0!
Ho risolto!
Basta mettere \N nei campi dove si vuole che compaia NULL.
ciao e grazie a chi ha cercato di aiutarmi... ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.