Gestionar errores de cuota llamando a ML.GENERATE_TEXT de forma iterativa

En este tutorial se muestra cómo usar el procedimiento almacenado público bqutil.procedure.bqml_generate_text de BigQuery para iterar las llamadas a la función ML.GENERATE_TEXT. Si llamas a la función de forma iterativa, podrás solucionar los errores que se puedan volver a intentar y que se produzcan por superar las cuotas y los límites que se aplican a la función.

Para consultar el código fuente del procedimiento almacenado bqutil.procedure.bqml_generate_text en GitHub, consulta bqml_generate_text.sqlx. Para obtener más información sobre los parámetros y el uso del procedimiento almacenado, consulta el archivo README.

En este tutorial se explican las siguientes tareas:

  • Crear un modelo remoto a partir de un gemini-2.0-flashmodelo.
  • Iterar las llamadas a la función ML.GENERATE_TEXT usando el modelo remoto y la tabla de datos públicos bigquery-public-data.bbc_news.fulltext con el procedimiento almacenado bqutil.procedure.bqml_generate_text.

Permisos obligatorios

Para completar este tutorial, necesitas los siguientes roles de Gestión de Identidades y Accesos (IAM):

  • Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (roles/bigquery.admin).
  • Concede permisos a la cuenta de servicio de la conexión: administrador de gestión de identidades y accesos del proyecto (roles/resourcemanager.projectIamAdmin).

Estos roles predefinidos contienen los permisos necesarios para realizar las tareas descritas en este documento. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

  • Crea un conjunto de datos: bigquery.datasets.create
  • Crear, delegar y usar una conexión: bigquery.connections.*
  • Definir la conexión predeterminada: bigquery.config.*
  • Define los permisos de la cuenta de servicio: resourcemanager.projects.getIamPolicy y resourcemanager.projects.setIamPolicy
  • Crea un modelo y ejecuta la inferencia:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI model.

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Para obtener más información sobre los precios de BigQuery, consulta la página Precios de BigQuery.

Para obtener más información sobre los precios de Vertex AI, consulta los precios de Vertex AI.

Antes de empezar

  1. 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

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

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI 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

Crear conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tus modelos y datos de muestra:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ve a la página BigQuery.

  2. En el panel Explorador, haz clic en el nombre de tu proyecto.

  3. Haga clic en Ver acciones > Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    1. En ID del conjunto de datos, introduce sample.

    2. En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).

    3. Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.

Crear el modelo de generación de texto

Crea un modelo remoto que represente un modelo de Vertex AI gemini-2.0-flash alojado:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    CREATE OR REPLACE MODEL `sample.generate_text`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-2.0-flash');

    La consulta tarda varios segundos en completarse. Después, el generate_text modelo aparece en el conjunto de datos sample del panel Explorador. Como la consulta usa una instrucción CREATE MODEL para crear un modelo, no hay resultados de consulta.

Ejecutar el procedimiento almacenado

Ejecuta el procedimiento almacenado bqutil.procedure.bqml_generate_text, que itera a través de las llamadas a la función ML.GENERATE_TEXT mediante el modelo sample.generate_text y la tabla de datos públicos bigquery-public-data.bbc_news.fulltext:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción:

    CALL `bqutil.procedure.bqml_generate_text`(
        "bigquery-public-data.bbc_news.fulltext",   -- source table
        "PROJECT_ID.sample.news_generated_text",  -- destination table
        "PROJECT_ID.sample.generate_text",        -- model
        "body",                                     -- content column
        ["filename"],                               -- key columns
        '{}'                                        -- optional arguments
    );

    Sustituye PROJECT_ID por el ID del proyecto que vas a usar en este tutorial.

    El procedimiento almacenado crea una tabla sample.news_generated_text para contener el resultado de la función ML.GENERATE_TEXT.

  3. Cuando la consulta termine de ejecutarse, comprueba que no haya filas en la tabla sample.news_generated_text que contengan un error que se pueda volver a intentar. En el editor de consultas, ejecuta la siguiente instrucción:

    SELECT *
    FROM `sample.news_generated_text`
    WHERE ml_generate_text_status LIKE '%A retryable error occurred%';

    La consulta devuelve el mensaje No data to display.

Limpieza

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.