将Influxdb数据建模为标签和字段

时间:2019-03-02 06:08:23

标签: influxdb influxql

TL; DR
如果您想同时执行group by和count(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进行分组操作,例如查找每个帐户收到的请求数:

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

我不能按照标签上的分组方式进行操作。

一个人如何管理这种场景?

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

另一种最佳方法是让count(distinct())在标签上工作。这可能吗?这实际上是他们的github存储库中的功能请求。

还是可以对数据模型做一些事情以达到相同的目的?

1 个答案:

答案 0 :(得分:1)

tag用于account_id。代替计数查询:

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

使用查询,它将计算出准确的tag value cardinality

SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "account_id"

这仅适用于您的用例,因为您不想在非重复计数查询中使用任何其他(时间,标签)过滤器。