通过Python脚本编写用于执行BigQuery的参数脚本时出错

通过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

我正在尝试调整在中找到的asynch_query.py脚本,以用于执行查询并将输出转到BigQuery表。我创建用于设置参数的脚本的JSON部分如下所示:

    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。更改会产生新错误。至少这让我通过了参数丢失错误。转到下一个错误。;-)谢谢