Lectura de Bases de Datos

Una fuente común dónde podemos encontrar datos es en las bases de datos relacionales. Actualmente existen multitud de Sistemas Gestores de Bases de datos (SGBD) para trabajar con bases de datos relacionales, y R puede conectarse a la gran mayoría de los mismos. El paquete DBI proporciona una sintaxis para el acceso a varios SGBD. Actualmente soporta SQLite, MySQL, MariaDB, PostgreSQL, y Oracle, además de un wrapper (del inglés, envoltorio) para el API Java DataBase Connectivity (JBDC).

Para conectarnos en una base de datos, necesitamos dos paquetes:

  • El paquete DBI, que consiste en la definición de una interface para la comunicación entre R y SGBDR.
  • El paquete R<nombre_SGBDR> que consiste en la implementación del driver R/SGBDR.

Conexión a SQLite

Para conectarnos a una base de datos SQLite, en primer lugar debemos instalar y cargar el los paquetes DBI y RSQLite

# Instalamos el paquetes
install.packages(c("DBI", "RSQLite"))
# Cargamos los paquetes
library(DBI)
library(RSQLite)
## Error in library(RSQLite): there is no package called 'RSQLite'

Después definimos la conexión a la base de datos, en la que especificaremos el driver para que sea de tipo "SQLite" y que pasaremos a la función dbConnect() a la que además le pasaremos como argumento la ruta del archivo de la base de datos

# Definimos el driver
driver <- dbDriver("SQLite")
## Error: Couldn't find driver SQLite. Looked in:
## * global namespace
## * in package called SQLite
## * in package called RSQLite
# Definimos la ruta al archivo de la bd
archivo_bd <- system.file("data/database.sqlite")
# Establecemos la conexión
con <- dbConnect(driver, archivo_bd)
## Error in dbConnect(driver, archivo_bd): object 'driver' not found

Conexión a MySQL

La única diferencia para la conexión a una base de datos MySQL es cargar el paquete RMySQL, establecer el driver a "MYSQL" y por último, proporcionar el usuario y contraseña:

# Instalamos el paquetes
install.packages(c("DBI", "RMySQL"))
# Cargamos los paquetes
library(DBI)
library(RMySQL)
## Error in library(RMySQL): there is no package called 'RMySQL'
# Definimos el driver
driver <- dbDriver("MySQL")
# Establecemos la conexión
conn <- dbConnect(driver, user = "ruben", password = "1234", db = "sakila")

Conexión a PostgreSQL, Oracle y JDBC

Para establecer la conexión a PostgreSQL, Oracle y JDBC procederíamos como en el apartado anterior, pero en estos casos requieren de los paquetes RPostgreSQL, ROracle y RJDBC respectivamente.

Listar y recuperar datos

Para listar las tablas de una base de datos haremos uso de la función dbListTables():

## Error in dbWriteTable(con, "mtcars", mtcars): object 'con' not found
# Mostramos las tablas de la bd
dbListTables(con)
## Error in dbListTables(con): object 'con' not found

Por otro lado, para recuperar los datos de una base de datos escribiremos una consulta, que consiste en un string que contiene una instrucción SQL, y la enviaremos a la base de datos con la ayuda de la función dbGetQuery. En el siguiente ejemplo, SELECT * FROM mtcars significa "muestra cada columna de la tabla con nombre mtcars":

# Creamos una consulta
consulta <- "SELECT * FROM mtcars"
# Enviamos la consulta al SGBDR
datos <- dbGetQuery(con, consulta)
## Error in dbGetQuery(con, consulta): object 'con' not found
# Mostramos por pantalla un subconjunto de los datos
datos[1:10, 1:5]
## Error in eval(expr, envir, enclos): object 'datos' not found

Para aquellos que no conocen el lenguaje SQL, el paquete DBI proporciona multitud de funciones para la manipulación de base de datos. A modo de ejemplo, mediante la función dbReadTable conseguiremos el mismo resultado que en código anterior:

# Consultamos la tabla `mtcars`
dbReadTable(con, "mtcars")

Desconexión de la base de datos

Por último, una vez hemos manipulado la base de datos, es necesario desconectarse y descargar el driver:

# Cerramos la conexión
dbDisconnect(con)
## Error in dbDisconnect(con): object 'con' not found

results matching ""

    No results matching ""