通过Python脚本编写用于执行BigQuery的参数脚本时出错
我正在尝试调整在中找到的asynch_query.py脚本,以用于执行查询并将输出转到BigQuery表。我创建用于设置参数的脚本的JSON部分如下所示:通过Python脚本编写用于执行BigQuery的参数脚本时出错,python,google-bigquery,Python,Google Bigquery,我正在尝试调整在中找到的asynch_query.py脚本,以用于执行查询并将输出转到BigQuery表。我创建用于设置参数的脚本的JSON部分如下所示: job_data = { 'jobReference': { 'projectId': project_id, 'job_id': str(uuid.uuid4()) }, 'configuration': { 'query
job_data = {
'jobReference': {
'projectId': project_id,
'job_id': str(uuid.uuid4())
},
'configuration': {
'query': {
'query': queryString,
'priority': 'BATCH' if batch else 'INTERACTIVE',
'createDisposition': 'CREATE_IF_NEEDED',
'defaultDataset': {
'datasetId': 'myDataset'
},
'destinationTable': {
'datasetID': 'myDataset',
'projectId': project_id,
'tableId': 'testTable'
},
'tableDefinitions': {
'(key)': {
'schema': {
'fields': [
{
'description': 'eventLabel',
'fields': [],
'mode': 'NULLABLE',
'name': 'eventLabel',
'type': 'STRING'
}]
}
}
}
}
}
}
当我运行脚本时,会收到一条错误消息,“缺少必需的参数”。我已经阅读了文档,试图找出遗漏了什么,但是尝试各种配置都失败了。任何人都能确定缺少了什么以及我将如何修复此错误吗?不确定发生了什么。要将查询结果插入另一个表,我使用以下代码:
def create_table_from_query(connector, query,dest_table):
body = {
'configuration': {
'query': {
'destinationTable': {
'projectId': your_project_id,
'tableId': dest_table,
'datasetId': your_dataset_id
},
'writeDisposition': 'WRITE_TRUNCATE',
'query': query,
},
}
}
response = connector.jobs().insert(projectId=self._project_id,
body=body).execute()
wait_job_completion(response['jobReference']['jobId'])
def wait_job_completion(connector, job_id):
while True:
response = connector.jobs().get(projectId=self._project_id,
jobId=job_id).execute()
if response['status']['state'] == 'DONE':
return
其中,connector
是build('bigquery','v2',http=authorization)
也许您可以从那里开始,继续添加新字段(注意,您不必定义表的架构,因为它已经包含在查询结果中)。在
destinationTable
对象中,我想您应该命名键datasetId
,而不是datasetId
。不过,我不知道这是否能解决问题。同样在jobReference
中,您应该指定jobId
,而不是job\u id
。Danny,关于需要更改的datasetID,您是正确的。但是,作业id确实需要保留为作业id。更改会产生新错误。至少这让我通过了参数丢失错误。转到下一个错误。;-)谢谢