Einführung in Routinen
In diesem Dokument wird beschrieben, wie Sie eine Routine auswählen. Eine Routine ist ein Ressourcentyp, mit dem Sie Funktionen oder gespeicherte Prozeduren in BigQuery erstellen können.
Unterstützte Routinen
BigQuery unterstützt die folgenden Routinen:
- Benutzerdefinierte Funktionen (UDFs)
- Benutzerdefinierte Aggregatfunktionen (UDAFs)
- Tabellenfunktionen
- Remote-Funktionen
- Gespeicherte Prozeduren
Routine auswählen
In diesem Abschnitt werden Faktoren beschrieben, die bei der Auswahl einer Routine berücksichtigt werden müssen. 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 Routinetypen beschrieben werden:
- Der Typ der zu implementierenden Aufgabe.
- Die zu verwendende Programmiersprache.
- Der Typ der für die Routine zu implementierenden Persistenz: temporär oder persistent.
- Der Typ der für die Routine erforderlichen Wiederverwendung: in einer oder mehreren Abfragen.
- Leistungsüberlegungen.
- Zugriff auf externe Dienste.
- Routine für Nutzer freigeben.
Routinen nach Aufgabe vergleichen
In der folgenden Tabelle sind die Arten von Aufgaben aufgeführt, die Sie für die einzelnen Routinetypen ausführen können:
Aufgabe |
Ressourcentyp der Routine |
|---|---|
Funktionen erstellen, die Aufgaben für allgemeine Zwecke in BigQuery ausführen. |
SQL- oder JavaScript-UDF SQL- oder JavaScript-UDAF |
Funktionen erstellen, 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 lassen sich direkt in Cloud Run Funktionen 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 |
Benutzerdefinierte 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 in mehreren Abfragen wiederverwendet werden, während temporäre UDFs nur im Rahmen einer einzelnen Abfrage vorhanden sind.
Sie können UDFs für die Verwendung mit benutzerdefinierten Maskierungsroutinen, die den Wert einer Spalte zurückgeben, nachdem eine UDF auf die Spalte angewendet wurde, erstellen. 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 Vorlagen-UDF-Parameter, die bei Aufruf der UDF mehr als einem Argumenttyp entsprechen 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 optimaler, 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 auf einen Google Cloud Dienst oder einen externen Dienst zugreifen.
- Sie können auch Bibliotheken von Drittanbietern aus dem Python Package Index (PyPI) installieren.
Von der Community bereitgestellte UDFs
Neben den von Ihnen erstellten UDFs sind von der Community bereitgestellte UDFs in
dem bigquery-public-data.persistent_udfs öffentlichen Dataset und im Open-Source
bigquery-utils GitHub-Repository verfügbar.
Benutzerdefinierte Aggregatfunktionen (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 aggregierte als auch nicht aggregierte 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, können diese Leistungstipps hilfreich sein.
Für JavaScript-UDAFs gelten einige Einschränkungen. Es sind nur bestimmte Typ codierungen zulässig, und es gibt Anforderungen für die Serialisierung und Deserialisierung.
UDFs und UDAFs vergleichen
Die Wahl zwischen einer UDF und einer UDAF hängt von der jeweiligen Aufgabe ab.
- Verwenden Sie eine UDF, um eine Berechnung oder Transformation für einzelne Datenwerte durchzuführen.
- Verwenden Sie eine UDAF, um dasselbe für Gruppen von Datenwerten zu tun.
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 UDF.
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 (Customer-Managed Encryption Keys, CMEK).
- Für UDAFs gelten dieselben Einschränkungen wie für UDFs sowie einige weitere.
- Für UDFs und UDAFs gelten dieselben Kontingente und Limits.
UDFs und UDAFs haben folgende Unterschiede:
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 Daten typen für BigQuery entsprechen. Einige SQL-Typen haben eine direkte Zuordnung zu JavaScript-Typen, andere 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-Datentypen für 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 Anzahl zu berechnen. |
Tabellenfunktionen
Eine Tabellenfunktion, auch Tabellenwertfunktion (Table-Valued Function, TVF) genannt, 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.
- Eine Tabellenfunktion in jedem Kontext aufrufen, in dem eine Tabelle gültig ist.
- Die Ausgabe einer Tabellenfunktion mit einer anderen Tabelle verknüpfen.
- Eine Tabellenfunktion in einer Unterabfrage verwenden.
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 aus GoogleSQL-Abfragen auf.
Die folgenden Aufgaben sind Beispiele für das, was Sie mit Remote-Funktionen tun können:
Zum Erstellen einer Remote-Funktion sind folgende Schritte erforderlich:
- Erstellen Sie den HTTP-Endpunkt in Cloud Run-Funktionen oder Cloud Run.
- Erstellen Sie in BigQuery eine Remote-Funktion mit dem Verbindungstyp
CLOUD_RESOURCE. - Verwenden Sie die Remote-Funktion in einer Abfrage wie jede andere UDF für BigQuery.
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 durch mehrere Nutzer 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 Prozeduren gelten Kontingente und Limits.
Weitere Informationen zu gespeicherten Prozeduren finden Sie unter Gespeicherte SQL Prozeduren.
Routinen mit KI-Agenten verwenden
Wenn Sie KI-Agenten erstellen, die mit BigQuery-Daten arbeiten, können die Agenten Routinenmetadaten aus Knowledge Catalog abrufen, einschließlich der Argumente, des Rückgabetyps und des Quellcodes der Routine. So können sie verstehen, was eine Routine tut und wie sie aufgerufen wird. Weitere Informationen finden Sie unter Kontext für Routinen abrufen.