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

  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. Asegúrate de que tu administrador de BigQuery haya creado una conexión y configurado el acceso a Cloud Storage.
  9. 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.