python - 使用 Python 在 Google BigQuery 中创建每周计划的查询作业
问题描述
我有一个函数应该查询一个表并保存一个与查询作业完成日期相对应的表。
def Query_Schedule(request):
from google.cloud import bigquery
from google.cloud.bigquery.job import QueryJobConfig
from datetime import datetime
today = datetime.today()
client = bigquery.Client(project='project-id')
query_string = """SELECT * FROM dataset.table"""
dataset = client.dataset('dataset')
table = dataset.table('table_{}_{}_{}'.format(today.month, today.day, today.year))
cfg = QueryJobConfig()
cfg.use_legacy_sql = False
cfg.destination = table
cfg.write_disposition = 'WRITE_EMPTY'
cfg.timeout_ms = 60000
job = client.query(query=query_string, job_id='weekly-table-creation', job_config=cfg)
return job
在参考了这个问题并将其调整为最新的文档后,我仍然遇到错误,
错误:函数终止。建议的操作:检查日志以了解终止原因。详细信息:409 POST https://bigquery.googleapis.com/bigquery/v2/projects/project-id/jobs:已经存在:工作项目 ID:US.weekly-table-creation
(作业 ID:每周表创建)
-----查询作业SQL跟随-----
| . | . | . | 1:SELECT * FROM dataset.table | . | . | . |
在我测试功能之后。这个问题有什么解决办法吗?
解决方案
问题是您为所有调用指定了一个静态 job_id。BQ 中的作业具有唯一的作业 ID,您无法重新插入具有相同 ID 的作业。要么根本不指定 ID,要么提供一个足够唯一的作业 ID(例如,基于预定时间的后缀等)。
更多信息:https ://cloud.google.com/bigquery/docs/running-jobs#generate-jobid
推荐阅读
- c# - 验证约束违规:元素“s:Envelope”中的语法错误
- css - 在角度上更改 mat-flat-button 的边框半径
- c++ - 如何在第三个项目(可执行文件)中使用来自两个项目(静态库)的函数?
- java - ASCII 如何将字符从字符转换为二进制形式,反之亦然?
- javascript - 在 Ruby on Rails/JS 中以模式呈现新表单而不是新页面
- python - 代码问题(将 datetime.strftime wehn 导出数据框添加到新 excel 的名称路径)
- java - 为什么必须在 Eden 空间中创建新的 Java 对象?
- ruby-on-rails - Rails ChartKick 空白将默认标签 yAxis 值设置为 0 .. 10 .. 20
- c# - serilog 异步接收器在关闭时未将缓冲区刷新到磁盘
- python - 如何在 Python 的 TwitterAPI 中使用 TwitterPager 进行多次调用?