Orígenes de datos de Spark

La API de origen de datos de Spark le permite leer y escribir en bases de datos externas directamente desde Azure Databricks. Úselo solo cuando necesite la flexibilidad completa del motor de Spark, quiera ejecutar consultas nativas en el origen o requerir acceso de escritura a sistemas externos. En general, Azure Databricks recomienda un acceso gobernado y de solo lectura con delegación automática de consultas de Spark o SQL. Consulte ¿Qué es la federación de consultas?.

La API de origen de datos de Spark tiene comportamientos específicos para la conectividad, la ejecución de consultas y la detección de esquemas.

  • La carga de trabajo principal y las transformaciones posteriores de Spark se ejecutan en el clúster de Spark de Azure Databricks.
  • Cuando se usa la query opción , la instrucción SQL especificada se ejecuta completamente en el origen de datos externo. Spark obtiene los resultados sin aplicar el pushdown de transformaciones en la cadena de consulta.
  • La conexión requiere un conector agrupado Azure Databricks, un controlador JDBC proporcionado por el usuario o un origen de datos personalizado de PySpark.
  • Spark lee automáticamente el esquema de la tabla de base de datos externa y asigna sus tipos a los tipos de Spark SQL.

Uso de un conector agrupado

Databricks Runtime incluye conectores optimizados para orígenes de datos comunes. Consulte Conectores agrupados admitidos para obtener la lista completa.

Los conectores agrupados usan host y port como opciones independientes en lugar de una cadena de dirección URL de JDBC completa.

Leer datos mediante una consulta de paso a través

El uso de la query opción garantiza que la lógica de filtro y combinación se ejecute en la base de datos de origen antes de que los datos lleguen a Spark. Para el acceso de lectura regulado con la inserción automática de consultas y la delegación de permisos del catálogo de Unity a través de vistas, considere la posibilidad de realizar consultas remotas en su lugar.

df = (spark.read
  .format("sqlserver")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("query", "SELECT id, name FROM users WHERE active = 1")
  .load())

Escritura de datos

Especifique un modo de escritura con .mode() para controlar cómo se escriben los datos. Use append para agregar filas a una tabla existente o overwrite para reemplazar su contenido.

(df.write
  .format("sqlserver")
  .mode("overwrite")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("dbtable", "<table-name>")
  .save())

Uso de una conexión UC de JDBC

Si no viene incluido un conector específico de la fuente, o si desea usar una versión específica del controlador JDBC, utilice una conexión JDBC de Unity Catalog. Esto le permite centralizar la administración de credenciales y traer su propio controlador JDBC.

Una conexión JDBC de Unity Catalog ofrece varias ventajas frente a usar un conector incluido o directamente un controlador JDBC puro. Con una conexión JDBC a Unity Catalog, puede hacer lo siguiente:

  • Use su propio archivo JAR del controlador JDBC para cualquier base de datos compatible con JDBC.
  • Cree la conexión una vez y reutilízela en clústeres sin servidor, estándar y dedicados.
  • Utilice el acceso gobernado al origen de datos mediante un objeto de conexión de Unity Catalog.
  • Ocultar las credenciales de conexión del usuario que consulta.
  • Lee y escribe en bases de datos externas a través de spark Data Source API.

Para usar una conexión de catálogo de Unity de JDBC, especifique databricks.connection en las opciones de Spark:

df = (spark.read
  .format("jdbc")
  .option("databricks.connection", "<connection-name>")
  .option("query", "SELECT * FROM external_table")
  .load())

Para obtener instrucciones de configuración, consulte Conexión JDBC.

Uso de un conector personalizado en clústeres dedicados

En clústeres dedicados (clásicos), puede instalar conectores de origen de datos de Spark de terceros o controladores JDBC que no están agrupados con Databricks Runtime.

Use este enfoque cuando:

  • Necesita un conector spark de terceros para sistemas como MongoDB, Cassandra, Couchbase o Elasticsearch.
  • Necesitas una versión específica del controlador que no esté incluida en el entorno de ejecución.
  • Si quiere instalar un controlador JDBC directamente en el clúster sin configurar una conexión de Unity Catalog.

Instalación de un conector o controlador

Instale la biblioteca en el clúster a través de Compute>su clúster>Bibliotecas>Instalar nueva. Puede usar las coordenadas de Maven directamente sin descargar ni cargar ningún JAR. Reinicie el clúster para que la biblioteca surta efecto.

Lectura de datos

Una vez instalado el conector, use el nombre de formato del conector y sus opciones de conexión necesarias para leer los datos.

df = (spark.read
  .format("mongodb")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .load())

Escritura de datos

Utilice el mismo nombre de formato y las mismas opciones de conexión para volver a escribir los datos en el origen.

(df.write
  .format("mongodb")
  .mode("overwrite")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .save())

Considerations

Tenga en cuenta lo siguiente al usar conectores personalizados en clústeres dedicados.

  • El controlador o conector solo está disponible en el clúster donde está instalado.
  • Los archivos JAR personalizados de terceros para Spark no son compatibles con Databricks SQL, con entornos sin servidor ni con clústeres con modo de acceso estándar. Para esos tipos de computación, use conectores integrados o conexiones JDBC de Unity Catalog.

Orígenes de datos personalizados de PySpark

La API de Python DataSource permite crear conectores de datos personalizados completamente en Python, sin bibliotecas basadas en JAR o JVM. Úselo cuando necesite conectarse a las API REST, las aplicaciones SaaS o cualquier sistema sin una interfaz JDBC o cuando desee generar datos sintéticos mediante programación. La API admite lecturas y escrituras por lotes y streaming.

Nota:

Los orígenes de datos personalizados de PySpark requieren Databricks Runtime 15.4 LTS o superior.

Para obtener información sobre la configuración, ejemplos y referencia de API, consulte Orígenes de datos personalizados de PySpark.

Comparación de estrategias de integración

En la tabla siguiente se compara spark Data Source API con Lakehouse Federation y Lakeflow Connect para ayudarle a elegir el enfoque adecuado para su caso de uso.

Feature API de origen de datos de Spark Federación de Lakehouse Lakeflow Connect
Caso de uso principal ETL complejo, lógica personalizada de Spark, consultas de paso a través Consultas ad hoc, informes de BI Ingesta automatizada a gran escala
Movimiento de datos Cargado en la memoria de Spark (efímero) Cargado en la memoria de Spark (efímero) Copiado en Delta Lake (persistente)
Ejecución de consultas Inserción manual usando la opción nativa query Inserción automática de filtros, combinaciones y agregaciones de Spark y SQL No aplicable (replicación de tabla completa)
Governance Conexión de catálogo de Unity (JDBC) o ámbitos secretos Catálogo de Unity (catálogo federado) Unity Catalog (canalización administrada)
Más adecuado para Usuarios avanzados que necesitan una flexibilidad completa de Spark Minimizar el movimiento de datos al tiempo que se conserva la gobernanza Canalizaciones CDC y de ingesta de producción

Conectores agrupados admitidos

Los orígenes de datos siguientes se agrupan en Databricks Runtime y se pueden llamar directamente a través de Spark. Las lecturas y escrituras se admiten en clústeres dedicados y estándar.

Nota:

Las operaciones de escritura en computación sin servidor son compatibles con PostgreSQL, SQL Server, MySQL, Snowflake y Redshift. Consulte Opciones de escritura sin servidor para conectores agrupados para ver las opciones de conector compatibles.

Origen de datos spark.format() nombre
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL y MariaDB "mysql"
Snowflake "snowflake"
Amazon Redshift "redshift"
Google BigQuery "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Limitaciones

Se aplican las siguientes limitaciones al usar la API de origen de datos de Spark en Azure Databricks.

  • Las opciones de Spark para orígenes de datos agrupados se limitan a query, dbtabley a un pequeño conjunto de opciones específicas del conector.
  • Los JAR de Spark personalizados de terceros solo se pueden instalar en clústeres dedicados. Para clústeres sin servidor o estándar, utilice conectores integrados o conexiones JDBC de Unity Catalog.
  • Los orígenes de datos personalizados de PySpark requieren Databricks Runtime 15.4 LTS o superior.