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 no Cloud Functions 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
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs BigQuery, BigQuery Connection API, Cloud Functions.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs BigQuery, BigQuery Connection API, Cloud Functions.
- 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 do Cloud Functions
e aumentar o paralelismo de processamento.
Exemplo
O exemplo de código Python do Cloud Functions 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 nessa função do 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 );
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.
- Tente analisar uma tabela de objetos usando uma função remota.