Escribe en Hojas de cálculo de Google desde un flujo de trabajo

Hojas de cálculo de Google es una herramienta de solución de hojas de cálculo que permite la colaboración en tiempo real y proporciona herramientas para visualizar, procesar y comunicar datos.

En el siguiente ejemplo, se muestra cómo escribir en Hojas de cálculo de un flujo de trabajo. El flujo de trabajo consulta un conjunto de datos de BigQuery y escribe los resultados a un archivo de Hojas de cálculo. Utiliza Conectores de flujos de trabajo para simplificar el a las APIs de Google Cloud.

Antes de comenzar

Antes de probar el ejemplo de este documento, asegúrate de haber completado lo siguiente.

  1. Habilita las instancias de Compute Engine, Google Drive, Hojas de cálculo de Google y Workflows de Google Cloud.

    Console

    Habilita las API

    gcloud

    gcloud services enable \
        compute.googleapis.com \
        drive.googleapis.com \
        sheets.googleapis.com \
        workflows.googleapis.com
    
  2. Toma nota de las Cuenta de servicio predeterminada de Compute Engine cuenta de servicio, ya que la asociarás con el flujo de trabajo de ejemplo para probar comerciales. Los proyectos nuevos que habilitaron la API de Compute Engine tienen esta cuenta de servicio creada con el rol de Editor básico de IAM y con el siguiente formato de correo electrónico:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Puedes encontrar el número de tu proyecto en la Te damos la bienvenida de la consola de Google Cloud o recuperar el número de tu proyecto:

    gcloud projects describe PROJECT_ID
    

    Para entornos de producción, recomendamos crear una cuenta de servicio nueva y otorgarle uno o más roles de IAM que contengan el permisos mínimos obligatorios y siguen el principio de privilegio mínimo.

  3. Crea una carpeta nueva en Google Drive. Esta carpeta se usa para almacenar tu en una hoja de cálculo. Si configuras un permiso para la carpeta compartida, tu flujo de trabajo tiene permitido escribir en la hoja de cálculo.

    1. Ve a drive.google.com.
    2. Haz clic en Nuevo > Nueva carpeta.
    3. Ingresa un nombre para la carpeta.
    4. Haz clic en Crear.
    5. Haz clic con el botón derecho en la carpeta nueva y selecciona Compartir.
    6. Agrega la dirección de correo electrónico para el servicio predeterminado de Compute Engine de servicio predeterminada.

      Esto le da a la cuenta de servicio acceso a la carpeta. Cuando asocias a la cuenta de servicio con tu flujo de trabajo, este tendrá permiso acceso a cualquier archivo de la carpeta. Más información sobre compartir archivos, carpetas y unidades.

    7. Selecciona el rol Editor.

    8. Desmarca la casilla de verificación Enviar notificaciones a las personas.

    9. Haz clic en Compartir

Crear una hoja de cálculo

Puedes crear una hoja de cálculo de cualquiera de las siguientes maneras:

No es posible crear una hoja de cálculo directamente en una carpeta especificada con la API de Google Sheets. Sin embargo, existen alternativas, como mover la hoja de cálculo a un lugar específico una vez creada, como se hace en los siguientes ejemplos. Para ver más información, consulta Trabaja con carpetas de Google Drive.

Crea una hoja de cálculo con Hojas de cálculo de Google

Cuando creas una hoja de cálculo a través de Google Sheets, se guarda en Google Drive De forma predeterminada, la hoja de cálculo se guarda en tu carpeta raíz en Drive

  1. Ve a sheets.google.com.

  2. Haz clic en Nuevo Plus.

    Esto creará y abrirá tu nueva hoja de cálculo. Cada hoja de cálculo tiene un valor spreadsheetId, que contenga letras, números, guiones o guiones bajos. Puedes encontrar el ID de hoja de cálculo en una URL de Hojas de cálculo de Google:

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

  3. Ten en cuenta este ID, ya que lo necesitarás cuando crees tu flujo de trabajo.

  4. Mueve la hoja de cálculo a la carpeta de Google Drive que creaste. anteriormente:

    1. En la hoja de cálculo, selecciona Archivo > Mover.
    2. Navega a la carpeta que creaste.
    3. Haz clic en Mover.

Crear una hoja de cálculo con el conector de la API de Google Sheets

Puedes usar la Conector de la API de Hojas de cálculo de Google para crear una hoja de cálculo. Como Workflows usa la cuenta de servicio como la identidad del activador, la hoja de cálculo se crea en el directorio Carpeta raíz de Google Drive. Luego, puedes mover la hoja de cálculo a otro carpeta.

En el siguiente flujo de trabajo, spreadsheetId es Se recupera del resultado 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}"
        }
      }
    ]
  }
}

Reemplaza FOLDER_ID por el ID de la carpeta a la que quieres acceder. quieres mover la hoja de cálculo. Cada carpeta de Drive tiene un ID que contenga letras, números, guiones o guiones bajos. Puedes encontrar el ID de la carpeta en la URL de la carpeta:

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

Para obtener más información, consulta Crea y propaga carpetas.

El resultado del flujo de trabajo debe ser similar al siguiente, en el que id valor es spreadsheetId:

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

Explora el conjunto de datos públicos de BigQuery

BigQuery aloja varios conjuntos de datos públicos que están disponibles para que el público en general los consulte.

En BigQuery, puedes ejecutar un trabajo de consulta interactivo (a pedido). Para ejemplo, la siguiente consulta devuelve los 100 nombres más populares de una conjunto de datos y escribe el resultado en una tabla temporal. Esta es la consulta que tu se ejecutará el flujo de trabajo.

Console

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

    Ir a BigQuery

  2. Ingresa la siguiente consulta en SQL de BigQuery Área de texto del Editor de consultas:

    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. Haz clic en Ejecutar.

bq

En la terminal, ingresa el siguiente comando bq query para ejecutar una consulta interactiva con la sintaxis de SQL estándar:

    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'

Implementa un flujo de trabajo que escribe en Hojas de cálculo

Implementar un flujo de trabajo que consulte un conjunto de datos de BigQuery con Conector de la API de BigQuery y escribe los resultados en un documento de Hojas de cálculo con la función Conector de la API de Hojas de cálculo de Google.

Console

  1. En la consola de Google Cloud, ve a Workflows página:

    Ir a Workflows

  2. Haz clic en  Crear.

  3. Ingresa un nombre para el flujo de trabajo nuevo: read-bigquery-write-sheets.

  4. En la lista Región, selecciona us-central1 (Iowa).

  5. En Cuenta de servicio, selecciona la configuración predeterminada de Compute Engine cuenta de servicio (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  6. Haz clic en Siguiente.

  7. En el editor de flujos de trabajo, ingresa la siguiente definición para tu flujo de trabajo:

    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. Reemplaza el valor del marcador de posición sheetId por tu spreadsheetId

  9. Haga clic en Implementar.

gcloud

  1. Crea un archivo de código fuente para tu flujo de trabajo:

    touch read-bigquery-write-sheets.yaml
    
  2. En un editor de texto, copia el siguiente flujo de trabajo en tu archivo de código fuente:

    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. Reemplaza el valor del marcador de posición sheetId por tu spreadsheetId

  4. Para implementar el flujo de trabajo, ingresa el siguiente comando:

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

    Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud. Puedes encontrar el número de tu proyecto en la Te damos la bienvenida de la consola de Google Cloud.

Ejecuta el flujo de trabajo y verifica los resultados

Cuando se ejecuta un flujo de trabajo, se ejecuta la definición del flujo de trabajo actual asociada con el en el flujo de trabajo.

  1. Ejecuta el flujo de trabajo:

    Console

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

      Ir a Workflows

    2. En la página Flujos de trabajo, selecciona la read-bigquery-write-sheets para ir a su página de detalles.

    3. En la página Detalles del flujo de trabajo, haz clic en Ejecución.

    4. Haz clic de nuevo en Ejecutar.

    5. Observa los resultados del flujo de trabajo en el panel Output.

      El resultado debería ser similar al siguiente ejemplo:

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

    gcloud

    1. Abre una terminal.

    2. Ejecuta el flujo de trabajo:

      gcloud workflows run read-bigquery-write-sheets

      Los resultados de la ejecución deberían ser similares a los siguientes:

      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 que el flujo de trabajo haya escrito los resultados de la consulta en tu en una hoja de cálculo. Por ejemplo, el número de columnas y filas en la hoja de cálculo debe coincidir con los valores updatedColumns y updatedRows.

¿Qué sigue?