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

  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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Certifique-se de que o administrador do BigQuery criou uma ligação e configurou o acesso ao Cloud Storage.
  9. 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.