Pagina un conjunto de resultados de BigQuery

Si intentas recuperar los resultados de una consulta en un conjunto de datos de BigQuery que es mayor que el límite de memoria de flujos de trabajo, puedes usar un token de página para paginar los resultados. El token de la página representa la posición en el conjunto de resultados y se muestra cuando hay más resultados disponibles. Esto te permite desplazarte por una página de resultados a la vez.

BigQuery aloja una serie de conjuntos de datos públicos que están disponibles para el público general. En el siguiente ejemplo, debes consultar el conjunto de datos públicos de datos de nombres de EE.UU. para determinar los nombres más comunes en EE.UU entre 1910 y 2013.

YAML

main:
  params: [input]
  steps:
  - init:
      assign:
          - pageToken: null
  - startQuery:
      call: googleapis.bigquery.v2.jobs.query
      args:
          projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
          body:
              useLegacySql: false
              # Remove LIMIT from the query to iterate through all results
              query:
                  SELECT name, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name ORDER BY total DESC LIMIT 50
      result: query
  - getPage:
      call: googleapis.bigquery.v2.jobs.getQueryResults
      args:
          projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
          jobId: ${query.jobReference.jobId}
          maxResults: 10
          pageToken: ${pageToken}
      result: page
  - processPage:
      for:
          value: row
          in: ${page.rows}
          steps:
              - processRow:
                  call: sys.log
                  args:
                      data: ${row}
  - checkIfDone:
      switch:
          - condition: ${"pageToken" in page and page.pageToken != ""}
            assign:
              - pageToken: ${page.pageToken}
            next: getPage

JSON

{
  "main": {
    "params": [
      "input"
    ],
    "steps": [
      {
        "init": {
          "assign": [
            {
              "pageToken": null
            }
          ]
        }
      },
      {
        "startQuery": {
          "call": "googleapis.bigquery.v2.jobs.query",
          "args": {
            "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}",
            "body": {
              "useLegacySql": false,
              "query": "SELECT name, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name ORDER BY total DESC LIMIT 50"
            }
          },
          "result": "query"
        }
      },
      {
        "getPage": {
          "call": "googleapis.bigquery.v2.jobs.getQueryResults",
          "args": {
            "projectId": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}",
            "jobId": "${query.jobReference.jobId}",
            "maxResults": 10,
            "pageToken": "${pageToken}"
          },
          "result": "page"
        }
      },
      {
        "processPage": {
          "for": {
            "value": "row",
            "in": "${page.rows}",
            "steps": [
              {
                "processRow": {
                  "call": "sys.log",
                  "args": {
                    "data": "${row}"
                  }
                }
              }
            ]
          }
        }
      },
      {
        "checkIfDone": {
          "switch": [
            {
              "condition": "${\"pageToken\" in page and page.pageToken != \"\"}",
              "assign": [
                {
                  "pageToken": "${page.pageToken}"
                }
              ],
              "next": "getPage"
            }
          ]
        }
      }
    ]
  }
}

¿Qué sigue?