ES|QL 时间跨度

编辑

时间跨度表示两个日期时间值之间的间隔。目前支持两种类型的时间跨度

  • DATE_PERIOD 指定以年、季度、月、周和天为单位的间隔
  • TIME_DURATION 指定以小时、分钟、秒和毫秒为单位的间隔

时间跨度需要两个元素:一个整数值和一个时间单位。

时间跨度可以与分组函数(如 BUCKET)、标量函数(如 DATE_TRUNC)以及算术运算符(如 +-)一起使用。可以使用 TO_DATEPERIODTO_TIMEDURATION 或强制转换运算符 ::DATE_PERIOD::TIME_DURATION 将字符串转换为时间跨度。

在 ES|QL 中使用时间跨度的示例

编辑

使用 BUCKET

FROM employees
| WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z"
| STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week)
| SORT week
hires_per_week:long week:date

2

1985-02-18T00:00:00.000Z

1

1985-05-13T00:00:00.000Z

1

1985-07-08T00:00:00.000Z

1

1985-09-16T00:00:00.000Z

2

1985-10-14T00:00:00.000Z

4

1985-11-18T00:00:00.000Z

使用 DATE_TRUNC

FROM employees
| KEEP first_name, last_name, hire_date
| EVAL year_hired = DATE_TRUNC(1 year, hire_date)
first_name:keyword last_name:keyword hire_date:date year_hired:date

Alejandro

McAlpine

1991-06-26T00:00:00.000Z

1991-01-01T00:00:00.000Z

Amabile

Gomatam

1992-11-18T00:00:00.000Z

1992-01-01T00:00:00.000Z

Anneke

Preusig

1989-06-02T00:00:00.000Z

1989-01-01T00:00:00.000Z

使用 + 和/或 -

FROM sample_data
| WHERE @timestamp > NOW() - 1 hour
@timestamp:date client_ip:ip event_duration:long message:keyword

当以字符串格式提供时间跨度作为命名参数时,可以使用 TO_DATEPERIOD::DATE_PERIODTO_TIMEDURATION::TIME_DURATION 将其转换为相应的时间跨度值,用于诸如 + 和/或 - 等算术运算。

POST /_query
{
   "query": """
   FROM employees
   | EVAL x = hire_date + ?timespan::DATE_PERIOD, y = hire_date - TO_DATEPERIOD(?timespan)
   """,
   "params": [{"timespan" : "1 day"}]
}

当以字符串格式提供时间跨度作为命名参数时,它可以自动转换为分组函数和标量函数中相应的时间跨度值,例如 BUCKETDATE_TRUNC

POST /_query
{
   "query": """
   FROM employees
   | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z"
   | STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, ?timespan)
   | SORT week
   """,
   "params": [{"timespan" : "1 week"}]
}
POST /_query
{
   "query": """
   FROM employees
   | KEEP first_name, last_name, hire_date
   | EVAL year_hired = DATE_TRUNC(?timespan, hire_date)
   """,
   "params": [{"timespan" : "1 year"}]
}

支持的时间单位

编辑
时间单位 有效缩写

y, yr, years

季度

q, quarters

mo, months

w, weeks

d, days

小时

h, hours

分钟

min, minutes

s, sec, seconds

毫秒

ms, milliseconds