viernes, 1 de febrero de 2019

Cargar archivo CSV en MariaDB con Fecha

Para que sepan mi entorno de trabajo les diré que estoy trabajando en Mageia Linux 6 con MariaDB todo en local y necesitaba cargar un archivo CSV (separado por comas) pero se me presentaba el problema que el formato de la fecha estaba como 'dd/mm/yy' todo está hecho en la consola de MariaDB así que lo hice con el siguiente comando:

LOAD DATA LOCAL INFILE '/home/usuario/productos.csv'
    -> INTO TABLE productos
    -> FIELDS TERMINATED BY ','
    -> (codigoarticulo,
    -> seccion,
    -> nombrearticulo,
    -> precio,
    -> @fecha,
    -> importado,
    -> paisdeorigen)
    -> SET fecha=STR_TO_DATE(@fecha,'%d/%m/%Y');

Asi logré leer el archivo separado por comas en la misma computadora ya que todo estaba en local.

LOAD DATA INFILE: lee ficheros externos de MariaDB a una tabla a alta velocidad.

LOCAL: porque el archivo esta en mi directorio personal.

INTO TABLE: a que tabla del motor de base de datos queremos introducir los datos.

FIELDS TERMINATED BY ',': cual es el separador de cada campo en el archivo csv.

LINES TERMINATED BY '': Lo omití porque por defecto es el retorno de línea.

(codigoarticulo,
    -> seccion,
    -> nombrearticulo,
    -> precio,
    -> @fecha,
    -> importado,
    -> paisdeorigen): esta sección son los campos de la tabla, fecha esta con una arroba @ adelante para que sea una variable string temporal que luego se pueda convertir el string a un formato de fecha reconocido por MariaDB.

SET fecha=STR_TO_DATE(@fecha,'%d/%m/%Y'); : con la siguiente instrucción se convierte el formato de fecha 'dd/mm/yy' al formato 'yyyy/mm/dd' le introducimos a el campo fecha de la tabla la información que devuelve la función STR_TO_DATE donde le indicamos la variable temporal y el formato que trae.

También menciono que el archivo CSV no tenia encabezados de columnas así que no era necesario eliminar la 1ra línea ya que todos eran datos, si necesitaramos eliminar la 1ra línea de encabezado se usaría la cláusula

IGNORE 1 LINES

Que en este caso se colocaría después de FIELDS TERMINATED BY ','.