Las UDF de Python te permiten crear una capa de abstracción de lógica personalizada para simplificar la construcción de consultas. Pero, ¿qué pasa si quieres aplicar lógica compleja, como ejecutar un modelo grande o detectar eficientemente patrones en filas de tu tabla?
Anteriormente, introdujimos las Funciones Definidas por el Usuario de Tabla (UDTF) de Python con ámbito de sesión para admitir una lógica de consulta personalizada más potente. Las UDTF te permiten ejecutar lógica de Python robusta y con estado en tablas completas, facilitando la resolución de problemas normalmente difíciles en SQL puro.
Procesa Cualquier Conjunto de Datos de Forma Flexible
La palabra clave declarativa TABLE() te permite canalizar cualquier tabla, vista o incluso una subconsulta dinámica directamente a tu UDTF. Esto convierte tu función en un bloque de construcción potente y reutilizable para cualquier porción de tus datos. Incluso puedes usar PARTITION BY, ORDER BY y WITH SINGLE PARTITION para particionar la tabla de entrada en subconjuntos de filas que serán procesados por llamadas de función independientes directamente dentro de tu función de Python.
Ejecuta Inicializaciones Pesadas Solo Una Vez Por Partición
Con una UDTF, puedes ejecutar código de configuración costoso, como cargar un modelo de ML grande o un archivo de referencia grande, solo una vez por cada partición de datos, no por cada fila individual.
Mantiene el Contexto Entre Filas
Las UDTF pueden mantener estados de una fila a la siguiente dentro de una partición. Esta capacidad única permite análisis avanzados como la detección de patrones de series temporales y cálculos acumulados complejos.
Mejor aún, cuando las UDTF se definen en Unity Catalog (UC), estas funciones son accesibles, descubribles y ejecutables por cualquier persona con el acceso adecuado. En resumen, escribes una vez y ejecutas en todas partes.
Nos complace anunciar que las UDTF de Python de UC ya están disponibles en Vista Previa Pública con Databricks Runtime 17.3 LTS, Databricks SQL y Cuadernos y Trabajos sin Servidor.
En este blog, discutiremos algunos casos de uso comunes de las UDTF de Python de UC con ejemplos y explicaremos cómo puedes usarlas en tu canalización de datos.
Pero primero, ¿por qué UDTF con UC?
Implementa una vez en Python puro y llámala desde cualquier lugar entre sesiones y espacios de trabajo
Escribe tu lógica en una clase Python estándar y llama a las UDTF de Python desde almacenes SQL (con Databricks SQL Pro y Serverless), clústeres UC estándar y dedicados, y canalizaciones declarativas de Lakeflow.
Descubre usando tablas del sistema o Catalog Explorer
Otorga y revoca permisos para UDTF de Python
Comencemos con un problema común de ingeniería de datos: hacer coincidir direcciones IP con una lista de bloques CIDR de red (por ejemplo, para identificar tráfico de redes internas). Esta tarea es incómoda en SQL estándar, ya que carece de funciones integradas para lógica y paquetes CIDR.
Las UDTF de Python de UC eliminan esa fricción. Te permiten llevar las ricas bibliotecas y algoritmos de Python directamente a tu SQL. Crearemos una función que:
Comencemos con algunos datos de ejemplo que contienen direcciones IPv4 e IPv6.
A continuación, definiremos y registraremos nuestra UDTF. Observa la estructura de la clase Python:
Ahora que nuestro ip_cidr_matcher está registrado en Unity Catalog, podemos llamarlo directamente desde SQL usando la sintaxis TABLE(). Es tan simple como consultar una tabla normal.
Esto produce:
| log_id | ip_address | network | ip_version |
|---|---|---|---|
| log1 | 192.168.1.100 | 192.168.0.0/16 | 4 |
| log2 | 10.0.0.5 | 10.0.0.0/8 | 4 |
| log3 | 172.16.0.10 | 172.16.0.0/12 | 4 |
| log4 | 8.8.8.8 | null | 4 |
| log5 | 2001:db8::1 | 2001:db8::/32 | 6 |
| log6 | 2001:db8:85a3::8a2e:370:7334 | 2001:db8::/32 | 6 |
| log7 | fe80::1 | fe80::/10 | 6 |
| log8 | ::1 | ::1/128 | 6 |
| log9 | 2001:db8:1234:5678::1 | 2001:db8::/32 | 6 |
Este ejemplo detalla la configuración y el uso de una UDTF de Python de UC para la generación de subtítulos de imágenes por lotes utilizando los puntos de conexión de servicio de modelos de visión de Databricks. Primero, creamos una tabla que contiene URL de imágenes públicas de Wikimedia Commons:
Esta tabla contiene 4 imágenes de ejemplo: un paseo marítimo en la naturaleza, una foto macro de una hormiga, un gato y una galaxia.
Y luego creamos una UDTF de Python de UC para generar subtítulos de imágenes.
Tenga en cuenta que debe reemplazar <workspace-url> con la URL real de su espacio de trabajo de Databricks (por ejemplo, https://your-workspace.cloud.databricks.com).
Para usar la UDTF de subtítulos de imágenes por lotes, simplemente llámela con la tabla de imágenes de ejemplo: Tenga en cuenta que debe reemplazar your_secret_scope y api_token con el ámbito secreto real y el nombre de la clave para el token de la API de Databricks
El resultado es:
| caption |
| Wooden boardwalk cutting through vibrant wetland grasses under blue skies |
| Black ant in detailed macro photography standing on a textured surface |
| Tabby cat lounging comfortably on a white ledge against a white wall |
| Stunning spiral galaxy with bright central core and sweeping blue-white arms against the black void of space. |
También puedes generar subtítulos de imágenes categoría por categoría:
El resultado es:
| caption |
| Black ant in detailed macro photography standing on a textured surface |
| Stunning spiral galaxy with bright center and sweeping blue-tinged arms against the black of space. |
| Tabby cat lounging comfortably on white ledge against white wall |
| Wooden boardwalk cutting through lush wetland grasses under blue skies |
Estamos trabajando activamente para extender las UDTF de Python con características aún más potentes y de alto rendimiento, que incluyen:
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
