小编Iva*_*van的帖子

BigQuery:如何在窗口函数上合并 HLL 草图?(计算滚动窗口上的不同值)

示例相关表架构:

+---------------------------+-------------------+
| activity_date - TIMESTAMP | user_id - STRING  |
+---------------------------+-------------------+
| 2017-02-22 17:36:08 UTC   | fake_id_i24385787 |
+---------------------------+-------------------+
| 2017-02-22 04:27:08 UTC   | fake_id_234885747 |
+---------------------------+-------------------+
| 2017-02-22 08:36:08 UTC   | fake_id_i24385787 |
+---------------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)

我需要在滚动时间段(90 天)内对大型数据集的活跃不同用户进行计数,并且由于数据集的大小而遇到问题。

起初,我尝试使用窗口函数,类似于这里的答案。 /sf/answers/1930213211/

WITH
  daily AS (
  SELECT
    DATE(activity_date) day,
    user_id
  FROM
    `fake-table`)
SELECT
  day,
  SUM(APPROX_COUNT_DISTINCT(user_id)) OVER (ORDER BY day ROWS BETWEEN 89 PRECEDING AND CURRENT ROW) ninty_day_window_apprx
FROM
  daily
GROUP BY
  1
ORDER BY
  1 DESC
Run Code Online (Sandbox Code Playgroud)

然而,这会导致每天获得不同数量的用户,然后将它们相加 - 但如果它们出现多次,则可以在窗口内复制不同的用户。因此,这并不是对 90 天内不同用户的真正准确衡量。

我尝试的下一件事是使用以下解决方案 …

sql google-bigquery hyperloglog

3
推荐指数
1
解决办法
773
查看次数

标签 统计

google-bigquery ×1

hyperloglog ×1

sql ×1