【发布时间】:2018-11-19 06:57:20
【问题描述】:
我正在使用 python 开发一个自动大查询数据摄取管道。我正在使用 python API 创建 SQL 字符串并执行它们以创建大查询表并将新数据附加到旧表。
我在代码中有一个部分,它从旧表创建一个新表。之后,它会丢弃旧表。但有时我会遇到一个问题,即在创建表查询之前执行删除表查询。为了克服这个问题,我在我的脚本中手动设置 time.sleep()。
有没有办法可以在创建表查询之前停止删除表查询以执行?下面是我正在使用的代码的 sn-ps。
Fnl_DtaNme_Bth = Final_DataName + datetime.now().strftime('%Y%m%d_%H%M%S')
fnl_sql_vw = """
Create table {} as
(
select * from `{}` where row_key not in (select row_key from `{}`)
union all
select {} from `{}`
)
""".format(dataset_id + '.' + Fnl_DtaNme_Bth, ProjectID + '.' + dataset_id + '.' + Final_DataName, ProjectID + '.' + dataset_id + '.' + viewname, List_COls, ProjectID + '.' + dataset_id + '.' + viewname)
print('CreateTable:-->', fnl_sql_vw)
client = bigquery.Client()
query_job = client.query(fnl_sql_vw)
time.sleep(10)
######### Here we are DROPING Old Mater Data ##############
drop_table = """Drop Table `{}`""".format(ProjectID + '.' + dataset_id + '.' + Final_DataName)
client = bigquery.Client()
query_job = client.query(drop_table)
time.sleep(10)
#########Here we are RE-CREATING Mater Data without BATCH_ID#############
fnl_data = """Create table {} as Select * from `{}`""".format( dataset_id + '.' + Final_DataName, ProjectID + '.' + dataset_id + '.' + Fnl_DtaNme_Bth) #args.dataset_id + '.' + Destination_Table
client = bigquery.Client()
query_job = client.query(fnl_data)
time.sleep(10)
#########Here we are DROPING Mater Data with BATCH_ID ############ #
drop_table_old = """
Drop Table `{}`
""".format(ProjectID + '.' + dataset_id + '.' + Fnl_DtaNme_Bth)
client = bigquery.Client()
query_job = client.query(drop_table_old)
正如你在代码中看到的,我正在做的是:
-使用批次 ID 创建表
-drop 旧表。(首先执行此操作,停止任何进一步的步骤。)
- 重新创建没有批次 ID 的新表
- 从步骤 1 中删除表。
【问题讨论】: