使用Python循环执行所有BigQuery作业

2024-04-26 17:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用googlepythonapi来处理BigQuery。在

我试图使用jobs().list()jobs().list_next()来分页 我项目中所有的工作。我使用的是具有以下代码的生成器:

request = service.jobs().list(projectId=project_id,
                              allUsers=True,
                              stateFilter="done",
                              )
                              # or maxResults=500) 
                              # or maxResults=1000) 
                              # or maxResults=64000)
while request is not None:
    response = request.execute()
    for x in response["jobs"]:
        yield x
    request = service.jobs().list_next(request, response)

问题是,根据我如何使用maxResults,我得到了不同的工作列表。在

  • 使用nomaxResults参数,我看到9986个作业。在
  • 使用maxResults=500我看到8596个工作。在
  • 使用maxResults=1000我看到6743个工作。在
  • 使用maxResults=64000我看到6743个作业。在

我希望每次工作的数量都是一样的,所以我不确定是否 我正确地使用了API。在

在项目中循环执行所有作业的正确方法是什么?在


(更新时间:2013年8月14日星期三15:30:29)

还在想办法解决这个问题。我运行了@michaelmanoochehri友好地提供的代码三次,使用了不同的maxResults。关于每次报告的工作数量及其相互关系的各种信息如下:

^{pr2}$

我仍然不明白为什么不管使用的是maxResults,我都没有看到一个一致的作业总数。在


Tags: or项目代码数量responserequestservice作业
1条回答
网友
1楼 · 发布于 2024-04-26 17:17:19

首先,[bigquery_客户端.pyPython模块[1]是从Python访问API的好方法,它构建在原始客户端库的基础上,具有额外的错误处理、分页等功能:

我不确定您是否正确地使用了页面令牌?你能确认你正在检查下一个目标吗?下面是我以前用过的一个例子:

^{1}$

相关问题 更多 >