google-bigquery - 所有 bq 作业的摘要

标签 google-bigquery

有没有办法在给定的时间范围内使用 bq 命令行工具列出所有作业 ID?我需要做的是遍历所有 Id 并查找是否有任何错误。

我使用 Web 界面来了解作业 ID,然后使用以下命令:

bq show -j --format=prettyjson job_id

后来我会手动复制粘贴输出的“错误”部分。这需要大量时间来报告给定日期的工作摘要。

最佳答案

当然,您可以通过运行以下命令列出您有权访问的项目的最后 1,000 个作业:

bq  ls -j --max_results=1000 project_number

如果您有超过 1,000 个作业,您还可以编写一个 Python 脚本,通过分页结果以 1,000 个为一组来列出所有作业 - 如下所示:
import httplib2
import pprint
import sys

from apiclient.discovery import build
from apiclient.errors import HttpError

from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run


# Enter your Google Developer Project number
PROJECT_NUMBER = 'XXXXXXXXXXXX'

FLOW = flow_from_clientsecrets('client_secrets.json',
                               scope='https://www.googleapis.com/auth/bigquery')



def main():

  storage = Storage('bigquery_credentials.dat')
  credentials = storage.get()

  if credentials is None or credentials.invalid:
    credentials = run(FLOW, storage)

  http = httplib2.Http()
  http = credentials.authorize(http)

  bigquery_service = build('bigquery', 'v2', http=http)
  jobs = bigquery_service.jobs()

  page_token=None
  count=0

  while True:
    response = list_jobs_page(jobs, page_token)
    if response['jobs'] is not None:
      for job in response['jobs']:
        count += 1
        print '%d. %s\t%s\t%s' % (count,
                                  job['jobReference']['jobId'],
                                  job['state'],
                                  job['errorResult']['reason'] if job.get('errorResult') else '')
    if response.get('nextPageToken'):
      page_token = response['nextPageToken']
    else:
      break


def list_jobs_page(jobs, page_token=None):
  try:
    jobs_list = jobs.list(projectId=PROJECT_NUMBER,
                          projection='minimal',
                          allUsers=True,
                          maxResults=1000,
                          pageToken=page_token).execute()

    return jobs_list

  except HttpError as err:
    print 'Error:', pprint.pprint(err.content)


if __name__ == '__main__':
  main()

关于google-bigquery - 所有 bq 作业的摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507224/

相关文章:

python - BigQuery 插入作业而不是流式处理

sql - 能够获取 BigQuery 中每个数组条目的 "index"(或序数值)吗?

google-bigquery - Bigquery 相关链接不起作用。

google-bigquery - 创建具有一组固定值范围的累积计数的 View

google-bigquery - 使用 BigQuery Jupyter 魔术命令时,将 Python 环境中的变量添加到查询中

google-bigquery - 谷歌 bigquery 中的 ROWNUM 或 ROWID

python - 在 AI-Platform-Notebooks 中使用 BigQuery 的 ContextualVersionConflict

firebase - 如何将 Firebase BigQuery 集成 'Dataset Time To Live' 从 60 天更改为永不过期?

google-bigquery - BigQuery 相当于 COALESCE()?

sql - 如何在 Data Studio BigQuery 社区连接器的 SQL 查询中包含日期范围