summary of all bq jobs

后端 未结 2 1865
情歌与酒
情歌与酒 2021-01-03 02:42

Is there a way to list all job id\'s using bq command line tool for a given timeframe? What I need to do is to loop through all Id\'s and find if there is any error.

2条回答
  •  攒了一身酷
    2021-01-03 03:03

    Sure, you can list up to the last 1,000 jobs for a project you have access to by running:

    bq  ls -j --max_results=1000 project_number
    

    If you have more than 1,000 jobs, you can also write a Python script to list all jobs by paging through results in batches of 1,000 - like so:

    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()
    

提交回复
热议问题