1

TL;DR
如何将数据建模为字段与标签,以防您同时执行分组和计数(distinct())

所以目前这是我的 influxdb 数据模型:

api_requests (database)
   - requests_stats (measurement)
        - api_path (tag)
        - app_version (tag)
        - host (tag)
        - platform (tag) 

        - account_id (field)
        - user_id (field)
        - function_name (field)
        - network (field)
        - network_type (field)
        - time_to_execute (field)

所以现在我想找出不同账户(活跃账户)的数量。所以我可以运行以下查询:

SELECT count(distinct("account_id")) AS "active_accounts"
FROM "api_requests"."autogen"."requests_stats"

这很好用,因为帐户 ID 是一个字段。

现在假设我想对 account_id 执行 group by 操作,例如查找每个帐户收到的请求数:

SELECT count("function_name") AS "request_count" 
FROM "api_requests"."autogen"."requests_stats"
GROUP BY "account_id"

我不能这样做,因为在标签上建议使用 group by。

这种场景怎么办?

解决方案之一是将值存储在字段和值中,但这将是数据冗余。

另一种也是最优化的方法是让 count(distinct()) 处理标签。这可能吗?这实际上是他们 github 存储库中的一个功能请求。

或者可以对数据模型做些什么来达到同样的效果?

4

1 回答 1

1

用于. tag_ account_id而不是计数查询:

SELECT count(distinct("account_id")) AS "active_accounts"
FROM "api_requests"."autogen"."requests_stats"

使用查询,它将计算准确的标签值基数

SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "account_id"

这仅适用于您的用例,因为您不想在不同计数查询中使用任何额外的(时间、标签)过滤器。

于 2019-03-02T10:07:26.647 回答