使用 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 配置属性?

使用 Python API 的 Bigquery 更新语句

无法使用 BigQuery Python API 设置目标表

BigQuery:使用 python BQ API 向现有表添加新列

使用 Python 客户端的 Google BigQuery API