Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›ES|QL ›ES|QL справочник

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API