PDA

View Full Version : [mysql] LOAD DATA INFILE


cipi
10-04-2007, 13:35
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

cipi
19-05-2007, 18:41
up

wingman87
19-05-2007, 18:59
Non puoi modificare direttamente il file di testo?

cipi
20-05-2007, 15:25
purtroppo no... sono file di testo della grandezza media di 1,5 GB... :D

cionci
20-05-2007, 16:05
Non puoi passare il file di testo da un programma che fa le sostituzioni prima dell'importazione ? Qualcosa tipo awk...

cipi
21-05-2007, 09:26
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' ?

cionci
21-05-2007, 10:10
In effetti potrebbe andare bene anche così....

cipi
21-05-2007, 10:11
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'...

cionci
21-05-2007, 10:13
Eh già, se hai un NA su un numero sbaglia l'importazione...

cipi
28-05-2007, 20:19
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:

cipi
29-05-2007, 11:07
up
: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` ?!?

cipi
29-05-2007, 13:01
domanda stupida:

Non è che il campo della tabella dove ti mette gli zeri ha come base un bel `not null` ?!?

no, no... :stordita:

cipi
30-05-2007, 08:33
up! :help:

cionci
30-05-2007, 08:37
Hai provato a scriverci NULL nel campo invece di lasciarlo vuoto ?

cipi
30-05-2007, 08:41
Hai provato a scriverci NULL nel campo invece di lasciarlo vuoto ?

:fagiano: :fagiano: :fagiano:

emmmhhhh, no...!
Ora provo! ;)

cipi
30-05-2007, 09:18
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!

cipi
30-05-2007, 10:37
Ho risolto!
Basta mettere \N nei campi dove si vuole che compaia NULL.
ciao e grazie a chi ha cercato di aiutarmi... ;)