是否有办法在给定的时间范围内使用bq命令行工具列出所有作业ID?我需要做的是循环遍历所有的Id,并找出是否有任何错误。所有bq作业的摘要
我使用web界面了解作业的ID,然后使用命令:
后来我将手动复制粘贴输出的“错误”的一部分。这需要很长时间来报告给定日期的工作总结。
是否有办法在给定的时间范围内使用bq命令行工具列出所有作业ID?我需要做的是循环遍历所有的Id,并找出是否有任何错误。所有bq作业的摘要
我使用web界面了解作业的ID,然后使用命令:
后来我将手动复制粘贴输出的“错误”的一部分。这需要很长时间来报告给定日期的工作总结。
当然,你可以通过运行列出直到最后1000个工作岗位供您有访问一个项目:
bq ls -j --max_results=1000 project_number
如果你有超过1000个就业机会,你也可以写一个Python脚本来列出通过结果的1000批次分页的所有作业 - 像这样:
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()
#出现错误#oauth2client.clientsecrets.InvalidClientSecretsError:File找不到:“client_secrets.json” – shantanuo
是的,上面的脚本需要客户端ID和秘密,因为它使用OAuth ...请参阅:https://developers.google.com/bigquery/docs/authorization#clientsecrets –
您可以还可以使用服务器到服务器的服务帐户身份验证编写这些脚本(实际上,这对于位于服务器上的自动化脚本来说是更好的策略)......请参阅https://developers.google.com/bigquery/docs/授权#服务帐户服务器 –
下面的脚本是接近我需要报告。
#!/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
bq ls -j'bq show | grep ^项目| awk'{print $ 2}''| grep“'date +'%d%b''”| awk'{print $ 1}'#这是穷人的解决方案并不如以下所示的那样优雅 – shantanuo
实际上,将结果输送到流处理器可以非常优雅:-) –