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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.

    Enable the APIs

  8. 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";

Nächste Schritte