Conector de Spark para Microsoft Fabric Data Warehouse
El conector de Spark para Fabric Data Warehouse permite a los desarrolladores y científicos de datos de Spark acceder a datos y trabajar con datos desde un almacenamiento y el punto de conexión de SQL Analytics de un 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 o almacén de lago entre áreas de trabajo, puedes especificar el identificador de área de trabajo donde existe el almacén o el almacén de lago y, después, el identificador de elemento del almacén de lago o almacén. En la línea siguiente se proporciona un ejemplo de lectura de datos de una tabla o vista en un DataFrame de Spark desde el almacén o almacén de lago con el identificador de área de trabajo y el identificador de almacén de lago/almacén 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 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, "<warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
Nota:
Al ejecutar el cuaderno, el conector busca de manera predeterminada el almacén o el almacén de lago especificados en el área de trabajo del almacén de lago adjunto al cuaderno. Para hacer referencia a un almacén o un almacén de lago desde otra área de trabajo, especifica el identificador del área de trabajo y el identificador de elemento del almacén de lago o almacén, tal 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 de almacén de lago:
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.