8 min read

Komplexität überbrücken: Migration von Hive UDFs zu BigQuery Remote Functions - Teil 1

Published on
February 20, 2024
Author
Csaba Kassai
Csaba Kassai
Head of Data
Subscribe to our newsletter
Subscribe
Komplexität überbrücken: Migration von Hive UDFs zu BigQuery Remote Functions - Teil 1

Im Bereich des Data Warehousing und der Analytik stellt der Übergang von traditionellen Plattformen wie Apache Hive zu modernen Cloud-Lösungen wie Google BigQuery oft eine besondere Herausforderung dar. In meinen früheren Beiträgen habe ich Ihnen anhand praktischer Beispiele gezeigt, wie Hive-UDFs, UDAFs und UDTFs mit SQL in BigQuery migriert werden können. In einigen Fällen reicht SQL nicht aus und wir müssen nach Alternativen suchen. Ein solcher Fall ist die Migration komplexer benutzerdefinierter Funktionen (UDFs), die nicht direkt in BigQuery-SQL übersetzt werden können. Dieser Beitrag befasst sich mit den Feinheiten der Migration einer Hive-UDF in eine BigQuery-Remote-Funktion und bietet eine Lösung, wenn native BigQuery-Optionen oder SQL-UDFs nicht das liefern, was erforderlich ist.

BigQuery-Remote-Funktionen

BigQuery Remote Functions stellen einen innovativen Sprung in der Datenverarbeitung dar und ermöglichen die Integration anspruchsvoller externer Berechnungen in SQL-Abfragen. Diese Funktion ist besonders wichtig für Szenarien, in denen die Komplexität der Datenoperationen die in BigQuery verfügbaren Funktionen übersteigt. Durch die Erleichterung von HTTP-Aufrufen zu Cloud Functions oder Cloud Run innerhalb von SQL-Abfragen bieten Remote Functions eine vielseitige Lösung für die Einbettung komplexer Logik, wie z. B. benutzerdefinierte Analysen, Modellvorhersagen für maschinelles Lernen oder dynamische Datenumwandlungen, direkt in Datenanalyse-Workflows.

Der Nutzen von Remote Functions erstreckt sich in erheblichem Maße auf den Bereich der Migration von Hive UDFs zu BigQuery, insbesondere für jene UDFs, die komplexe Logik kapseln, die nicht direkt in den SQL-Dialekt von BigQuery übersetzt werden kann. Diese Brücke zwischen BigQuery und externer Berechnungslogik stellt sicher, dass selbst die komplexesten Hive UDFs ein neues Zuhause im BigQuery-Ökosystem finden können, wobei die Integrität und Funktionalität bestehender Datenpipelines während der Migration erhalten bleibt.

Die Vorteile sind jedoch mit Abstrichen verbunden. Die Nutzung externer Dienste kann zu Latenzzeiten führen, die die Abfrageleistung beeinträchtigen. Außerdem kann der Aufwand für die Verwaltung dieser externen Endpunkte und die Gewährleistung ihrer Sicherheit die Verwaltung der Infrastruktur erschweren. Auch die mit externen Serviceaufrufen verbundenen Kosten und die potenzielle Erhöhung der Abfrageverarbeitungszeiten erfordern eine sorgfältige Planung und Optimierung. Trotz dieser Überlegungen können BigQuery Remote Functions, wenn sie mit Bedacht eingesetzt werden, den Übergang von Hive zu BigQuery erheblich erleichtern, da sie einen robusten Weg für die Migration komplexer UDFs bieten, ohne deren Funktionalität zu beeinträchtigen.

Beispiel: XML-Verarbeitung

Zur Veranschaulichung wollen wir eine Hive UDF verwenden, die XML-Dokumente analysiert, bestimmte Informationen extrahiert und diese Daten in ein strukturiertes Format umwandelt. Die Verarbeitung von XML-Dokumenten gehört nicht zu den nativen Funktionen von BigQuery, und es ist recht mühsam und manchmal unmöglich, die XML-Verarbeitung in SQL zu implementieren.

Hier ist ein einfaches Hive UDF-Beispiel, mit dem einige Informationen aus einem XML-Dokument extrahiert werden können:

Diese UDF, XmlProductInfoExtractorUDF, verwendet die XML-Parsing-Bibliotheken von Java, um Daten aus einer verschachtelten XML-Struktur auf der Grundlage von XPath-Ausdrücken zu navigieren und zu extrahieren. Die vollständige Java-Klasse finden Sie hier. (Disclaimer: Ich habe diese Hive-Funktion nicht getestet, sie dient nur zu Demonstrationszwecken)

Umstellung auf die BigQuery-Seite

Eine direkte Migration dieser Art von komplexer XML-Verarbeitungslogik in das native SQL von BigQuery ist aufgrund des Fehlens von XML-Parsing-Funktionen und des prozeduralen Charakters der betreffenden Verarbeitung nicht möglich. BigQuery unterstützt von Haus aus keine XPath-Abfragen oder ähnliche XML-Navigations- und Extraktionsmechanismen innerhalb seines SQL-Dialekts.

Der Hauptvorteil der Verwendung von BigQuery Remote Functions besteht darin, dass wir den Großteil des Java-Codes wiederverwenden können. Natürlich müssen wir den Hive-spezifischen Boilerplate-Code loswerden und durch das Cloud Functions-Framework ersetzen, aber die Kernverarbeitungslogik kann aufgehoben und verlagert werden. Dies verringert den erforderlichen Aufwand und das Risiko der Migration.

Hier ist eine mögliche Implementierung der Cloud Function, die die gleiche Funktionalität wie die Hive UDF bietet

Den vollständigen Quellcode finden Sie hier.

Die Klasse hat zwei Methoden: Die "Service"-Methode enthält die Boilerplate, die von Cloud Functions und dem BigQuery Remote Functions Framework benötigt wird. Es ist wichtig zu erwähnen, dass BigQuery diesen HTTP-Endpunkt mit mehreren Parametersätzen aufruft, BigQuery stapelt die Ausführung, um die Effizienz zu erhöhen. Die Methode "service" kümmert sich auch um diesen Aspekt, indem sie die Methode "process" für jeden Parametersatz aufruft.
Sie werden feststellen, dass die process-Methode der evaluate-Methode der Hive UDF sehr ähnlich ist, da der ursprüngliche Verarbeitungscode hierher verlagert wurde. Der einzige Unterschied besteht darin, dass der Typ der Eingaben und Ausgaben von den Hive-spezifischen Typen auf generische JSONn-Datentypen geändert wurde.

Nächster Punkt: Teil 2 - Testen und Bereitstellen der migrierten BQ Remote Function

Zum Abschluss unserer Erkundung der transformativen Reise der Migration von Hive UDFs zu BigQuery Remote Functions haben wir uns mit dem komplizierten Prozess des Rehousings komplexer XML-Parsing-Logik in der Cloud-nativen Architektur von BigQuery beschäftigt. Am Beispiel der XmlProductInfoExtractorUDF haben wir veranschaulicht, wie die Essenz anspruchsvoller Hive UDFs erhalten und an das BigQuery-Ökosystem angepasst werden kann, indem Google Cloud Functions genutzt wird, um den ursprünglichen Java-Code mit minimalen Anpassungen zu kapseln. Dieser strategische Ansatz mindert nicht nur die Migrationsrisiken, sondern vereinfacht auch den Übergangsprozess erheblich und stellt sicher, dass die fortschrittlichen Funktionalitäten von Hive UDFs in der skalierbaren und effizienten Umgebung von BigQuery weiterhin gedeihen.

Der nächste Beitrag in dieser Reihe wird Sie durch die praktischen Aspekte des Testens und Bereitstellens Ihrer neu erstellten BigQuery Remote Function führen. Wir werden die Grundlagen der Einrichtung eines robusten Test-Frameworks behandeln, um die Leistung und Genauigkeit der Funktion zu validieren, gefolgt von einer schrittweisen Anleitung zur Bereitstellung der Funktion, um eine nahtlose Integration in Ihre BigQuery-Workflows zu gewährleisten. Bleiben Sie dran, um diese wertvollen Einblicke zu erhalten, die Sie mit dem Wissen ausstatten, das Sie brauchen, um Ihre Datenverarbeitungsfähigkeiten in BigQuery auf ein neues Niveau zu heben.

Author
Csaba Kassai
Head of Data
Subscribe to our newsletter
Subscribe