Le UDF Python consentono di creare un livello di astrazione di logica personalizzata per semplificare la costruzione delle query. Ma cosa succede se si desidera applicare una logica complessa, come l'esecuzione di un modello di grandi dimensioni o il rilevamento efficiente di pattern tra le righe della tabella?
In precedenza abbiamo introdotto le User-Defined Table Functions (UDTF) Python con ambito di sessione per supportare una logica di query personalizzata più potente. Le UDTF consentono di eseguire logica Python robusta e stateful su intere tabelle, rendendo semplice risolvere problemi normalmente difficili in puro SQL.
Elabora in modo flessibile qualsiasi set di dati
La parola chiave dichiarativa TABLE() consente di inviare qualsiasi tabella, vista o anche una sottoquery dinamica direttamente alla tua UDTF. Questo trasforma la tua funzione in un blocco di costruzione potente e riutilizzabile per qualsiasi porzione dei tuoi dati. Puoi anche usare PARTITION BY, ORDER BY e WITH SINGLE PARTITION per partizionare la tabella di input in sottoinsiemi di righe da elaborare da chiamate di funzione indipendenti direttamente all'interno della tua funzione Python.
Esegui inizializzazioni pesanti solo una volta per partizione
Con una UDTF, puoi eseguire codice di configurazione costoso, come il caricamento di un modello ML di grandi dimensioni o un file di riferimento di grandi dimensioni, solo una volta per ogni partizione di dati, non per ogni singola riga.
Mantieni il contesto tra le righe
Le UDTF possono mantenere stati da una riga all'altra all'interno di una partizione. Questa capacità unica abilita analisi avanzate come il rilevamento di pattern di serie temporali e calcoli complessi in esecuzione.
Ancora meglio, quando le UDTF sono definite in Unity Catalog (UC), queste funzioni sono accessibili, individuabili ed eseguibili da chiunque disponga delle autorizzazioni appropriate. In breve, scrivi una volta e esegui ovunque.
Siamo entusiasti di annunciare che le UDTF Python di UC sono ora disponibili in anteprima pubblica con Databricks Runtime 17.3 LTS, Databricks SQL e notebook e job serverless.
In questo blog, discuteremo alcuni casi d'uso comuni delle UDTF Python di UC con esempi e spiegheremo come puoi utilizzarle nel tuo data pipeline.
Ma prima, perché le UDTF con UC?
Implementa una volta in puro Python e chiamala da qualsiasi luogo tra sessioni e workspace
Scrivi la tua logica in una classe Python standard e chiama le UDTF Python da warehouse SQL (con Databricks SQL Pro e Serverless), cluster Standard e Dedicated UC e pipeline dichiarative Lakeflow.
Individua utilizzando tabelle di sistema o Catalog Explorer
Concedi e revoca le autorizzazioni per le UDTF Python
Iniziamo con un problema comune di data engineering: la corrispondenza degli indirizzi IP con un elenco di blocchi CIDR di rete (ad esempio, per identificare il traffico dalle reti interne). Questo compito è scomodo in SQL standard, poiché manca di funzioni integrate per la logica e i pacchetti CIDR.
Le UDTF Python di UC rimuovono questo attrito. Consentono di portare le ricche librerie e gli algoritmi di Python direttamente nel tuo SQL. Costruiremo una funzione che:
Iniziamo con alcuni dati di esempio contenenti indirizzi IPv4 e IPv6.
Successivamente, definiremo e registreremo la nostra UDTF. Nota la struttura della classe Python:
Ora che la nostra ip_cidr_matcher è registrata in Unity Catalog, possiamo chiamarla direttamente da SQL utilizzando la sintassi TABLE(). È semplice come interrogare una tabella normale.
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 |
Questo esempio illustra la configurazione e l'utilizzo di una UDTF Python di UC per la didascalia di immagini in batch utilizzando gli endpoint di serving dei modelli di visione di Databricks. Per prima cosa, creiamo una tabella contenente URL di immagini pubblici da Wikimedia Commons:
Questa tabella contiene 4 immagini di esempio: una passerella naturalistica, una macrofotografia di una formica, un gatto e una galassia.
E quindi creiamo una UDTF Python di UC per generare didascalie per le immagini.
Nota: sostituisci <workspace-url> con l'URL effettivo della tua area di lavoro Databricks (ad esempio, https://your-workspace.cloud.databricks.com).
Per utilizzare la UDTF batch per didascalie di immagini, chiamala semplicemente con la tabella di immagini di esempio: Nota: sostituisci your_secret_scope e api_token con l'effettivo scope del segreto e il nome della chiave per il token API di Databricks
L'output è:
| 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. |
Puoi anche generare didascalie di immagini categoria per categoria:
L'output è:
| 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 |
Stiamo lavorando attivamente per estendere le UDTF Python con funzionalità ancora più potenti e performanti, tra cui:
(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale
