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 のいずれかでのソリューションは大歓迎です。