Einführung in Abläufe
In diesem Dokument wird beschrieben, wie Sie eine Routine auswählen. Dies ist ein Ressourcentyp, mit dem Sie Funktionen oder gespeicherte Verfahren in BigQuery erstellen.
Unterstützte Abläufe
BigQuery unterstützt die folgenden Routinen:
- Benutzerdefinierte Funktionen (UDFs)
- Benutzerdefinierte Aggregationsfunktionen (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 einer Routine die folgenden Faktoren, die in den Abschnitten für die einzelnen Arten von Abläufen beschrieben werden:
- Die Art der Aufgabe, die implementiert werden soll.
- Die zu verwendende Programmiersprache.
- Die Art der Persistenz, die für die Routine implementiert werden soll: vorübergehend oder dauerhaft.
- Die Art der Wiederverwendung, die für den Ablauf erforderlich ist: für einzelne oder mehrere Abfragen.
- Leistungsaspekte
- Zugriff auf externe Dienste
- Die Routine mit Nutzern teilen
Abläufe nach Aufgabe vergleichen
In der folgenden Tabelle sehen Sie, welche Aufgaben Sie für jeden Ablauftyp ausführen können:
Aufgabe |
Ressourcentyp für Abläufe |
---|---|
Funktionen erstellen, die allgemeine Aufgaben in BigQuery ausführen |
SQL- oder JavaScript-UDF SQL- oder JavaScript-UDAF |
Funktionen erstellen, 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 mithilfe von 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 |
Mithilfe einer prozeduralen Sprache mehrere Anweisungen in einer Abfrage als Abfrage mit mehreren Anweisungen ausführen. Mit einer Abfrage mit mehreren Anweisungen können Sie Folgendes tun:
Gespeicherte Prozeduren für Apache Spark in BigQuery erstellen und aufrufen |
Gespeicherte Prozeduren |
Nutzerdefinierte Funktionen (UDFs)
Mit einer benutzerdefinierten Funktion (User-defined Function, 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 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 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 das Dienstkonto für Cloud-Ressourcenverbindungen auf einen Google Cloud Dienst oder einen externen Dienst zugreifen.
- Sie können auch Bibliotheken von Drittanbietern über den Python Package Index (PyPI) installieren.
Von der Community erstellte 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 Aggregationsfunktionen (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 Beobachtbarkeit 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-UDFs
JavaScript-UDAFs können JavaScript-Bibliotheken enthalten. Der JavaScript-Funktionskörper kann benutzerdefinierten JavaScript-Code enthalten, z. B. globale JavaScript-Variablen und benutzerdefinierte Funktionen.
Da JavaScript-basierte Funktionen in der Regel mehr Ressourcen verbrauchen, können die Leistungstipps hilfreich sein.
Für Javascript-UDAFs gelten einige Einschränkungen. Es sind nur bestimmte Codierungstypen zulässig und es gelten Anforderungen an die Serialisierung und Deserialisierung.
UDFs und UDAFs vergleichen
Ob Sie eine UDF oder eine UDAF verwenden, hängt von der Aufgabe ab, die Sie ausführen möchten.
- Wenn Sie eine Berechnung oder Transformation auf einzelne Datenwerte ausführen möchten, verwenden Sie eine UDF.
- Wenn Sie dies 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 konvertieren möchten, verwenden Sie eine UDF.
UDFs und UDAFs weisen folgende Ähnlichkeiten auf:
- UDFs und UDAFs können keine Daten mutieren, nicht mit externen Systemen kommunizieren oder Logs an Google Cloud Beobachtbarkeit 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 und keine vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK).
- Für UDAFs gelten die gleichen Einschränkungen wie für UDFs sowie 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 (User-Defined Aggregate Functions, 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 GoogleSQL-konform sind für BigQuery-Datentypen. Einige SQL-Typen haben eine direkte Zuordnung zu JavaScript-Typen, andere dagegen nicht. Weitere Informationen finden Sie unter Unterstützte Typen für JavaScript. Bei einer SQL-UDF können Parameterwerte Nur JavaScript-UDFs haben eine Determinismusangabe, die 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 zum Berechnen von zusammenfassenden Statistiken wie Mittelwerten, Summen und Zählungen verwendet. |
Tabellenfunktionen
Eine Tabellenfunktion, auch als Tabellenwertfunktion (Table-valued Function, TVF) bezeichnet, ist eine benutzerdefinierte Funktion, 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.
- Verknüpfen Sie die Ausgabe einer Tabellenfunktion mit einer anderen Tabelle.
- 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 wird Ihre Google SQL-Funktion mit Cloud Run-Funktionen und Cloud Run in einer beliebigen unterstützten Sprache eingebunden und dann über Google SQL-Abfragen aufgerufen.
Die folgenden Aufgaben sind Beispiele für die Verwendung von Remotefunktionen:
So erstellen Sie eine Remote-Funktion:
- 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 alle anderen benutzerdefinierten Funktionen für BigQuery verwenden.
Weitere Informationen zu Remote-Funktionen finden Sie unter Remote-Funktionen, Einschränkungen und Kontingente und Limits.
Gespeicherte Prozeduren
Eine SQL-gespeicherte Prozedur ist eine Sammlung von Anweisungen, die von anderen Abfragen oder anderen gespeicherten Prozeduren aufgerufen werden können. Prozeduren werden in einem BigQuery-Dataset benannt und gespeichert.
Gespeicherte Prozeduren unterstützen prozedurale Sprachanweisungen, mit denen Sie beispielsweise Variablen definieren und die Ablaufsteuerung implementieren können. Weitere Informationen zu prozeduralen Sprachanweisungen finden Sie in der Referenz zu prozeduralen Sprachen.
Mit einer gespeicherten Prozedur können Sie Folgendes tun:
- Sie können Eingabeargumente annehmen und Werte als Ausgabe zurückgeben.
- Mehrere Nutzer können auf Daten in mehreren Datensätzen 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 SQL-gespeicherte Prozeduren.