8 min read

Konvertieren von Hive UDTFs in BigQuery: Eine praktische Anleitung mit BigQuery SQL und UNNEST

Published on
February 6, 2024
Author
Csaba Kassai
Csaba Kassai
Head of Data
Subscribe to our newsletter
Subscribe
Konvertieren von Hive UDTFs in BigQuery: Eine praktische Anleitung mit BigQuery SQL und UNNEST

In der sich entwickelnden Landschaft des Cloud-Data-Warehousing bringt die Migration von Apache Hive zu Google BigQuery zahlreiche Herausforderungen und Möglichkeiten mit sich, insbesondere wenn es um benutzerdefinierte Funktionen geht. Während in früheren Beiträgen dieser Serie die Migration von  Hive UDFs und  UDAFs zu BigQuery behandelt wurde, konzentriert sich dieser Teil auf benutzerdefinierte Tabellenfunktionen (UDTFs) und darauf, wie diese mit Hilfe der UDFs von BigQuery und dem UNNEST-Operator migriert werden können.

Die Herausforderung mit Hive UDTFs

Um es kurz zu machen: Hive UDTFs sind Funktionen, die für jede Eingabezeile mehrere Ausgabezeilen erzeugen. Dies ist ein wesentliches Merkmal, um Datensätze auf flexible Weise zu transformieren und zu erweitern. Eine UDTF kann zum Beispiel eine einzelne Zeile mit einer abgegrenzten Zeichenkette nehmen und sie in mehrere Zeilen mit einzelnen Split-Elementen erweitern. Weitere Informationen über die verschiedenen Arten von benutzerdefinierten Hive-Funktionen und ihren Migrationsansatz finden Sie hier.

Die Herausforderung dabei ist, dass BigQuery UDTFs nicht direkt unterstützt, so wie es Hive tut. Mit einer Kombination aus einer nativen oder einer benutzerdefinierten Funktion (UDF) und dem UNNEST-Operator kann jedoch eine ähnliche Funktionalität erreicht werden, die die Umwandlung und Erweiterung von Zeilen innerhalb der SQL-Umgebung von BigQuery ermöglicht.

Hive UDTF Beispiel: Split String mit Index

Diese UDTF nimmt eine Zeichenkette und ein Begrenzungszeichen als Eingabe und gibt jedes Element der geteilten Zeichenkette zusammen mit seinem Index in der ursprünglichen Zeichenkette aus.

Sie finden die vollständige Java-Klasse hier. (Disclaimer: Ich habe diese Hive-Funktion nicht getestet, sie dient nur zu Demonstrationszwecken)

Sie können diese Funktion in einer Hive-Abfrage wie folgt verwenden:

Wechsel auf die BigQuery-Seite

BigQuery bietet mit SQL UDFs und der UNNEST-Funktion eine leistungsstarke Alternative. Durch die Kombination dieser Funktionen können wir die zeilenerweiternden Fähigkeiten von Hive UDTFs imitieren. Die Migration der oben beschriebenen Hive UDFT erfolgt in zwei Schritten:

Schritt 1: Replizieren der Funktionalität mit BigQuery UDF

Wir beginnen mit der Erstellung einer SQL UDF, die die Eingabezeichenkette aufteilt und den Index jedes Elements speichert:

Diese UDF, SPLIT_STRING_WITH_INDEX, teilt die Eingabezeichenkette effizient in ein Array von Strukturen auf, die jeweils das geteilte Element (Teil) und den entsprechenden Index enthalten. Die vollständige Terraform-Version finden Sie hier.

Schritt 2: Erweitern des Arrays in Zeilen

Nachdem wir unsere UDF implementiert haben, besteht der nächste Schritt darin, das resultierende Array wieder in Zeilen zu erweitern, ähnlich wie bei der ursprünglichen UDTF-Funktionalität:

Hier entfaltet UNNEST in Kombination mit CROSS JOIN das von unserer UDF erzeugte Array in einzelne Zeilen, die jeweils das Element und seinen Index enthalten. Das Ergebnis sieht wie folgt aus: Sie können sehen, wie wir aus den 2 Eingabezeilen 7 Zeilen erzeugt haben:

Nächster Punkt: Umstellung auf BigQuery Remote Functions

Die Migration von Hive zu BigQuery erfordert ein Überdenken des Ansatzes für benutzerdefinierte Funktionen wie UDTFs. Durch die Nutzung der SQL UDFs und UNNEST von BigQuery können wir die Funktionalität von Hive UDTFs erfolgreich replizieren und einen reibungslosen Übergang zur skalierbaren und effizienten Data-Warehousing-Umgebung von BigQuery sicherstellen. Während wir uns weiterhin mit den Nuancen des Übergangs von Hive zu BigQuery beschäftigen, ist unsere Reise in den Bereich der Migration benutzerdefinierter Funktionen noch lange nicht zu Ende. Im nächsten Teil dieser Serie werden wir das spannende Gebiet der BigQuery Remote Functions erkunden. Anhand eines Arbeitsbeispiels werde ich zeigen, wie wir komplexere Hive UDFs durch die leistungsstarken Remote-Funktionen von BigQuery ersetzen können, und Einblicke in die Nutzung von Cloud-basierten Lösungen selbst für die kompliziertesten Datenverarbeitungsanforderungen geben. Bleiben Sie dran für weitere praktische Lösungen und Expertentipps zur Verbesserung Ihrer Datenmigrationsstrategie.

Author
Csaba Kassai
Head of Data
Subscribe to our newsletter
Subscribe