簡體   English   中英

如何使用 Snowflake 獲得累積產品?

[英]How can I get a cumulative product with Snowflake?

我想計算 Snowflake 中跨行的累積乘積。

基本上,我的月利率會隨着時間的推移而成倍增加。

(一些數據庫為此具有product() SQL function)。

Sterling Paramore 建議的技巧:添加日志,然后取冪:

with data as (select $1 x from values (1),(2),(3),(4),(5))

select x
    , sum(x) over(order by x) sum
    , exp(sum(ln(x)) over(order by x)) mult
from data

在此處輸入圖像描述

如果內置的 function 不存在,通常可以使用用戶定義的表 Function來滾動自定義內容。

在這種情況下:

CREATE OR REPLACE FUNCTION CUMULATIVE_PRODUCT(VALUE double)
    RETURNS TABLE (PRODUCT double)
    LANGUAGE JAVASCRIPT
    AS '{
        initialize: function(argumentInfo, context) {
           this.cumulativeProduct = 1;
        },
        processRow: function f(row, rowWriter, context){
           this.cumulativeProduct = this.cumulativeProduct*row.VALUE;
           rowWriter.writeRow({PRODUCT: this.cumulativeProduct});
        }
    }';

示例表:

create temp table sample_numbers as (
select 1 as index, 5.1::double as current_value
    union all
select 2 as index, 4.3::double as current_value
    union all
select 3 as index, 3.7::double as current_value
    union all
select 4 as index, 3.9::double as current_value
)

調用 UDTF:

select index,current_value,PRODUCT as cumulative_product
from sample_numbers,table(CUMULATIVE_PRODUCT(current_value) over ())

在此處輸入圖像描述

請注意空的 over() 子句,它強制 Snowflake 對數據執行單個順序運行,而不是將其拆分為並行塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM