HyperLogLog (HLL) Postgres 字段的 Django 累积和
Django culmulative sum of HyperLogLog (HLL) Postgres field
我正在使用 HyperLogLog (hll) field to represent unique users, using the Django django-pg-hll
包。我想做的是获得特定时间段内唯一身份用户的累计总数,但我无法做到这一点。
给定如下模型:
class DailyUsers(model.Model):
date = models.DateField()
users = HllField()
我可以像这样获得每天的累计 HllField
:
queryset = models.DailyUsers.objects.annotate(
cumulative_hll_users=Window(
UnionAgg("users"), order_by=F('date').asc()
)
)
但是,当我尝试像这样获取 cardinality
(实际数字)时:
queryset = queryset.annotate(
cumsum=Cardinality("cumulative_hll_users")
)
出现以下错误:
django.db.utils.ProgrammingError: OVER specified, but hll_cardinality is not a window function nor an aggregate function
LINE 1: SELECT "app_dailyusers"."date", hll_cardinality...
这很奇怪,因为 Cardinality
被定义为 aggregate 函数。我不确定是否有办法解决这个问题,我想可以在原始 sql 中做到这一点,但我没有取得太大进展。
Django ORM 或原始 SQL 中的解决方案将不胜感激。
出现此错误是因为 django-pg-hll
程序包使用 hll_cardinality
函数而不是 window 函数的 #
运算符。转向 raw
sql 解决方案解决了问题。
我正在使用 HyperLogLog (hll) field to represent unique users, using the Django django-pg-hll
包。我想做的是获得特定时间段内唯一身份用户的累计总数,但我无法做到这一点。
给定如下模型:
class DailyUsers(model.Model):
date = models.DateField()
users = HllField()
我可以像这样获得每天的累计 HllField
:
queryset = models.DailyUsers.objects.annotate(
cumulative_hll_users=Window(
UnionAgg("users"), order_by=F('date').asc()
)
)
但是,当我尝试像这样获取 cardinality
(实际数字)时:
queryset = queryset.annotate(
cumsum=Cardinality("cumulative_hll_users")
)
出现以下错误:
django.db.utils.ProgrammingError: OVER specified, but hll_cardinality is not a window function nor an aggregate function
LINE 1: SELECT "app_dailyusers"."date", hll_cardinality...
这很奇怪,因为 Cardinality
被定义为 aggregate 函数。我不确定是否有办法解决这个问题,我想可以在原始 sql 中做到这一点,但我没有取得太大进展。
Django ORM 或原始 SQL 中的解决方案将不胜感激。
出现此错误是因为 django-pg-hll
程序包使用 hll_cardinality
函数而不是 window 函数的 #
运算符。转向 raw
sql 解决方案解决了问题。