在 Redshift UDF 中求和

Posted

技术标签:

【中文标题】在 Redshift UDF 中求和【英文标题】:Summing inside Redshift UDF 【发布时间】:2018-07-02 10:53:46 【问题描述】:

我有一个日期表,列:

    日期:日期,例如'2018-06-29' business_day:1 或 0 表示日期是否为工作日

我想在 Redshift 中创建一个用户定义函数,该函数在两个日期之间输出多少个工作日。在 select 语句中看起来像:

select business_days(start_date timestamp, end_date timestamp) as integer

例如:

2018-06-29 is a friday business day
2018-06-30 saturday non business day
2018-07-01 sunday non business day
2018-07-02 business day

select business_days( '2018-06-29', '2018-07-02') 应该输出2

Redshift 不允许在函数内进行聚合,我正在寻找解决方法。

【问题讨论】:

【参考方案1】:

Amazon Redshift 用户定义函数无法访问网络,也无法访问存储在表中的数据。

作为替代方法,您可以 create a Python function 计算两个日期之间的差异。

如果你只是想跳过周末,你可以Count number of days between dates, ignoring weekends。

如果您有更复杂的逻辑,例如跳过因年而异的假期,则需要将该信息提供给 Python 函数,例如在函数本身中包含特殊日期(例如,在假期列表中) .

【讨论】:

以上是关于在 Redshift UDF 中求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Redshift(亚马逊)中更新 UDF?

Redshift:不能在 UDF 中使用聚合函数?

UDF's in redshift : 可以在另一个中引用一个 udf

为啥不能在 Redshift 的 CTE 的某些子句中调用不可变的 UDF?

redshift 更改 udf 更改所有者

在 Redshift 中使用 python UDF 中的表