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 mediante una función remota. Una función remota te permite llamar a una función que se ejecuta en Cloud 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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.
- 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 a fin de Evita el tiempo de espera de Cloud Functions y aumenta el paralelismo de procesamiento.
Ejemplo
En el siguiente ejemplo de código de Python para Cloud 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})
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 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 guía paso a paso, consulta el 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.
- Intenta analizar una tabla de objetos con una función remota.