MYSQL – Importar un archivo CSV con LOAD DATA INFILE

Hace algún tiempo escribí un artículo sobre cómo generar desde MYSQL un archivo Csv y este artículo me parece que es un excelente complemento, especialmente si te has enfrentado a la tarea de importar archivos csv a Mysql.

¿Qué es LOAD DATA INFILE?
Es una sentencia que nos permite desde MySQL leer línea por línea un archivo de texto y volcar el contenido en una tabla destino. La documentación completa la podrás encontrar en el siguiente enlace: http://dev.mysql.com/doc/refman/5.1/en/load-data.html.

Importando un archivo CSV a Mysql.
Aunque Load Data nos pemrite leer cualquier tipo de archivo de texto para cargarlo, nos enfocaremos al ejemplo práctico de cargar un archivo csv. Esto por ser una tarea sumamente común. Para ejemplificar esta tarea aprovecharemos el archivo csv que nos proporciona MaxMind y que contiene la relación de segmentos de IP que corresponden a cada país. Cabe mencionar que esta base de datos nos permitirá conocer el origen de una ip que se conecte  a alguno de nuestros sitios. Bueno manos a la obra.

Lo primero que haremos será crear la tabla destino por lo que crearemos la base de datos MaxMin y en ella la siguiente tabla:

CREATE TABLE `geoipcountrywhois` (
  `ip_long_from` char(20) DEFAULT NULL,
  `ip_long_to` char(20) DEFAULT NULL,
  `segment1` bigint(20) DEFAULT '0',
  `segment2` bigint(20) DEFAULT '0',
  `country_code` char(5) DEFAULT NULL,
  `county_name` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Luego descargaremos el archivo csv que proporciona MaxMin del siguiente enlace: GeoLite Country y tendremos que descomprimir el archivo en el directorio de la base de datos que hemos creado. 

*** Importante. El archivo csv puede descargarse en cualquier directorio pero para ello deberás indicar la ruta completa del archivo.

Después de haber descomprimido el archivo ejecutaremos la siguiente sentencia para cargar el contenido en nuestra tabla:

LOAD DATA INFILE 'GeoIPCountryWhois.csv'
INTO TABLE geoipcountrywhois
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(ip_long_from, ip_long_to, segment1, segment2,country_code,county_name);

Como puedes observar hemos indicado el separador de campos (,),  el identificador de texto (“) y por último el retorno de línea.

Y bueno una vez hecho esto tendremos nuestros datos cargados:

 

GeoIPCountryWhois

 

 

3 Comments

Deja un comentario