Aus einem Workflow in Google Tabellen schreiben

Google Tabellen ist eine cloudbasierte Tabellenkalkulationslösung, die die Zusammenarbeit in Echtzeit unterstützt und Tools für die zum Visualisieren, Verarbeiten und Kommunizieren von Daten.

Das folgende Beispiel zeigt, wie in Google Tabellen geschrieben wird. aus einem Workflow. Der Workflow fragt ein BigQuery-Dataset ab und schreibt die Ergebnisse in einer Google Tabellen-Tabelle. Sie verwendet Workflow-Connectors, um die von Google Cloud APIs.

Hinweise

Bevor Sie das Beispiel in diesem Dokument ausprobieren, stellen Sie sicher, dass Sie Folgendes:

  1. Aktivieren Sie Compute Engine, Google Drive, Google Tabellen und Workflows APIs.

    Console

    Aktivieren Sie die APIs

    gcloud

    gcloud services enable \
        compute.googleapis.com \
        drive.googleapis.com \
        sheets.googleapis.com \
        workflows.googleapis.com
    
  2. Notieren Sie sich die Standardmäßiges Compute Engine-Dienstkonto Dienstkonto, da Sie es mit dem Beispiel-Workflow für Tests verknüpfen zu verstehen. Neue Projekte, für die die Compute Engine API aktiviert ist, Dienstkonto mit der einfachen IAM-Rolle „Bearbeiter“ erstellt, und mit folgendem E-Mail-Format:

    PROJECT_NUMBER[email protected]

    Ihre Projektnummer finden Sie auf der Willkommen Seite der Google Cloud Console oder rufen Sie Ihre Projektnummer ab:

    gcloud projects describe PROJECT_ID
    

    Für Produktionsumgebungen empfehlen wir dringend, Erstellen eines neuen Dienstkontos und ihm eine oder mehrere IAM-Rollen zuweisen, die die Erforderliche Mindestberechtigungen und folgen dem Prinzip der geringste Berechtigung:

  3. Erstellen Sie einen neuen Ordner in Google Drive. In diesem Ordner werden Ihre Tabelle. Wenn Sie eine Berechtigung für den freigegebenen Ordner einrichten, in die Tabelle schreiben darf.

    1. Rufen Sie drive.google.com auf.
    2. Klicken Sie auf Neu > Neuer Ordner.
    3. Geben Sie einen Namen für den Ordner ein.
    4. Klicken Sie auf Erstellen.
    5. Klicken Sie mit der rechten Maustaste auf den neuen Ordner und wählen Sie Freigeben aus.
    6. E-Mail-Adresse für den Compute Engine-Standarddienst hinzufügen Konto.

      Dadurch erhält das Dienstkonto Zugriff auf den Ordner. Wenn Sie Dienstkonto mit Ihrem Workflow verknüpfen, enthält der Workflow Zugriff auf beliebige Dateien im Ordner. Weitere Informationen zum Freigeben von Dateien, Ordnern und Google Drive.

    7. Wählen Sie die Rolle Bearbeiter aus.

    8. Entfernen Sie das Häkchen aus dem Kästchen Personen benachrichtigen.

    9. Klicken Sie auf Freigeben.

Tabelle erstellen

Sie haben folgende Möglichkeiten, eine Tabelle zu erstellen:

Es gibt keine Option zum Erstellen direkt in einem bestimmten Ordner mithilfe der Google Sheets API erstellen. Es gibt jedoch Alternativen, wie z. B. das Verschieben der Tabelle in eine bestimmte nachdem Sie ihn erstellt haben, wie in den folgenden Beispielen gezeigt. Weitere Informationen finden Sie unter Mit Google Drive-Ordnern arbeiten

Tabellen mit Google Tabellen erstellen

Tabellen, die Sie über Google Tabellen erstellen, Google Drive Standardmäßig wird die Tabelle im Stammordner der Drive

  1. Rufen Sie sheets.google.com auf.

  2. Klicken Sie auf Neu Plus.

    Dadurch wird eine neue Tabelle erstellt und geöffnet. Jede Tabelle hat eine eindeutige spreadsheetId Wert, Buchstaben, Ziffern, Bindestriche oder Unterstriche enthalten. Sie finden die Tabellen-ID in einer Google Tabellen-URL:

    https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0

  3. Notieren Sie sich diese ID, da sie beim Erstellen des Workflows benötigt wird.

  4. Verschieben Sie die Tabelle in den Google Drive-Ordner, den Sie erstellt haben. zuvor:

    1. Wählen Sie in der Tabelle Datei > Verschieben aus.
    2. Gehen Sie zu dem Ordner, den Sie erstellt haben.
    3. Klicken Sie auf Verschieben.

Mit dem Google Sheets API-Connector eine Tabelle erstellen

Sie können die Google Sheets API-Connector um eine Tabelle zu erstellen. Da Workflows das Dienstkonto verwendet Triggeridentität verwenden, wird die Tabelle im Google Drive-Stammordner. Sie können die Tabelle dann in eine andere Ordner.

Im folgenden Workflow ist die spreadsheetId aus dem resp-Ergebnis abgerufen:

YAML

main:
  steps:
    - init:
        assign:
          - folder_id: 'FOLDER_ID'
          - drive_url: 'https://www.googleapis.com/drive/v3/files/'
          - drive_auth_scope: 'https://www.googleapis.com/auth/drive'
    - create_sheet:
        call: googleapis.sheets.v4.spreadsheets.create
        args:
          body: null
          connector_params:
            scopes: 'https://www.googleapis.com/auth/drive'
        result: resp
    - get_sheet_info:
        call: http.get
        args:
          url: '${drive_url + resp.spreadsheetId}'
          query:
            fields: parents
          auth:
            type: OAuth2
            scopes: '${drive_auth_scope}'
        result: sheet_info
    - move_sheet:
        call: http.patch
        args:
          url: '${drive_url + resp.spreadsheetId}'
          query:
            addParents: '${folder_id}'
            removeParents: '${sheet_info["body"]["parents"][0]}'
          auth:
            type: OAuth2
            scopes: '${drive_auth_scope}'
        result: resp
    - return:
        return: '${resp}'

JSON

{
  "main": {
    "steps": [
      {
        "init": {
          "assign": [
            {
              "folder_id": "FOLDER_ID"
            },
            {
              "drive_url": "https://www.googleapis.com/drive/v3/files/"
            },
            {
              "drive_auth_scope": "https://www.googleapis.com/auth/drive"
            }
          ]
        }
      },
      {
        "create_sheet": {
          "call": "googleapis.sheets.v4.spreadsheets.create",
          "args": {
            "body": null,
            "connector_params": {
              "scopes": "https://www.googleapis.com/auth/drive"
            }
          },
          "result": "resp"
        }
      },
      {
        "get_sheet_info": {
          "call": "http.get",
          "args": {
            "url": "${drive_url + resp.spreadsheetId}",
            "query": {
              "fields": "parents"
            },
            "auth": {
              "type": "OAuth2",
              "scopes": "${drive_auth_scope}"
            }
          },
          "result": "sheet_info"
        }
      },
      {
        "move_sheet": {
          "call": "http.patch",
          "args": {
            "url": "${drive_url + resp.spreadsheetId}",
            "query": {
              "addParents": "${folder_id}",
              "removeParents": "${sheet_info[\"body\"][\"parents\"][0]}"
            },
            "auth": {
              "type": "OAuth2",
              "scopes": "${drive_auth_scope}"
            }
          },
          "result": "resp"
        }
      },
      {
        "return": {
          "return": "${resp}"
        }
      }
    ]
  }
}

Ersetzen Sie FOLDER_ID durch die ID des Ordners, in den Sie die Tabelle verschieben möchten. Jeder Drive-Ordner hat eine eindeutige ID, die Buchstaben, Ziffern, Bindestriche oder Unterstriche enthält. Sie finden die Ordner-ID in der Ordner-URL:

https://drive.google.com/drive/folders/FOLDER_ID/edit#gid=0

Weitere Informationen finden Sie unter Ordner erstellen und befüllen

Die Ausgabe des Workflows sollte in etwa so aussehen, wobei id Wert ist spreadsheetId:

"body": {
    "id": "spreadsheetId",
    "kind": "drive#file",
    "mimeType": "application/vnd.google-apps.spreadsheet",
    "name": "Untitled spreadsheet"
  }

Öffentliches BigQuery-Dataset untersuchen

BigQuery hostet eine Reihe öffentlicher Datasets. die der Allgemeinheit zur Abfrage verfügbar sind.

In BigQuery können Sie interaktiven (On-Demand) Abfragejob. Für Beispiel: Die folgende Abfrage gibt die 100 beliebtesten Namen in einer bestimmten Dataset und schreibt die Ausgabe in eine temporäre Tabelle. Dies ist die Abfrage, der Workflow ausgeführt wird.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie die folgende BigQuery-SQL-Abfrage in den Textbereich des Abfrageeditors:

    SELECT name, gender, SUM(number) AS total
    FROM `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY name, gender
    ORDER BY total DESC
    LIMIT 100
    
  3. Klicken Sie auf Ausführen.

bq

Geben Sie in Ihrem Terminal den folgenden bq query-Befehl ein, um einen mit der Standard-SQL-Syntax erstellen:

    bq query \
    --use_legacy_sql=false \
    'SELECT
      name, gender, SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT 100'

Workflow bereitstellen, der in Google Tabellen schreibt

Stellen Sie einen Workflow bereit, der ein BigQuery-Dataset mithilfe der BigQuery API-Connector Die Ergebnisse werden mithilfe der Google Sheets API-Connector.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf. Seite:

    Zur Seite "Workflows"

  2. Klicken Sie auf  Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein: read-bigquery-write-sheets.

  4. Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.

  5. Wählen Sie für das Dienstkonto die Compute Engine-Standardeinstellung aus. Dienstkonto (PROJECT_NUMBER[email protected]).

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für den Workflow ein:

    main:
        steps:
        - init:
            assign:
            # Replace with your sheetId and make sure the service account
            # for the workflow has write permissions to the sheet
            - sheetId: "1D8n7uoU8kGwQvR4rcLkF10CdAfnUKE2o0yl6P-Z7nfM"
            - limit: 100
        - runQuery:
            call: googleapis.bigquery.v2.jobs.query
            args:
                projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                body:
                    useLegacySql: false
                    # Query name and gender of most popular names
                    query: ${"SELECT name, gender, SUM(number) AS total
                        FROM `bigquery-public-data.usa_names.usa_1910_2013`
                        GROUP BY name, gender
                        ORDER BY total DESC
                        LIMIT " + limit}
            result: queryResult
        - init_header_row:
            assign:
            - rows:
                - ["Name", "Gender", "Total"]
        - process_query_result:
            for:
                value: row
                in: ${queryResult.rows}
                steps:
                - process_each_row:
                    assign:
                    - name: ${row.f[0].v}
                    - gender: ${row.f[1].v}
                    - total: ${row.f[2].v}
                    - row: ["${name}", "${gender}", "${total}"]
                    - rows: ${list.concat(rows, row)}
        - clear_existing_values:
            call: googleapis.sheets.v4.spreadsheets.values.clear
            args:
                range: "Sheet1"
                spreadsheetId: ${sheetId}
            result: clearResult
        - update_sheet:
            call: googleapis.sheets.v4.spreadsheets.values.update
            args:
                range: ${"Sheet1!A1:C" + (limit + 1)}
                spreadsheetId: ${sheetId}
                valueInputOption: RAW
                body:
                    majorDimension: "ROWS"
                    values: ${rows}
            result: updateResult
        - returnResult:
            return: ${updateResult}
  8. Ersetzen Sie den Platzhalterwert sheetId durch Ihren spreadsheetId.

  9. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch read-bigquery-write-sheets.yaml
    
  2. Kopieren Sie in einem Texteditor den folgenden Workflow in Ihre Quellcodedatei:

    main:
        steps:
        - init:
            assign:
            # Replace with your sheetId and make sure the service account
            # for the workflow has write permissions to the sheet
            - sheetId: "1D8n7uoU8kGwQvR4rcLkF10CdAfnUKE2o0yl6P-Z7nfM"
            - limit: 100
        - runQuery:
            call: googleapis.bigquery.v2.jobs.query
            args:
                projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                body:
                    useLegacySql: false
                    # Query name and gender of most popular names
                    query: ${"SELECT name, gender, SUM(number) AS total
                        FROM `bigquery-public-data.usa_names.usa_1910_2013`
                        GROUP BY name, gender
                        ORDER BY total DESC
                        LIMIT " + limit}
            result: queryResult
        - init_header_row:
            assign:
            - rows:
                - ["Name", "Gender", "Total"]
        - process_query_result:
            for:
                value: row
                in: ${queryResult.rows}
                steps:
                - process_each_row:
                    assign:
                    - name: ${row.f[0].v}
                    - gender: ${row.f[1].v}
                    - total: ${row.f[2].v}
                    - row: ["${name}", "${gender}", "${total}"]
                    - rows: ${list.concat(rows, row)}
        - clear_existing_values:
            call: googleapis.sheets.v4.spreadsheets.values.clear
            args:
                range: "Sheet1"
                spreadsheetId: ${sheetId}
            result: clearResult
        - update_sheet:
            call: googleapis.sheets.v4.spreadsheets.values.update
            args:
                range: ${"Sheet1!A1:C" + (limit + 1)}
                spreadsheetId: ${sheetId}
                valueInputOption: RAW
                body:
                    majorDimension: "ROWS"
                    values: ${rows}
            result: updateResult
        - returnResult:
            return: ${updateResult}
  3. Ersetzen Sie den Platzhalterwert sheetId durch Ihren spreadsheetId.

  4. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

    gcloud workflows deploy read-bigquery-write-sheets \
        --source=read-bigquery-write-sheets.yaml \
        --location=us-central1 \
        --service-account=PROJECT_NUMBER[email protected]

    Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Ihre Projektnummer finden Sie auf der Willkommen Seite der Google Cloud Console.

Workflow ausführen und Ergebnisse prüfen

Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.

  1. Führen Sie den Workflow aus:

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Workflows.

      Zur Seite "Workflows"

    2. Wählen Sie auf der Seite Workflows read-bigquery-write-sheets, um die zugehörige Detailseite aufzurufen.

    3. Klicken Sie auf der Seite Workflowdetails auf Ausführen.

    4. Klicken Sie noch einmal auf Ausführen.

    5. Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.

      Die Ausgabe sollte in etwa so aussehen:

      {
      "spreadsheetId": "1pgkNY7mWICA6o6INUNLHGnmk0Tdioh0nUghZPOYPpZA",
      "updatedCells": 303,
      "updatedColumns": 3,
      "updatedRange": "Sheet1!A1:C101",
      "updatedRows": 101
      }
      

    gcloud

    1. Öffnen Sie ein Terminalfenster.

    2. Führen Sie den Workflow aus:

      gcloud workflows run read-bigquery-write-sheets

      Die Ausführungsergebnisse sollten in etwa so aussehen:

      Waiting for execution [4dcf737b-69d9-4081-b8d9-86d39ae86bd1] to complete...done.     
      argument: 'null'
      duration: 3.131912897s
      endTime: '2023-01-25T14:59:46.818828242Z'
      name: projects/918619793306/locations/us-central1/workflows/read-bigquery-write-sheets/executions/4dcf737b-69d9-4081-b8d9-86d39ae86bd1
      result: '{"spreadsheetId":"1pgkNY7mWICA6o6INUNLHGnmk0Tdioh0nUghZPOYPpZA","updatedCells":303,"updatedColumns":3,"updatedRange":"Sheet1!A1:C101","updatedRows":101}'
      startTime: '2023-01-25T14:59:43.686915345Z'
      state: SUCCEEDED
      
  2. Prüfen Sie, ob der Workflow die Ergebnisse der Abfrage in Ihren Tabelle. Zum Beispiel die Anzahl der Spalten und Zeilen in der Tabelle sollte den Werten updatedColumns und updatedRows entsprechen.

Nächste Schritte