Cómo usar Try-Catch en Databricks SQL Notebooks

El control de los procesos es una buena práctica de datos ya que te permite identificar aquellos posibles puntos de fallo en tus scripts durante el tiempo de ejecución. Sin embargo, para los que habitualmente se pegan con los Notebooks de SQL en Databricks, vemos que no es posible incluir bloques de captura de errores tipo Try-Catch, puesto que no funcionan como procedimientos almacenados sino como simples sentencias SQL.

Es por ello, que hay que darle una vuelta y pensar en el modo de incorporarlos a la ejecución sabiendo que no se puede crear dentro del propio conjunto de queries. Así leído parece complicado, pero si hacemos uso de la mágica librería dbutils, la cosa empieza a pintar mejor.

Veamos entonces, si creo una función en Python que ejecuta mi Notebook SQL al pasarse como parámetro, podría ser capaz de capturar cualquier excepción que allí sucediera. Para ello, sólo tengo que escribir algo como:

%python

def foo(notebooksql):
    try:

        dbutils.notebook.run(notebooksql, 3600)

        output="1"
        return_code = 'PASS'

    except Exception as e:
        output= f"{e}"
        return_code = 'FAIL'
    
    return (return_code, output)

NOTA: recuerda pasar un tiempo de ejecución elevado o puede suceder que tengas problemas con el timeout.

Para completar el ejemplo, creo un Notebook de SQL llamado Try_Catch_Test para crear una base de datos (‘tests‘) en caso de que no exista en Databricks y en la segunda instrucción, que cree (o actualice) una nueva Tabla llamada customers.

Ejecuto la función pasando como parámetro el nombre del Notebook SQL recién creado y vemos que el resultado que se muestra al ejecutar la celda es el esperado (‘PASS’, ‘1’)

Por contra, si utilizo el nombre de un Notebook de SQL que no existe y trato de ejecutarlo, el resultado que obtengo es bastante diferente, ya que nos da detalle del error que ha sucedido durante la ejecución.

Este sencillo proceso de control te permite almacenar los detalles de la ejecuciones tal sólo con customizar la parte del código de la función indicando, por ejemplo, que guarde los registros en una tabla o como un fichero dentro de un storage account.

Foto de portada gracias a George Becker: https://www.pexels.com/es-es/foto/1-1-3-texto-en-pizarra-negra-374918/

Publicado por alb3rtoalonso

Soy un enamorado del poder de los datos. Entusiasta de la mejora y formación continua.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: