Hola.
Hoy veremos como hacer para subir un archivo de tipo CSV desde la cónsola de MySQL.
Muchos de ustedes dirán “Si pero eso se hace mucho más fácilmente desde PhpMyAdmin…. Este Francesco es un mazoquista”. Ok tal vez sea más fácil desde PhpMyAdmin, pero si el archivo pesa más de 1GB, cuanto creen que se tarden en PhpMyAdmin?????
Es por eso que en el manual de MySQL existe toda una sección dedicada al comando LOAD DATA el cual veremos a continuación.
Antes de continuar necesitamos conocer que un archivo de tipo CSV esta compuesto por palabras, separadas por algo e identificadas por algo más. De esa manera, cada palabra sería como un campo de una tabla y cada fila de ese archivo sería el equivalente a una fila de una tabla.
Por ejemplo:
123456;"PEDRO PEREZ";34
34123456;"Nombre EJEMPLO";23
En este caso los campos se separan por ; y los tipos de datos (Básicamente Cadenas o Números) se diferencian por “.
La línea anterior es análoga a la siguiente:
123456,'PEDRO PEREZ',34
34123456,'Nombre EJEMPLO',23
La esencia esta en darle el significado correcto a los separadores e identificadores de campo y a algo que no vemos: El salto de línea. Intuímos que por defecto una línea termina en un “Enter” (New Line) sin embargo esto dependiendo del sistema operativo, tipo de archivo y codificación de caractéres puede cambiar. Hay que estar pendientes con eso, en Windows por ejemplo es Retorno de Carro + Nueva Línea.
Como sabemos los caracteres especiales deben escribirse usando una secuencia de escape, ya que no son caracteres imprimibles. Para este caso, se usa el símbolo \ por lo que el “Enter” es \n y el retroceso o retorno de carro es \r.
Dicho esto procedo a mostrar el comando que usaremos:
LOAD DATA LOCAL INFILE “/ruta/hacia/tu/archivo.csv” INTO TABLE tabla_a_cargar
FIELDS TERMINATED BY ‘;’
ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘\n’;
Ahora procedo a explicar línea por línea.
1.- LOAD DATA es el comando esencialmente, la palabra LOCAL indica que el archivo se obtendrá del equipo donde se corre el cliente MySQL INFILE “/ruta/hacia/tu/archivo.csv” Indica el nombre del archivo (Es siempre mejor usar la ruta absoluta), INTO indica en que tabla vamos a almacenar el contenido de ese CSV. Ojo hay que tener cuidado con la cantidad de campos y tipos de datos, ya que si difieren no se cargará el archivo.
2.- FIELDS TERMINATED BY ‘;’ le indica como separaremos los campos, en este caso por ;
3.- ENCLOSED BY ‘”‘ nótese que son dos comillas simples y una doble. Esto indica como se categorizan en el CSV los campos de tipo Cadena o String.
4.- LINES TERMINATED BY ‘\n’ indica como se termina cada línea en este caso es un Enter.
Otra cosa a tener en cuenta es el set de caracteres con que se creó el archivo. Hay que procurar de que la conexión con el servidor, la tabla y el archivo estén usando el mismo Set de Caracteres.
Con esto concluímos por hoy.
PD: Hace tiempo publiqué el artículo con un errror en la consulta, hacía falta la palabra TABLE luego de INTO. Mil disculpas.