如何在BigQuery中按星期几条件执行指定SQL查询?
实现仅周二运行SQL查询的方案
一、SQL语句层面直接判断
通过数据库的日期函数获取当前日期的星期属性,仅当为周二时返回查询结果,非周二则返回空集。不同数据库的星期函数逻辑略有差异,以下是常见场景的写法:
1. BigQuery(匹配示例语法风格)
BigQuery 中 EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) 返回规则为:周日=1,周一=2,周二=3。修改后的查询如下:
WITH cte AS ( SELECT account_create_date, COUNT(user_name) AS new_accounts_count FROM `users_account` WHERE users_status = 2 GROUP BY 1 ) SELECT * FROM cte WHERE EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) = 3
2. MySQL
MySQL 中 WEEKDAY(CURDATE()) 返回规则为:周一=0,周二=1;也可使用 DAYOFWEEK(CURDATE())(周日=1,周二=3)。示例写法:
WITH cte AS ( SELECT account_create_date, COUNT(user_name) AS new_accounts_count FROM `users_account` WHERE users_status = 2 GROUP BY account_create_date ) SELECT * FROM cte WHERE WEEKDAY(CURDATE()) = 1
二、调度工具层面控制(更可靠)
如果查询是通过调度工具(如Airflow、Cloud Scheduler、云平台定时任务等)触发的,直接在调度配置中设置每周二执行即可。这种方式无需修改SQL,从根源上避免非周二执行,还能规避时区、日期函数差异等潜在问题。
比如在Airflow中,可使用Cron表达式设置调度规则:0 0 * * 2(代表每周二凌晨0点执行)。
内容的提问来源于stack exchange,提问作者jqlifer1
相关产品推荐
相关产品推荐

