En Azure Databricks, la capacidad de conectar con bases de datos externas utilizando JDBC proporciona una flexibilidad excepcional. En este artículo, exploraremos la sintaxis básica para configurar y utilizar estas conexiones, con ejemplos en Python, SQL y Scala.
Configuración de Conexiones
Para configurar la lectura de datos mediante JDBC, es esencial seguir una serie de ajustes. Cada base de datos utiliza un formato diferente para la <jdbc-url>
. A continuación, se muestra un ejemplo en Python:
employees_table = (spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.load())
En SQL, la configuración se realiza a través de:
CREATE TEMPORARY VIEW employees_table_vw
USING JDBC
OPTIONS (
url "<jdbc-url>",
dbtable "<table-name>",
user '<username>',
password '<password>'
);
Y en Scala:
val employees_table = spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.load()
Lectura y Escritura de Datos
Una vez configurada la conexión, podemos leer datos de la tabla JDBC. Spark automáticamente obtiene el esquema de la tabla de la base de datos y lo asigna a tipos de datos de Spark SQL.
Para imprimir el esquema en Python:
employees_table.printSchema()
En SQL:
DESCRIBE employees_table_vw
Y en Scala:
employees_table.printSchema()
Escritura de Datos
La escritura de datos utilizando JDBC sigue una configuración similar a la lectura. Aquí hay un ejemplo de cómo guardar datos en una nueva tabla:
(employees_table.write
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<new-table-name>")
.option("user", "<username>")
.option("password", "<password>")
.save())
Y en SQL:
CREATE TABLE new_employees_table USING JDBC
OPTIONS (
url "<jdbc-url>",
dbtable "<table-name>",
user '<username>',
password '<password>'
) AS
SELECT * FROM employees_table_vw
En Scala:
employees_table.write
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<new-table-name>")
.option("user", "<username>")
.option("password", "<password>")
.save()
Control de Paralelismo para Consultas JDBC
Por defecto, el control de paralelismo en consultas JDBC es crucial para mejorar el rendimiento. Es importante configurar opciones como numPartitions
para controlar cuántas consultas simultáneas realiza Azure Databricks en la base de datos externa.
employees_table = (spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.option("partitionColumn", "<partition-key>")
.option("lowerBound", "<min-value>")
.option("upperBound", "<max-value>")
.option("numPartitions", 8)
.load())
En SQL:
CREATE TEMPORARY VIEW employees_table_vw
USING JDBC
OPTIONS (
url "<jdbc-url>",
dbtable "<table-name>",
user '<username>',
password '<password>',
partitionColumn "<partition-key>",
lowerBound "<min-value>",
upperBound "<max-value>",
numPartitions 8
)
En Scala:
val employees_table = spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.option("partitionColumn", "<partition-key>")
.option("lowerBound", "<min-value>")
.option("upperBound", "<max-value>")
.option("numPartitions", 8)
.load()
Optimización de FetchSize
La optimización del parámetro fetchSize
en controlar cuántas filas se recuperan a la vez de la base de datos remota. Es esencial ajustar este valor según el tipo de carga de trabajo y consideraciones específicas del sistema.
employees_table = (spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.option("fetchSize", "100")
.load())
En SQL:
CREATE TEMPORARY VIEW employees_table_vw
USING JDBC
OPTIONS (
url "<jdbc-url>",
dbtable "<table-name>",
user '<username>',
password '<password>',
fetchSize 100
)
En Scala:
val employees_table = spark.read
.format("jdbc")
.option("url", "<jdbc-url>")
.option("dbtable", "<table-name>")
.option("user", "<username>")
.option("password", "<password>")
.option("fetchSize", "100")
.load()
Conclusión
En este artículo, hemos explorado la configuración detallada para conectar Azure Databricks con bases de datos externas mediante JDBC. Desde la configuración inicial hasta la lectura y escritura de datos, así como el control de paralelismo y optimización de FetchSize, ahora cuentas con un conocimiento sólido para aprovechar al máximo estas conexiones. ¡Optimiza tu experiencia con Azure Databricks y potencia tus análisis de datos!