如何在查询中传递 pageToken 以获取下一组视图?

Posted

技术标签:

【中文标题】如何在查询中传递 pageToken 以获取下一组视图?【英文标题】:How do I pass pageToken in a query to get the next set of views? 【发布时间】:2020-07-16 13:25:25 【问题描述】:

我试图通过在查询选项中添加 maxResults 作为 2 来获得 pageToken 作为响应, 当我在 maxResults 选项中使用该 pageToken (我从以前的代码中得到的响应)时,我没有得到下一组结果, 我得到一个空数组作为响应,我们应该如何将 pageToken 与 query 和 maxResults 一起传递以获取下一组结果?

如果我在选项中使用 pageToken->

const  BigQuery  = require('@google-cloud/bigquery')
const projectId = 'bigqueryproject1-279307'
const keyFilename = './credentials/client_secrets.json'
async function query () 
  const bigqueryClient = new BigQuery( projectId, keyFilename )
  // Queries the U.S. given names dataset for the state of Texas.

  const query = 'SELECT * FROM bigqueryproject1-279307.abcdef12k3.__TABLES__ WHERE type = 2'
  const options = 
    maxResults: 2,
    pageToken: 'BE6GBKCXOMAQAAASA4EAAEEAQCAAKGQEBABBAARAWCXBK==='
  

  const job = await bigqueryClient.query(query, options)
  console.log('******job*****', job)

query()

结果=>

[ [],
  null,
   kind: 'bigquery#getQueryResultsResponse',
    etag: 'taA51Ro5PrAMPypjzfMwCg==',
    schema:  fields: [Array] ,
    jobReference:
      projectId: 'bigqueryproject1-279307',
       jobId: 'a212f570-0d92-4208-92ac-71aa2da82364',
       location: 'US' ,
    totalRows: '0',
    totalBytesProcessed: '0',
    jobComplete: true,
    cacheHit: false  ]

我得到的是空数组作为响应,而不是得到下一个 2 视图

【问题讨论】:

【参考方案1】:

我承认pageToken 参数在jobs.query Bigquery API method 的通用查询request 主体中不存在,因此您也无法在相关的bigquery.query(query, options, callback) 中找到它NodeJS Bigquery 客户端库class 方法也是如此。

为了使用户查询结果分页达到预期效果,您可以考虑在代码中调整job.getQueryResults() 方法,根据定义的maxResultspageToken 属性从查询Job 中获取某些行.

【讨论】:

以上是关于如何在查询中传递 pageToken 以获取下一组视图?的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 查询返回“pagetoken missing” - 查询适用于其他表

如何将一个mongodb请求的结果同步传递到下一个请求的值?

如何在graphql中获取响应中的所有字段而不在查询中传递任何字段名称

使用 order by 子句查询以获取下一条记录

如何从 lambda 函数异步传递红移查询?

如何使用 YouTube API 获取频道名称?