在Regr_slope for snowflake中为什么不支持窗口框架?



我有一个查询,我试图持续到一个表前的用户有2.4亿行,我希望包括滚动三年的数据测试。原始查询自联接将是:

SELECT
ibm.trading_item_id,
ibm.primary_exchange_ticker,
ibm.date,
REGR_SLOPE(
ibm_lagging.USD_PRICE_CLOSE_1D_RT,
ibm_lagging.SPX_1D_RT
) AS spx_beta_3y
FROM
ibm
LEFT JOIN ibm ibm_lagging ON ibm.trading_item_id = ibm_lagging.trading_item_id
AND ibm.date >= ibm_lagging.date
AND dateadd(year, -3, ibm.date) <= ibm_lagging.date
GROUP BY
ibm.trading_item_id,
ibm.primary_exchange_ticker,
ibm.date
HAVING
count(*) >= 3 * 250 -- sufficient # of trading days in a year to make this reasonable
ORDER BY

问题是因为这是2.4亿行与自我连接的基本查询,我正在寻找大约750* 2.4亿行,这是不可行的运行。因此,我想使用窗口框架,但由于某种原因,在使用分区时,regr_slope函数中没有满足。我想我有一个手动解决方案,但我的问题是,为什么这不会被满足。

要注意的第一点是,即使它确实支持窗口框架,雪花的窗口框架也只允许行数,这是一个硬编码的滚动窗口,而不是一个动态窗口(日期在X范围内),就像您在这个问题中遇到的那样。除非您知道每天只有一行,否则您可以使用固定行逻辑。

所以你允许动态的基于时间的方法你似乎想要,你需要使用一个UDTF,这样你就可以有"任意">

如果我们假设你有固定的数据,因此固定行解决方案是有效的,回答为什么?REGR_SLOPE定义为COVAR_POP(x,y) / VAR_POP(x), VAR_POP支持窗口框架,但COVAR_POP不支持。这就解释了,但COVAR_POP是由SUM和COUNT组成的,它们支持窗口框架,所以你可以手动滚动固定行版本,但正如你所说,这听起来有风险。如你所见。

最新更新