首页 > 解决方案 > 在 Google BigQuery 中将更新作为单独的作业/进程执行

问题描述

我正在使用一个脚本作为存储过程 Google Bigquery,它在同一个表上有多个单独的(20+)更新。更新示例:

UPDATE
    mytable to_update
SET to_update.myfield = to_update.myfield + 20
FROM mytable
  INNER JOIN second_table 
  ON second_table.id = first_table.id
WHERE some_rules are TRUE
  AND to_update.id = mytable.id;

当作为一个整体运行脚本或调用存储过程时,我正在达到 BigQuery 的日期和表的更新配额。但是,当我一个接一个地执行所有更新在浏览器客户端中运行选定的选项)时,它运行良好。

我的问题是如何像手动逐个(单独)运行一样自动执行所有更新。

我尝试了单独BEGIN - END的对和EXECUTE IMMEDIATELY命令,但它们不能作为存储过程的一部分或在一个命令中运行。

标签: google-bigquery

解决方案


您可以尝试 Python 脚本选项:

  1. 创建具有 UPDATE 语句的脚本文件并命名它们update_script_1..N(更改为您喜欢的任何其他模式)

  2. 运行以下 Python 脚本

Python脚本:

from google.cloud import bigquery

def runSql(updateQry):
    bigqueryClient = bigquery.Client()
    sqlJob = bigqueryClient.query(updateQry)
    sqlJob.result()
    return 0

for i in range(20):
    fileName = "update_script_" + str(i+1) + ".sql"
    f = open(fileName, "r")
    updateQry = f.read()
    runSql(updateQry)
    print("Script {} Executed".format(fileName))

注意:
sqlJob.result()将等待作业完成,然后再进行另一项作业


推荐阅读