5

特定の時間枠でbqコマンドラインツールを使用してすべてのジョブIDを一覧表示する方法はありますか?私がする必要があるのは、すべてのIDをループして、エラーがあるかどうかを確認することです。

Webインターフェイスを使用してジョブIDを確認し、次のコマンドを使用します。

bq show -j --format=prettyjson job_id

後で、出力の「エラー」部分を手動でコピーして貼り付けます。これには、特定の日のジョブの概要を報告するのに多くの時間がかかります。

4

2 に答える 2

7

もちろん、以下を実行することで、アクセスできるプロジェクトの最新の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()
于 2012-09-20T07:18:02.167 に答える
1

次のシェルスクリプトは、私が報告する必要のあるものに近いものです。

#!/bin/sh
bq ls  -j `bq show | grep ^Project | awk '{print $2}'` | grep "`date +'%d %b'`" | awk '{print $1}' > tosave.txt

for myjob in `cat tosave.txt`
do
bq ls  -j `bq show | grep ^Project | awk '{print $2}'` | grep $myjob

bq show --format=prettyjson -j $myjob | grep -C2 "message" | head

done
于 2012-09-20T08:52:15.310 に答える