Моделирование притока данных в теги и поля - PullRequest
0 голосов
/ 02 марта 2019

TL; DR
Как смоделировать данные в поля по сравнению с тегами, если вы хотите выполнить как группирование, так и подсчет (отличный ())

Так что в настоящее время это мой приёммодель данных:

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"

Это прекрасно работает, так как идентификатор учетной записи является полем.

Теперь предположим, что я хочу выполнить группирование по операции с account_id, например, чтобы найтиколичество запросов, полученных на один аккаунт:

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

Я не могу сделать это, поскольку для тегов рекомендуется группировать по.

Как можно управлять этим видом сценария?

Одним из решений является сохранение значения как в поле, так и в значении, но это будет избыточность данных.

Другим и наиболее оптимальным способом будет использование count (Different ()) для работы с тегами.Это возможно?На самом деле это был запрос функции в их репозитории github.

Или можно что-то сделать с моделью данных, чтобы добиться того же?

1 Ответ

0 голосов
/ 02 марта 2019

Используйте 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"

Это будет работать только для вашего варианта использования, потому чтовы не хотите использовать дополнительный (time, tag) фильтр в вашем отдельном запросе.

...