Objekttabellen mit Remote-Funktionen analysieren
In diesem Dokument wird die Analyse von unstrukturierten Daten in Objekttabellen mithilfe von Remote-Funktionen beschrieben.
Überblick
Sie können die unstrukturierten Daten einer Objekttabelle mithilfe einer Remotefunktion analysieren. Mit einer Remote-Funktion können Sie eine in Cloud Functions oder Cloud Run ausgeführte Funktion aufrufen, auf die Sie programmieren können, um auf Ressourcen wie die folgenden zuzugreifen:
- Vortrainierte KI-Modelle von Google, einschließlich Cloud Vision API und Document AI.
- Open-Source-Bibliotheken wie Apache Tika
- Ihre eigenen benutzerdefinierten Modelle.
Zum Analysieren von Objekttabellendaten mithilfe einer Remotefunktion müssen Sie signierte URLs für die Objekte in der Objekttabelle generieren und übergeben, wenn Sie die Remote-Funktion aufrufen. Diese signierten URLs gewähren der Remote-Funktion Zugriff auf die Objekte.
Erforderliche Berechtigungen
Zum Erstellen der von der Remote-Funktion verwendeten Verbindungsressource benötigen Sie die folgenden Berechtigungen:
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
Zum Erstellen einer Remote-Funktion benötigen Sie die Berechtigungen, die den Rollen Cloud Functions-Entwickler oder Cloud Run-Entwickler zugeordnet sind.
Zum Aufrufen einer Remote-Funktion benötigen Sie die unter Remote-Funktionen beschriebenen Berechtigungen.
Zum Analysieren einer Objekttabelle mit einer Remote-Funktion benötigen Sie die Berechtigung
bigquery.tables.getData
für die Objekttabelle.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.
- Achten Sie darauf, dass Ihr BigQuery-Administrator eine Verbindung erstellt und den Zugriff auf Cloud Storage eingerichtet hat.
Remote-Funktion erstellen
Allgemeine Anleitungen zum Erstellen einer Remotefunktion finden Sie unter Mit Remotefunktionen arbeiten.
Wenn Sie eine Remote-Funktion zum Analysieren von Objekttabellendaten erstellen, müssen Sie signierte URLs übergeben, die für die Objekte in der Objekttabelle generiert wurden. Dazu können Sie einen Eingabeparameter mit dem Datentyp STRING
verwenden. Die signierten URLs werden der Remote-Funktion als Eingabedaten im Feld calls
der HTTP-POST
-Anfrage zur Verfügung gestellt.
Ein Beispiel für eine Anfrage ist:
{
// Other fields omitted.
"calls": [
["https://storage.googleapis.com/mybucket/1.pdf?X-Goog-SignedHeaders=abcd"],
["https://storage.googleapis.com/mybucket/2.pdf?X-Goog-SignedHeaders=wxyz"]
]
}
Sie können ein Objekt in Ihrer Remote-Funktion lesen, indem Sie eine Methode verwenden, die eine HTTP-GET
-Anfrage an die signierte URL sendet. Die Remote-Funktion kann auf das Objekt zugreifen, da die signierte URL Authentifizierungsinformationen im Abfragestring enthält.
Wenn Sie die Anweisung CREATE FUNCTION
für die Remote-Funktion angeben, sollten Sie die Option max_batching_rows
auf 1 setzen, um Sie vermeiden Cloud Functions-Zeitlimits und erhöhen die Verarbeitungsparallelität.
Beispiel
Im folgenden Cloud Functions-Python-Codebeispiel werden Speicherobjekte gelesen und ihre Inhaltslänge an BigQuery zurückgegeben:
import functions_framework
import json
import urllib.request
@functions_framework.http
def object_length(request):
calls = request.get_json()['calls']
replies = []
for call in calls:
object_content = urllib.request.urlopen(call[0]).read()
replies.append(len(object_content))
return json.dumps({'replies': replies})
Bereitgestellte Funktion hat einen Endpunkt, der https://us-central1-myproject.cloudfunctions.net/object_length
ähnelt.
Das folgende Beispiel zeigt, wie Sie eine BigQuery-Remote-Funktion anhand dieser Cloud Functions-Funktion erstellen:
CREATE FUNCTION mydataset.object_length(signed_url STRING) RETURNS INT64 REMOTE WITH CONNECTION `us.myconnection` OPTIONS( endpoint = "https://us-central1-myproject.cloudfunctions.net/object_length", max_batching_rows = 1 );
Eine detaillierte Anleitung finden Sie unter Anleitung: Objekttabelle mit einer Remotefunktion analysieren.
Remotefunktion aufrufen
Zum Aufrufen einer Remote-Funktion für Objekttabellendaten verweisen Sie auf die Remote-Funktion in der select_list
der Abfrage und rufen Sie dann die EXTERNAL_OBJECT_TRANSFORM
-Funktion in der FROM
-Klausel, um signierte URLs für die Objekte zu generieren.
Das folgende Beispiel zeigt die typische Anweisungssyntax:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) LIMIT 10000;
Das folgende Beispiel zeigt, wie nur ein Teil der Inhalte der Objekttabelle mit einer Remotefunktion verarbeitet wird:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) WHERE content_type = "application/pdf";