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:

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:

  • 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

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:

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.

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

  • Kann vorübergehend oder dauerhaft sein.
  • Sie können persistente UDFs für mehrere Abfragen verwenden.
  • 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 vorübergehend oder dauerhaft sein.
  • Sie können persistente UDAFs für mehrere Abfragen verwenden.
  • Temporäre UDAFs können nur für eine einzelne Abfrage, ein einzelnes Skript, eine einzelne Sitzung oder eine einzelne Prozedur verwendet werden.
  • Nichtflüchtige UDAFs können sicher aufgerufen werden, wenn sie von Inhabern gemeinsam genutzt werden.

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 ANY TYPE sein, was bei einem Funktionsaufruf mit mehr als einem Argumenttyp übereinstimmen kann.

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:

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