Google cloud platform 在BigQuery中模拟窗口聚合的UDF的变通方法?
我试图在BigQuery中编写自定义聚合函数。在PGSQL中,我可以编写可以与Google cloud platform 在BigQuery中模拟窗口聚合的UDF的变通方法?,google-cloud-platform,google-bigquery,bigquery-udf,Google Cloud Platform,Google Bigquery,Bigquery Udf,我试图在BigQuery中编写自定义聚合函数。在PGSQL中,我可以编写可以与over子句一起使用的函数,但是我不能为BigQuery编写任何这样的聚合函数-是否可以编写一个函数,该函数接收分区的一列的整个数组,并基于某个自定义计算返回值 我尝试的示例: CREATE OR REPLACE FUNCTION temp_db.temp_func(arr ARRAY<int64>) RETURNS int64 LANGUAGE js AS """ ret
over
子句一起使用的函数,但是我不能为BigQuery编写任何这样的聚合函数-是否可以编写一个函数,该函数接收分区的一列的整个数组,并基于某个自定义计算返回值
我尝试的示例:
CREATE OR REPLACE FUNCTION temp_db.temp_func(arr ARRAY<int64>)
RETURNS int64 LANGUAGE js AS """
return arr.length*10 //example calculation
//actual result involves looping over the array and doing few calculations
""";
select s_id, temp_db.temp_func(s_price) over (partition by s_id order by s_date rows 40 preceding) as temp_col
from temp_db.s_table;
创建或替换函数temp\u db.temp\u func(arr数组)
将int64语言js返回为“”
返回arr.length*10//计算示例
//实际结果包括在数组上循环并进行少量计算
""";
选择s_id,temp_db.temp_func(s_price)over(按s_id分割,按s_日期排序,前面第40行)作为临时列
来自temp_db.s_表;
这会产生一个错误:查询错误:函数temp\u db.temp\u func不支持[6:19]处的OVER子句。
对于我的目的来说,这些参数是不够的,因此我需要能够对自定义窗口大小执行自定义计算。BigQuery中是否有解决方法?创建或替换函数temp\u db.temp\u func(arr数组)
CREATE OR REPLACE FUNCTION temp_db.temp_func(arr ARRAY<int64>)
RETURNS int64 LANGUAGE js AS """
return arr.length*10 //example calculation
//actual result involves looping over the array and doing few calculations
""";
select s_id, temp_db.temp_func(ARRAY_AGG(s_price) over (partition by s_id order by s_date rows 40 preceding)) as temp_col
from temp_db.s_table;
将int64语言js返回为“”
返回arr.length*10//计算示例
//实际结果包括在数组上循环并进行少量计算
""";
选择s_id,temp_db.temp_func(数组_AGG(s_price)over(按s_id划分顺序按s_日期第40行)作为临时列
来自temp_db.s_表;
创建或替换函数temp\u db.temp\u func(arr数组)
将int64语言js返回为“”
返回arr.length*10//计算示例
//实际结果包括在数组上循环并进行少量计算
""";
选择s_id,temp_db.temp_func(数组_AGG(s_price)over(按s_id划分顺序按s_日期第40行)作为临时列
来自temp_db.s_表;
谢谢你的建议!这对我有用。你知道这在性能方面与原生PGSQL聚合UDF相比如何吗?不知何故,我认为不应该有性能影响,而应该是与不同引擎相关的差异,只是我的猜测,谢谢!我很快就会查出来的!我还有一个相关的问题:是否有可能维护某种状态变量,从一个窗口共享到另一个窗口?例如,如果我想在计算下一个窗口的结果时使用第一个窗口的结果,我将如何在BigQuery中这样做(PGSQL中聚合函数中的第一个变量正是这样做的)?作为上述解决方案的一部分-我不这么认为!但是如果你可以发布新的问题和所有相关的细节,例如-我们可以尝试找到一个解决方案-通常我们会:o)谢谢你的建议!这对我有用。你知道这在性能方面与原生PGSQL聚合UDF相比如何吗?不知何故,我认为不应该有性能影响,而应该是与不同引擎相关的差异,只是我的猜测,谢谢!我很快就会查出来的!我还有一个相关的问题:是否有可能维护某种状态变量,从一个窗口共享到另一个窗口?例如,如果我想在计算下一个窗口的结果时使用第一个窗口的结果,我将如何在BigQuery中这样做(PGSQL中聚合函数中的第一个变量正是这样做的)?作为上述解决方案的一部分-我不这么认为!但如果你能发布一个新的问题和所有相关的细节,例如-我们可以尝试找到一个解决方案-通常我们会:o)