微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有子句的 BigQuery

如何解决带有子句的 BigQuery

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

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 上参数化视图,但您可以编写 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。