WITH RECURSIVE in bigquery udf



我尝试用递归cte编写bigquery udf,代码如下:

create or replace function accounting.monthly_sum(arr array<struct<aq numeric,ap numeric,m int64>>) returns numeric 
as (
(
WITH RECURSIVE 
rec AS (
SELECT arr[0].aq, arr[0].m,least(arr[0].aq,arr[0].ap) ar 
UNION ALL
SELECT series.aq,series.m, least(series.aq + rec.ar, series.ap) 
FROM UNNEST(arr) series 
JOIN rec ON series.m = rec.m + 1
)
SELECT ar
from rec
order by m desc
limit 1
)
);

这返回一个错误:

SQL错误[100032][HY000]:[Simba]BigQueryJDBCDriver执行查询作业时出错。消息:WITH RECURSIVE只允许出现在SELECT、CREATE TABLE AS SELECT、CREATE VIEW、INSERT和EXPORT DATA语句的顶层。

我找不出问题出在哪里。

使用递归CTE似乎有一些限制:

函数中不允许使用WITH RECURSIVE。

在具体化视图中不允许WITH RECURSIVE。

  • https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#cte_rules

最新更新