使用Python API进行Bigquery更新语句

时间:2017-06-22 13:37:15

标签: google-bigquery

在发布之前,我已经在互联网上发过类似的帖子,但我找不到匹配。抱歉,如果它已经回答,我错过了帖子。

我创建了一个python脚本,通过app引擎将数据从Google云存储加载到BigQuery。由于app引擎具有60秒超时窗口,因此希望以异步模式提交这些作业,并希望将JOB ID存储在其中一个bigquery表中。另一个脚本将保留作业的状态,如果作业是“完成”,则拉出结果并更新该表中已完成的作业状态。这样下次我就不会检查同一工作的工作状态了。

如果我取消选择“使用旧版SQL”但不使用API​​,则更新语句在Web控制台中正常工作。我尝试了不同的方法,比如在查询前使用#standardSQL,但没有运气。

_qry = "update temp.temp set name1='xyz1' where name1='hjk'"

    job_data = {
        'jobReference': {
            'projectId': cfg._projectid,
            'job_id': str(uuid.uuid4())
        },
        'configuration': {
            'query': {
                'query': _qry,
                'timeoutMs': 60000,
                'useLegacySql': false
                },
                'allowLargeResults': True,
                'priority': 'BATCH'
            }
        }
    _jbslist = _bq.jobs()
    _jbq_response =   _jbslist.insert(projectId=_projectid,body=job_data).execute()

_jbslist = _bq.jobs()
    _job = None
    _job = 
_jbslist.get(projectId=_projectid,jobId=_jbq_response['jobReference']['jobId']).execute()

1 个答案:

答案 0 :(得分:0)

现在Update语句正在运行。需要在SQL之前添加standardSQL。

    _qry1 = "#standardSQL"
    _qry  = _qry1 + "\n" + "UPDATE `tensile-site-168620.temp.temp` SET name1='chaitu1331' WHERE name1='chaitu11'"

表名应该在``这些引号tensile-site-168620.temp.temp中,然后更新语句正在工作。谢谢你的帮助。