日期直方图聚合(date_histogram)

与histogram相似,es中内部将日期表示为一个long值,所以有时候可以用histogram来达到相同的目的,但往往没有date_histogram那么精确

date_histogram的特点在于可以使用 日期/时间表达式指定间隔。

原本的interval在7.2中被弃用,更换为fixed_interval与calendar_interval

相关字段

calendar_interval

只支持单个日历单元,如:支持1m 不支持2m 1.5m

  • minute (1m)
  • hour(1h)
  • day(1d)
  • week(1w)
  • month(1m)
  • quarter( 季度1q)
  • year(1y)

fixed_interval

固定间隔,SI单位i,永远不会偏离,

  • seconds (s) :30s
  • hours (h) :1.5h
  • days (d):3d

time_zone

es的日期时间是以UTC存储的,默认情况下,所有的桶装和四舍五入也是在 UTC 中完成的。使用 time _ zone 参数指示 bucket 应使用不同的时区。

时区可以指定为 ISO 8601 UTC的偏移量,也可指定为 IANA 时区数据库中指定的时区 ID。如 "time_zone": "+08:00""time_zone": "Asia/Shanghai"

这里引用一个官方的例子:

PUT my_index/_doc/1?refresh
{
"date": "2015-10-01T00:30:00Z"
} PUT my_index/_doc/2?refresh
{
"date": "2015-10-01T01:30:00Z"
}

不指定时区

GET my_index/_search?size=0
{
"aggs": {
"by_day": {
"date_histogram": {
"field": "date",
"calendar_interval": "day"
}
}
}
} # 响应
{
...
"aggregations": {
"by_day": {
"buckets": [
{
"key_as_string": "2015-10-01T00:00:00.000Z",
"key": 1443657600000,
"doc_count": 2
}
]
}
}
}

如果指定的时区为“-01:00”,那么该时区的24点就是UTC23点

GET my_index/_search?size=0
{
"aggs": {
"by_day": {
"date_histogram": {
"field": "date",
"calendar_interval": "day",
"time_zone": "-01:00"
}
}
}
} # 现在,第一个文档落入2015年9月30日的桶中,而第二个文档落入2015年10月1日的桶中:
{
...
"aggregations": {
"by_day": {
"buckets": [
{
# key_as_string 值表示指定时区内每天的午夜。
"key_as_string": "2015-09-30T00:00:00.000-01:00",
"key": 1443574800000,
"doc_count": 1
},
{
"key_as_string": "2015-10-01T00:00:00.000-01:00",
"key": 1443661200000,
"doc_count": 1
}
]
}
}
}

offset

使用偏移量参数根据指定的正偏移量(+)或负偏移量(-)持续时间更改每个 bucket 的开始值

比如一个index中现有两个文档,date属性分别为2015.10.01 05:30:002015.10.01 06:30:00,使用如下参数,那么这两个文档会落入一桶中,即2015-10-01 00:00:00的桶中

{
"aggs": {
"by_day": {
"date_histogram": {
"field": "date",
"calendar_interval": "day"
}
}
}
}

如果这时偏移量设置为+6h:

{
...
"aggregations": {
"by_day": {
"buckets": [
{
"key_as_string": "2015-09-30T06:00:00.000Z",
"key": 1443592800000,
"doc_count": 1
},
{
"key_as_string": "2015-10-01T06:00:00.000Z",
"key": 1443679200000,
"doc_count": 1
}
]
}
}
}

extended_bounds

强制返回指定范围内的每一个桶,min与max都会被当做桶返回

date_histogram,es按照时间分组统计的更多相关文章

  1. Oracle按不同时间分组统计

    Oracle按不同时间分组统计 Oracle按不同时间分组统计的sql 如下表table1: 日期(exportDate) 数量(amount) -------------- ----------- ...

  2. Oracle 按不同时间分组统计

    1.按年 select to_char(record_date,'yyyy'), sum(col_8) as total_money from table_name where group by to ...

  3. ES 24 - 如何通过Elasticsearch进行聚合检索 (分组统计)

    目录 1 普通聚合分析 1.1 直接聚合统计 1.2 先检索, 再聚合 1.3 扩展: fielddata和keyword的聚合比较 2 嵌套聚合 2.1 先分组, 再聚合统计 2.2 先分组, 再统 ...

  4. Dev用于界面按选中列进行分组统计数据源(实用技巧)

    如果有用U8的可以明白这个功能就是模仿他的统计功能.我不过是把他造成通用的与适应于DEV的. (效率为6000条数据分组统计时间为3秒左右分组列过多5秒.1000条以下0.几秒,500条下0.00几秒 ...

  5. DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法

    DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...

  6. Mysql 根据时间戳按年月日分组统计

    Mysql 根据时间戳按年月日分组统计create_time时间格式SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM ...

  7. Mysql中较为复杂的分组统计去重复值

    这是我的代码: 前提是做了一个view:att_sumbase 首先分开统计每天的中午.下午饭点人数,这时需要分别去除中午和下午重复打卡的人.用了记录集的交,嵌套select的知识. 注意不能直接使用 ...

  8. SQL——按照季度,固定时间段,分组统计数据

    最近在工作中接到了一个需求,要求统计当月以10天为一个周期,每个周期的数据汇总信息.假设有一张表如下: 表table_test中 ID           AMOUNT         CREATE_ ...

  9. 【.Net】 大文件可使用的文本分组统计工具(附带源码,原创)

    本工具可实现的效果: 1.读取大文件(大于1GB) 2.根据分隔符分割后的列分组 3.速度快. 4.处理过程中,可以随时停止处理,操作不卡死. 5.有对当前内存的实时监测,避免过多占用内存,影响系统运 ...

  10. 问题 B: 分组统计

    分组统计 问题 B: 分组统计时间限制: 1 Sec 内存限制: 32 MB 提交: 416 解决: 107 [提交][状态][讨论版][命题人:外部导入] 题目描述 先输入一组数,然后输入其分组,按 ...

随机推荐

  1. 【Android】截图案例

    1 工作空间 2 代码 ​ MainActivity.java package com.zhyan8.demo; import android.graphics.Bitmap; import andr ...

  2. Java I/O 教程(七) DataOutputStream和DataInputStream

    Java DataOutputStream Class Java DataOutputStream class 可以以机器无关方式往指定输出流写入Java原始数据类型,例如int, double, l ...

  3. 【Android 逆向】【ARM汇编】 arm64部分知识

    arm64寄存器更多 X0-X30 SP CPSR PC 64位 W0-W30 32位 PC寄存器的值禁止修改 参数放在 X0-X7/W0-W7 结果放在 X0 函数返回 RET 相当于 bl lr ...

  4. python中的泛型使用TypeVar

    引入为什么需要TypeVar PEP484的作者希望借助typing模块引入类型提示,不改动语言的其它部分.通过精巧的元编程技术,让类 支持[]运算不成问题.但是方括号内的T变量必须在某处定义,否则要 ...

  5. mac上安装vue

    安装node.js brew install nodejs node -v #查看版本 给nodejs模块安装目录设置访问权限 sudo chmod -R 777 /usr/local/lib/nod ...

  6. 在Study.BlazorOne项目中引入Study.Trade模块的实体的表结构

    # 1.修改EntityFrameworkCore项目下的BlazorOneDbContext文件,增加一行代码即可 增加Study.Trade.EntityFrameworkCore中的这个方法: ...

  7. 【Azure 应用服务】Function App / App Service 连接 Blob 报错

    问题描述 因 Blob 启用了防火墙功能,但是当把App Service 或 Function App的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答 Azure St ...

  8. UserWarning: To get the last learning rate computed by the scheduler, please use `get_last_lr()`

    将 lr = scheduler.get_lr() 改为 lr = scheduler.get_last_lr()

  9. C++ STL 容器-array类型

    C++ STL 容器-array类型 array是C++11STL封装的数组,内存分配在栈中stack,绝对不会重新分配,随机访问 创建和初始化 // 下面的等同于int a[10]; std::ar ...

  10. Java 构造器(构造方法)练习

    1 package com.bytezero.triangle; 2 3 public class TriAngle 4 { 5 //私有属性 6 private double base; //边长 ...