简体   繁体   English

bigquery udf 中的 WITH RECURSIVE

[英]WITH RECURSIVE in bigquery udf

I try to write bigquery udf with recursive cte as following code:我尝试使用递归 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
    )
    );

This returns an error:这将返回一个错误:

SQL Error [100032] [HY000]: [Simba]BigQueryJDBCDriver Error executing query job. SQL 错误 [100032] [HY000]: [Simba]BigQueryJDBCDriver 执行查询作业时出错。 Message: WITH RECURSIVE is only allowed at the top level of the SELECT, CREATE TABLE AS SELECT, CREATE VIEW, INSERT, EXPORT DATA statements.消息: WITH RECURSIVE 仅允许在 SELECT、CREATE TABLE AS SELECT、CREATE VIEW、INSERT、EXPORT DATA 语句的顶层使用。

I cannot find what is the problem.我找不到问题所在。

It seems there are some limitations using RECURSIVE CTEs :使用RECURSIVE CTE似乎有一些限制:

WITH RECURSIVE is not allowed in functions.函数中不允许使用 WITH RECURSIVE。

WITH RECURSIVE is not allowed in materialized views.在物化视图中不允许使用 WITH RECURSIVE。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM