Importar archivo CSV en MariaDB / MySQL usando LOAD DATA INFILE

En esta entrada veremos como importar datos a una base de datos 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.

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

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s