2017-06-22 42 views
0

在发布之前,我在互联网上浏览过类似帖子,但找不到匹配项。道歉,如果它已经回答,我错过了职位。通过使用Python API的Bigquery更新声明

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

如果我取消选择“使用旧版SQL”,但未使用API​​,update语句在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() 
+0

你有一些'traceback'消息吗? –

+0

这是我收到的错误信息。 错误: 查询:1.1 - 1.58:无法识别的令牌更新。 (错误代码:invalidQuery) – user374374

+0

在你的JSON中你有''useLegacySql':false'。它是如何运行你的代码? 'false'在Python中没有定义,它应该是'False',但解释器仍然应该抛出一个错误。要求确认。 –

回答

0

现在更新语句正在工作。需要在SQL之前添加standardSQL。

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

表的名称应与``这些报价tensile-site-168620.temp.temp然后更新语句工作。谢谢你的帮助。