Archive for August 3rd, 2007

Cargar datos en mySQL con LOAD DATA INFILE

Friday, August 3rd, 2007

Mucha gente me ha preguntado esto y bueno, decidí hacer un post para quienes buscan esta instrucción, para que aprendan a usarla.

LOAD DATA sirve para tomar cualquier archivo “comma-separated” (separado por comas, aunque no necesariamente son comas) y cargarlo como datos en alguna tabla de mySQL; la sintaxis básica es:

LOAD DATA LOCAL INFILE '/importfile.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(field1, filed2, field3);

Adicionalmente tiene algunas opciones; pero expliquemos con detalle el comando:

LOAD DATA indica que debe cargar un archivo csv (cualquier hoja de cálculo puede generar este tipo de archivos); si pasamos la opción LOCAL indicamos que el archivo esta en nuestra máquina y que debe ser leído por el cliente y enviado al servidor; sino, la ruta (absoluta o relativa) es en el servidor.

Si dentro de la tabla hay registros, la violación de primary keys podría causar la detención de la carga, entonces escribimos las opciones IGNORE (ignora las filas que violen el constraint y no las inserta) o REPLACE (agrega las filas reemplazando las existentes).

Fijense que quedaria algo como:

LOAD DATA LOCAL INFILE ‘ruta_archivo’
REPLACE INTO TABLE ‘nombre de la tabla’

Si acaso el archivo está en una máquina windows guardado en ISO-8859-1, entonces pueden pasar opcionalmente el charset en el que está el archivo en la sentencia:

CHARACTER SET latin1

Las opciones de como está estructurado el campo:

La dirección que está en mi hoja de calculo tiene comillas simples y comas en los datos, como separo entonces?.

Puedes inventarte cualquier separador entre campos: campo1 : campo2 : campo3 : … campoN : (separados con 2 puntos), simplemente debes indicarle a mySQL cual es el separador de campos con:

FIELDS TERMINATED BY ‘;’ <- yo por lo general uso punto y coma en vez de coma, a veces, uso el PIPE -> |

Tambien pueden indicar con QUE están encerradas las cadenas, si comillas simples, dobles, numerales (#), acentos viriguardilla (~) y cualquier cosa que se les ocurra: “campo1″; “campo2″; “campo3″; …

FIELDS ENCLOSED BY ‘”‘ <- fijense que dentro de las comillas simples, estan unas dobles.

Pueden agregar OPTIONALLY para indicar que algunos campos estan encerrados con comillas, pero no todos:

FIELDS OPTIONALLY ENCLOSED BY ‘#’

Inicio y fin de linea:

Como se inicia la linea?, cadena vacia?, vienen con una columna serial que queremos ignorar?, algun caracter?, simplemente escribimos:

Interpret occurrences of tab, newline, or ??\?? preceded by ??\?? as literal characters that are part of field values.

LINES STARTING BY ” <- indica que las lineas empiezan en una cadena vacia

LINES TERMINATED BY ‘\n’ indica que  la lina termina con un salto de linea (\n).

Si en su archivo csv hay una o mas filas que repreentan los encabezados de los campos y desean “obviarlas” entonces:

IGNORE 1 LINES hará que se ignore una linea.

Procesamiento de los campos:

En algún sitio debo indicar que representan las columnas de mi archivo coma-separado; las columnas de dicho archivo son leidas secuencialmente, asi que la primera columna del archivo, por defecto, se guardará en la primera columna de mi tabla, si queremos sobre-escribir este comportamiento ejecutamos:

(campo1, campo2, campo3, campo4, campo5 …

para indicar su orden de guardado en la tabla; ejemplo, tenemos una tabla:

nombre, apellido, cedula, fecha_nacimiento

pero en el csv los campos vienen cedula, nombre, apellido, fecha_nacimiento, entonces colocamos entre parentesis los campos asi:

(cedula, nombre, apellido, fecha_nacimiento)

Primera columna de mi csv corresponde al campo cedula, segunda al nombre y asi suscesivamente.

Formateo y condicional de datos:

Si acaso la fecha de nacimiento la guardan el el común formato de las hojas de excel (23/10/78), podemos entonces “guardar” en una variable temporal el valor del campo fecha de nacimiento y procesarla despues, ejemplo:

(cedula, nombre, apellido, @fecha) <- crea una variable temporal de fecha

SET fecha_nacimiento = str_to_date(@fecha, ‘%d/%m/%y’) <- toma la variable @fecha (que tiene la forma dia/mes/año de 2 digitos) y la convierte a ANSI (año de cuatro digitos-mes-dia).

un caso común ocurre con que la gente en JOSS PRO (notese el acento en la X) que escribia todo como si estuvieran trabajando en 8 bits y los nombres vienen con JESUS LARA, PERICO DE LOS PALOTES, cuando deberían ser naturalmente capitalizados; eso se acomoda:

(cedula, @nombre, @apellido, @fecha)

SET nombre =  CONCAT(UCASE(LEFT(@nombre, 1)), SUBSTRING(LCASE(@nombre), 2))

Asi que queda como chuleta si quieren convertir sus viejas aplicaciones FOJJ PRO a nuevas RBDMS como mySQL.

Como final, la sintaxis completa queda:

LOAD DATA LOCAL INFILE ‘archivo’
IGNORE
FIELDS TERMINATED BY ‘;’ ENCLOSED BY ‘”‘
LINES STARTING BY ” TERMINATES BY ”
IGNORE 1 LINES
(field1, field2, field3, @field4)
SET field4 = (alguna cosa SQL que quieran hacerle a @field4)

Intuitividad de la mano de una botella

Friday, August 3rd, 2007

Me encontraba en el Aeropuerto ??Simón Bolivar? (aka. Maiquetia) para abordar un avión que me llevaría a la ciudad de Coro cuando comienza a pasar ante mis ojos algo completamente inusual.
Enfrente de mí se encontraba una máquina dispensadora de Botellas y Latas de Pepsi Cola, extrañamente comienzan a pasar, cliente tras cliente; personas de distintas edades para intentar adquirir una botella de refresco.

vendex1.jpg

De manera regular la gente comienza por apretar botones, darle a perillas, presionar sobre las botellas; jugar a combinaciones extrañas a ver si de alguna manera ellos logran sacar una botella; luego comienzan a mirar frustrados hacia los lados como si fuera algún truco de camara escondida y se retiran humillados por una máquina expendedora de botellas pero con su orgullo bien en alto porque no le preguntaron a alguien cercano como funcionaba dicha máquina.

Al final del cuento y antes de abordar el Avión llega un niño que le calculo solo unos 8 años, toma un billete, lo inserta en la ranura (si, esa ranura es para billetes), presiona el botón que está al lado del billete (que como es una perilla gris, no tiene descripción) y luego presiona su refresco favorito; pum!, salió un refresco.

Notas a todo esto:

Debemos darle importancia a la intuitividad de las interfaces; es decir, a la forma sencilla como un dispositivo debe funcionar; muchas veces pensamos que nuestro “dispositivo, maquina, aplicación, pagina web, sistema operativo”, es intuitivo (la gente puede usar su intuición para usarlo y no tener que leer guias de aprendizaje) solo porque nosotros lo entendemos y no es así.

La intuición es como el sentido común, “colectiva y estúpida”; o haces cosas a prueba de bobos, o realmente mucha gente NO VA A USAR TU DISPOSITIVO!.

La “máquina” no es tan intuitiva como parece, mucha gente deja de comprar porque no logra usarla (tal vez porque las instrucciones están en ingles y no dice por ningún lado “inserte un billete de 5000 Bs. aqui, no desconfie, yo le daré cambio”!).

Como dice “La pelota de letras” (el humorista Andrés Lopez) “Los niños de ahora tienen X-Box con 55 botones, mando a distancia y vibra-cool y dicen que son “mas sencillos” que nuestros viejos atari de una palanca y un botón!!”:

La cara del señor cincuentón que no pudo comprar su refresco cuando vió al niño usar la maquina con tal facilidad no fue normal! …xD

Si sienten algún tipo de rabia contra estas máquinas; pueden descubrir como hacerles “Hacking” aqui.

Campaña Venezolana por el voto NO-OOXML

Friday, August 3rd, 2007

Como he seguido insistiendo en posts previos; hace algún tiempo vengo colaborando con una campaña internacional por el voto NO de nuestro organismo nacional de certificación y calidad (FONDONORMA) ante la comisión ISO encargada de estudiar dicho “estandard”.

He estado recibiendo información cruzada sobre  la actividad de FONDONORMA, algunos representantes y personas me han dicho que dicho ente es solo un “observador” y que Venezuela no tiene representación o voto ante el comité ISO; sin embargo, según el comité ISO internacional; Venezuela si forma parte, además de ser un “national standarization body”, único encargado ISO a nivel nacional, además de contar con voto directo dentro del buró de aprobaciones de la ISO commitee.

Por ende; si quieres unirte a la campaña, solicita de manera formal y cortés a FONDONORMA las siguientes informaciones:

1.- Estado de la evaluación (si la estan realizando) del estudio del DIS-29500 (lease, Microsoft Office openXML), que han estudiado, que piensan votar (Si, No, Si con comentarios o No cn comentarios, si es abtención, las razones) y algunas observaciones adicionales que deseen indicar sobre el tema.

2.- Estado de la aplicación de openDocument (ISO-23600:2006) como estandard ISO en documentos, como formato de intercambio de documentos; Fondonorma está en la obligación de estudiar y adecuar a normas covenin dicho estandar de documentación e indicarle a empresas tanto públicas como privadas que se adhieran al uso de un estandar de intercambio y dejen de usar software privativo, comercial y no aceptado por ISO como Office Word, Office Excel u Office Powerpoint.

Si formas parte de algunas de estas organizaciones:

  • AIMM
  • SOCALIDAD
  • SOQUIM
  • TV
  • VIPLA
  • Cámara de Comercio de Maracaibo
  • Cámara de Industriales del Estado Carabobo
  • Cámara Venezolana de la Construcción
  • CAVENVASE
  • CAVIDEA
  • CODELECTRA
  • FAVENPA
  • FEDEINDUSTRIA
  • Instituto Venezolano de Siderurgia
  • Ministerio de Agricultura y Tierras
  • Ministerio del Ambiente y de los Recursos Naturales
  • Ministerio de Energía y Petróleo
  • Ministerio de Infraestructura
  • Ministerio de Industrias Ligeras y Comercio
  • Ministerio de Salud y Desarrollo Social

Formas parte del consejo superior de estudio de FONDONORMA y puedes presionar a que ellos hagan discusión pública (como en otros países) acerca de los estándares aprobados.

Puedes verificar el estado de implantación de openOffice (openDocument ISO-23600:2006) en tu institución y proponerla como ejemplo de implantación del estandar ISO en Venezuela para facilitar su discusión y aprobación en en consejo superior de FONDONORMA.

Si FONDONORMA tiene categoría O (Observador) ante el comité de discusión de estándares lo desconozco, pero al menos desde tu entidad solicita la adopción de openDocument como estandar ISO:Covenin y así hacer más dificil la aprobación de un “pseudo-estandar” de Microsoft.

Unete al proyecto aqui