如何使用JSONATA对JSON数据按日期分组统计模块count总和
问题
我有如下JSON格式的数据集,需要按日期分组,统计每个模块对应的count字段总和。了解到JSONATA工具适合做这个,但刚接触不太会写转换表达式,期望得到指定格式的输出。
输入数据:
{"id": "6332acbfe13e6063dcb740ef","record": [{"date": "2022-09-22","entries": [{"repo": "SRE-MAC-PDM-TEAM","prod": [{"name": "modules/dynatrace","count": 16}]},{"repo": "SRE-MAC-IBO-BONUS-PAYMENTS-REPO","prod": [{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 3}]},{"repo": "SRE-MAC-ANAPostPurchase","prod": [{"name": "modules/dynatrace","count": 17}]},{"repo": "SRE-MAC-ANA-SubscriptionsRewards","preprod": [{"name": "modules/splunk/hec-token","count": 8},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 8}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1},{"name": "modules/dynatrace","count": 4}]},{"repo": "SRE-MAC-CSP-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 9}]},{"repo": "SRE-MAC-IBOIP-REPO","prod": [{"name": "modules/dynatrace","count": 6}]},{"repo": "SRE-MAC-IBOLIFE-REPO","preprod": [{"name": "modules/dynatrace","count": 1},{"name": "modules/splunk/hec-token","count": 2},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 3}],"prod": [{"name": "modules/dynatrace","count": 5},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}]},{"repo": "SRE-MAC-PL-APPLICATION","preprod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 4}],"prod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 2}]},{"repo": "SRE-MAC-TPS-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/dynatrace/calculated_service_metric","count": 1},{"name": "modules/dynatrace/anomalies/custom/metric_id","count": 1},{"name": "modules/dynatrace","count": 11}]}]},{"date": "2022-09-19","entries": [{"repo": "SRE-MAC-PDM-TEAM","prod": [{"name": "modules/dynatrace","count": 14}]},{"repo": "SRE-MAC-IBO-BONUS-PAYMENTS-REPO","prod": [{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 3}]},{"repo": "SRE-MAC-ANAPostPurchase","prod": [{"name": "modules/dynatrace","count": 15}]},{"repo": "SRE-MAC-ANA-SubscriptionsRewards","preprod": [{"name": "modules/splunk/hec-token","count": 5},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 5}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1},{"name": "modules/dynatrace","count": 3}]},{"repo": "SRE-MAC-CSP-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 6}]},{"repo": "SRE-MAC-IBOIP-REPO","prod": [{"name": "modules/dynatrace","count": 6}]},{"repo": "SRE-MAC-IBOLIFE-REPO","preprod": [{"name": "modules/dynatrace","count": 1},{"name": "modules/splunk/hec-token","count": 2},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 3}],"prod": [{"name": "modules/dynatrace","count": 4},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}]},{"repo": "SRE-MAC-PL-APPLICATION","preprod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 3}],"prod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 2}]},{"repo": "SRE-MAC-TPS-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/dynatrace/calculated_service_metric","count": 1},{"name": "modules/dynatrace/anomalies/custom/metric_id","count": 1},{"name": "modules/dynatrace","count": 9}]}]},{"date": "2022-09-12","entries": [{"repo": "SRE-MAC-PDM-TEAM","prod": [{"name": "modules/dynatrace","count": 4}]},{"repo": "SRE-MAC-IBO-BONUS-PAYMENTS-REPO","prod": [{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 2}]},{"repo": "SRE-MAC-ANAPostPurchase","prod": [{"name": "modules/dynatrace","count": 3}]},{"repo": "SRE-MAC-ANA-SubscriptionsRewards","preprod": [{"name": "modules/splunk/hec-token","count": 3},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 4}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1},{"name": "modules/dynatrace","count": 2}]},{"repo": "SRE-MAC-CSP-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 4}]},{"repo": "SRE-MAC-IBOIP-REPO","prod": [{"name": "modules/dynatrace","count": 3}]},{"repo": "SRE-MAC-IBOLIFE-REPO","preprod": [{"name": "modules/dynatrace","count": 1},{"name": "modules/splunk/hec-token","count": 2},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 2}],"prod": [{"name": "modules/dynatrace","count": 3},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}]},{"repo": "SRE-MAC-PL-APPLICATION","preprod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 2}],"prod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 2}]},{"repo": "SRE-MAC-TPS-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/dynatrace/calculated_service_metric","count": 1},{"name": "modules/dynatrace/anomalies/custom/metric_id","count": 1},{"name": "modules/dynatrace","count": 7}]}]},{"date": "2022-09-05","entries": [{"repo": "SRE-MAC-PDM-TEAM","prod": [{"name": "modules/dynatrace","count": 12}]},{"repo": "SRE-MAC-IBO-BONUS-PAYMENTS-REPO","prod": [{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 1}]},{"repo": "SRE-MAC-ANAPostPurchase","prod": [{"name": "modules/dynatrace","count": 11}]},{"repo": "SRE-MAC-ANA-SubscriptionsRewards","preprod": [{"name": "modules/splunk/hec-token","count": 2},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 5}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/monitors/http-monitors/basic","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1},{"name": "modules/dynatrace","count": 1}]},{"repo": "SRE-MAC-CSP-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 5}]},{"repo": "SRE-MAC-IBOIP-REPO","prod": [{"name": "modules/dynatrace","count": 3}]},{"repo": "SRE-MAC-IBOLIFE-REPO","preprod": [{"name": "modules/dynatrace","count": 1},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/dynatrace","count": 2},{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}]},{"repo": "SRE-MAC-PL-APPLICATION","preprod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/splunk/hec-token","count": 1},{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}]},{"repo": "SRE-MAC-TPS-APPLICATION","preprod": [{"name": "modules/aws/lambda/logs_streaming_splunk","count": 1}],"prod": [{"name": "modules/dynatrace/alerting_profiles","count": 1},{"name": "modules/dynatrace/notifications/splunk-on-call","count": 1},{"name": "modules/dynatrace/calculated_service_metric","count": 1},{"name": "modules/dynatrace/anomalies/custom/metric_id","count": 1},{"name": "modules/dynatrace","count": 2}]}]}],"metadata": {"name": "","readCountRemaining": 98,"timeToExpire": 86389,"createdAt": "2022-09-27T07:56:47.003Z"}}
预期输出:
{ "2022-09-22": [ {"name": "modules/dynatrace", "count": 59}, {"name": "modules/dynatrace/monitors/http-monitors/basic", "count": 4}, {"name": "modules/dynatrace/alerting_profiles", "count": 2}, {"name": "modules/dynatrace/notifications/splunk-on-call", "count": 2}, {"name": "modules/splunk/hec-token", "count": 14}, {"name": "modules/aws/lambda/logs_streaming_splunk", "count": 29}, {"name": "modules/dynatrace/calculated_service_metric", "count": 1}, {"name": "modules/dynatrace/anomalies/custom/metric_id", "count": 1} ], "2022-09-19": [ {"name": "modules/dynatrace", "count": 47}, {"name": "modules/dynatrace/monitors/http-monitors/basic", "count": 4}, {"name": "modules/dynatrace/alerting_profiles", "count": 2}, {"name": "modules/dynatrace/notifications/splunk-on-call", "count": 2}, {"name": "modules/splunk/hec-token", "count": 11}, {"name": "modules/aws/lambda/logs_streaming_splunk", "count": 20}, {"name": "modules/dynatrace/calculated_service_metric", "count": 1}, {"name": "modules/dynatrace/anomalies/custom/metric_id", "count": 1} ], "2022-09-12": [ {"name": "modules/dynatrace", "count": 22}, {"name": "modules/dynatrace/monitors/http-monitors/basic", "count": 3}, {"name": "modules/dynatrace/alerting_profiles", "count": 2}, {"name": "modules/dynatrace/notifications/splunk-on-call", "count": 2}, {"name": "modules/splunk/hec-token", "count": 9}, {"name": "modules/aws/lambda/logs_streaming_splunk", "count": 16}, {"name": "modules/dynatrace/calculated_service_metric", "count": 1}, {"name": "modules/dynatrace/anomalies/custom/metric_id", "count": 1} ], "2022-09-05": [ {"name": "modules/dynatrace", "count": 31}, {"name": "modules/dynatrace/monitors/http-monitors/basic", "count": 2}, {"name": "modules/dynatrace/alerting_profiles", "count": 2}, {"name": "modules/dynatrace/notifications/splunk-on-call", "count": 2}, {"name": "modules/splunk/hec-token", "count": 6}, {"name": "modules/aws/lambda/logs_streaming_splunk", "count": 16}, {"name": "modules/dynatrace/calculated_service_metric", "count": 1}, {"name": "modules/dynatrace/anomalies/custom/metric_id", "count": 1} ] }
解决方案
用以下JSONATA表达式即可实现需求:
$aggregate(record, function($item) { $item.date: $aggregate( $merge($item.entries.(prod & preprod)), function($mod) { {"name": $mod.name, "count": $sum($mod.count)} }, "name" ) })
表达式解释
- 外层
$aggregate:按record数组中的date字段分组,处理每个日期对应的条目。 - 提取所有模块:`$
相关产品推荐
相关产品推荐

