Erstellen Sie eine Cloud Run-Funktion, die BigQuery verwendet, um eine Abfrage zu senden und Ergebnisse zurückzugeben.

In dieser Anleitung wird gezeigt, wie Sie eine HTTP-Cloud Run-Funktion schreiben, die eine Abfrage an BigQuery sendet.

Anwendung vorbereiten

  1. Klonen Sie das Beispielanwendungs-Repository auf Ihren lokalen Rechner:

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

    Sie können auch das Beispiel als ZIP-Datei herunterladen und entpacken.

  2. Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. Sehen Sie sich den Beispielcode an: Das Beispiel sendet eine Abfrage für Wörter, die im angegebenen Dataset mindestens 400 Mal vorkommen, und gibt das Ergebnis zurück.

    // 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}`);
      }
    });

Funktion implementieren

So stellen Sie die Funktion mit einem HTTP-Trigger bereit:

  1. Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode enthält:

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

    Ersetzen Sie:

    • FUNCTION durch den Namen der Funktion, die Sie bereitstellen, z. B. my-bigquery-function. Sie können diesen Parameter auch weglassen, werden dann jedoch nach dem Namen gefragt.

    • FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der von Cloud Run ausgeführt wird, wenn Ihre Funktion ausgeführt wird. Der Wert dieses Flags muss ein Funktionsname oder ein voll qualifizierter Klassenname sein, der in Ihrem Quellcode vorhanden ist. Der Einstiegspunkt, den Sie für die Beispielfunktion angeben müssen, ist helloBigQuery.

    • BASE_IMAGE durch die Basis-Image-Umgebung für Ihre Funktion, z. B. nodejs22. Weitere Informationen zu Basis-Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Basis-Images für Runtimes.

    • REGION durch die Google Cloud Region, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1

    Optional:

    • Wenn Sie eine öffentliche HTTP-Funktion erstellen, z. B. einen Webhook, geben Sie das Flag --allow-unauthenticated an. Mit diesem Flag wird der Sonderkennzeichnung allUser die IAM-Rolle „Cloud Run Invoker“ zugewiesen. Sie können die Einstellung mit IAM bearbeiten, nachdem Sie den Dienst erstellt haben.

Funktion testen

  1. Kopieren Sie nach der Bereitstellung der Funktion das Attribut uri.

  2. Rufen Sie diesen URI in Ihrem Browser auf.

    Sie sollten eine Liste der Wörter sehen, die den Abfragekriterien entsprechen und wie oft jedes Wort im Ziel-Dataset angezeigt wird.