Google bigquery BigQuery:是否可以在UDF中执行另一个查询?
我有一个表,每天记录每个唯一用户的一行,以及该用户在该天的一些聚合统计数据,我需要生成一个报告,告诉我在过去30天(包括该天)中每天的唯一用户数 例如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
- 对于8月31日,它将统计从8月2日到8月31日的唯一用户
- 对于8月30日,它将统计从8月1日到8月30日的唯一用户
- 等等
- 编写一个简单的脚本,在相关的每一天执行一个单独的BigQuery
- 编写一个BigQueryUDF,它将对从另一个查询中选择的每天执行基本相同的查询
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
...