使用 Python API 的 Bigquery 更新语句
Posted
技术标签:
【中文标题】使用 Python API 的 Bigquery 更新语句【英文标题】:Bigquery update statement by using Python APIs 【发布时间】:2017-06-22 13:37:14 【问题描述】:在发布此之前,我在互联网上浏览过类似的帖子,但我找不到匹配项。抱歉,如果它已经被回答并且我错过了帖子。
我创建了一个 python 脚本,通过应用引擎将数据从 Google 云存储加载到 BigQuery。由于应用引擎有 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()
【问题讨论】:
你收到traceback
的消息了吗?
这是我收到的错误消息。错误:查询:1.1 - 1.58:无法识别的令牌更新。 (错误代码:invalidQuery)
在您的 JSON 中,您有 'useLegacySql': false
。这是您运行代码的方式吗? false
在 Python 中没有定义,它应该是 False
但解释器仍然应该已经抛出错误。只是要求确认。
我尝试了两种方式“假”和“假”,但得到同样的错误。我发现其中一个线程需要使用“false”而不是“False”,所以我尝试了。
【参考方案1】:
现在更新语句正在工作。需要在 SQL 之前添加标准 SQL。
_qry1 = "#standardSQL"
_qry = _qry1 + "\n" + "UPDATE `tensile-site-168620.temp.temp` SET name1='chaitu1331' WHERE name1='chaitu11'"
表名应该在 `` 这些引号 tensile-site-168620.temp.temp
中,然后更新语句正在工作。谢谢你的帮助。
【讨论】:
以上是关于使用 Python API 的 Bigquery 更新语句的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 API 创建 Bigquery 分区表
如何使用 google-api-python-client 设置 BigQuery 配置属性?
无法使用 BigQuery Python API 设置目标表