Scrivere in Fogli Google da un flusso di lavoro

Fogli Google è una piattaforma per fogli di lavoro che supporta la collaborazione in tempo reale e fornisce strumenti per visualizzare, elaborare e comunicare i dati.

L'esempio seguente mostra come scrivere in Fogli da un flusso di lavoro. Il flusso di lavoro esegue query su un set di dati BigQuery e scrive i risultati in un foglio di lavoro di Fogli. Utilizza Connettori di Workflows per semplificare delle API Google Cloud.

Prima di iniziare

Prima di provare l'esempio in questo documento, assicurati di aver completato per eseguire le operazioni indicate di seguito.

  1. Abilita Compute Engine, Google Drive, Fogli Google e API Workflows.

    Console

    Abilita le API

    gcloud

    gcloud services enable \
        compute.googleapis.com \
        drive.googleapis.com \
        sheets.googleapis.com \
        workflows.googleapis.com
    
  2. Prendi nota Account di servizio predefinito Compute Engine account di servizio così come lo assocerai al flusso di lavoro di esempio per i test scopi. I nuovi progetti che hanno abilitato l'API Compute Engine hanno con il ruolo IAM Editor di base, e con il seguente formato email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Puoi trovare il numero del tuo progetto nella Ti diamo il benvenuto della console Google Cloud oppure puoi recuperare il numero del tuo progetto:

    gcloud projects describe PROJECT_ID
    

    Per gli ambienti di produzione, consigliamo vivamente creazione di un nuovo account di servizio e la concessione di uno o più ruoli IAM contenenti autorizzazioni minime richieste e seguono il principio della privilegio minimo.

  3. Crea una nuova cartella su Google Drive. Questa cartella viene utilizzata per archiviare in un foglio di lavoro. Impostando un'autorizzazione per la cartella condivisa, il flusso di lavoro possono scrivere nel foglio di lavoro.

    1. Accedi a drive.google.com.
    2. Fai clic su Nuovo > Nuova cartella.
    3. Inserisci un nome per la cartella.
    4. Fai clic su Crea.
    5. Fai clic con il pulsante destro del mouse sulla nuova cartella e seleziona Condividi.
    6. Aggiungi l'indirizzo email per il servizio predefinito di Compute Engine .

      L'account di servizio potrà accedere alla cartella. Quando associ l'account di servizio con il tuo flusso di lavoro, il flusso di lavoro avrà l'accesso a qualsiasi file nella cartella. Scopri di più sulla condivisione di file, cartelle e unità pubblicitarie.

    7. Seleziona il ruolo Editor.

    8. Deseleziona la casella di controllo Invia notifiche.

    9. Fai clic su Condividi.

Creazione di un foglio di lavoro

Puoi creare un foglio di lavoro in uno dei seguenti modi:

Non c'è un'opzione per creare un foglio di lavoro direttamente in una cartella specificata utilizzando l'API Fogli Google. Tuttavia, esistono alternative, tra cui spostare il foglio di lavoro in un foglio di lavoro una cartella dopo averla creata, come negli esempi seguenti. Per maggiori informazioni le informazioni, vedi Utilizzare le cartelle di Google Drive.

Creare un foglio di lavoro con Fogli Google

Quando crei un foglio di lavoro con Fogli Google, viene salvato in Google Drive. Per impostazione predefinita, il foglio di lavoro viene salvato nella cartella principale Drive.

  1. Vai a sheets.google.com.

  2. Fai clic su Nuovo Plus.

    Il nuovo foglio di lavoro viene creato e aperto. Ogni foglio di lavoro ha un indirizzo spreadsheetId, contenenti lettere, numeri, trattini o trattini bassi. Puoi trovare ID foglio di lavoro in un URL di Fogli Google:

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

  3. Prendi nota di questo ID perché sarà necessario durante la creazione del flusso di lavoro.

  4. Sposta il foglio di lavoro nella cartella Google Drive che hai creato in precedenza:

    1. Nel foglio di lavoro, seleziona File > Sposta.
    2. Vai alla cartella che hai creato.
    3. Fai clic su Sposta.

Creare un foglio di lavoro utilizzando il connettore dell'API Fogli Google

Puoi utilizzare lo Connettore API Fogli Google per creare un foglio di lavoro. Poiché Workflows utilizza l'account di servizio, come identità trigger, il foglio di lavoro viene creato nel account di servizio Cartella principale di Google Drive. Puoi quindi spostare il foglio di lavoro in un altro .

Nel flusso di lavoro seguente, il campo spreadsheetId è recuperate dal risultato di resp:

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}"
        }
      }
    ]
  }
}

Sostituisci FOLDER_ID con l'ID della cartella in cui desideri vuoi spostare il foglio di lavoro. Ogni cartella di Drive ha un ID contenente lettere, numeri, trattini o trattini bassi. Puoi trovare ID cartella nell'URL della cartella:

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

Per ulteriori informazioni, vedi Crea e compila le cartelle.

L'output del flusso di lavoro dovrebbe essere simile al seguente, in cui id è spreadsheetId:

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

esplora il set di dati pubblico BigQuery

BigQuery ospita numerosi set di dati pubblici disponibili al pubblico generale.

In BigQuery, puoi eseguire job di query interattive (on demand). Per Ad esempio, la seguente query restituisce i 100 nomi più popolari in una determinata e scrive l'output in una tabella temporanea. Questa è la query che durante l'esecuzione del flusso di lavoro.

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Inserisci la seguente query SQL BigQuery nel Area di testo Editor di 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 100
    
  3. Fai clic su Esegui.

bq

Nel terminale, inserisci questo comando bq query per eseguire un'operazione query interattiva con la sintassi SQL standard:

    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'

esegui il deployment di un flusso di lavoro che scrive in Fogli

Esegui il deployment di un flusso di lavoro che esegue query su un set di dati BigQuery utilizzando Connettore API BigQuery che scrive i risultati in un foglio di lavoro di Fogli utilizzando Connettore dell'API Fogli Google.

Console

  1. Nella console Google Cloud, vai a Workflows pagina:

    Vai a Flussi di lavoro

  2. Fai clic su Crea.

  3. Inserisci un nome per il nuovo flusso di lavoro: read-bigquery-write-sheets.

  4. Nell'elenco Regione, seleziona us-central1 (Iowa).

  5. In Account di servizio, seleziona l'impostazione predefinita di Compute Engine account di servizio (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  6. Fai clic su Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo flusso di lavoro:

    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. Sostituisci il valore del segnaposto sheetId con il tuo spreadsheetId.

  9. Fai clic su Esegui il deployment.

gcloud

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch read-bigquery-write-sheets.yaml
    
  2. In un editor di testo, copia il seguente flusso di lavoro nel file del codice sorgente:

    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. Sostituisci il valore del segnaposto sheetId con il tuo spreadsheetId.

  4. Esegui il deployment del flusso di lavoro inserendo il comando seguente:

    gcloud workflows deploy read-bigquery-write-sheets \
        --source=read-bigquery-write-sheets.yaml \
        --location=us-central1 \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Sostituisci PROJECT_NUMBER con il tuo Google Cloud del progetto. Puoi trovare il numero del tuo progetto nella Ti diamo il benvenuto della console Google Cloud.

Esegui il flusso di lavoro e verifica i risultati

L'esecuzione di un flusso di lavoro esegue la definizione attuale del flusso di lavoro associata un flusso di lavoro di machine learning.

  1. Esegui il flusso di lavoro:

    Console

    1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

      Vai a Flussi di lavoro

    2. Nella pagina Flussi di lavoro, seleziona la read-bigquery-write-sheets per accedere alla relativa pagina dei dettagli.

    3. Nella pagina Dettagli flusso di lavoro, fai clic su Esegui.

    4. Fai di nuovo clic su Esegui.

    5. Visualizza i risultati del flusso di lavoro nel riquadro Output.

      L'output dovrebbe essere simile al seguente:

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

    gcloud

    1. Apri un terminale.

    2. Esegui il flusso di lavoro:

      gcloud workflows run read-bigquery-write-sheets

      I risultati dell'esecuzione dovrebbero essere simili ai seguenti:

      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. Verifica che il flusso di lavoro abbia scritto i risultati della query nel tuo in un foglio di lavoro. Ad esempio, il numero di colonne e righe del foglio di lavoro deve corrispondere ai valori updatedColumns e updatedRows.

Passaggi successivi