使用 Python API 的 Bigquery 更新语句



在发布此内容之前,我在互联网上浏览了类似的帖子,但我找不到匹配项。抱歉,如果已经回答并且我错过了帖子。

我创建了一个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()

Now Update 语句正在工作。需要在 SQL 之前添加标准 SQL。

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

表名应该在 '' 这些引号中,tensile-site-168620.temp.temp然后更新语句就可以工作了。感谢您的帮助。

最新更新