Analisar tabelas de objetos usando funções remotas
Neste documento, descrevemos como analisar dados não estruturados em tabelas de objetos usando funções remotas.
Visão geral
É possível analisar os dados não estruturados representados por uma tabela de objetos usando uma função remota. Uma função remota permite chamar uma função em execução nas funções do Cloud Run ou no Cloud Run, que você pode programar para acessar recursos como:
- Modelos de IA pré-treinados do Google, incluindo a API Cloud Vision e a Document AI.
- Bibliotecas de código aberto, como Apache Tika.
- Seus próprios modelos personalizados.
Para analisar os dados da tabela de objetos usando uma função remota, é necessário gerar e transmitir URLs assinados para os objetos na tabela de objetos ao chamar a função remota. Esses URLs assinados concedem à função remota acesso aos objetos.
Permissões necessárias
Para criar o recurso de conexão usado pela função remota, você precisa das seguintes permissõ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, você precisa das permissões associadas aos papéis de Desenvolvedor do Cloud Functions ou Desenvolvedor do Cloud Run.
Para invocar uma função remota, você precisa das permissões descritas em Funções remotas.
Para analisar uma tabela de objetos com uma função remota, você precisa da permissã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.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.
- Verifique se o administrador do BigQuery criou uma conexão e configurou o acesso ao Cloud Storage.
Criar uma função remota
Para instruções gerais sobre como criar uma função remota, consulte Como trabalhar com funções remotas.
Ao criar uma função remota para analisar dados da tabela de objetos, transmita URLs assinados
que foram gerados para os objetos na tabela de objetos. Para isso,
use 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
da solicitação POST
HTTP.
Veja um exemplo de solicitação:
{
// 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"]
]
}
É possível ler um objeto na função remota usando um método que faz
uma solicitação GET
HTTP ao URL assinado. A função remota pode acessar o objeto porque o URL assinado contém informações de autenticação na string de consulta.
Ao especificar a
instrução CREATE FUNCTION
para a função remota, recomendamos que você defina a opção max_batching_rows
como 1 para
evitar o tempo limite das funções do Cloud Run
e aumentar o paralelismo de processamento.
Exemplo
O exemplo de código Python das funções do Cloud Run a seguir lê objetos de armazenamento e retorna o comprimento do conteúdo deles para o 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})
Implantada, essa função teria um endpoint semelhante a
https://us-central1-myproject.cloudfunctions.net/object_length
.
Veja no exemplo a seguir como criar uma função remota do BigQuery com base nessas 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 instruções passo a passo, consulte Tutorial: analisar uma tabela de objetos com uma função remota.
Chamar uma função remota
Para chamar uma função remota em dados de tabelas de objetos, faça referência à função
remoto noselect_list
da consulta e, em seguida, chame a
EXTERNAL_OBJECT_TRANSFORM
função
na
FROM
cláusula
para gerar os URLs assinados dos objetos.
O exemplo a seguir mostra a sintaxe típica de instruções:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) LIMIT 10000;
O exemplo a seguir 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";
A seguir
Saiba como executar inferência em tabelas de objetos de imagem.