I was recently working on a data load where I wanted to convert one column from an epoch time format into a timestamp column on import. I couldn’t figure out why the timestamp was being set to the current time on every test, no matter what I set the variables/values to.
I initially tried with this script:
for file in $(find ${FILESRC} -maxdepth 1 -type f -name "*csv")
do
mysql -u user --password=password << EOF
LOAD DATA INFILE "${file}"
INTO TABLE mydb.mytable
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(field1,field2,@epochtime)
set timestampfield = FROM_UNIXTIME( @epochtime )
;
EOF
#mv ${file} ${FILEDST}/
done
Note that this is loading into a table with at least 3 columns, field1, field2, and timestampfield.
The problem was that when I created the table, the timestamp field default value was set to CURRENT_TIMESTAMP and was over-riding the SET operation.
To fix the issue, I changed the data type for the timestamp field to datetime which has a default of NULL and the import then worked.
Leave a Reply