Google bigquery BigQuery:是否可以在UDF中执行另一个查询?

Google bigquery BigQuery:是否可以在UDF中执行另一个查询?,google-bigquery,user-defined-functions,sliding-window,bigdata,Google Bigquery,User Defined Functions,Sliding Window,Bigdata,我有一个表,每天记录每个唯一用户的一行,以及该用户在该天的一些聚合统计数据,我需要生成一个报告,告诉我在过去30天(包括该天)中每天的唯一用户数 例如 对于8月31日,它将统计从8月2日到8月31日的唯一用户 对于8月30日,它将统计从8月1日到8月30日的唯一用户 等等 我已经看过一些相关的问题,但它们并不是我所需要的-如果用户在过去30天内登录多天,他应该只计算一次,所以我不能只计算过去30天的DAU计数 到目前为止,我的想法是: 编写一个简单的脚本,在相关的每一天执行一个单独的B

我有一个表,每天记录每个唯一用户的一行,以及该用户在该天的一些聚合统计数据,我需要生成一个报告,告诉我在过去30天(包括该天)中每天的唯一用户数

例如

  • 对于8月31日,它将统计从8月2日到8月31日的唯一用户
  • 对于8月30日,它将统计从8月1日到8月30日的唯一用户
  • 等等
我已经看过一些相关的问题,但它们并不是我所需要的-如果用户在过去30天内登录多天,他应该只计算一次,所以我不能只计算过去30天的DAU计数

到目前为止,我的想法是:

  • 编写一个简单的脚本,在相关的每一天执行一个单独的BigQuery
  • 编写一个BigQueryUDF,它将对从另一个查询中选择的每天执行基本相同的查询
但是我还没有找到任何关于如何在UDF中执行另一个BigQuery查询的例子,或者是否可能

我需要制作一份报告,告诉我每天 过去30天(包括当天)内的唯一用户

下面应该这样做

SELECT
  calendar_day, 
  EXACT_COUNT_DISTINCT(userID) AS unique_users
FROM (
  SELECT calendar_day, userID
  FROM YourTable
  CROSS JOIN (
    SELECT DATE(DATE_ADD('2016-08-08', pos - 1, "DAY")) AS calendar_day
    FROM (
         SELECT ROW_NUMBER() OVER() AS pos, *
         FROM (FLATTEN((
         SELECT SPLIT(RPAD('', 1 + DATEDIFF('2016-09-08', '2016-08-08'), '.'),'') AS h
         FROM (SELECT NULL)),h
    )))
  ) AS calendar
  WHERE DATEDIFF(calendar_day, dt) BETWEEN 0 AND 29 
)
GROUP BY calendar_day
ORDER BY calendar_day DESC
它假设您的表有userID和dt字段(例如下面的例子)

您可以控制:
-报告日期的变化范围分别为
2016-08-08
2016-09-08

-通过在0和29之间更改
中的
29
来增加聚合大小

dt          userID   
2016-09-08       1   
2016-09-08       2   
...