首页 > 解决方案 > 使用 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 | . | . | . |

在我测试功能之后。这个问题有什么解决办法吗?

标签: pythongoogle-bigquerygoogle-cloud-functions

解决方案


问题是您为所有调用指定了一个静态 job_id。BQ 中的作业具有唯一的作业 ID,您无法重新插入具有相同 ID 的作业。要么根本不指定 ID,要么提供一个足够唯一的作业 ID(例如,基于预定时间的后缀等)。

更多信息:https ://cloud.google.com/bigquery/docs/running-jobs#generate-jobid


推荐阅读