En esta entrada veremos como importar archivo CSV en MariaDB / MySQL desde un archivo .CSV usando LOAD DATA INFILE el cual es el mecanismo que provee para esta tarea el manejador de bases de datos.
Use MariaDB v10.0.20 sobre Debian Jesse, sin embargo funciona exactamente igual en MySQL. En líneas generales la necesidad era cargar noticias que vienen de otro manejador de bases de datos (PostgreSQL) hacia MariaDB donde esta un modelo de datos usado por wordpress, lo que necesitamos es llenar la tabla de notas de wordpress (wp_posts) con el contenido del archivo CSV.
El archivo csv usado tenia estas cabeceras: post_title post_content post_date post_date_gmt post_name los cuales a su vez son campos de la tabla a la que quiero importar los valores del archivo.
Importar archivo CSV en MariaDB / MySQL
LOAD DATA LOCAL INFILE '/home/leninmhs/noticias-para-wordpress.csv' INTO TABLE basededatos.wp_posts FIELDS TERMINATED BY '~' ENCLOSED BY "'" LINES TERMINATED BY '\n' IGNORE 1 LINES (post_title, post_content, post_date, post_date_gmt, post_name) SET post_author = 1, post_status = "publish", comment_status = "closed", post_type = "post", post_parent = 0;
La sentencia anterior es la solución de LOAD DATA INFILE que se puede emplear en cualquier cliente mysql (mysql-workbench, phpmyadmin, etc…), yo use directamente el cliente por consola.
Brevemente detallo las sentencias usadas:
- Linea 1: Indicamos el archivo csv que deseamos importar, con su ruta completa.
- Linea 2: Indicamos la base de datos y tabla en la que se cargara los datos. Se puede colocar simplemente el nombre de tabla si ya estamos usando la base de datos (use basededatos;).
- Linea 3: Indicamos que el separador de campos que tiene el archivo es ‘~’ y que el contenido de cada campo estará dentro de comilla simple. Generalmente el separador es , ó ; pero en mi caso use ~ por tener complicaciones con el ; ya que el archivo no tenia delimitadores de comillas como separador, así que se lo agregue al archivo origen.
- Linea 4: Indicamos que cada línea del archivo termina en salto de línea estándar \n
- Linea 5: Indicamos que ignoré la primera línea del archivo (la cabecera del mismo).
- Linea 6: Indicamos el orden en que se encuentran las columnas según el nombre de la primera fila (cabecera), puesto que no es el mismo orden que tienen esos campos en la tabla de la base de datos.
- Linea , 8, 9, 10 y 11: Indicamos o seteamos los valores que tendrán los campos indicados en la tabla. Muy útil para satisfacer los campos obligatorios y en otros escenarios podrían darle formato a un valor o crearlo en base a funciones propias de mysql. En la documentación de LOAD DATA INFILE hay buenos ejemplos.
Error: The used command is not allowed with this MariaDB version
En mi caso al comenzar a realizar las pruebas de importar el CSV me arrojo este error: Error Code: 1148. The used command is not allowed with this MariaDB version
La solución fue iniciar el cliente mysql indicando explícitamente que esta autorizado para usar el comando LOAD DATA LOCAL INFILE. entonces si es su caso simplemente inicien así:
# mysql –local-infile=1 -u root -p
Pingback: Importar archivo CSV en MariaDB / MySQL usando LOAD DATA INFILE – Leninmhs
hola, mi pregunta es la siguiente, cuantas columnas puedo importar ya que las tablas que quiero importar son algunas de 1600 columnas, se puede por este lado ya que con phpmyadmin me da error, en access solo 254, en excel las cargue de un txt delimitado y paso pero no se como subirlas a mariadb, me podrían orientar por favor, mil gracias
Hola disculpa lo tarde he tenido un poco descuidado el blog :/
El limite de columnas por tabla según la documentación de mysql es de 4096, sin embargo claro que para gran cantidad de columnas en un tabla tendras otros tipos de problemas que limiten o diminuyan el rendimiento y posibilidad de restaurar respaldos.
Lo primero que sabemos es que muy probablemente esa tabla no este normalizada y quizás debas partir de ahí de evaluar su diseño. e
Phpmyadmin es una aplicación web php que sirve para administración ligera y operaciones muy sencillas no esperes mucho de ella. Usa el terminal de mysql para todas las operaciones administrativas. Claro con gusto me puedes contactar en leninmhs @ gmail
perdón y trabajo en windows
No hay problema desde windows te puedes conectar al servidor mysql que este corriendo en Linux