Conectando con Bases de Datos Externas en Azure Databricks mediante JDBC (2023)

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!

References

Top Articles
Latest Posts
Article information

Author: Trent Wehner

Last Updated: 02/09/2023

Views: 5912

Rating: 4.6 / 5 (76 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Trent Wehner

Birthday: 1993-03-14

Address: 872 Kevin Squares, New Codyville, AK 01785-0416

Phone: +18698800304764

Job: Senior Farming Developer

Hobby: Paintball, Calligraphy, Hunting, Flying disc, Lapidary, Rafting, Inline skating

Introduction: My name is Trent Wehner, I am a talented, brainy, zealous, light, funny, gleaming, attractive person who loves writing and wants to share my knowledge and understanding with you.