Einführung in Abläufe
Wenn Sie Routinen in BigQuery erstellen, können Sie komplexe Logik mithilfe von wiederverwendbaren Funktionen und gespeicherten Prozeduren kapseln. Wenn Sie die richtige Routine für Ihre Arbeitslast auswählen, können Sie Daten effizient aggregieren, Verwaltungsaufgaben automatisieren und externe Dienste direkt über Ihre Abfragen einbinden.
Unterstützte Abläufe
BigQuery unterstützt die folgenden Routinen:
- Benutzerdefinierte Funktionen (UDFs)
- Benutzerdefinierte Aggregatfunktionen (UDAFs)
- Tabellenfunktionen
- Remote-Funktionen
- Gespeicherte Prozeduren
Ablauf auswählen
In diesem Abschnitt werden Faktoren beschrieben, die Sie bei der Auswahl einer Routine berücksichtigen sollten. Außerdem werden Routinen nach Aufgabe verglichen.
Zu berücksichtigende Faktoren
Berücksichtigen Sie bei der Auswahl einer Routine die folgenden Faktoren, die in den Abschnitten für die einzelnen Routinentypen beschrieben werden:
- Der Typ der zu implementierenden Aufgabe.
- Die zu verwendende Programmiersprache.
- Der Typ der Persistenz, der für die Routine implementiert werden soll: temporär oder persistent.
- Die Art der Wiederverwendung, die für die Routine erforderlich ist: für einzelne oder mehrere Abfragen.
- Hinweise zur Leistung
- Auf externe Dienste zugreifen
- Ablauf für Nutzer freigeben
Abläufe nach Aufgabe vergleichen
In der folgenden Tabelle sind die Arten von Aufgaben aufgeführt, die Sie für die einzelnen Abläufe ausführen können:
Aufgabe |
Ressourcentyp „Routine“ |
|---|---|
Funktionen für allgemeine Zwecke in BigQuery erstellen |
SQL- oder JavaScript-UDF SQL- oder JavaScript-UDAF |
Erstellen Sie Funktionen, die Aufgaben für allgemeine Zwecke in BigQuery ausführen und über eine Cloud-Ressourcenverbindung mit externen Google Cloud -Systemen kommunizieren. |
Python-UDF |
Funktionen erstellen, die Daten aggregieren |
UDAFs |
Tabelle mit Parametern erstellen |
Tabellenfunktionen |
Funktionen erstellen, die Sprachen, Bibliotheken oder Dienste verwenden, die in BigQuery nicht unterstützt werden. Diese Funktionen sind direkt in Cloud Run Functions und Cloud Run eingebunden. |
Remote-Funktionen |
Mehrere Anweisungen in einer einzigen Abfrage als Abfrage mit mehreren Anweisungen mithilfe der prozeduralen Sprache ausführen. Sie können eine Abfrage mit mehreren Anweisungen für Folgendes 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. Persistente UDFs können Sie 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 UDFs finden Sie in den folgenden Ressourcen:
- Benutzerdefinierte Funktionen
- Benutzerdefinierte Funktionen in Legacy-SQL
- UDFs und UDAFs vergleichen
Sprachbasierte UDFs
- SQL-basierte UDFs unterstützen UDF-Vorlagenparameter, die beim Aufruf der UDF 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 eine Python-UDF mit dem Dienstkonto für die Cloud-Ressourcenverbindung 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 bereitgestellte 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 (UDAFs)
Mit einer UDAF können Sie mithilfe eines Ausdrucks, der SQL- oder JavaScript-Code enthält, eine Aggregatfunktion erstellen. Eine 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 aggregierte als auch nicht aggregierte Parameter enthalten.
JavaScript-UDAFs
JavaScript-UDAFs können JavaScript-Bibliotheken enthalten. Der JavaScript-Funktionstext 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, diese Leistungstipps zu lesen.
Für JavaScript-UDAFs gelten einige Einschränkungen. Es sind nur bestimmte Typcodierungen 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.
- Verwenden Sie eine UDF, um eine Berechnung oder Transformation für einzelne Datenwerte auszuführen.
- Wenn Sie dasselbe für Gruppen von Datenwerten tun möchten, verwenden Sie eine UDAF.
Wenn Sie beispielsweise den Durchschnitt einer Zahlenspalte berechnen möchten, verwenden Sie eine UDAF. Wenn Sie eine Spalte mit Strings in Großbuchstaben umwandeln möchten, verwenden Sie eine UDF.
UDFs und UDAFs haben die folgenden Ähnlichkeiten:
- 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 sind 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 die gleichen 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 |
UDFs |
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 GoogleSQL for BigQuery-Datentypen entsprechen. Einige SQL-Typen haben eine direkte Zuordnung zu JavaScript-Typen, andere dagegen nicht. Siehe Unterstützte Typen für JavaScript. Bei einer SQL-UDF können Parameterwerte Nur JavaScript-UDFs haben einen Determinismus-Spezifizierer, der BigQuery einen Hinweis darauf gibt, ob das Abfrageergebnis im Cache gespeichert werden kann. |
SQL- und JavaScript-UDAFs akzeptieren Parameterwerte, die den GoogleSQL for BigQuery-Datentypen 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 zur Berechnung von zusammenfassenden Statistiken wie Durchschnittswerten, Summen und Anzahlen verwendet. |
Tabellenfunktionen
Eine Tabellenfunktion, auch als Tabellenwertfunktion (TVF) bezeichnet, ist eine UDF, die eine Tabelle zurückgibt. Sie können eine Tabellenfunktion überall dort verwenden, wo Sie eine Tabelle verwenden können. Tabellenfunktionen verhalten sich ähnlich wie Ansichten, können aber auch Parameter verwenden.
Mit Tabellenfunktionen können Sie Folgendes tun:
- 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 verknüpfen.
- 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.
Mit einer BigQuery-Remote-Funktion können Sie Ihre Google SQL-Funktion in Cloud Run-Funktionen und Cloud Run einbinden. Dabei können Sie eine beliebige unterstützte Sprache verwenden und diese Funktionen dann über Google SQL-Abfragen aufrufen.
Die folgenden Aufgaben sind Beispiele dafür, was Sie mit Remote-Funktionen tun können:
Zum Erstellen einer Remote-Funktion sind die folgenden Schritte erforderlich:
- Erstellen Sie den HTTP-Endpunkt in Cloud Run Functions 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 alle anderen UDFs 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 tun:
- Eingabeargumente annehmen und Werte als Ausgabe zurückgeben.
- Auf Daten in mehreren Datasets von mehreren Nutzern zugreifen oder diese ändern.
- Eine Abfrage mit mehreren Anweisungen enthalten.
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.
Abläufe mit KI-Agenten verwenden
Wenn Sie KI-Agenten erstellen, die mit BigQuery-Daten arbeiten, können die Agenten Routine-Metadaten aus dem Knowledge Catalog abrufen, einschließlich der Argumente, des Rückgabetyps und des Quellcodes der Routine, um zu verstehen, was eine Routine tut und wie sie aufgerufen wird. Weitere Informationen finden Sie unter Kontext für Routinen abrufen.