Leer archivos Access desde Linux con mdbtools

El formato .mdb de Microsoft Access es propietario y su uso se restringe a los entornos de trabajo Windows, lo cual implica no solo tener el sistema operativo de Microsoft sino además haber comprado una licencia de Office. Al no poder trabajar de forma directa con ellos en Linux, ya existen aplicaciones que nos permiten leerlas, como son por ejemplo DBeaver o Kexi. Sin embargo, puede que no necesitemos un programa tan completo, sino que solo nos interese extraer la información contenida en el Access para luego procesarla por otros medios. Para este cometido lo más sencillo es utilizar la herramienta mdbtools. Aunque podemos bajarnos el código y compilarlo, es más fácil utilizar los gestores de paquetes de cada distribución Linux, por ejemplo en Fedora o cualquier distribución basada en Red Hat la forma de hacerlo sería:

sudo dnf install mdbtools

Una vez instalada, tenemos a nuestra disposición varios comandos, uno de los cuales es mdb-export, que nos permite exportar una de las tablas contenidas dentro del archivo Access a un fichero de texto plano con formato csv de esta forma:

mdb-export nombre_Access nombre_tabla > nombre_fichero.csv 

Donde nombre_Access es el nombre del ficho Access; nombre_tabla es el nombre de la tabla dentro del Access de la que queremos obtener los datos; y nombre_fichero.csv es el nombre del fichero de texto en el que queremos guardar la información. Existen más opciones para la exportación de datos que pueden consultarse simplemente tecleando «mdbtools» en la consola:

En caso de que no conozcamos a priori los nombres de las tablas incluidas en el Access, podemos obtenerlos con el comando:

mdb-tables nombre_Access

Existen más comandos que podemos usar, y podemos obtener una lista de ellos si tecleamos «mdb-» en la consola y pulsamos el tabulador. El que puede sernos bastante útil es mdb-schema, que nos devuelve no solo las tablas que tenemos en el Access sino también los campos que tiene cada una y su formato.

Otra de las buenas características de mdbtools es que puede usarse también desde un script de R, si previamente instalamos el paquete Hmisc en R con:

install.packages("Hmisc")

Con él instalado podemos usar el comando:

mdb.get(RutaAlFicheroAccess, "nombre_tabla") 

Esta opción de carga de datos desde R me parece más interesante que la utilización de los paquetes basados en Rodbc, porque dichos paquetes necesitan que la arquitectura del sistema (32 o 64 bits) sea la misma que la del Access, lo cual puede ser un problema.

Cómo leer una base de datos Microsoft Access desde Linux con DBeaver

La base de datos Microsoft Access no está disponible para Linux, por lo que para acceder a ella o bien se usa un equipo con sistema operativo Windows, o bien extraemos su contenido con mdbtools, o bien usamos una aplicación que nos permita acceder a su contenido desde Linux. Un programa para hacer esto último, que a mí me ha parecido fácil de usar y bastante completo, es DBeaver.

Aunque es un programa de pago, tiene una versión Community gratuita que permite hacer muchas cosas, entre ellas acceder a una gran variedad de bases de datos, entre las que se encuentra Access. Tiene versión para Linux en formato deb, rpm, snap… En mi caso, Debian 10, la instalación sería como sigue:

Como es un programa escrito en Java, se necesita previamente instalar dicho entorno de ejecución ejecutando en un terminal:

sudo apt install default-jre default-jdk

Y comprobando que se ha instalado correctamente con:

java -version

javac -version

A continuación descargamos el fichero .deb y situándonos en la carpeta en la que se encuentra el fichero descargado, ejecutamos:

sudo dpkg -i dbeaver dbeaver-ce_7.0.1_amd64.deb

Una vez hecho esto, antes de lanzar el programa es conveniente ampliar la memoria RAM que va a utilizar porque la que viene por defecto puede ser escasa si la base de datos contiene muchas tablas. Para ello editamos el fichero /usr/share/dbeaver/dbeaver.ini (se puede consultar una explicación de cómo está organizado este fichero) modificando las líneas:

-Xms64m

-Xmx1024m

De forma que especifiquemos en ellas la cantidad inicial de memoria que usará el programa (-Xms ) y la máxima (-Xmx) que permitiremos que utilice. Hay que establecer unos valores que sean admisibles por el ordenador en que se esté trabajando. Para saber de cuánta memoria libre disponemos podemos ejecutar el comando free, y ajustar los valores en consecuencia. En mi caso he indicado -Xms1024m y -Xmx4096m.

A continuación iniciamos DBeaver y pulsando en el icono «Nueva conexión» (el enchufe):

Nos aparecen todas las bases de datos disponibles, bajamos hasta encontrar Access, la seleccionamos y pulsamos Siguiente:

A continuación especificamos dónde se encuentra el fichero .mdb que queremos abrir y lo seleccionamos. Es posible que se nos pida instalar un complemento java si no lo tenemos ya instalado, basta con pulsar en «Download» y tras finalizar, ya tendremos la base de datos Access disponible para su consulta en el navegador de bases de datos de la aplicación.

Como DBeaver tiene un asistente de exportación, podremos también extraer la información de la tabla que deseemos a un archivo .csv o .sql para su posterior carga en otra base de datos que no sea exclusiva de Windows.