Analizzare le tabelle degli oggetti utilizzando le funzioni remote

Questo documento descrive come analizzare i dati non strutturati nelle tabelle degli oggetti utilizzando le funzioni remote.

Panoramica

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

  • Modelli IA preaddestrati Google, tra cui 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 trasmettere gli URL firmati per gli oggetti nella tabella degli oggetti quando chiami la funzione remota. Questi URL firmati consentono alle funzioni remote 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 ai ruoli Sviluppatore Cloud Functions o Sviluppatore Cloud Run.

  • Per richiamare una funzione remota, devi disporre delle autorizzazioni descritte in Funzioni remote.

  • Per analizzare una tabella degli oggetti con una funzione remota, devi disporre dell'autorizzazione bigquery.tables.getData per la tabella degli oggetti.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API BigQuery, BigQuery Connection API, Cloud Functions.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API BigQuery, BigQuery Connection API, Cloud Functions.

    Abilita le API

  8. Assicurati che l'amministratore 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 Utilizzo delle funzioni remote.

Quando crei una funzione remota per analizzare i dati della tabella degli oggetti, devi trasferire gli URL firmati generati per gli oggetti nella tabella degli oggetti. A tal fine, puoi utilizzare un parametro di input con un tipo di dati STRING. Gli URL firmati vengono resi disponibili alla funzione remota come dati di input nel campo calls della richiesta HTTP POST. Ecco 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 effettui una richiesta HTTP GET all'URL firmato. La funzione remota può accedere all'oggetto perché l'URL firmato contiene informazioni di autenticazione nella stringa di query.

Quando specifichi l'istruzione CREATE FUNCTION per la funzione remota, ti consigliamo di impostare l'opzione max_batching_rows su 1 per evitare il timeout di Cloud Functions e aumentare il parallelismo di elaborazione.

Esempio

Il seguente esempio di codice Python di Cloud Functions legge gli oggetti di archiviazione e restituisce la lunghezza del loro 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})

Se il deployment di questa funzione è stato eseguito, questa funzione avrebbe un endpoint simile a https://us-central1-myproject.cloudfunctions.net/object_length.

L'esempio seguente mostra come creare una funzione remota BigQuery basata su questa funzione Cloud Functions:

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: analisi di una tabella di oggetti con una funzione remota.

Chiamare una funzione remota

Per chiamare una funzione remota sui dati della tabella degli oggetti, fai riferimento alla funzione remota nella sezione select_list della query, quindi chiama la funzione EXTERNAL_OBJECT_TRANSFORM nella clausola FROM per generare gli URL firmati per gli oggetti.

L'esempio seguente mostra la sintassi tipica 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