1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- [[esql]]
- = {esql}
- :esql-tests: {xes-repo-dir}/../../plugin/esql/qa
- :esql-specs: {esql-tests}/testFixtures/src/main/resources
- [partintro]
- preview::[]
- The {es} Query Language ({esql}) provides a powerful way to filter, transform, and analyze data stored in {es}.
- Users can author {esql} queries to find specific events, perform statistical analysis, and generate visualizations.
- It supports a wide range of commands and functions that enable users to perform various data operations,
- such as filtering, aggregation, time-series analysis, and more.
- The {es} Query Language ({esql}) makes use of "pipes" to manipulate and transform data in a step-by-step fashion.
- This approach allows users to compose a series of operations, where the output of one operation becomes the input for the next,
- enabling complex data transformations and analysis.
- A simple example of an {esql} query is shown below:
- [source,esql]
- ----
- FROM employees
- | EVAL age = DATE_DIFF(NOW(), birth_date, 'Y')
- | STATS AVG(age) BY department
- | SORT age DESC
- ----
- Each {esql} query starts with a <<esql-commands,source command>>. A source command produces
- a table, typically with data from {es}.
- image::images/esql/source-command.svg[A source command producing a table from {es},align="center"]
- A source command can be followed by one or more
- <<esql-commands,processing commands>>. Processing commands change an
- input table by adding, removing, or changing rows and columns.
- Processing commands can perform filtering, projection, aggregation, and more.
- image::images/esql/processing-command.svg[A processing command changing an input table,align="center"]
- You can chain processing commands, separated by a pipe character: `|`. Each
- processing command works on the output table of the previous command.
- image::images/esql/chaining-processing-commands.svg[Processing commands can be chained,align="center"]
- The result of a query is the table produced by the final processing command.
- [discrete]
- === The {esql} Compute Engine
- {esql} is more than a language. It represents a significant investment in new compute capabilities within {es}.
- To achieve both the functional and performance requirements for {esql}, it was necessary to build an entirely new
- compute architecture. {esql} search, aggregation, and transformation functions are directly executed within Elasticsearch
- itself. Query expressions are not transpiled to Query DSL for execution. This approach allows {esql} to be extremely performant and versatile.
- The new {esql} execution engine was designed with performance in mind — it operates on blocks at a time instead of per row, targets vectorization and cache locality, and embraces specialization and multi-threading. It is a separate component from the existing Elasticsearch aggregation framework with different performance characteristics.
- include::esql-get-started.asciidoc[]
- include::esql-language.asciidoc[]
- include::esql-rest.asciidoc[]
- include::esql-kibana.asciidoc[]
- include::task-management.asciidoc[]
- include::esql-limitations.asciidoc[]
- :esql-tests!:
- :esql-specs!:
|