1

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

4

1 に答える 1