Conectar a un data lake desde Microsoft Fabric y copiar su contenido a un lakehouse

En este artículo vamos a ver como conectar a un data lake en Azure desde Microsoft Fabric y copiaremos el contenido a un lakehouse.

Registrar App

Lo primero que vamos a hacer es registrar una app en Azure. Para ello, vamos a Microsoft Entra ID → App registrations → New registration.

Especificamos el nombre de nuestra app y la registramos.

Una vez esté registrada, nos aparecerán unos datos que deberemos de guardar. Estos datos son:

  • Application (client) ID

  • Directory (tenant) ID

Ahora debemos de generar un secreto. Para ello, en el menú de la izquierda de nuestra app, clicamos en Certificates & secrets

Creamos un nuevo secreto y le asignamos un nombre. Ahora viene lo importante, debemos guardar el valor del secreto muy bien porque solo se puede ver una vez creado y lo necesitamos para poder conectar más adelante.

Permisos necesarios

El último paso para tenerlo todo listo es darle permisos a la app para poder acceder y realizar operaciones en el data lake. En Azure, accedemos a nuestra cuenta de almacenamiento y seleccionamos el contenedor (data lake). En el menú seleccionamos Access Control (IAM) → Add → Add role assignment.

En Role buscamos Storage Blob y seleccionamos Storage Blob Data Contributor y en Members buscamos el nombre de la app que hemos registrado en los pasos anteriores.

Microsoft Fabric

En Microsoft Fabric creamos un notebook con el siguiente código:

def connectStorageAcc(storage_account, appid, secretKey, directoryid):
    spark.conf.set("fs.azure.account.auth.type."+storage_account+".dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type."+storage_account+".dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id."+storage_account+".dfs.core.windows.net", appid)
    spark.conf.set("fs.azure.account.oauth2.client.secret."+storage_account+".dfs.core.windows.net", secretKey)
    spark.conf.set("fs.azure.account.oauth2.client.endpoint."+storage_account+".dfs.core.windows.net", "https://login.microsoftonline.com/"+directoryid+"/oauth2/token")
    return print("Connected to storage account "+storage_account)

storage_account = "storage_account_name"
container = "data_lake_name "
appid = "your_app_id"
secretKey = "secret_value"
directoryid = "tenant_id"

connectStorageAcc(storage_account,appid,secretKey,directoryid)

file_location = "abfss://"+container+"@"+storage_account+".dfs.core.windows.net/"
list_of_folders = mssparkutils.fs.ls(file_location)


for f in list_of_folders:
   file_path = f.path
   mssparkutils.fs.mv(file_path, 'Files', True)

El Código se conecta al data lake y mueve todo lo que se encuentre en la ruta file_location. En este ejemplo, se mueven todas las carpetas y lo que hay en su interior del data lake al lakehouse.

Data Lake:

Lakehouse:

0
Subscribe to my newsletter

Read articles from Kilian Baccaro Salinas directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Kilian Baccaro Salinas
Kilian Baccaro Salinas