1

目前我正在处理一个如下所示的查询

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 个子查询都建立在前面的查询之上。该查询运行良好,我希望将其作为视图,以便在其他查询中使用它。

有没有办法在调用视图时控制第一个子查询中的分区过滤器?在某些情况下,我只想有一个星期,在其他情况下,几个月。

4

1 回答 1

0

不幸的是,您无法参数化 BigQuery 上的视图,但您可以编写 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()
于 2021-03-09T10:47:07.153 回答