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:

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:

  • Mehrere Anweisungen in einer Abfolge mit gemeinsamem Status ausführen.
  • Verwaltungsaufgaben wie das Erstellen oder Löschen von Tabellen automatisieren.
  • Komplexe Logik mit Programmierkonstrukten wie IF und WHILE implementieren.

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:

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.

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 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

  • Kann temporär oder persistent sein.
  • Persistente UDFs können in mehreren Abfragen verwendet werden.
  • Temporäre UDFs können nur für eine einzelne Abfrage verwendet werden.
  • Python-UDFs können nur persistent und nicht temporär sein.
  • Kann temporär oder persistent sein.
  • Persistente UDAFs können in mehreren Abfragen verwendet werden.
  • Temporäre UDAFs können nur für eine einzelne Abfrage, ein einzelnes Skript, eine einzelne Sitzung oder eine einzelne Prozedur verwendet werden.
  • Persistente UDAFs können sicher aufgerufen werden, wenn sie für mehrere Inhaber freigegeben sind.

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 ANY TYPE sein, was bei Aufruf der Funktion mehr als einem Argumenttyp entsprechen kann.

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:

  1. Erstellen Sie den HTTP-Endpunkt in Cloud Run-Funktionen oder Cloud Run.
  2. Erstellen Sie in BigQuery eine Remote-Funktion mit dem Verbindungstyp CLOUD_RESOURCE.
  3. 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.