BigQuery with clause in view



目前我正在处理一个查询,看起来像以下

WITH subquery1 AS ( 
SELECT ...
FROM rawdata
WHERE DATE(_PARTITIONTIME) = "2021-03-09"
),
subquery2 AS ( 
SELECT ...
FROM subquery 1
),
subquery3 AS ( 
SELECT ...
FROM subquery1 join subquery2 
)
SELECT * FROM subquery3

在我的实际查询中,我有5个子查询都建立在前面的查询上。查询工作得很好,我想把它作为一个视图,这样我就可以在其他查询中使用它。

是否有一种方法可以在调用视图时控制第一个子查询中的分区过滤器?有的时候我只想要一个星期,有的时候我想要几个月。

不幸的是,你不能在BigQuery上参数化View,但是你可以写一个Python脚本,你可以参数化BigQuery SQL。下面给出了一个示例代码,其中我正在消耗几个输入到我的SQL并根据输入值处理它:-

from dateutil.parser import parse
import datetime, sys
from google.cloud import bigquery
from datetime import datetime, timedelta
Dataset_Table_name = sys.argv[1]
coll_name = sys.argv[2]
date_ip = sys.argv[3]
no_day = sys.argv[4]
arch_date = (datetime.strptime(date_ip, '%Y-%m-%d') - timedelta(int(no_day))).strftime('%Y-%m-%d')
stream_query = """DELETE FROM `ikea-itsd-ml.""" + Dataset_Table_name + """` WHERE """ + coll_name + """ < '""" + arch_date + """'"""
print (stream_query)
stream_client = bigquery.Client()
stream_Q = stream_client.query(stream_query)
stream_data_df = stream_Q.to_dataframe()

最新更新