Analizza le tabelle di oggetti utilizzando le funzioni remote
Puoi analizzare le tabelle di oggetti con le funzioni remote per estrarre insight dai dati non strutturati utilizzando strumenti e librerie esterni. L'integrazione delle query con Cloud Run o Cloud Run Functions ti consente di applicare i modelli di AI preaddestrati di Google, le librerie open source o i tuoi modelli personalizzati direttamente ai dati di BigQuery.
Per analizzare i dati della tabella degli oggetti utilizzando una funzione remota, devi generare e passare URL firmati per gli oggetti nella tabella degli oggetti quando chiami la funzione remota. Questi URL firmati concedono alla funzione remota l'accesso agli oggetti.
Autorizzazioni obbligatorie
Per creare la risorsa di connessione utilizzata dalla funzione remota, devi disporre delle seguenti autorizzazioni:
bigquery.connections.createbigquery.connections.getbigquery.connections.listbigquery.connections.updatebigquery.connections.usebigquery.connections.delete
Per creare una funzione remota, devi disporre delle autorizzazioni associate ai ruoli Cloud Functions Developer o Cloud Run Developer.
Per richiamare una funzione remota, devi disporre delle autorizzazioni descritte in Funzioni remote.
Per analizzare una tabella esterna con una funzione remota, devi disporre dell'autorizzazione
bigquery.tables.getDatasulla tabella esterna.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.- 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 Utilizzo delle funzioni remote.
Quando crei una funzione remota per analizzare i dati della tabella degli oggetti, devi passare gli URL firmati generati per gli oggetti nella tabella degli oggetti. Puoi farlo utilizzando 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 effettua 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 Run Functions e aumentare il parallelismo di elaborazione.
Esempio
Il seguente esempio di codice Python di Cloud Run Functions legge gli oggetti di archiviazione e restituisce la lunghezza dei contenuti 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})
Una volta eseguito il deployment, questa funzione avrà 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 Run 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 passo passo, consulta Tutorial: analizza una tabella di oggetti con una funzione remota.
Chiama una funzione remota
Per chiamare una funzione remota sui dati della tabella degli oggetti, fai riferimento alla funzione remota nella 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 di un'istruzione:
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.