New

The executive guide to generative AI

Read more

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

Was this helpful?
Feedback