BigQuery 작업을 잡으려고이 논리를 사용하고 있습니다. 이 성공했는지 여부는 알지만 때로는 성공적인 작업 ID이기 때문에 심지어 작업을 실행하여 쿼리를 실행했지만 행을 삽입하지 않았습니다.BigQuery 작업 상태 논리
주로 테이블에 대한 쿼리와 함께 발생합니다.
나는 Google 문서에서 본 코드를 사용하여 약간의 로그를 조금 추가합니다.
누군가 내가 잘못하고있는 것을 말할 수 있다면 좋을 것입니다.
데프 _wait_for_response (자기, bq_api, insert_response, max_wait_time = 3600) : "" "BigQuery의 작업 상태를 확인 DONE 대기 및 오류를 확인 을 오류가있는 경우 - 예외를 발생.." ""
start_time = time.time()
logstr.info(current_module='bq_session',
current_func='_wait_for_response')
# sleep interval between retries
# first, try 8 times every 1 second, then double sleep time until
# 30 seconds (and stay on 30 until max_wait_time is reached)
sleep = itertools.chain(itertools.repeat(1, 8), xrange(2, 30, 3),
itertools.repeat(30))
while time.time() - start_time < max_wait_time:
try:
job = bq_api.jobs().get(
projectId=insert_response['jobReference']['projectId'],
jobId=insert_response['jobReference']['jobId']).execute()
# on job end
if job['status']['state'] == 'DONE':
# if job failed raise error(s)
if 'errors' in job['status'].keys() and\
job['status']['errors']:
raise Exception(','.join(
[err['message']
for err in job['status']['errors']]))
else:
return job
except apiclient.errors.HttpError, error:
status = int(error.resp.get('status', 0))
if status >= 500:
pass
# raise Exception(
# global_messages.BQ_SERVER_ERROR.format(err=error))
elif status == 404:
raise Exception(
global_messages.BQ_JOB_NOT_FOUND.format(
jobid=insert_response['jobReference']['jobId']))
else:
raise Exception(
global_messages.BQ_ERROR_GETTING_JOB_STATUS.format(
err=error))
time.sleep(sleep.next())
raise Exception(global_messages.BQ_TIMEOUT.format(
time=max_wait_time,
jobid=insert_response['jobReference']['jobId']))
을 스크립트 원인 컨트롤의
보고있는 문제에 대한 추가 정보를 제공해주십시오. –
내 직업이 suceesully가 실행되는지 아닌지, 내가 추가하는 스크립트에 따라 알 수 있습니다. 때로는 오류없이 완료된 상태이기 때문에 작업이 테이블에 데이터를로드하지 않는 것을 볼 수 있습니다. Google에서 일자리 ID를 보냈을 때 서버 오류 (내부 오류)로 인해 작업이 실패하고이 오류를 잡아야한다고 대답했습니다. 나는 내가 추가 한 스크립트 논리에 왜 그것을 잡지 못했는지 알고 싶다. –