Einführung in Routinen
In diesem Dokument wird beschrieben, wie Sie eine Routine auswählen. Routinen sind Ressourcentypen, mit denen Sie Funktionen oder gespeicherte Prozeduren in BigQuery erstellen.
Unterstützte Routinen
BigQuery unterstützt die folgenden Routinen:
- Benutzerdefinierte Funktionen (User-Defined Functions, UDFs)
- Benutzerdefinierte Aggregatfunktionen (User-Defined Aggregate Functions, UDAFs)
- Tabellenfunktionen
- Remote-Funktionen
- Gespeicherte Prozeduren
Ablauf auswählen
In diesem Abschnitt werden Faktoren beschrieben, die bei der Auswahl einer Routine zu berücksichtigen sind. Außerdem werden Routinen nach Aufgabe verglichen.
Zu berücksichtigende Faktoren
Berücksichtigen Sie bei der Auswahl eines Ablaufs die folgenden Faktoren, die in den Abschnitten für die einzelnen Ablaufarten beschrieben werden:
- Der Typ der zu implementierenden Aufgabe.
- Die zu verwendende Programmiersprache.
- Der Typ der Persistenz, die für die Routine implementiert werden soll: vorübergehend oder dauerhaft.
- Die Art der Wiederverwendung, die für die Routine erforderlich ist: für eine einzelne oder mehrere Anfragen.
- Hinweise zur Leistung
- Auf externe Dienste zugreifen
- Routinen für Nutzer freigeben
Routinen nach Aufgabe vergleichen
In der folgenden Tabelle sehen Sie, welche Arten von Aufgaben Sie für die einzelnen Routinetypen ausführen können:
Aufgabe |
Ressourcentyp für Routinen |
|---|---|
Funktionen erstellen, die Aufgaben für allgemeine Zwecke in BigQuery ausführen. |
SQL- oder JavaScript-UDF SQL- oder JavaScript-UDAF |
Erstellen Sie Funktionen, die allgemeine Aufgaben in BigQuery ausführen und über eine Cloud-Ressourcenverbindung mit externen Google Cloud Systemen kommunizieren. |
Python-UDF |
Funktionen zum Aggregieren von Daten erstellen |
UDAFs |
Tabelle mit Parametern erstellen |
Tabellenfunktionen |
Funktionen erstellen, die Sprachen, Bibliotheken oder Dienste verwenden, die in BigQuery nicht unterstützt werden. Diese Funktionen lassen sich direkt in Cloud Run Functions und Cloud Run einbinden. |
Remote-Funktionen |
Mehrere Anweisungen in einer Abfrage als Abfrage mit mehreren Anweisungen mithilfe einer prozeduralen Sprache ausführen. Sie können eine Abfrage mit mehreren Anweisungen in folgenden Fällen verwenden:
Gespeicherte Prozeduren für Apache Spark in BigQuery erstellen und aufrufen. |
Gespeicherte Prozeduren |
Nutzerdefinierte Funktionen (UDFs)
Mit einer UDF können Sie eine Funktion mit einem SQL-Ausdruck, JavaScript-Code oder Python-Code erstellen. UDFs akzeptieren Eingabespalten, führen Aktionen für die Eingabe aus und geben das Ergebnis dieser Aktionen als Wert zurück.
UDFs können als persistent oder temporär definiert werden. Sie können persistente UDFs für mehrere Abfragen verwenden, temporäre UDFs jedoch nur für eine einzelne Abfrage.
Sie können UDFs für die Verwendung mit benutzerdefinierten Maskierungsroutinen erstellen, die den Wert einer Spalte zurückgeben, nachdem eine UDF auf die Spalte angewendet wurde. Nachdem Sie die benutzerdefinierte Maskierungsroutine erstellt haben, ist sie unter Datenrichtlinien erstellen als Maskierungsregel verfügbar.
Weitere Informationen zu nutzerdefinierten Funktionen finden Sie in den folgenden Ressourcen:
- Benutzerdefinierte Funktionen
- Benutzerdefinierte Funktionen in Legacy-SQL
- UDFs und UDAFs vergleichen
Sprachbasierte UDFs
- SQL-basierte UDFs unterstützen Vorlagen-UDF-Parameter, die bei einem UDF-Aufruf mit mehr als einem Argumenttyp übereinstimmen können. SQL-UDFs können auch den Wert einer skalaren Unterabfrage zurückgeben.
- Mit JavaScript-basierten UDFs können Sie in JavaScript geschriebenen Code aus einer SQL-Abfrage aufrufen.
- JavaScript-UDFs nutzen normalerweise mehr Slot-Ressourcen im Vergleich zu Standard-SQL-Abfragen, wodurch die Jobleistung sich verringert.
- Wenn die Funktion in SQL ausgedrückt werden kann, ist es oft besser, den Code als Standard-SQL-Abfragejob auszuführen.
- Python-basierte UDFs werden auf von BigQuery verwalteten Ressourcen erstellt und ausgeführt. Mit diesen UDFs können Sie eine Funktion in Python implementieren und in einer SQL-Abfrage verwenden.
- Sie können über das Dienstkonto der Cloud-Ressourcenverbindung von einer Python-UDF aus auf einen Google Cloud -Dienst oder einen externen Dienst zugreifen.
- Sie können auch Drittanbieterbibliotheken aus dem Python Package Index (PyPI) installieren.
Von der Community beigesteuerte UDFs
Zusätzlich zu den von Ihnen erstellten UDFs sind von der Community bereitgestellte UDFs im öffentlichen Dataset bigquery-public-data.persistent_udfs und im Open Source bigquery-utils GitHub-Repository verfügbar.
Benutzerdefinierte Aggregatfunktionen (User-Defined Aggregate Functions, UDAFs)
Mit einem UDAF können Sie mithilfe eines Ausdrucks, der SQL- oder JavaScript-Code enthält, eine Aggregatfunktion erstellen. Ein UDAF akzeptiert Eingabespalten, führt eine Berechnung für jeweils eine Gruppe von Zeilen durch und gibt dann das Ergebnis dieser Berechnung als einzelnen Wert zurück.
UDAFs können keine Daten mutieren, nicht mit externen Systemen kommunizieren oder Logs an Google Cloud Observability oder ähnliche Anwendungen senden.
Weitere Informationen finden Sie in den folgenden Ressourcen:
SQL-UDAFs
SQL-UDAFs aggregieren normalerweise Funktionsparameter über alle Zeilen in einer Gruppe.
Sie können einen Funktionsparameter jedoch mit dem Keyword NOT AGGREGATE als nicht aggregiert angeben. Ein Funktionsparameter ohne Aggregatfunktion ist ein skalarer Funktionsparameter mit einem konstanten Wert für alle Zeilen in einer Gruppe. SQL-UDAFs können sowohl zusammengefasste als auch nicht zusammengefasste Parameter enthalten.
JavaScript-UDAFs
JavaScript-UDAFs können JavaScript-Bibliotheken enthalten. Der JavaScript-Funktionsrumpf kann benutzerdefinierten JavaScript-Code wie globale JavaScript-Variablen und benutzerdefinierte Funktionen enthalten.
Da JavaScript-basierte Funktionen in der Regel mehr Ressourcen verbrauchen, kann es hilfreich sein, sich diese Leistungstipps anzusehen.
Für JavaScript-UDAFs gelten einige Einschränkungen. Es sind nur bestimmte Typencodierungen zulässig und es gibt Anforderungen für die Serialisierung und Deserialisierung.
UDFs und UDAFs vergleichen
Ob Sie eine UDF oder eine UDAF auswählen, hängt von der jeweiligen Aufgabe ab, die Sie ausführen möchten.
- Wenn Sie eine Berechnung oder Transformation für einzelne Datenwerte ausführen möchten, verwenden Sie eine UDF.
- Wenn Sie dasselbe für Gruppen von Datenwerten tun möchten, verwenden Sie eine UDAF.
Wenn Sie beispielsweise den Durchschnitt einer Spalte mit Zahlen berechnen möchten, verwenden Sie eine UDAF. Wenn Sie eine Spalte mit Strings in Großbuchstaben umwandeln möchten, verwenden Sie eine benutzerdefinierte Funktion.
UDFs und UDAFs haben folgende Gemeinsamkeiten:
- UDFs und UDAFs können keine Daten mutieren, nicht mit externen Systemen kommunizieren oder Logs an Google Cloud Observability oder ähnliche Anwendungen senden. Eine Ausnahme bilden Python-UDFs, die über eine Cloud-Ressourcenverbindung auf externe Dienste zugreifen können. Python-UDFs unterstützen jedoch keine VPC Service Controls oder kundenverwalteten Verschlüsselungsschlüssel (CMEK).
- Für UDAFs gelten dieselben Einschränkungen wie für UDFs, plus einige weitere.
- Für UDFs und UDAFs gelten dieselben Kontingente und Limits.
UDFs und UDAFs unterscheiden sich in folgenden Punkten:
Attribut |
Nutzerdefinierte Funktionen |
UDAFs |
|---|---|---|
Definition |
Benutzerdefinierte Funktionen (UDFs) akzeptieren Eingabespalten, führen Aktionen für die Eingabe aus und geben das Ergebnis dieser Aktionen als Wert zurück. |
Benutzerdefinierte Aggregatfunktionen (UDAFs) akzeptieren Eingabespalten, führen eine Berechnung für jeweils eine Gruppe von Zeilen durch und geben dann das Ergebnis dieser Berechnung als einzelnen Wert zurück. |
Unterstützte Sprachen |
SQL, JavaScript und Python |
SQL und JavaScript |
Persistenz |
|
|
Argumente und Datentypen |
UDFs akzeptieren Parameterwerte, die den Datentypen von GoogleSQL for BigQuery entsprechen. Einige SQL-Typen haben eine direkte Zuordnung zu JavaScript-Typen, andere dagegen nicht. Unterstützte Typen für JavaScript Bei einer SQL-UDF können Parameterwerte Nur JavaScript-UDFs haben einen Determinismus-Spezifizierer, der BigQuery darauf hinweist, ob das Abfrageergebnis im Cache gespeichert werden kann. |
SQL- und JavaScript-UDAFs akzeptieren Parameterwerte, die den Datentypen von GoogleSQL for BigQuery entsprechen. Funktionsparameter können aggregiert oder nicht aggregiert sein. |
Nutzung |
UDFs werden häufig für die Datenbereinigung, ‑transformation und ‑validierung verwendet. |
UDAFs werden häufig verwendet, um zusammenfassende Statistiken wie Durchschnittswerte, Summen und Anzahlen zu berechnen. |
Tabellenfunktionen
Eine Tabellenfunktion, auch als Tabellenwertfunktion (Table-valued Function, TVF) bezeichnet, ist eine UDF, die eine Tabelle zurückgibt. Eine Tabellenfunktion kann überall dort verwendet werden, wo Sie eine Tabelle nutzen. Tabellenfunktionen verhalten sich ähnlich wie Ansichten, können aber auch Parameter verwenden.
Mit Tabellenfunktionen haben Sie folgende Möglichkeiten:
- Mehrere Parameter übergeben
- Sie können eine Tabellenfunktion in jedem Kontext aufrufen, in dem eine Tabelle gültig ist.
- Die Ausgabe einer Tabellenfunktion mit einer anderen Tabelle verbinden
- Verwenden Sie eine Tabellenfunktion in einer Unterabfrage.
Weitere Informationen zu Tabellenfunktionen finden Sie unter Tabellenfunktionen, Einschränkungen und Kontingente und Limits.
Remote-Funktionen
Mit Remote-Funktionen können Sie Ihre Funktion in anderen Sprachen als SQL und JavaScript implementieren oder Bibliotheken oder Dienste verwenden, die in BigQuery-UDFs nicht unterstützt werden.
Eine BigQuery-Remote-Funktion integriert Ihre GoogleSQL-Funktion mit Cloud Run-Funktionen und Cloud Run in einer beliebigen unterstützten Sprache und ruft diese Funktionen dann über GoogleSQL-Abfragen auf.
Im Folgenden finden Sie Beispiele für Aufgaben, die Sie mit Remotefunktionen ausführen können:
Das Erstellen einer Remote-Funktion umfasst die folgenden Schritte:
- Erstellen Sie den HTTP-Endpunkt in Cloud Run-Funktionen oder Cloud Run.
- Erstellen Sie eine Remote-Funktion in BigQuery mit dem Verbindungstyp
CLOUD_RESOURCE. - Sie können die Remote-Funktion in einer Abfrage wie jede andere benutzerdefinierte Funktion für BigQuery verwenden.
Weitere Informationen zu Remote-Funktionen finden Sie unter Remote-Funktionen, Einschränkungen und Kontingente und Limits.
Gespeicherte Prozeduren
Eine gespeicherte SQL-Prozedur ist eine Sammlung von Anweisungen, die von anderen Abfragen oder gespeicherten Prozeduren aufgerufen werden können. Prozeduren werden in einem BigQuery-Dataset benannt und gespeichert.
Gespeicherte Prozeduren unterstützen prozedurale Sprachanweisungen, mit denen Sie Variablen definieren und Ablaufsteuerung implementieren können. Weitere Informationen zu prozeduralen Sprachanweisungen finden Sie in der Referenz zu prozeduralen Sprachen.
Eine gespeicherte Prozedur kann Folgendes ausführen:
- Eingabeargumente annehmen und Werte als Ausgabe zurückgeben.
- Auf Daten in mehreren Datasets von mehreren Nutzern zugreifen oder diese ändern.
- Sie enthalten eine Abfrage mit mehreren Anweisungen.
Einige gespeicherte Prozeduren sind in BigQuery eingebunden und müssen nicht erstellt werden. Diese werden als Systemprozeduren bezeichnet. Weitere Informationen dazu finden Sie in der Referenz zu Systemprozeduren.
Gespeicherte Prozeduren für Spark in BigQuery werden ebenfalls unterstützt. Für diese Verfahren gelten Kontingente und Limits.
Weitere Informationen zu gespeicherten Prozeduren finden Sie unter Gespeicherte SQL-Prozeduren.