Google bigquery 我可以一次替换BigQuery分区表的分区间隔吗?
我正在使用pythonsdk处理BigQuery表,我想实现一些看起来可行的东西,但在文档中找不到任何东西 我有一个按日期划分的表T,还有一个SELECT请求,它计算过去X天的值。在T中,我想用这些值替换最后X天的分区,而不影响早于X天的分区 以下是我们仅更换一个分区的方法:Google bigquery 我可以一次替换BigQuery分区表的分区间隔吗?,google-bigquery,Google Bigquery,我正在使用pythonsdk处理BigQuery表,我想实现一些看起来可行的东西,但在文档中找不到任何东西 我有一个按日期划分的表T,还有一个SELECT请求,它计算过去X天的值。在T中,我想用这些值替换最后X天的分区,而不影响早于X天的分区 以下是我们仅更换一个分区的方法: job_config = bigquery.QueryJobConfig() job_config.destination = dataset.table("{}${}".format(table, date.strfti
job_config = bigquery.QueryJobConfig()
job_config.destination = dataset.table("{}${}".format(table, date.strftime("%Y%m%d")))
job_config.use_legacy_sql = False
job_config.write_disposition = bigquery.job.WriteDisposition.WRITE_TRUNCATE
query_job = bigquery.job.QueryJob(str(uuid.uuid4()), query, client, job_config)
query_job.result()
我试着这样做:
job_config.destination = dataset.table(table))
但它会截断所有分区,甚至是那些超过X天的分区
有没有一种方法可以轻松做到这一点?或者我必须循环间隔的每个分区吗
谢谢我不认为你可以通过玩目的地表来实现它 不考虑成本,使用SQL可以做的是
DELETE FROM your_ds.your_table WHERE partition_date > DATE_SUB(CURRENT_DATE(), INTERVAL X DAY);
然后
成本
第一次删除将:
为查询扫描的表的所有分区中引用的所有列处理的字节总数
+正在修改的表的已修改或已扫描分区中所有列的字节总数(在删除开始时)
第二次插入的成本应与您当前的查询相同。谢谢,如果我理解正确,与循环并替换每个分区相比,由于删除部分的原因,这将花费更多的成本,或者由于我们使用write_truncate支付删除成本,这是一样的?write_truncate应该是一个仅元数据的操作,它没有“删除”的成本(双引号,因为没有真正被删除的内容,只有元数据指向新数据)
INSERT INTO your_ds.your_table SELECT (...)