【Elasticsearch】cumulative_cardinality

news2025/2/12 10:57:13

1.定义与用途

`cumulative_cardinality`是一种父级管道聚合(Parent Pipeline Aggregation),用于在父级直方图(`histogram`)或日期直方图(`date_histogram`)聚合中计算累计基数。它主要用于统计在某个时间范围内“新增”的唯一项目数量,例如每天访问网站的新访客数量。

2.工作原理

`cumulative_cardinality`聚合会计算每个时间桶中的唯一值数量,并将这些值累计起来。它依赖于父级直方图中的某个基数聚合(`cardinality`)结果。具体来说,它会从第一个时间桶开始,逐个累加每个桶中的唯一值数量,从而得到每个时间点的累计唯一值数量。

3.参数

• `buckets_path`:必需参数,指定要计算累计基数的基数聚合路径。

• `format`:可选参数,定义输出值的格式。如果指定,格式化的值将返回在聚合的`value_as_string`属性中。

4.应用场景

`cumulative_cardinality`聚合特别适用于以下场景:

• 统计新增用户:例如,每天访问网站的新访客数量。

• 分析趋势:通过累计唯一值的变化,可以分析数据的增长趋势。

5.示例

假设我们有一个索引`user_hits`,其中记录了每次用户访问的日期(`timestamp`字段)和用户ID(`user_id`字段)。我们希望计算每天新增的唯一用户数量。

查询示例:

```json

GET /user_hits/_search

{

  "size": 0,

  "aggs": {

    "users_per_day": {

      "date_histogram": {

        "field": "timestamp",

        "calendar_interval": "day"

      },

      "aggs": {

        "distinct_users": {

          "cardinality": {

            "field": "user_id"

          }

        },

        "total_new_users": {

          "cumulative_cardinality": {

            "buckets_path": "distinct_users"

          }

        }

      }

    }

  }

}

```

 

 

响应结果:

 

```json

{

   "took": 11,

   "timed_out": false,

   "_shards": ...,

   "hits": ...,

   "aggregations": {

      "users_per_day": {

         "buckets": [

            {

               "key_as_string": "2019-01-01T00:00:00.000Z",

               "key": 1546300800000,

               "doc_count": 2,

               "distinct_users": {

                  "value": 2

               },

               "total_new_users": {

                  "value": 2

               }

            },

            {

               "key_as_string": "2019-01-02T00:00:00.000Z",

               "key": 1546387200000,

               "doc_count": 2,

               "distinct_users": {

                  "value": 2

               },

               "total_new_users": {

                  "value": 3

               }

            },

            {

               "key_as_string": "2019-01-03T00:00:00.000Z",

               "key": 1546473600000,

               "doc_count": 3,

               "distinct_users": {

                  "value": 3

               },

               "total_new_users": {

                  "value": 4

               }

            }

         ]

      }

   }

}

```

结果解释:

• 2019-01-01:当天有2个唯一用户,且都是新增用户。

• 2019-01-02:当天有2个唯一用户,但累计新增用户数为3,说明当天只有1个是新增用户。

• 2019-01-03:当天有3个唯一用户,累计新增用户数为4,说明当天只有1个是新增用户。

6.增量累计基数

有时,我们不仅需要累计总数,还需要查看每天新增的用户数(而不是累计总数)。这可以通过在查询中添加一个`derivative`聚合来实现。

查询示例:

```json

GET /user_hits/_search

{

  "size": 0,

  "aggs": {

    "users_per_day": {

      "date_histogram": {

        "field": "timestamp",

        "calendar_interval": "day"

      },

      "aggs": {

        "distinct_users": {

          "cardinality": {

            "field": "user_id"

          }

        },

        "total_new_users": {

          "cumulative_cardinality": {

            "buckets_path": "distinct_users"

          }

        },

        "incremental_new_users": {

          "derivative": {

            "buckets_path": "total_new_users"

          }

        }

      }

    }

  }

}

```

响应结果:

```json

{

   "took": 11,

   "timed_out": false,

   "_shards": ...,

   "hits": ...,

   "aggregations": {

      "users_per_day": {

         "buckets": [

            {

               "key_as_string": "2019-01-01T00:00:00.000Z",

               "key": 1546300800000,

               "doc_count": 2,

               "distinct_users": {

                  "value": 2

               },

               "total_new_users": {

                  "value": 2

               }

            },

            {

               "key_as_string": "2019-01-02T00:00:00.000Z",

               "key": 1546387200000,

               "doc_count": 2,

               "distinct_users": {

                  "value": 2

               },

               "total_new_users": {

                  "value": 3

               },

               "incremental_new_users": {

                  "value": 1.0

               }

            },

            {

               "key_as_string": "2019-01-03T00:00:00.000Z",

               "key": 1546473600000,

               "doc_count": 3,

               "distinct_users": {

                  "value": 3

               },

               "total_new_users": {

                  "value": 4

               },

               "incremental_new_users": {

                  "value": 1.0

               }

            }

         ]

      }

   }

}

```

结果解释:

• 2019-01-01:新增用户数为2。

• 2019-01-02:新增用户数为1。

• 2019-01-03:新增用户数为1。

通过这种方式,您可以清晰地了解每天新增的唯一用户数量,而不仅仅是累计总数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三篇:半导体“红蓝药丸“——IGBT/SiC器件如何重塑电驱系统

副标题:当黑客帝国遇见800V高压架构,第三代半导体开启能源革命 ▶ 开篇:红蓝药丸的终极抉择 黑客帝国隐喻 - 红色药丸(IGBT) :传统硅基器件构建的"真实世界"——成熟稳定但存在性能天花板…

VTK编程指南<十六>:VTK表面重建之Delaunay三角剖分

1、无边界限制 三角剖分是一种应用非常广泛的重建技术。三角剖分将一些散乱的点云数据划分为一系列的三角形网格。最常用的三角剖分技术是Delaunay三角剖分。Delaunay三角剖分具有许多优良的性质,即最大化最小角特性,即所有可能的三角形剖分中&#xff0…

2.Excel:滨海市重点中学的物理统考考试情况❗(15)

目录 NO12​ 1.数据透视表​ 2. 3.sum函数 4.sumifs客观/主观平均分​ 5.sumifs得分率​ 6.数字格式修改​ NO3/4/5​ sumifs某一组数据相加,某一范围,某一范围的具体点向下拖拉,锁定列;向左右,锁定行F4&#x…

Hdoop之MapReduce的原理

简单版本 AppMaster: 整个Job任务的核心协调工具 MapTask: 主要用于Map任务的执行 ReduceTask: 主要用于Reduce任务的执行 一个任务提交Job --> AppMaster(项目经理)--> 根据切片的数量统计出需要多少个MapTask任务 --> 向ResourceManager(Yarn平台的老大)索要资源 --…

JAVA并发编程3--多线程程序

​ 1.创建线程的方法: 案例:计算1-1000的整数和 实现Runnable接口 步骤: 1.创建一个实现了Runnable接口的类 2.实现类去实现Runnable中的抽象方法:run() 3.创建实现类的对象 4.将此对象作为参数传递到Thread类的构造器中&#…

自主项目面试点总结

1、许苑–OJ判题系统 技术栈:Spring BootSpring Cloud AlibabaRedisMybatisMQDocker 项目地址: https://github.com/xuyuan-upward/xyoj-backend-microservice 1.1、项目介绍: 一个基于微服务的OJ系统,具备能够根据管理员预设的题目用例对用户提交的代…

idea Ai工具通义灵码,Copilot我的使用方法以及比较

我用过多个idea Ai 编程工具,大约用了1年时间,来体会他们那个好用,以下只是针对我个人的一点分享,不一定对你适用 仅作参考。 介于篇幅原因我觉得能说上好用的 目前只有两个 一个是阿里的通义灵码和Copilot,我用它来干…

4.python基础语法-下

文章目录 1.顺序语句2.条件语句 - if2.1什么是条件语句2.2语法格式2.2.1if2.2.2if - else2.2.3if - elif - else 2.3缩进和代码块2.4练习2.5空语句 pass 3.循环语句3.1while循环3.2for循环3.3continue3.4break 4.综合案例4.1设置初始属性4.2设置性别4.3设置出生点4.4针对每一岁…

Java--集合(理论)

目录 一、collection collection常用方法 1.List(可以存在重复元素) 迭代器 迭代器的概念 注意事项 例子 1.ArrayList 特点 2.LinkedLIst 特点 3.Vector 特点 2.Set(无重复元素) 1.HashSet 特点 2.Linkedhashset&…

3D图形学与可视化大屏: 3D 图形学的定义、应用领域和发展历程

一、3D 图形学的定义 3D 图形学是计算机科学的一个分支,主要研究如何在计算机上生成、处理和显示三维图形。它涉及到数学、物理学、计算机科学等多个学科领域,旨在通过计算机技术模拟真实世界中的三维物体和场景,为用户提供逼真的视觉体验。…

Python 面向对象(类,对象,方法,属性,魔术方法)

前言:在讲面向对象之前,我们先将面向过程和面向对象进行一个简单的分析比较,这样我们可以更好的理解与区分,然后我们在详细的讲解面向对象的优势。 面向过程(Procedure-Oriented Programming,POP&#xff0…

轮子项目--消息队列的实现(3)

上一篇文章中我把一些关键的类以及表示出来,如何对这些类对应的对象进行管理呢?管理分为硬盘和内存上,硬盘又分为数据库(管理交换机,队列和绑定)和文件(管理消息),本文就…

5.7.1 软件项目管理范围、成本估算、风险分析

文章目录 管理范围成本估算风险分析 管理范围 软件项目管理范围包含4P,即人员、产品、过程、项目。人员管理通过人员能力成熟度模型PCMM进行管理。产品管理需要制定产品目标,识别产品的总体目标,而不涉及细枝末节。产品范围,识别产…

Android新版高斯模糊(毛玻璃)官方实现,Kotlin

Android新版高斯模糊(毛玻璃)官方实现,Kotlin 从Android 12开始,Android官方API支持高斯模糊(毛玻璃)效果。关键是通过RenderEffect实现。 https://developer.android.com/reference/android/graphics/RenderEffecthttps://developer.android.com/refer…

仿 RabbitMQ 实现的简易消息队列

文章目录 项目介绍开放环境第三⽅库介绍ProtobufMuduo库 需求分析核⼼概念实现内容 消息队列系统整体框架服务端模块数据管理模块虚拟机数据管理模块交换路由模块消费者管理模块信道(通信通道)管理模块连接管理模块 客户端模块 公共模块日志类其他工具类…

实验9 基于WebGoat平台的SQL注入攻击

实验9 基于WebGoat平台的SQL注入攻击 1.实验目的 熟悉WebGoat平台,在该平台上实现SQL注入攻击。 2.实验内容 (1)下载webgoat-server-8.2.2.jar。 (2)搭建java环境。 (3)运行webgoat。 &#xf…

多光谱技术在华为手机上的应用发展历史

2018 年,华为 P20 系列首次搭载 5 通道色温传感器,可帮助手机在不同光照条件下保持画面色彩一致性。 2020 年,华为 P40 系列搭载 8 通道多光谱色温传感器(实际为 11 通道,当时只用 8 个通道检测可见光)&am…

如何免费白嫖 Deepseek API 接口

今天我将教大家如何利用网络空间测绘搜索引擎「Fofa」来寻找已经部署并开放 Deepseek 接口的服务。以下是详细步骤: 1. 访问 Fofa 搜索引擎 首先,打开 Fofa 搜索引擎的网站:https://fofa.info 2. 搜索开放的 Deepseek 接口 在搜索框中输入…

SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统

SaaSAI应用架构:业务场景、智能体、大模型、知识库、传统工具系统 大家好,我是汤师爷~ 在SaaS与AI应用的演进过程中,合理的架构设计至关重要。本节将详细介绍其五个核心层次: 业务场景层:发现和确定业务场景智能体层…

ios通过xib创建控件

之前写过ios动态创建控件及添加事件,纯手工代码写控件,虽然比较灵活,但是就是代码量比较多。这次我们通过xib来创建app下载列表项 AppView.xib。一个imageview,一个label,一个button构成 1.创建AppView.xib 2.再创建xib对应的mode&#xff0…