ES|QL временные отрезки
Временные отрезки представляют собой интервалы между двумя значениями даты и времени. В настоящее время поддерживаются два типа временных отрезков:
-
DATE_PERIODопределяет интервалы в годах, кварталах, месяцах, неделях и днях -
TIME_DURATIONопределяет интервалы в часах, минутах, секундах и миллисекундах
Временной отрезок требует двух элементов: целого значения и временной единицы.
Временные отрезки работают с функциями группировки, такими как BUCKET, скалярными функциями, такими как DATE_TRUNC, и арифметическими операторами, такими как + и -. Преобразование строк во временные отрезки осуществляется с помощью TO_DATEPERIOD, TO_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_PERIOD, TO_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"}]
} Когда временной отрезок предоставляется в виде именованного параметра в строковом формате, он может быть автоматически преобразован в соответствующее значение временного отрезка в функциях группировки и скалярных функциях, таких как BUCKET и DATE_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"}]
} Поддерживаемые временные единицы
| Временные единицы | Допустимые сокращения |
|---|---|
год | г, год, годы |
квартал | кв, квартал, кварталы |
месяц | мес, месяца |
неделя | нед, недели |
день | д, дня |
час | ч, часа |
минута | мин, минуты |
секунда | с, сек, секунды |
миллисекунда | мс, миллисекунды |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/esql-time-spans.html