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:

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:

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

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.

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

  • Sie können temporär oder dauerhaft sein.
  • Sie können persistente UDFs für mehrere Abfragen verwenden.
  • Sie können temporäre UDFs nur für eine einzelne Abfrage verwenden.
  • Python-UDFs können nur persistent, nicht temporär sein.
  • Sie können temporär oder dauerhaft sein.
  • Sie können persistente UDAFs für mehrere Abfragen verwenden.
  • Sie können temporäre UDAFs nur für eine einzelne Abfrage, ein einzelnes Script, eine einzelne Sitzung oder eine einzelne Prozedur verwenden.
  • Nichtflüchtige UDAFs können sicher aufgerufen werden, wenn sie von Inhabern gemeinsam genutzt werden.

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

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:

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