Analizza le tabelle di oggetti utilizzando funzioni remote

Questo documento descrive come analizzare i dati non strutturati in tabelle di oggetti utilizzando funzioni remote.

Panoramica

Puoi analizzare i dati non strutturati rappresentati da una tabella di oggetti utilizzando una funzione remota. Una funzione remota ti consente di chiamare una funzione in esecuzione su Cloud Run Functions o Cloud Run, che puoi programmare per accedere a risorse come:

  • Modelli di IA preaddestrati di Google, tra cui l'API Cloud Vision e Document AI.
  • Librerie open source come Apache Tika.
  • I tuoi modelli personalizzati.

Per analizzare i dati della tabella degli oggetti utilizzando una funzione remota, devi generare e passare gli URL firmati per gli oggetti nella tabella degli oggetti quando chiami la funzione remota. Questi URL firmati sono ciò che consente alla funzione remota di accedere agli oggetti.

Autorizzazioni obbligatorie

  • Per creare la risorsa di connessione utilizzata dalla funzione remota, devi disporre delle seguenti autorizzazioni:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete
  • Per creare una funzione remota, devi disporre delle autorizzazioni associate alla Sviluppatore Cloud Functions o Sviluppatore Cloud Run.

  • Per invocare una funzione remota, sono necessarie le autorizzazioni descritte in Funzioni remote.

  • Per analizzare una tabella di oggetti con una funzione remota, è necessario il Autorizzazione bigquery.tables.getData per la tabella dell'oggetto.

Prima di iniziare

  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 Run 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 Run functions APIs.

    Enable the APIs

  8. Assicurati che l'amministratore di BigQuery abbia creato una connessione e configurato l'accesso a Cloud Storage.

Crea una funzione remota

Per istruzioni generali sulla creazione di una funzione remota, consulta Utilizzare le funzioni remote.

Quando crei una funzione remota per analizzare i dati della tabella degli oggetti, devi trasmettere URL firmati generate per gli oggetti nella tabella. Puoi farlo utilizzando un parametro di input con un tipo di dati STRING. Gli URL firmati vengono messi a disposizione della funzione remota come dati di input nel campo calls della richiesta POST HTTP. Un esempio di richiesta è:

{
  // 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"]
  ]
}

Puoi leggere un oggetto nella funzione remota utilizzando un metodo che invia una richiesta HTTP GET all'URL firmato. La funzione remota può accedere perché l'URL firmato contiene informazioni di autenticazione nel suo stringa di query.

Se specifichi Dichiarazione CREATE FUNCTION per la funzione remota, ti consigliamo di impostare max_batching_rows su 1 per evita il timeout delle funzioni di Cloud Run e aumentare il parallelismo dell'elaborazione.

Esempio

L'esempio di codice Python delle funzioni Cloud Run seguente legge lo spazio di archiviazione oggetti e restituisce la lunghezza del contenuto a BigQuery:

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

Deployment eseguito, questa funzione avrebbe un endpoint simile https://us-central1-myproject.cloudfunctions.net/object_length.

L'esempio seguente mostra come creare un progetto remoto BigQuery basata su questa funzione di Cloud Run:

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

Per istruzioni dettagliate, consulta Tutorial: analizza una tabella di oggetti con una funzione remota.

Richiama una funzione remota

Per chiamare una funzione remota sui dati della tabella degli oggetti, fai riferimento al comando nel select_list della query e quindi richiamare Funzione EXTERNAL_OBJECT_TRANSFORM nel FROM clausola per generare gli URL firmati per gli oggetti.

L'esempio seguente mostra la tipica sintassi delle istruzioni:

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
LIMIT 10000;

L'esempio seguente mostra come elaborare solo un sottoinsieme dei contenuti della tabella degli oggetti con una funzione remota:

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

Passaggi successivi

Scopri come eseguire l'inferenza sulle tabelle degli oggetti immagine.