Analiza tablas de objetos mediante funciones remotas

En este documento, se describe cómo analizar datos no estructurados en tablas de objetos mediante funciones remotas.

Descripción general

Puedes analizar los datos no estructurados que representa una tabla de objetos; para ello, usa una función remota. Una función remota te permite llamar a una función que se ejecuta en Cloud Run Functions o Cloud Run, que puedes programar para acceder a recursos como los siguientes:

  • Modelos de IA previamente entrenados de Google, incluida la API de Cloud Vision y Document AI.
  • Bibliotecas de código abierto, como Apache Tika.
  • Tus propios modelos personalizados

Para analizar los datos de la tabla de objetos con una función remota, debes generar y pasar URLs firmadas para los objetos en la tabla de objetos cuando llamas a la función remota. Estas URLs firmadas son las que otorgan a la función remota acceso a los objetos.

Permisos necesarios

  • Para crear el recurso de conexión que usa la función remota, necesitas los siguientes permisos:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete
  • Para crear un rol remoto, necesitas los permisos asociados con las funciones de Desarrollador de Cloud Functions o Desarrollador de Cloud Run.

  • Para invocar una función remota, necesitas los permisos descritos en Funciones remotas.

  • Para analizar una tabla de objetos con una función remota, necesitas el permiso bigquery.tables.getData en la tabla de objetos.

Antes de comenzar

  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. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  8. Asegúrate de que tu administrador de BigQuery cree una conexión y configure el acceso a Cloud Storage.

Crea una función remota

Para obtener instrucciones generales sobre cómo crear una función remota, consulta Trabaja con funciones remotas.

Cuando creas una función remota a fin de analizar los datos de la tabla de objetos, debes pasar las URLs firmadas que se generaron para los objetos en la tabla de objetos. Para ello, puedes usar un parámetro de entrada con un tipo de datos STRING. Las URLs firmadas están disponibles para la función remota como datos de entrada en el campo calls de la solicitud HTTP POST. A continuación, se muestra un ejemplo de una solicitud:

{
  // 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"]
  ]
}

Puedes leer un objeto en tu función remota con un método que realice una solicitud HTTP GET a la URL firmada. La función remota puede acceder al objeto porque la URL firmada contiene información de autenticación en su cadena de consulta.

Cuando especifiques la declaración CREATE FUNCTION para la función remota, te recomendamos que configures la opción max_batching_rows en 1 para evitar el tiempo de espera de Cloud Run Functions y aumentar el paralelismo de procesamiento.

Ejemplo

En el siguiente ejemplo de código de Python para Cloud Run Functions, se leen objetos de almacenamiento y se muestra su longitud de contenido en 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})

Una vez implementada, esta función tendría un extremo similar a https://us-central1-myproject.cloudfunctions.net/object_length.

En el siguiente ejemplo, se muestra cómo crear una función remota de BigQuery basada en esta función de Cloud Run 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 obtener orientación paso a paso, consulta Instructivo: Analiza una tabla de objetos con una función remota.

Llama a una función remota

Para llamar a una función remota en los datos de la tabla de objetos, haz referencia a la función remota en la select_list de la consulta y, luego, llama a Función EXTERNAL_OBJECT_TRANSFORM en la cláusula FROM a fin de generar las URLs firmadas para los objetos.

En el siguiente ejemplo, se muestra la sintaxis de declaración típica:

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
LIMIT 10000;

En el siguiente ejemplo, se muestra cómo procesar solo un subconjunto del contenido de la tabla de objetos con una función 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";

¿Qué sigue?

Aprende a ejecutar inferencias en tablas de objetos de imagen.