Analise tabelas de objetos através de funções remotas
Este documento descreve como analisar dados não estruturados em tabelas de objetos através de funções remotas.
Vista geral
Pode analisar os dados não estruturados representados por uma tabela de objetos através de uma função remota. Uma função remota permite-lhe chamar uma função executada em funções do Cloud Run ou no Cloud Run, que pode programar para aceder a recursos como:
- Modelos de IA pré-treinados da Google, incluindo a API Cloud Vision e a Document AI.
- Bibliotecas de código aberto, como o Apache Tika.
- Os seus próprios modelos personalizados.
Para analisar dados de tabelas de objetos através de uma função remota, tem de gerar e transmitir URLs assinados para os objetos na tabela de objetos quando chama a função remota. Estes URLs assinados concedem à função remota acesso aos objetos.
Autorizações necessárias
Para criar o recurso de ligação usado pela função remota, precisa das seguintes autorizações:
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
Para criar uma função remota, precisa das autorizações associadas às funções Cloud Functions Developer ou Cloud Run Developer.
Para invocar uma função remota, precisa das autorizações descritas em Funções remotas.
Para analisar uma tabela de objetos com uma função remota, precisa da autorização
bigquery.tables.getData
na tabela de objetos.
Antes de começar
- 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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Certifique-se de que o administrador do BigQuery criou uma ligação e configurou o acesso ao Cloud Storage.
Crie uma função remota
Para obter instruções gerais sobre como criar uma função remota, consulte o artigo Trabalhar com funções remotas.
Quando cria uma função remota para analisar dados de tabelas de objetos, tem de
transmitir URLs assinados
que foram gerados para os objetos na tabela de objetos. Pode fazê-lo
usando um parâmetro de entrada com um tipo de dados STRING
. Os URLs assinados são disponibilizados à função remota como dados de entrada no campo calls
do pedido HTTP POST
.
Um exemplo de um pedido é:
{
// 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"]
]
}
Pode ler um objeto na sua função remota através de um método que faz um pedido HTTP GET
ao URL assinado. A função remota pode aceder ao objeto porque o URL assinado contém informações de autenticação na respetiva string de consulta.
Quando especifica a declaração
CREATE FUNCTION
para a função remota, recomendamos que defina a opção max_batching_rows
como 1 para
evitar o limite de tempo das funções do Cloud Run
e aumentar o paralelismo de processamento.
Exemplo
O seguinte exemplo de código Python de funções do Cloud Run lê objetos de armazenamento e devolve o respetivo comprimento do conteúdo ao 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})
Implementada, esta função teria um ponto final semelhante a
https://us-central1-myproject.cloudfunctions.net/object_length
.
O exemplo seguinte mostra como criar uma função remota do BigQuery baseada nesta função das funções do 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 );
Para orientações passo a passo, consulte o Tutorial: analise uma tabela de objetos com uma função remota.
Chame uma função remota
Para chamar uma função remota em dados de tabelas de objetos, referencie a função remota no select_list
da consulta e, em seguida, chame a função EXTERNAL_OBJECT_TRANSFORM
no FROM
para gerar os URLs assinados para os objetos.
O exemplo seguinte mostra a sintaxe de declaração típica:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) LIMIT 10000;
O exemplo seguinte mostra como processar apenas um subconjunto do conteúdo da tabela de objetos com uma função 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";
O que se segue?
Saiba como executar a inferência em tabelas de objetos de imagens.