[Fabric] Funciones de datos

Llega una fabric conference y las actualizaciones no paran. Junto con muchos anuncios que suceden, han liberado un nuevo item o tipo de contenido dentro del ecosistema de Fabric.

En esta oportunidad vamos a escribir sobre lo nuevo, Fabric User Data Functions. ¿Qué son? ¿Qué hacen? ¿Cómo las creo? ¿Qué integraciones tiene? y mucho más

Esta nueva funcionalidad tiene sensación y similitudes antes vistas, pero antes de relacionar por donde viene la mano, hagamos como nos gusta en LaDataWeb y veamos la definición de microsoft.

Las funciones de datos de usuario de Fabric son una plataforma que permite hospedar y ejecutar aplicaciones en Fabric. Esto permite a los desarrolladores de datos escribir lógica personalizada e insertarla en su ecosistema de Fabric. Esta característica admite el runtime de Python 3.11 y permite usar bibliotecas públicas de PyPI.

Puede que el concepto suene confuso. Vamos a hacerlo más simple. Son, básicamente, un espacio serverless para ejecutar código python. Cualquier similitud con Azure Functions es pura coincidencia. Quienes conocen el concepto de azure functions puede que ya sepan por donde viene la mano.

Las functions pueden conectarse con orígenes de datos de Fabric de forma nativa. Así mismo se integran a Pipelines y Notebooks. Podemos escribir código en una function desde el portal de Fabric online o incluso con la extensión de Visual Studio Code.

¿Por qué usarlas?

No creo que haya obligación de usarlas pero podrían ayudarnos en algunos aspectos. Veamos algunos:

  • Optimización de código: las funciones nos podrían ayudar a reducir duplicidad de código. Podrían contener sentencias de lógicas de negocio o transformaciones comunes.
  • Integración con pipelines y notebooks que podrían ayudar a optimizar procesos.
  • Permite integración con externos: podemos invocar las funciones desde aplicaciones cliente externas mediante puntos de conexión REST.

¿Cómo?

Sencillamente buscando la opción en nuevo item:

En caso que no veas el elemento, recuerda que para comenzar a usarlas necesitamos permitirlo en el tenant puesto que estan en preview:

Si aún así no puedes verla, es posible que aún no este disponible la característica en tu región. Puedes chequear esa info aqui: https://learn.microsoft.com/en-us/fabric/admin/region-availability

Una vez permitido, podremos crearlo. Similar a Az Functions, al crear el elemento tenemos creado un espacio de gestión de funciones. Estilo Function Apps. El mismo rápidamente nos indica que podemos configurar conneciones y agregar librerías de python.

Tras crear una nueva función vereos el código por defecto.

Lo que ejecutemos dentro de @udf.function() def hello_fabric será como nuestro main de ejecución. En este caso hello_fabric es el nombre de la función. Podemos crear funciones def por fuera, importar librerías y acomodarnos en dicho espacio de código.

Una vez creada nuestra función que podría transformar datos o ejecutar un proceso simple, damos en "Publish".

Publicada la función podremos ejecutarla desde un código externo o en una integración con Pipelines y notebooks.

1- Código externo: fijense que hay un botón Generate invocation code. Al seleccionarlo, se abrirá un código de ejemplo para ejecutar la función.

2- Pipelines: dentro de los pipelines de Data Factory encontraremos a "Functions" como una actividad más de las posibilidades que nos brinda la herramienta.

3- Notebooks: para poder utilizarla en notebooks necesitamos importar NotebookUtils (antiguo MSSparkUtils). Luego podremos llamarlas con la siguiente sentencia:

myFunctions = notebookutils.udf.getFunctions('UDFItemName') # Get functions from UDF within the same workspace
myFunctions = notebookutils.udf.getFunctions('UDFItemName', 'workspaceId') # Get functions from UDF across different workspace

NOTA: para más información de la librería acceder aquí: https://learn.microsoft.com/en-us/fabric/data-engineering/notebook-utilities#user-data-function-udf-utilities

Antes de terminar repasemos algunas consideraciones:

Conclusión

Seguramente esta feature tiene mucho más por mostrarnos cuando sea lanzada definitivamente. Espero que les sea de interés y ayude en procesos de datos que estén desarrollando.