Analizar tablas de objetos mediante funciones remotas
En este documento se describe cómo analizar datos sin estructurar en tablas de objetos mediante funciones remotas.
Información general
Puedes analizar los datos no estructurados representados por 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 Run Functions o Cloud Run, que puedes programar para acceder a recursos como los siguientes:
- Los modelos de IA preentrenados de Google, como la API Cloud Vision y Document AI.
- Bibliotecas de código abierto, como Apache Tika.
- Tus propios modelos personalizados.
Para analizar los datos de una tabla de objetos mediante una función remota, debe generar y transferir URLs firmadas de los objetos de la tabla de objetos al llamar a la función remota. Estas URLs firmadas son las que conceden a la función remota acceso a los objetos.
Permisos obligatorios
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 una función remota, necesitas los permisos asociados a los roles 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 empezar
- 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.
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. - Asegúrate de que tu administrador de BigQuery haya creado una conexión y configurado el acceso a Cloud Storage.
Crear una función remota
Para obtener instrucciones generales sobre cómo crear una función remota, consulta el artículo Trabajar con funciones remotas.
Cuando creas una función remota para analizar los datos de una tabla de objetos, debes
proporcionar URLs firmadas
que se hayan generado para los objetos de la tabla de objetos. Para ello, usa un parámetro de entrada con el tipo de datos STRING
. Las URLs firmadas se ponen a disposición de la función remota como datos de entrada en el campo calls
de la solicitud POST
HTTP.
Por ejemplo:
{
// 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 mediante un método que haga 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 instrucción CREATE FUNCTION
de la función remota, te recomendamos que definas la opción max_batching_rows
en 1 para evitar que se agote el tiempo de espera de las funciones de Cloud Run
y aumentar el paralelismo del procesamiento.
Ejemplo
En el siguiente ejemplo de código de Python de Cloud Functions se leen objetos de almacenamiento y se devuelve la longitud de su contenido a 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})
Si se desplegara, esta función tendría un endpoint similar a https://us-central1-myproject.cloudfunctions.net/object_length
.
En el ejemplo siguiente 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 instrucciones detalladas, consulta el tutorial sobre cómo analizar una tabla de objetos con una función remota.
Llamar 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 el select_list
de la consulta y, a continuación, llama a la función EXTERNAL_OBJECT_TRANSFORM
en la cláusula FROM
para generar las URLs firmadas de los objetos.
En el siguiente ejemplo se muestra la sintaxis de una instrucció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";
Siguientes pasos
Consulta cómo ejecutar inferencias en tablas de objetos de imagen.