Python UDFs ermöglichen es Ihnen, eine Abstraktionsschicht benutzerdefinierter Logik zu erstellen, um die Abfrageerstellung zu vereinfachen. Aber was ist, wenn Sie komplexe Logik anwenden möchten, wie z. B. das Ausführen eines großen Modells oder das effiziente Erkennen von Mustern über Zeilen in Ihrer Tabelle hinweg?
Wir haben zuvor sitzungsbezogene Python User-Defined Table Functions (UDTFs) eingeführt, um leistungsfähigere benutzerdefinierte Abfrage-Logik zu unterstützen. UDTFs ermöglichen es Ihnen, robuste, zustandsbehaftete Python-Logik über ganze Tabellen auszuführen, wodurch es einfach wird, normalerweise schwierige Probleme in reinem SQL zu lösen.
Jeden Datensatz flexibel verarbeiten
Das deklarative Schlüsselwort TABLE() ermöglicht es Ihnen, jede Tabelle, Ansicht oder sogar eine dynamische Unterabfrage direkt in Ihre UDTF zu leiten. Dies macht Ihre Funktion zu einem leistungsstarken, wiederverwendbaren Baustein für jeden Teil Ihrer Daten. Sie können sogar PARTITION BY, ORDER BY und WITH SINGLE PARTITION verwenden, um die Eingabetabelle in Teilmengen von Zeilen zu partitionieren, die von unabhängigen Funktionsaufrufen direkt innerhalb Ihrer Python-Funktion verarbeitet werden.
Schwere Initialisierung nur einmal pro Partition ausführen
Mit einer UDTF können Sie teuren Setup-Code, wie das Laden eines großen ML-Modells oder einer großen Referenzdatei, nur einmal für jede Datenpartition ausführen, nicht für jede einzelne Zeile.
Kontext über Zeilen hinweg beibehalten
UDTFs können Zustände von einer Zeile zur nächsten innerhalb einer Partition beibehalten. Diese einzigartige Fähigkeit ermöglicht fortgeschrittene Analysen wie die Erkennung von Zeitreihenmustern und komplexe laufende Berechnungen.
Noch besser: Wenn UDTFs in Unity Catalog (UC) definiert sind, sind diese Funktionen für jeden mit entsprechendem Zugriff zugänglich, auffindbar und ausführbar. Kurz gesagt, Sie schreiben einmal und führen überall aus.
Wir freuen uns, Ihnen mitteilen zu können, dass UC Python UDTFs jetzt in Public Preview mit Databricks Runtime 17.3 LTS, Databricks SQL und Serverless Notebooks und Jobs verfügbar sind.
In diesem Blogbeitrag werden wir einige gängige Anwendungsfälle von UC Python UDTFs mit Beispielen diskutieren und erklären, wie Sie sie in Ihrer Datenpipeline verwenden können.
Aber zuerst: Warum UDTFs mit UC?
Einmal in reinem Python implementieren und von überall über Sitzungen und Arbeitsbereiche aufrufen
Schreiben Sie Ihre Logik in einer Standard-Python-Klasse und rufen Sie Python UDTFs von SQL-Warehouses (mit Databricks SQL Pro und Serverless), Standard- und dedizierten UC-Clustern sowie Lakeflow Declarative Pipelines auf.
Entdecken Sie sie über Systemtabellen oder den Catalog Explorer
Berechtigungen für Python UDTFs gewähren und entziehen
Beginnen wir mit einem gängigen Problem im Data Engineering: dem Abgleich von IP-Adressen mit einer Liste von Netzwerk-CIDR-Blöcken (z. B. um den Datenverkehr aus internen Netzwerken zu identifizieren). Diese Aufgabe ist in Standard-SQL umständlich, da es keine integrierten Funktionen für CIDR-Logik und Pakete gibt.
UC Python UDTFs beseitigen diese Hürden. Sie bringen die reichhaltigen Bibliotheken und Algorithmen von Python direkt in Ihr SQL. Wir erstellen eine Funktion, die:
Beginnen wir mit einigen Beispieldaten, die sowohl IPv4- als auch IPv6-Adressen enthalten.
Als Nächstes definieren und registrieren wir unsere UDTF. Beachten Sie die Python-Klassenstruktur:
Jetzt, da unser ip_cidr_matcher in Unity Catalog registriert ist, können wir ihn direkt aus SQL mit der TABLE()-Syntax aufrufen. Es ist so einfach wie das Abfragen einer regulären Tabelle.
Es gibt aus:
| 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 |
Dieses Beispiel führt durch die Einrichtung und Verwendung einer UC Python UDTF für die Stapelverarbeitung von Bildunterschriften mit Databricks Vision Model Serving Endpunkten. Zuerst erstellen wir eine Tabelle mit öffentlichen Bild-URLs von Wikimedia Commons:
Diese Tabelle enthält 4 Beispielbilder: einen Natur-Boardwalk, ein Makrofoto einer Ameise, eine Katze und eine Galaxie.
Und dann erstellen wir eine UC Python UDTF, um Bildunterschriften zu generieren.
Bitte beachten Sie, dass Sie <workspace-url> durch Ihre tatsächliche Databricks Workspace-URL ersetzen müssen (z. B. https://your-workspace.cloud.databricks.com).
Um die Batch-Image-Caption-UDTF zu verwenden, rufen Sie sie einfach mit der Beispieltabelle für Bilder auf: Bitte beachten Sie, dass Sie your_secret_scope und api_token durch den tatsächlichen Secret Scope und den Schlüsselnamen für das Databricks API-Token ersetzen müssen
Die Ausgabe ist:
| 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. |
Sie können auch Bildunterschriften Kategorie für Kategorie generieren:
Die Ausgabe ist:
| 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 |
Wir arbeiten aktiv daran, Python UDTFs um noch leistungsfähigere und performantere Funktionen zu erweitern, darunter:
(Dieser Blogbeitrag wurde mit KI-gestützten Tools übersetzt.) Originalbeitrag
