Skip to content

Conversation

@lezzago
Copy link
Member

@lezzago lezzago commented Sep 24, 2025

Description

Support for queries other data sources like prometheus via REST API.
PR is a merge from feature/direct-query-prometheus. It is not a straight merge as that PR shows more changes than there are: #4357.

Most changes are isolated in the direct-query and direct-query-core modules

Introduces 3 new APIs:

  • Direct query: Query non-opensearch datasources like Prometheus with PromQL
    • uri: GET /_plugins/_directquery/_query/{dataSources}
  • Read resources: Fetch resources from non-opensearch datasources like Prometheus to fetch labels/series/alerts
    • base uri: GET /_plugins/_directquery/_resources/{dataSource}
      • example: GET /_plugins/_directquery/_resources/{dataSource}/api/v1/{resourceType}/{resourceName}/values
  • Write resources: Write resources to non-opensearch datasources like Prometheus to put alert manager silences
    • base uri: POST /_plugins/_directquery/_resources/{dataSource}
      • example: POST /_plugins/_directquery/_resources/{dataSource}/alertmanager/api/v2/{resourceType}

Related Issues

#4229

Check List

  • New functionality includes testing.
  • New functionality has been documented.
  • New functionality has javadoc added.
  • New functionality has a user manual doc added.
  • New PPL command checklist all confirmed.
  • API changes companion pull request created.
  • Commits are signed per the DCO using --signoff or -s.
  • Public documentation issue/PR created.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

joshuali925 and others added 30 commits September 4, 2025 12:11
* distinct_count doc for eventstats

Signed-off-by: Kai Huang <[email protected]>

* doc enhancement

Signed-off-by: Kai Huang <[email protected]>

* add fields for consistency between different Java versions

Signed-off-by: Kai Huang <[email protected]>

* remove changes

Signed-off-by: Kai Huang <[email protected]>

* add bin to index.rst

Signed-off-by: Kai Huang <[email protected]>

* add link

Signed-off-by: Kai Huang <[email protected]>

* fix

Signed-off-by: Kai Huang <[email protected]>

---------

Signed-off-by: Kai Huang <[email protected]>
* Implement Append Command

Signed-off-by: Songkan Tang <[email protected]>

* Fix spotless check

Signed-off-by: Songkan Tang <[email protected]>

* Rephrase append.rst

Signed-off-by: Songkan Tang <[email protected]>

* Support subsearch different index for append command

Signed-off-by: Songkan Tang <[email protected]>

* Fix some tests and add cross cluster IT

Signed-off-by: Songkan Tang <[email protected]>

* Not support empty subsearch input for now

Signed-off-by: Songkan Tang <[email protected]>

* Fix doctest

Signed-off-by: Songkan Tang <[email protected]>

* Support empty source edge case

Signed-off-by: Songkan Tang <[email protected]>

* Fix anonymizer tests

Signed-off-by: Songkan Tang <[email protected]>

* Add missing test cases for nested join or lookup command in appended subsearch

Signed-off-by: Songkan Tang <[email protected]>

* Fix compile issue

Signed-off-by: Songkan Tang <[email protected]>

---------

Signed-off-by: Songkan Tang <[email protected]>
* Bin command big5 queries

Signed-off-by: Kai Huang <[email protected]>

* update IT

Signed-off-by: Kai Huang <[email protected]>

* fix

Signed-off-by: Kai Huang <[email protected]>

* remove tests

Signed-off-by: Kai Huang <[email protected]>

---------

Signed-off-by: Kai Huang <[email protected]>
Signed-off-by: Kai Huang <[email protected]>
…ject#4213)

* Enable filtered aggregation pushdown

Signed-off-by: Chen Dai <[email protected]>

* Add basic UT and ignore IT for now

Signed-off-by: Chen Dai <[email protected]>

* Enable aggregate case to filter rule and fix UT and IT

Signed-off-by: Chen Dai <[email protected]>

* Add expected json file for no pushdown test

Signed-off-by: Chen Dai <[email protected]>

* Remove unnecessary aggregate case to filter rule

Signed-off-by: Chen Dai <[email protected]>

* Add UT for IS_TRUE support

Signed-off-by: Chen Dai <[email protected]>

* Add more explain IT

Signed-off-by: Chen Dai <[email protected]>

* Refactor UT

Signed-off-by: Chen Dai <[email protected]>

* Extract aggregate filter analyzer abstraction

Signed-off-by: Chen Dai <[email protected]>

* Add more UT

Signed-off-by: Chen Dai <[email protected]>

* Refactor UT with fluent API

Signed-off-by: Chen Dai <[email protected]>

* Add UT for distinct count

Signed-off-by: Chen Dai <[email protected]>

* Address comment by adding UT for script filter pushdown

Signed-off-by: Chen Dai <[email protected]>

* Fix spotless

Signed-off-by: Chen Dai <[email protected]>

---------

Signed-off-by: Chen Dai <[email protected]>
…project#4193)

* Run unit test suites in parallel

Signed-off-by: Simeon Widdis <[email protected]>

* Split out our test actions

Signed-off-by: Simeon Widdis <[email protected]>

* Make unit test step run in parallel

Signed-off-by: Simeon Widdis <[email protected]>

* Fix removed bwc tests

Signed-off-by: Simeon Widdis <[email protected]>

* Add another missing parallel flag

Signed-off-by: Simeon Widdis <[email protected]>

---------

Signed-off-by: Simeon Widdis <[email protected]>
Signed-off-by: Simeon Widdis <[email protected]>
…ject#4109)

* rex - initial implementation

Signed-off-by: Jialiang Liang <[email protected]>

* stop using utils

Signed-off-by: Jialiang Liang <[email protected]>

* fix spotless check

Signed-off-by: Jialiang Liang <[email protected]>

* offset_field - initial implementation

Signed-off-by: Jialiang Liang <[email protected]>

* max_match - initial implementation

Signed-off-by: Jialiang Liang <[email protected]>

* sed - initial implementation

Signed-off-by: Jialiang Liang <[email protected]>

* fix name capture group for extraction

Signed-off-by: Jialiang Liang <[email protected]>

* add rex rst doc

Signed-off-by: Jialiang Liang <[email protected]>

* IT - initial setup

Signed-off-by: Jialiang Liang <[email protected]>

* add a analyzer test for legacy engine

Signed-off-by: Jialiang Liang <[email protected]>

* Add UT for rex

Signed-off-by: Jialiang Liang <[email protected]>

* sed - add pushdown for sed and explain IT and IT with fix

Signed-off-by: Jialiang Liang <[email protected]>

* anonymizer - add rex for anonymizer and test

Signed-off-by: Jialiang Liang <[email protected]>

* Add cross cluster IT for rex

Signed-off-by: Jialiang Liang <[email protected]>

* peng - resolve comments for rst doc 0

Signed-off-by: Jialiang Liang <[email protected]>

* peng - address some comments 1

Signed-off-by: Jialiang Liang <[email protected]>

* peng - resolve comment in rst doc to add a java doc link

Signed-off-by: Jialiang Liang <[email protected]>

* kai - modify the bin ast builder test

Signed-off-by: Jialiang Liang <[email protected]>

* peng - fix the extraction behavior without filter even when there is zero match

Signed-off-by: Jialiang Liang <[email protected]>

* fix rex explain no pushdown

Signed-off-by: Jialiang Liang <[email protected]>

* change the offset val output format

Signed-off-by: Jialiang Liang <[email protected]>

* fix rst file

Signed-off-by: Jialiang Liang <[email protected]>

* peng - SWITCH TO USE CALCITE NATIVE OPERATORS

Signed-off-by: Jialiang Liang <[email protected]>

* Peng - fix tests after operator change

Signed-off-by: Jialiang Liang <[email protected]>

* support mode=extract and update doc

Signed-off-by: Jialiang Liang <[email protected]>

* fix the issue after rebase

Signed-off-by: Jialiang Liang <[email protected]>

* peng - enforce specifying field in antlr for now

Signed-off-by: Jialiang Liang <[email protected]>

* relocate rex cmd IT

Signed-off-by: Jialiang Liang <[email protected]>

* peng - simplify vistFunciton

Signed-off-by: Jialiang Liang <[email protected]>

* peng - add UT for RexExtractMultiFunction

Signed-off-by: Jialiang Liang <[email protected]>

* peng - add UT RexOffsetFunction

Signed-off-by: Jialiang Liang <[email protected]>

* fix some tests

Signed-off-by: Jialiang Liang <[email protected]>

* DECOUPLE SED + OFFSET FIELD

Signed-off-by: Jialiang Liang <[email protected]>

* Improve error handling for extract

Signed-off-by: Jialiang Liang <[email protected]>

* add this rex rst into index

Signed-off-by: Jialiang Liang <[email protected]>

* fix return type in extract multi

Signed-off-by: Jialiang Liang <[email protected]>

* add rex doc into doc test

Signed-off-by: Jialiang Liang <[email protected]>

* fix doc test

Signed-off-by: Jialiang Liang <[email protected]>

* Fix linting

Signed-off-by: Jialiang Liang <[email protected]>

* fix rebase issue

Signed-off-by: Jialiang Liang <[email protected]>

* fix regex anonymizer tests

Signed-off-by: Jialiang Liang <[email protected]>

* fix analyzer test and setup to use util function

Signed-off-by: Jialiang Liang <[email protected]>

* lint fix

Signed-off-by: Jialiang Liang <[email protected]>

* fix doc test

Signed-off-by: Jialiang Liang <[email protected]>

* Add max match limit implementation

Signed-off-by: Jialiang Liang <[email protected]>

* fix anonymizer test

Signed-off-by: Jialiang Liang <[email protected]>

* peng - simplify if

Signed-off-by: Jialiang Liang <[email protected]>

* peng - make extract multi to only handle the case of max_match > 1

Signed-off-by: Jialiang Liang <[email protected]>

---------

Signed-off-by: Jialiang Liang <[email protected]>
* add wildcard support for rename

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix calcite wildcard support and add tests

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

* add check to analyzer

Signed-off-by: Ritvi Bhatt <[email protected]>

* update doc formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

* remove v2 engine wildcard support

Signed-off-by: Ritvi Bhatt <[email protected]>

* update doc

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

* support cascading rename

Signed-off-by: Ritvi Bhatt <[email protected]>

* update formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

* add cross cluster test

Signed-off-by: Ritvi Bhatt <[email protected]>

* add test for cascading rename

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

* add test for cascading rename

Signed-off-by: Ritvi Bhatt <[email protected]>

* change behavior for renaming existing fields

Signed-off-by: Ritvi Bhatt <[email protected]>

* add tests and update docs

Signed-off-by: Ritvi Bhatt <[email protected]>

* update docs

Signed-off-by: Ritvi Bhatt <[email protected]>

* update docs

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix renaming to same name

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix behavior for consecutive wildcards/address comments

Signed-off-by: Ritvi Bhatt <[email protected]>

* add back import

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix doc

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix doc

Signed-off-by: Ritvi Bhatt <[email protected]>

* fix formatting

Signed-off-by: Ritvi Bhatt <[email protected]>

---------

Signed-off-by: Ritvi Bhatt <[email protected]>
Signed-off-by: ritvibhatt <[email protected]>
* First revision

Signed-off-by: Aaron Alvarez <[email protected]>

* Fixing documentation

Signed-off-by: Aaron Alvarez <[email protected]>

* Removing unnecessary comments

Signed-off-by: Aaron Alvarez <[email protected]>

* Fixinf stats.rst documentation

Signed-off-by: Aaron Alvarez <[email protected]>

* Fixing documentation

Signed-off-by: Aaron Alvarez <[email protected]>

* Addressing comments

Signed-off-by: Aaron Alvarez <[email protected]>

---------

Signed-off-by: Aaron Alvarez <[email protected]>
Signed-off-by: Aaron Alvarez <[email protected]>
Co-authored-by: Aaron Alvarez <[email protected]>
* Support join field list and join options

Signed-off-by: Lantao Jin <[email protected]>

* Add SPL-compatible syntax setting

Signed-off-by: Lantao Jin <[email protected]>

* Revert SPL settings

Signed-off-by: Lantao Jin <[email protected]>

* Fix IT

Signed-off-by: Lantao Jin <[email protected]>

* Fix IT

Signed-off-by: Lantao Jin <[email protected]>

* Support max=n option

Signed-off-by: Lantao Jin <[email protected]>

* support max=n in sql-like join syntax

Signed-off-by: Lantao Jin <[email protected]>

* Add Explain IT for new join syntax

Signed-off-by: Lantao Jin <[email protected]>

* Refactor the user doc

Signed-off-by: Lantao Jin <[email protected]>

* Fix conflicts

Signed-off-by: Lantao Jin <[email protected]>

* Fix conflicts

Signed-off-by: Lantao Jin <[email protected]>

* Disable the collapse pushdown

Signed-off-by: Lantao Jin <[email protected]>

* refactor

Signed-off-by: Lantao Jin <[email protected]>

* Fix IT

Signed-off-by: Lantao Jin <[email protected]>

---------

Signed-off-by: Lantao Jin <[email protected]>
* Support first/last aggregation functions for PPL

Signed-off-by: Kai Huang <[email protected]>

* Support null

Signed-off-by: Kai Huang <[email protected]>

* remove legacy

Signed-off-by: Kai Huang <[email protected]>

* update doc

Signed-off-by: Kai Huang <[email protected]>

* fix doctest

Signed-off-by: Kai Huang <[email protected]>

* fix stats.rst file

Signed-off-by: Kai Huang <[email protected]>

* fixes

Signed-off-by: Kai Huang <[email protected]>

* move pushdown logic to AggregateAnalyzer

Signed-off-by: Kai Huang <[email protected]>

* fix IT and update null handling

Signed-off-by: Kai Huang <[email protected]>

* add test cases for null handling

Signed-off-by: Kai Huang <[email protected]>

* handle parallelism

Signed-off-by: Kai Huang <[email protected]>

* Simplify CalciteExplainIT and add UT for AggregateAnalyzer

Signed-off-by: Kai Huang <[email protected]>

# Conflicts:
#	opensearch/src/test/java/org/opensearch/sql/opensearch/request/AggregateAnalyzerTest.java

* fixes

Signed-off-by: Kai Huang <[email protected]>

---------

Signed-off-by: Kai Huang <[email protected]>
…ject#4228)

* Push down limit operator into aggregation bucket size

Signed-off-by: Heng Qian <[email protected]>

* Fix IT

Signed-off-by: Heng Qian <[email protected]>

* Fix robust issue in OpenSearchLimitIndexScanRule

Signed-off-by: Heng Qian <[email protected]>

* Refine comments

Signed-off-by: Heng Qian <[email protected]>

---------

Signed-off-by: Heng Qian <[email protected]>
* Print links to test logs after integTest

Signed-off-by: Tomoyuki Morita <[email protected]>

* print even when tets failed

Signed-off-by: Tomoyuki Morita <[email protected]>

---------

Signed-off-by: Tomoyuki Morita <[email protected]>
…command (opensearch-project#4241)

* [Feature] Implementation of mode sed and offset_field in rex PPL command

Signed-off-by: Jialiang Liang <[email protected]>

* update rex rst doc

Signed-off-by: Jialiang Liang <[email protected]>

* chen - address comment and merge grammar in parser

Signed-off-by: Jialiang Liang <[email protected]>

* chen - limit offset field only in extraction mode

Signed-off-by: Jialiang Liang <[email protected]>

* chen - specify exception type of o_f UDF

Signed-off-by: Jialiang Liang <[email protected]>

* chen - add exception type of o_f UDF - 2

Signed-off-by: Jialiang Liang <[email protected]>

* chen - add exception type of o_f UDF - also fix the test

Signed-off-by: Jialiang Liang <[email protected]>

* chen - alphabetical order of o_f return

Signed-off-by: Jialiang Liang <[email protected]>

---------

Signed-off-by: Jialiang Liang <[email protected]>
…ensearch-project#4212)

* Add earliest/latest aggregate function for eventstats command

Signed-off-by: Tomoyuki Morita <[email protected]>

* update docs

Signed-off-by: Tomoyuki Morita <[email protected]>

* Minor refactoring

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix doctest

Signed-off-by: Tomoyuki Morita <[email protected]>

* Simplify logics

Signed-off-by: Tomoyuki Morita <[email protected]>

* Revert visitWindowFunction

Signed-off-by: Tomoyuki Morita <[email protected]>

* Add sort to some examples

Signed-off-by: Tomoyuki Morita <[email protected]>

* Refactor tests

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix argument validation error (WIP)

Signed-off-by: Tomoyuki Morita <[email protected]>

* Add argument validation for window functions

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix validation

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix tests

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix tests and refactor

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix test

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix merge issue

Signed-off-by: Tomoyuki Morita <[email protected]>

---------

Signed-off-by: Tomoyuki Morita <[email protected]>
…rch-project#3550)

* Speed up aggregation pushdown for single group-by expression

Signed-off-by: Lantao Jin <[email protected]>

* Add configs nullable_bucket

Signed-off-by: Lantao Jin <[email protected]>

* Fix IT

Signed-off-by: Lantao Jin <[email protected]>

* revert typo

Signed-off-by: Lantao Jin <[email protected]>

* Fix conflicts error

Signed-off-by: Lantao Jin <[email protected]>

* fix unit tests

Signed-off-by: Lantao Jin <[email protected]>

* Fix order

Signed-off-by: Lantao Jin <[email protected]>

* Fix UT

Signed-off-by: Lantao Jin <[email protected]>

* Fix UT in windows

Signed-off-by: Lantao Jin <[email protected]>

* fix compile error of conflicts

Signed-off-by: Lantao Jin <[email protected]>

* Add more ITs after merging push down limit to agg buckets

Signed-off-by: Lantao Jin <[email protected]>

* fix IT

Signed-off-by: Lantao Jin <[email protected]>

* address comments

Signed-off-by: Lantao Jin <[email protected]>

* Clear sorts in source builder for aggregation pushdown

Signed-off-by: Lantao Jin <[email protected]>

* Delete the TODO of v2, it's resolved now

Signed-off-by: Lantao Jin <[email protected]>

* fix doctest

Signed-off-by: Lantao Jin <[email protected]>

---------

Signed-off-by: Lantao Jin <[email protected]>
…ject#4274)

* Implement YamlFormatter

Signed-off-by: Tomoyuki Morita <[email protected]>

* Enable YAML based plan comparison in tests

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix line break issue in Windows

Signed-off-by: Tomoyuki Morita <[email protected]>

* Minor fix in test case

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix line break issue

Signed-off-by: Tomoyuki Morita <[email protected]>

* Fix comment

Signed-off-by: Tomoyuki Morita <[email protected]>

---------

Signed-off-by: Tomoyuki Morita <[email protected]>
* mvjoin support in PPL Caclite

Signed-off-by: ps48 <[email protected]>

* fix texts

Signed-off-by: ps48 <[email protected]>

* update docs

Signed-off-by: ps48 <[email protected]>

* update doc examples

Signed-off-by: ps48 <[email protected]>

* rebase main, update test

Signed-off-by: ps48 <[email protected]>

* update test with real array fields

Signed-off-by: ps48 <[email protected]>

* use verifyQueryThrowsException in CalcitePPLFunctionTypeTest

Signed-off-by: ps48 <[email protected]>

* spotless check fix

Signed-off-by: ps48 <[email protected]>

* remove string,string registration for mvjoin

Signed-off-by: ps48 <[email protected]>

* remove string,string test

Signed-off-by: ps48 <[email protected]>

---------

Signed-off-by: ps48 <[email protected]>
Copy link
Member

@joshuali925 joshuali925 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not a straight merge as that PR shows more changes than there are: #4357

Probably because I squashed #4374, GitHub had conflict to rebase it and merge is disabled here. Squash doesn't really merge it with main, and that commit content will show in the diff main...feature/direct-query-prometheus during review.

If you want to send the PR from feature branch let me know, i might be able to push the merge commit. But if not this works as well

Comment on lines +26 to +36
public ExecuteDirectQueryActionRequest(StreamInput in) throws IOException {
// In a real implementation, deserialize the request
// This is just a placeholder since we don't have the full serialization code
this.directQueryRequest = new ExecuteDirectQueryRequest();
}

@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
// Add serialization logic if needed
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i had the question since beginning: are these actionable TODO items, or are we ok to just leave them? I believe this is for transport layer communications, which we don't have a use case, so "real implementation" would mean when this request is being used at transport laayer?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have no current requirements for transport layer. We want to support this when its GA, but there will be a bit of refactoring needed, so was not worth to implement this yet.

@Override
public ExecuteDirectQueryResponse executeDirectQuery(ExecuteDirectQueryRequest request) {
// TODO: Replace with the data source query id.
String queryId = UUID.randomUUID().toString();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

direct query (non async query) shouldn't have a query id?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking of keeping this for now for the purpose of tracing the call to debug errors.

@lezzago
Copy link
Member Author

lezzago commented Sep 24, 2025

Probably because I squashed #4374, GitHub had conflict to rebase it and merge is disabled here. Squash doesn't really merge it with main, and that commit content will show in the diff main...feature/direct-query-prometheus during review.

If you want to send the PR from feature branch let me know, i might be able to push the merge commit. But if not this works as well

I am fine with either choice. If this would be a preferred approach, feel free to try to push a merge commit to fix that.

Signed-off-by: Ashish Agrawal <[email protected]>
Copy link
Collaborator

@Swiddis Swiddis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I looked over many of the original PRs going into this and don't have major architectural concerns. I'm okay to merge this as-is and address any smaller issues later. (Note: haven't carefully looked over the code here, this is a very large change.)

I'd like if you could add testing details for this though: what's the testing plan for the new module? How is it different from our current one? Any known bugs/operational changes we should be aware of?

@Swiddis Swiddis added the enhancement New feature or request label Sep 26, 2025
@Swiddis Swiddis merged commit c203bda into opensearch-project:main Sep 26, 2025
33 of 36 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.