Crear una Cloud Run Function que use BigQuery para enviar una consulta y devolver resultados

En este instructivo, se muestra cómo escribir una Cloud Run Function HTTP que envía una consulta a BigQuery.

Prepara la aplicación

  1. Clona el repositorio de la aplicación de muestra en tu máquina local:

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    

    Como alternativa, descarga la muestra como un archivo ZIP y extráelo.

  2. Dirígete al directorio que contiene el código de muestra:

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. Ve el código de muestra. La muestra envía una consulta de palabras que ocurren al menos 400 veces en el conjunto de datos especificado y muestra el resultado.

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    const functions = require('@google-cloud/functions-framework');
    
    /**
     * HTTP Cloud Function that returns BigQuery query results
     *
     * @param {Object} req Cloud Function request context.
     * @param {Object} res Cloud Function response context.
     */
    functions.http('helloBigQuery', async (req, res) => {
      // Define the SQL query
      // Queries the public Shakespeare dataset using named query parameter
      const sqlQuery = `
          SELECT word, word_count
                FROM \`bigquery-public-data.samples.shakespeare\`
                WHERE corpus = @corpus
                AND word_count >= @min_word_count
                ORDER BY word_count DESC`;
    
      const options = {
        query: sqlQuery,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        params: {corpus: 'romeoandjuliet', min_word_count: 400},
      };
    
      // Execute the query
      try {
        const [rows] = await bigquery.query(options);
        // Send the results
        res.status(200).send(rows);
      } catch (err) {
        console.error(err);
        res.status(500).send(`Error querying BigQuery: ${err}`);
      }
    });

Implementa la función

Para implementar la función con un activador HTTP, haz lo siguiente:

  1. Ejecuta el siguiente comando en el directorio que contiene el código de muestra:

    gcloud run deploy FUNCTION \
       --source . \
       --function FUNCTION_ENTRYPOINT \
       --base-image BASE_IMAGE \
       --region REGION \
       --allow-unauthenticated

    Reemplaza lo siguiente:

    • FUNCTION por el nombre de la función que implementas, por ejemplo, my-bigquery-function. Puedes omitir este parámetro por completo, pero se te solicitará el nombre si lo haces.

    • FUNCTION_ENTRYPOINT por el punto de entrada a tu función en tu código fuente. Este es el código que ejecuta Cloud Run cuando se ejecuta tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completamente calificado que exista en tu código fuente. El punto de entrada que debes especificar para la función de muestra es helloBigQuery.

    • BASE_IMAGE con el entorno de la imagen base de tu función, por ejemplo, nodejs22. Para obtener detalles sobre las imágenes base y los paquetes incluidos en cada imagen, consulta Imágenes base de los tiempos de ejecución.

    • REGION con la región Google Clouden la que deseas implementar tu función Por ejemplo, europe-west1.

    Opcional:

    • Si creas una función de HTTP pública, por ejemplo, un webhook, especifica la marca --allow-unauthenticated. Esta marca asigna el rol de invocador de IAM de Cloud Run al identificador especial allUser. Puedes usar IAM para editar esta configuración más adelante una vez que hayas creado el servicio.

Prueba la función

  1. Cuando la función termine de implementarse, copia la propiedad uri.

  2. Visita este URI en tu navegador.

    Deberías ver una lista de las palabras que coinciden con los criterios de la consulta y cuántas veces aparece cada palabra en el conjunto de datos de destino.