Compartir a través de


Conector de Spark para el Data Warehouse de Microsoft Fabric Synapse

El conector de Spark para el Data Warehouse de Microsoft Fabric Synapse permite a los desarrolladores y científicos de datos de Spark acceder a los datos y trabajar con datos de un almacén y del punto de conexión de análisis SQL del almacén de lago. El conector ofrece las siguientes capacidades:

  • Puede trabajar con datos de un almacén o de un punto de conexión de análisis SQL en el mismo espacio de trabajo o en varios espacios de trabajo.
  • El punto de conexión del análisis SQL de una instancia de Lakehouse se detecta automáticamente en función del contexto del área de trabajo.
  • El conector cuenta con una API de Spark simplificada, limita la complejidad subyacente y funciona con una sola línea de código.
  • Mientras accede a una tabla o una vista, el conector mantiene los modelos de seguridad definidos en el nivel del motor de SQL. Estos modelos incluyen seguridad de nivel de objeto (OLS), seguridad de nivel de fila (RLS) y seguridad de nivel de columna (CLS).
  • El conector viene preinstalado en tiempo de ejecución de Fabric, lo que elimina la necesidad de realizar una instalación independiente.

Nota:

El conector está actualmente en versión preliminar. Para obtener más información, consulte el apartado Limitaciones actuales más adelante en este artículo.

Autenticación

La autenticación de Microsoft Entra es un enfoque de autenticación integrada. Los usuarios pueden iniciar sesión en el área de trabajo de Microsoft Fabric y sus credenciales se pasan automáticamente al motor de SQL para la autenticación y autorización. Las credenciales se asignan automáticamente y no es necesario que los usuarios proporcionen opciones de configuración específicas.

Permisos

Para conectarse al motor de SQL, los usuarios necesitan tener, al menos, permiso de lectura (similar al permiso CONNECT en SQL Server) en el almacén o en el punto de conexión de análisis SQL (nivel de elemento). Los usuarios también deben tener permisos pormenorizados de nivel de objeto para leer datos de tablas o de vistas específicas. Para obtener más información, consulte Seguridad para el almacenamiento de datos en Microsoft Fabric.

Plantillas de código y ejemplos

Utilice una firma de método

El siguiente comando muestra la firma de método synapsesql para la solicitud de lectura. El argumento de tres partes tableName es necesario para acceder a tablas o vistas desde un almacenamiento y el punto de conexión de análisis SQL de una instancia del almacén de lago. Actualice el argumento con los siguientes nombres, en función de su escenario:

  • Parte 1: Nombre del almacén o del almacén de lago.
  • Parte 2: Nombre del esquema.
  • Parte 3: Nombre de una tabla o vista.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame

Además de leer directamente desde una tabla o vista, este conector también le permite especificar una consulta personalizada o de acceso directo, que se pasa al motor de SQL y el resultado se devuelve a Spark.

spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame

Aunque este conector detecta automáticamente el punto de conexión para el warehouse o lakehouse especificado, si desea especificarlo explícitamente, puede hacerlo.

//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>") 

Lectura de datos dentro de la misma área de trabajo

Importante

Ejecute estas instrucciones de importación al principio del cuaderno o antes de empezar a usar el conector:

Para Scala

import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._

import com.microsoft.spark.fabric.Constants

Para PySpark (Python)

import com.microsoft.spark.fabric

from com.microsoft.spark.fabric.Constants import Constants

El código siguiente es un ejemplo que sirve para leer datos de una tabla o vista en un dataframe de Spark:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")

El código siguiente es un ejemplo que sirve para leer datos de una tabla o vista en un dataframe de Spark con un límite de recuento de filas de 10:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)

El código siguiente es un ejemplo que sirve para leer datos de una tabla o vista en un dataframe de Spark después de aplicar un filtro:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")

El código siguiente es un ejemplo que sirve para leer datos de una tabla o vista en un dataframe de Spark solo para las columnas seleccionadas:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")

Lectura de datos entre áreas de trabajo

Para acceder y leer datos desde un almacén de datos o lakehouse entre áreas de trabajo, puede especificar el identificador de área de trabajo donde existe el almacén de datos o lakehouse y, a continuación, el identificador del elemento de almacenamiento de datos o lakehouse. Esta línea proporciona un ejemplo de lectura de datos de una tabla o vista en un DataFrame de Spark desde el almacén de datos o el lakehouse con el identificador de área de trabajo y el identificador de almacén de datos o lakehouse especificados:

# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")

# For data warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<data warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")

Nota:

Al ejecutar el cuaderno, el conector busca de manera predeterminada el almacenamiento de datos o lakehouse especificados en el área de trabajo del lakehouse adjunto al cuaderno. Para hacer referencia a un almacenamiento de datos o lakehouse desde otra área de trabajo, especifique el identificador del área de trabajo y el identificador del elemento del lakehouse o almacenamiento de datos como se indicó anteriormente.

Cree una tabla de almacén de lago basada en los datos del almacén

Estas líneas de código proporcionan un ejemplo para leer datos de una tabla o vista en un dataframe de Spark y usarlos para crear una tabla lakehouse:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")

Solución de problemas

Al finalizar, el fragmento de código de respuesta de lectura aparece en la salida de la celda. Cualquier error en la celda actual también cancelará las ejecuciones de celdas posteriores del cuaderno. La información detallada del error está disponible en los registros de la aplicación Spark.

Limitaciones actuales

Actualmente, el conector:

  • Admite la recuperación de datos de puntos de conexión de los almacenes de Fabric y análisis SQL de elementos de almacén de lago.
  • Fabric DW ahora admite Time Travel, sin embargo, este conector no funciona para una consulta con sintaxis de viaje en el tiempo.
  • Conserva la firma de uso como la que se incluye con Apache Spark para Azure Synapse Analytics para mantener la coherencia. Sin embargo, no es compatible con versiones anteriores para conectarse y trabajar con el grupo de SQL dedicado de Azure Synapse Analytics.
  • Los nombres de columna con caracteres especiales se controlarán agregando caracteres de escape antes de la consulta, según el nombre de la tabla o vista de 3 partes, se envía. En el caso de una lectura personalizada o basada en consultas de paso a través, los usuarios deben escapar los nombres de columna que contengan caracteres especiales.