google-bigquery - 在 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
命令,但它们不能作为存储过程的一部分或在一个命令中运行。
解决方案
您可以尝试 Python 脚本选项:
创建具有 UPDATE 语句的脚本文件并命名它们
update_script_1..N
(更改为您喜欢的任何其他模式)运行以下 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()
将等待作业完成,然后再进行另一项作业
推荐阅读
- azure-communication-services - 在 Azure 通信服务英雄聊天应用程序中呈现 HTML 字符串
- c++ - 如何为古代操作系统编译 gcc?
- python - 可以在 env.step 中返回 False 以某种方式为 True 吗?(健身房)
- reactjs - MaterialUI:如何在网格项目内定位项目?
- colors - 如何用另一种颜色替换图像中的一种颜色?
- hybris - Hybris 业务流程轮询
- excel - 用 VBA Excel 编写的包含表单的代码,现在我想转换在 Web 上工作的逻辑?
- debian - debuild - 是否可以通过编译一个 Makefile 的 debuild 构建多个 debian 包
- r - R foreach 循环中的内存溢出,不需要在内存中存储任何内容
- python - Python:使用带有 tox 的 .env (dotenv) 文件