Commit graph

273 commits

Author SHA1 Message Date
kanoshiou
deff3df9f0
ES|QL: Support ::date in inline cast (#123460)
* Inline cast to date

* Update docs/changelog/123460.yaml

* New capability for `::date` casting

* More tests

* Update tests

---------

Co-authored-by: Fang Xing <155562079+fang-xing-esql@users.noreply.github.com>
2025-03-11 17:08:10 -04:00
Mark Tozzi
3e949479d8
ESQL - Include thread names in profile output (#124262)
Resolves #123053

This adds the thread name to the driver sleep profile output.
---------

Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co>
2025-03-11 15:53:22 +01:00
Svilen Mihaylov
ee4bcac1db
Added optional parameters to QSTR ES|QL function (#121787)
Adds options to QSTR function.

#118619 added named function parameters. This PR uses this mechanism for allowing query string function parameters, so query string parameters can be used in ES|QL.

Closes #120933
2025-03-07 13:00:22 -05:00
Colleen McGinnis
b7e3a1e14b
[docs] Migrate docs from AsciiDoc to Markdown (#123507)
* delete asciidoc files

* add migrated files

* fix errors

* Disable docs tests

* Clarify release notes page titles

* Revert "Clarify release notes page titles"

This reverts commit 8be688648d.

* Comment out edternal URI images

* Clean up query languages landing pages, link to conceptual docs

* Add .md to url

* Fixes inference processor nesting.

---------

Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
Co-authored-by: Liam Thompson <leemthompo@gmail.com>
Co-authored-by: Martijn Laarman <Mpdreamz@gmail.com>
Co-authored-by: István Zoltán Szabó <szabosteve@gmail.com>
2025-02-27 17:56:14 +01:00
Craig Taverner
ec82c24a87
Add support to VALUES aggregation for spatial types (#122886)
The original work at https://github.com/elastic/elasticsearch/pull/106065 did not support geospatial types with this comment:

> I made this work for everything but geo_point and cartesian_point because I'm not 100% sure how to integrate with those. We can grab those in a follow up.

The geospatial types should be possible to collect using the VALUES aggregation with similar behavior to the `ST_COLLECT` OGC function, based on the Elasticsearch convention that treats multi-value geospatial fields as behaving similarly to any geometry collection. So this implementation is a trivial addition to the existing values types support.
2025-02-25 11:38:51 +01:00
Nik Everett
df2f3b3b3f
ESQL: Update kibana signatures (#121951)
This updates the kibana signature json files in two ways:
* Renames `eval` to `scalar` - that's the name we use inside of ESQL and
  we may as well make the name the same.
* Calls the `CATEGORIZE` and `BUCKET` function `grouping` because they
  can only be used in the "grouping" positions of the `STATS` command.

Closes #113411
2025-02-07 09:51:09 -05:00
Fang Xing
f58fdf81e9
[ES|QL] Change function_named_parameters in Kibana doc to expected format (#121585)
* change function_named_parameters in kibana doc to expected format
2025-02-04 12:20:34 -05:00
Carlos Delgado
d91d51600e
ESQL - Add Match function options (#120360) 2025-01-28 08:54:33 +01:00
Mark Tozzi
5b3436dce0
Esql - Support date nanos in date extract function (#120727)
Resolves https://github.com/elastic/elasticsearch/issues/110000

Add support for running the date extract function on nanosecond dates.
2025-01-27 14:34:50 +00:00
Carlos Delgado
f61f139653
Match, Like and RLike operators improved docs (#120504) 2025-01-24 07:58:10 +01:00
Mark Tozzi
7e43605e38
Esql Support date nanos on date diff function (#120645)
Resolves #109999

This adds support for date nanos in the date diff function, as well as mixed nanos/millis use cases.

---------

Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co>
2025-01-23 18:04:38 +00:00
Nik Everett
eae93a2097
ESQL: Signatures for NOT IN et al (#120673)
* ESQL: Signatures for `NOT IN` et al

This generates signatures for `NOT IN`, `NOT LIKE`, and `NOT RLIKE`
using a small hack on top of the process used to generate the signatures
for `IN`, `LIKE`, and `RLIKE`. This is a very perl-worth hack, replacing
`LIKE` with `NOT LIKE` in the description. But it's useful for our
kibana friends and if we need to make it nicer we can do so later.

* Zap
2025-01-23 10:57:53 -05:00
Iván Cea Fontenla
acb46af612
ESQL: Fix ROUND() with unsigned longs throwing in some edge cases (#119536)
There were different error cases with `ROUND(number, decimals)`:
- Decimals accepted unsigned longs, but threw a 500 with a `can't process [unsigned_long -> long]` in the cast evaluator
  - Fixed by improving the `resolveType()`
- If the number was a BigInteger unsigned long, there were 2 cases throwing an exception:
  1. Negative decimals outside the range of integer: Error
  2. Negative decimals insie the range of integer, but "big enough" for `BigInteger.TEN.pow(...)` to throw a `BigInteger would overflow supported range`
  3. -19 decimals with big unsigned longs like `18446744073709551615` was throwing an `unsigned_long overflow`

Also, when the number is a BigInteger and the decimals is a big negative (but not big enough to throw), it may be **very** slow. Taking _many_ seconds for a single computation (It tries to calculate a `10^(big number)`. I didn't do anything here, but I wonder if we should limit it.

To solve most of the cases, a warnExceptions was added for the overflow case, and a guard clause to return 0 for <-19 decimals on unsigned longs.

Another issue is that rounding to a number like 7 to -1 returns 0 instead of 10, which may be considered an error. But it's consistent, so I'm leaving it to another PR
2025-01-17 13:38:14 +00:00
Nik Everett
1c13465991
ESQL: Move more test type error testing (#119945)
This reduces the number of test cases in ESQL a little more ala #119678.
It migrates a few random tests and all of the multivalue functions:
```
92775 -> 43760
 3m45 -> 4m04
```

This adds a few more error test cases that were missing to make sure it all
lines up well. And it fixes a few error messages in a few functions. That's
*likely* where the extra time goes.
2025-01-16 20:27:27 +00:00
Nik Everett
ec0cab9a1a
Add operator to ESQL signature for kibana (#120230)
This adds a field to the kibana defintion files for each signature that
looks like:
```
  "operator": "+",
```
Kibana wants these symbols.
2025-01-16 19:50:18 +00:00
Mark Tozzi
2708463e12
Esql - support date nanos in date format function (#120143)
This adds support for passing Date Nanos into the Date Format function. It works for both the single argument and two argument versions. Format strings are unchanged, as the same formatting logic works for both resolutions.

resolves #109994

---------

Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co>
2025-01-15 16:51:08 +00:00
Mark Tozzi
2482f06f3c
ESQL - docs for to_date_nanos (#120124)
I forgot to link the ToDateNanos docs when I merged that function.
---------

Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co>
2025-01-14 16:31:24 -05:00
Ioana Tagirta
f5ac68df95
ESQL: Document support for semantic_text field mapping (#120052)
* Document support for semantic_text field mapping

* Address review comments
2025-01-13 22:18:47 +01:00
Nik Everett
c990377c95
ESQL: Limit memory usage of fold (#118602)
`fold` can be surprisingly heavy! The maximally efficient/paranoid thing
would be to fold each expression one time, in the constant folding rule,
and then store the result as a `Literal`. But this PR doesn't do that
because it's a big change. Instead, it creates the infrastructure for
tracking memory usage for folding as plugs it into as many places as
possible. That's not perfect, but it's better.

This infrastructure limit the allocations of fold similar to the
`CircuitBreaker` infrastructure we use for values, but it's different
in a critical way: you don't manually free any of the values. This is
important because the plan itself isn't `Releasable`, which is required
when using a real CircuitBreaker. We could have tried to make the plan
releasable, but that'd be a huge change.

Right now there's a single limit of 5% of heap per query. We create the
limit at the start of query planning and use it throughout planning.

There are about 40 places that don't yet use it. We should get them
plugged in as quick as we can manage. After that, we should look to the
maximally efficient/paranoid thing that I mentioned about waiting for
constant folding. That's an even bigger change, one I'm not equipped
to make on my own.
2025-01-13 15:04:27 +00:00
Mark Tozzi
e9f2d78923
Esql additional date format testing (#120000)
This wires up the randomized testing for DateFormat. Prior to this PR, none of the randomized testing was hitting the one parameter version of the function, so I wired that up as well. This required some compromises on the type signatures, see comments in line.less

---------

Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co>
2025-01-13 14:11:52 +00:00
Aurélien FOUCRET
31f11c3c0c
[ES|QL] Enable KQL function as a tech preview (#119730) 2025-01-10 12:49:28 +01:00
Ievgen Degtiarenko
fd1be8ce6f
Hash functions (#118938)
This change adds md5, sha1 and sha256 hash functions.
2025-01-08 16:44:15 +01:00
Carlos Delgado
6ee641bdfd
ESQL - Update WHERE command docs with MATCH and full text functions examples (#118987) 2024-12-19 16:44:53 +01:00
Bogdan Pintea
bc3b629d8d
ESQL: Docs: add example of date bucketing with offset (#116680)
Add an example of how to create date histograms with an offset.

Fixes #114167
2024-12-18 17:12:14 +01:00
Ievgen Degtiarenko
7cf28a910e
ESQL Add esql hash function (#117989)
This change introduces esql hash(alg, input) function that relies on the Java MessageDigest to compute the hash.
2024-12-18 09:56:42 +01:00
Mark Tozzi
1e26791515
Esql bucket function for date nanos (#118474)
This adds support for running the bucket function over a date nanos field. Code wise, this just delegates to DateTrunc, which already supports date nanos, so most of the PR is just tests and the auto-generated docs.

Resolves #118031
2024-12-13 09:25:52 -05:00
Gal Lalouche
2be4cd983f
ESQL: Support ST_EXTENT_AGG (#117451)
This PR adds support for ST_EXTENT_AGG aggregation, i.e., computing a bounding box over a set of points/shapes (Cartesian or geo). Note the difference between this aggregation and the already implemented scalar function ST_EXTENT.

This isn't a very efficient implementation, and future PRs will attempt to read these extents directly from the doc values.
We currently always use longitude wrapping, i.e., we may wrap around the dateline for a smaller bounding box. Future PRs will let the user control this behavior.
Fixes #104659.
2024-12-13 12:41:24 +02:00
Alexander Spies
140d88c59a
ESQL: Dependency check for binary plans (#118326)
Make the dependency checker for query plans take into account binary plans and make sure that fields required from the left hand side are actually obtained from there (and analogously for the right).
2024-12-13 11:38:53 +01:00
Carlos Delgado
eb59b989ef
ESQL: Expand type compatibility for match function and operator (#117555) 2024-12-09 19:56:10 +01:00
Mark Tozzi
7cd17d2185
Esql compare nanos and millis (#118027)
Resolves #116281

Introduces support for comparing millisecond dates with nanosecond dates, without the need for casting. Millisecond dates outside of the nanosecond date range are handled correctly.
2024-12-06 09:17:32 -05:00
Tommaso Teofili
91605860ee
Term query for ES|QL (#117359)
This commit adds a `term` function for ES|QL to run `TermQueries`.

For example:
FROM test | WHERE term(content, "dog")
2024-12-06 07:42:48 +00:00
Craig Taverner
c7e985c3b6
Support ST_ENVELOPE and related ST_XMIN, etc. (#116964)
Support ST_ENVELOPE and related ST_XMIN, etc.

Based on the PostGIS equivalents:

https://postgis.net/docs/ST_Envelope.html
https://postgis.net/docs/ST_XMin.html
https://postgis.net/docs/ST_XMax.html
https://postgis.net/docs/ST_YMin.html
https://postgis.net/docs/ST_YMax.html
2024-12-04 12:20:47 +01:00
Jan Kuipers
31508f00a1
Document ES|QL categorize limitations (#117892)
* Document ES|QL categorize limitations

* Update x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/grouping/Categorize.java

Co-authored-by: Alexander Spies <alexander.spies@elastic.co>

---------

Co-authored-by: Alexander Spies <alexander.spies@elastic.co>
2024-12-04 09:53:21 +01:00
Mark Tozzi
913e0fbca8
ESQL Date Nanos Addition and Subtraction (#116839)
Resolves #109995

This adds support and tests for addition and subtraction of date nanos with periods and durations. It does not include support for date_diff, which is a separate ticket (#109999). The bulk of the PR is testing, the actual date math is all handled by library functions.

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
2024-12-02 14:08:07 -05:00
Jan Kuipers
ddc8b959ee
ES|QL categorize docs (#117827)
* Move ES|QL categorize out of snapshot functions

* Categorize docs

* Add experimental + fix docs

* Add experimental + fix docs
2024-12-02 16:41:02 +01:00
Nik Everett
9022cccba7
ESQL: CATEGORIZE as a BlockHash (#114317)
Re-implement `CATEGORIZE` in a way that works for multi-node clusters.

This requires that data is first categorized on each data node in a first pass, then the categorizers from each data node are merged on the coordinator node and previously categorized rows are re-categorized.

BlockHashes, used in HashAggregations, already work in a very similar way. E.g. for queries like `... | STATS ... BY field1, field2` they map values for `field1` and `field2` to unique integer ids that are then passed to the actual aggregate functions to identify which "bucket" a row belongs to. When passed from the data nodes to the coordinator, the BlockHashes are also merged to obtain unique ids for every value in `field1, field2` that is seen on the coordinator (not only on the local data nodes).

Therefore, we re-implement `CATEGORIZE` as a special BlockHash.

To choose the correct BlockHash when a query plan is mapped to physical operations, the `AggregateExec` query plan node needs to know that we will be categorizing the field `message` in a query containing `... | STATS ... BY c = CATEGORIZE(message)`. For this reason, _we do not extract the expression_ `c = CATEGORIZE(message)` into an `EVAL` node, in contrast to e.g. `STATS ... BY b = BUCKET(field, 10)`. The expression `c = CATEGORIZE(message)` simply remains inside the `AggregateExec`'s groupings.

**Important limitation:** For now, to use `CATEGORIZE` in a `STATS` command, there can be only 1 grouping (the `CATEGORIZE`) overall.
2024-11-27 17:44:55 +01:00
Craig Taverner
8c22fc479f
Make spatial search functions not preview (#117489) 2024-11-25 17:04:48 +01:00
Aurélien FOUCRET
ff58d891a1
ES|QL kql function. (#116764) 2024-11-25 14:22:11 +01:00
Larisa Motova
7e801e0410
[ES|QL] Add a standard deviation function (#116531)
Uses Welford's online algorithm, as well as the parallel version, to
calculate standard deviation.
2024-11-22 12:33:46 -10:00
Nik Everett
4ecc7518ef
ESQL: Add docs for MV_PERCENTILE (#117377)
We built this a while back. Let's document it.
2024-11-23 06:41:18 +11:00
Nik Everett
893dfd3c9a
ESQL: Make WEIGHTED_AVG not preview (#117356)
It's not PREVIEW.
2024-11-22 16:28:06 +00:00
Luigi Dell'Aquila
a1247b3e60
ES|QL: fix validation of SORT by aggregate functions (#117316) 2024-11-22 12:12:09 +01:00
Carlos Delgado
ea4b41fca8
ESQL - match operator included in non-snapshot builds (#116819) 2024-11-21 07:45:22 +01:00
Mark Tozzi
c3f73d0319
Esql Enable Date Nanos (#117080)
This enables date nanos support as tech preview. Basic operations, like reading values, binary comparisons, and functions that don't care about type should work, but some functions are not yet supported. Most notably, Bucket is not yet supported, although Date_Trunc is and can be used for grouping. See the docs for the full list of limitations.

relates to #109352
2024-11-20 09:31:01 -05:00
Fang Xing
d33bff6468
[ES|QL][DOCS] Add docs for date_period and time_duration (#116368)
* add docs for date_period and time_duration
2024-11-19 07:48:35 -05:00
Bogdan Pintea
b5addca40a
ESQL: Docs: COUNT: add an explanation to the use of the 3VL (#116684)
Add an explanation of why `... OR NULL` is needed with `COUNT(...)`.

Fixes: #99954
2024-11-19 10:37:47 +01:00
Gal Lalouche
c45977a5fd
[ESQL] Update docs format (missing space before '=') (#116808) 2024-11-14 16:05:28 +02:00
Gal Lalouche
591cd591ad
[ES|QL] Update length docs (#116734)
ESQL Update length docs (#116734)
2024-11-14 13:14:43 +02:00
Gal Lalouche
b4898c959f
[ES|QL] Add support BYTE_LENGTH scalar function (#116591)
Also added documentation and examples for BIT_LENGTH and LENGTH regarding unicode.
2024-11-13 00:42:19 +02:00
Jack Pan
0914679225
Remove trailing semicolon in REPEAT function example (#116218)
Remove trailing semicolon in REPEAT function example (Closes #116156 )
2024-11-11 11:10:05 +01:00