snowflake-cloud-data-platform - 从特定时区的给定日期起每 14 天执行一次作业的 Cron 脚本
问题描述
我想从特定日期和时区每 14 天在 CRON 中执行一次作业。
例如,在 CST 时区每 14 天从 6 月 24 日开始。
解决方案
每两周运行一次工作
简单的方法
最简单的方法是创建任务,从您希望它首次运行开始每 14 天运行一次,如下所示:
CREATE TASK mytask_fortnightly
WAREHOUSE = general
SCHEDULE = '20160 MINUTE'
AS
SELECT 'Hello world'
这个怎么运作
因为一小时有 60 分钟,一天有 24 小时,两周有 14 天,所以这就是 20,160 分钟。
警告
上述解决方案不是从给定日期/时间每两周运行一次任务,而是从创建任务后每两周运行一次。
尽管这是最简单的方法,但它确实需要您名义上在场,以便在确切期望的下一个计划时间创建任务。
但是,作为一种解决方法,您可以创建一次性任务,以便在准确的日期/时间第一次为您执行此操作。这意味着您不必记住要醒来/提醒/出席自己手动执行此操作,并且您可以在之后清理创建任务。
更难的方式。
其他解决方案将要求您创建一个每周四运行的任务(因为 2021 年 6 月 24 日是/曾经是星期四,接下来的每个星期四将是休息周或两周)
例如SCHEDULE = 'USING CRON 0 0 * * THU'
然后,您将为其添加特定逻辑以确定正确的两周是哪一个。
使用这种方法也会产生非周的执行成本,以确定它是否是正确的一周。
Javascript SP
在 javascript 中,您可以通过从当前日期减去开始日期来确定它是否是正确的星期,如果它不是 14 天的倍数,则将其用作使 SP 短路的条件。
const deltaMs = (new Date) - (new Date('2021-06-24'));
const deltaDays = ~~(deltaMs / 86400000);
const run = deltaDays % 14 === 0;
if (!run) return;
// ... continue to do what you want.
SQL
WHERE
您还可以在子句或IFF
/CASE
函数中使用以下 SQL 条件来检查是否是两周。
DATEDIFF('day', '2021-06-24', CURRENT_DATE) % 14 = 0
推荐阅读
- ios - 从另一个类加载函数在 Swift IOS 中崩溃
- python-3.x - Python多重继承问题
- assembly - 为什么我的程序打印“:”来表示两个相同整数的和?
- javascript - 使用 Array.from 将对象转换为数组
- python - 执行时遇到 ImportError - from pandas import to_csv
- stripe-payments - 我可以在创建 PaymentMethod 几个小时后将 Stripe PaymentMethod 附加到客户吗?
- python-3.x - tkinter 不通过函数打开图像
- firebase - Cloud firestore - 按嵌套数据排序
- pyspark - Pyspark 多个 JOINS 列 <> 行值:减少操作
- python - 如何在 Django 中获取购物车总金额?