首页 文章

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

提问于
浏览
2

我有一个表,每天为每个唯一用户记录一行,并在当天为该用户提供一些汇总统计信息,我需要生成一份报告,告诉我每天,没有 . 包括当天在内的过去30天内的唯一身份用户

例如 .

  • 为8月31日,它将统计8月2日至8月31日的独特用户

  • 8月30日,它将统计8月1日至8月30日的独特用户

  • 等等......

我已经查看了一些相关的问题,但它们并不是我所需要的 - 如果用户在过去30天内多天登录,他应该只计算一次,所以我不能只计算DAU的数量过去30天 .

Bigquery SQL for sliding window aggregate

BigQuery SQL for 28-day sliding window aggregate (without writing 28 lines of SQL)

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

  • 编写一个简单的脚本,该脚本将在每个相关日期执行单独的BigQuery

  • 编写一个BigQuery UDF,它将为从另一个查询中选择的每一天执行基本相同的查询

但是我没有找到关于如何在UDF中执行另一个BigQuery查询的任何示例,或者它是否可能 .

1 回答

  • 1

    我需要制作一份报告,告诉我每天,不 . 包括当天在内的过去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
    

    假设YourTable具有userID和dt字段(例如下面的内容)

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

    你可以控制:

    • 报告日期范围分别更改 2016-08-082016-09-08
    • BETWEEN 0 AND 29 中更改 29 的聚合大小

相关问题