Mit gespeicherten SQL-Prozeduren arbeiten
Eine gespeicherte Prozedur ist eine Sammlung von Anweisungen, die von anderen Abfragen oder gespeicherten Prozeduren aufgerufen werden können. Eine Prozedur kann Eingabeargumente annehmen und Werte als Ausgabe zurückgeben. Prozeduren werden in einem BigQuery-Dataset benannt und gespeichert. Eine gespeicherte Prozedur kann auf Daten in mehreren Datasets von mehreren Nutzern zugreifen oder diese ändern. Sie kann auch 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 Verfahren 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.
Gespeicherte Prozedur erstellen
Wählen Sie eine der folgenden Optionen aus, um eine gespeicherte Prozedur zu erstellen:
SQL
Verwenden Sie zum Erstellen eines Datasets die Anweisung CREATE PROCEDURE.
Im folgenden konzeptionellen Beispiel stellt procedure_name die Prozedur dar und der Text der Prozedur wird zwischen den Anweisungen BEGIN und END angezeigt:
CREATE PROCEDURE dataset_name.procedure_name()
BEGIN
-- statements here
END
Das folgende Beispiel zeigt ein Verfahren mit einer Abfrage mit mehreren Anweisungen.
Mit der Abfrage mit mehreren Anweisungen wird eine Variable festgelegt, eine INSERT-Anweisung ausgeführt und das Ergebnis als formatierter Textstring angezeigt.
CREATE OR REPLACE PROCEDURE mydataset.create_customer()
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id)
VALUES(id);
SELECT FORMAT("Created customer %s", id);
END
Im vorherigen Beispiel lautet der Name der Prozedur mydataset.create_customer. Der Prozedurtext erscheint zwischen den Anweisungen BEGIN und END.
Verwenden Sie die Anweisung CALL, um die Prozedur aufzurufen:
CALL mydataset.create_customer();
Terraform
Verwenden Sie die Ressource google_bigquery_routine:
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Im folgenden Beispiel wird eine gespeicherte Prozedur mit dem Namen my_stored_procedure erstellt:
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud -Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.
Verzeichnis vorbereiten
Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).
-
Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung
.tfhaben, z. B.main.tf. In dieser Anleitung wird die Datei alsmain.tfbezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
terraform init
Fügen Sie optional die Option
-upgradeein, um die neueste Google-Anbieterversion zu verwenden:terraform init -upgrade
Änderungen anwenden
-
Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
terraform plan
Korrigieren Sie die Konfiguration nach Bedarf.
-
Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie
yesan der Eingabeaufforderung ein:terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
- Öffnen Sie Ihr Google Cloud Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
Wert mit Eingabeparameter übergeben
Eine Prozedur kann Eingabeparameter haben. Ein Eingabeparameter ermöglicht die Eingabe einer Prozedur, lässt jedoch keine Ausgabe zu.
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
Wert mit Ausgabeparameter übergeben
Eine Prozedur kann Ausgabeparameter haben. Ein Ausgabeparameter gibt einen Wert aus der Prozedur zurück, lässt jedoch keine Eingabe für die Prozedur zu. Verwenden Sie zum Erstellen eines Ausgabeparameters das Schlüsselwort OUT vor dem Namen des Parameters.
Diese Version der Prozedur gibt beispielsweise die neue Kundennummer mit dem Parameter id zurück:
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
Zum Aufrufen dieser Prozedur müssen Sie eine Variable verwenden, um den Ausgabewert zu erhalten:
--- Create a new customer record.
DECLARE id STRING;
CALL mydataset.create_customer("alice",id);
--- Display the record.
SELECT * FROM mydataset.customers
WHERE customer_id = id;
Wert mit Eingabe-/Ausgabeparameter übergeben
Eine Prozedur kann auch Eingabe-/Ausgabeparameter haben. Ein Eingabe-/Ausgabeparameter gibt einen Wert der Prozedur zurück und akzeptiert auch eine Eingabe für die Prozedur. Verwenden Sie zum Erstellen eines Eingabe-/Ausgabeparameters das Keyword INOUT vor dem Namen des Parameters. Weitere Informationen finden Sie unter Argumentmodus.
Routinen autorisieren
Sie können gespeicherte Prozeduren als Routinen autorisieren. Mit autorisierten Routinen können Sie Abfrageergebnisse für bestimmte Nutzer oder Gruppen freigeben, ohne ihnen Zugriff auf die zugrunde liegenden Tabellen zu gewähren, mit denen die Ergebnisse generiert wurden. Beispielsweise kann eine autorisierte Routine eine Aggregation von Daten berechnen oder einen Tabellenwert abrufen und diesen Wert in einer Berechnung verwenden.
Autorisierte Routinen können Tabellen erstellen, löschen und Tabellen bearbeiten sowie Andere gespeicherte Prozeduren für die zugrunde liegende Tabelle aufrufen.
Weitere Informationen zu Autorisierte Routinen.
Gespeicherte Prozedur aufrufen
Verwenden Sie die Anweisung CALL, um eine gespeicherte Prozedur nach dem Erstellen aufzurufen.
Mit der folgenden Anweisung wird beispielsweise die gespeicherte Prozedur create_customer aufgerufen:
CALL mydataset.create_customer();
Systemprozedur aufrufen
Mit der Anweisung CALL können Sie eine integrierte Systemprozedur aufrufen.
Mit der folgenden Anweisung wird beispielsweise die Systemprozedur BQ.REFRESH_MATERIALIZED_VIEW aufgerufen:
CALL BQ.REFRESH_MATERIALIZED_VIEW;