处理这种类型的错误可能需要进行一些调试。以下是一个示例代码,其中展示了如何使用jobInternalError来获取更多有用的信息,并根据情况采取不同的行动。
from google.cloud import bigquery
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
job_config.allow_large_results = True
QUERY = (
'SELECT *
FROM `bigquery-public-data.samples.gsod`'
)
query_job = client.query(
QUERY,
job_config=job_config,
)
while True:
try:
rows = query_job.result()
break
except Exception as e:
if 'jobInternalError' in str(e):
errors = query_job.errors
error_row = errors[0]['location']['rowNumber']
error_col = errors[0]['location']['columnNumber']
error_msg = errors[0]['message']
print(f'Error occurred at row {error_row}, col {error_col}: {error_msg}')
# Depending on the error message, you may want to retry the job or modify the query before retrying.
break
else:
raise e
for row in rows:
... # process the output
在上述示例中,我们首先配置了一个QueryJobConfig,以允许大型结果。然后我们执行一个查询,并通过轮询result()获取结果。如果出现jobInternalError,我们会获取额外的错误信息,然后采取适当的行动,例如重试作业或修改查询。如果没有jobInternalError,则我们将引发原始异常。