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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

  8. 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.