我使用Django包使用HyperLogLog (hll) 字段来表示唯一用户。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
它被定义为聚合函数。我不确定是否有办法解决这个问题,我想可以在原始 sql 中做到这一点,但我没有取得太大进展。
非常感谢 Django ORM 或原始 SQL 中的解决方案。