Implementación de paquetes de Python personalizados de GitHub a Snowflake

Nov 30 2022
ACTUALIZACIÓN: a partir del 7 de noviembre de 2022. Snowpark for Python es GA, por lo que instalarlo es tan fácil como pip install snowflake-snowpark-python a través de PyPi.

ACTUALIZACIÓN: a partir del 7 de noviembre de 2022. Snowpark for Python es GA, por lo que instalarlo es tan fácil como pip install snowflake-snowpark-pythona través de PyPi .

Visión general

Snowpark ofrece a los desarrolladores una forma de ampliar la funcionalidad de la plataforma Snowflake mediante la escritura de código en lenguajes como Python, Java, Scala y JavaScript. En este blog, revisaremos una forma de implementar paquetes personalizados de Python puro desde un repositorio de GitHub usando GitHub Actions en Snowflake.

Más importante aún, cuando estos paquetes se utilizan para crear funciones definidas por el usuario (UDF) en Snowpark Python , este enfoque facilita el mantenimiento y la implementación de su código personalizado en varias UDF a la vez y de forma automática sin intervención manual. Otro beneficio que destaca esta configuración es el desacoplamiento de los paquetes personalizados del script que carga el paquete en Snowflake y muestra los nombres de las UDF que usan el paquete personalizado actualizado.

Función definida por el usuario

Para demostrar cómo se une todo el flujo, consideremos este UDF simple en Snowpark Python. (Este script se ejecuta en Snowsight ).

Notas del guión

  • El paquete de Python do_something_cool.py se agrega como una dependencia: línea 6 . Tenga en cuenta que la declaración de importaciones incluye la ruta completa; nombre de la etapa y el nombre del archivo
  • Luego se importa ese paquete ( línea 9 ) y se llama al método greetings() ( línea 11 ) pasando el parámetro pasado a esta UDF

SELECT greet_me('Dash');

Hello, Dash! How are you doing today? It's great to see you today!

Configuración: Repositorio 1 de GitHub

Supongamos que tiene un repositorio de GitHub donde mantiene este paquete de Python con el que usted y los miembros de su equipo contribuyen y colaboran.

Aquí está " haz algo genial "

Este repositorio también es donde configuraría GitHub Actions .

Así es como se vería el archivo de flujo de trabajo de GitHub Actions ( detalles del flujo de trabajo a continuación ):

Detalles del flujo de trabajo

  • Evento desencadenante: Al empujar a la rama principal cuando se actualiza el código
  • Pasos del flujo de trabajo:

— 2. Instale las solicitudes de dependencias y se requiere snowflake-connector-python para implementar el código del paquete actualizado

— 3. Descargue el script ( de Repo 2, consulte a continuación ) que cargará el código personalizado actualizado en Snowflake

— 4. Configure las variables de entorno ( base de datos, almacén, esquema, usuario, contraseña y función ) almacenadas en GitHub Secrets. Snowflake Python Connector utilizará estas variables en el script ( descargado en el paso 3 ) para conectarse a Snowflake

— 5. Ejecute el script ( descargado en el paso 3 ) para implementar el código actualizado

[Código en GitHub : paquete personalizado de muestra | Archivo de flujo de trabajo de acciones de GitHub ]

Configuración: Repositorio de GitHub 2

Este repositorio contiene una secuencia de comandos de Python (consulte los detalles a continuación) que se descarga y ejecuta desde la configuración del flujo de trabajo de GitHub Actions en Repo 1 cuando se realizan actualizaciones en el paquete en la rama principal en Repo 1.

Así es como se vería el script:

Pasos de guión

— 1. Conéctese a Snowflake usando Snowflake Python Connector y las variables de entorno configuradas usando GitHub Secrets

— 2. Descargue la lista de paquetes (consulte el formato JSON a continuación) para actualizar

— 3. Para cada paquete, descargue la última versión de la rama principal de Repo 1 y cárguela en el escenario Snowflake

— 4. Recorra todas las UDF, examine sus importaciones e imprima los nombres de las UDF que usan el paquete actualizado.

Lista de paquetes

Este repositorio también contiene un archivo JSON que tiene una lista de paquetes ( a los que se hace referencia en el paso 2 anterior ) que se actualizarán cuando se ejecute el script update_packages.py .

Aquí está el formato del archivo:

Nota : la etapa en el archivo JSON se refiere a una etapa en Snowflake donde se carga el archivo.

Pruebas

Para probar, actualice do_something_cool.py en Repo 1 ( por ejemplo, cambie el mensaje de saludo a "Bienvenido, ¿cómo va su día?" ) y envíe los cambios a la rama principal . En ese momento, debería ver un inicio de compilación y, si tiene éxito (es decir, el código/ sintaxis es correcto, todos los archivos y rutas a los que se hace referencia existen, los parámetros de conexión para conectarse a Snowflake son válidos, etc. ), entonces debería ver el resultado de la compilación. similar a ésto:

Luego, ejecutando este SQL de nuevo...

SELECT greet_me('DASH');

Hello, Dash! Welcome, how is your day going?

¡Eso es todo!

Gracias por su tiempo y siéntase libre de seguirme en Twitter y LinkedIn donde comparto videos de demostración, fragmentos de código y otros artefactos interesantes específicamente sobre Snowpark .