-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] Unimplemented PPL Sort Syntax #3180
Comments
Thanks for the bug report! Where exactly do we explain this syntax in the docs? I see from the Spark PR that there's some documentation examples without explanations, I guess those are vestigial examples that imply it's a leftover grammar quirk. If it's a grammar quirk, I'm mostly concerned with the possibility of a breaking change when people previously used these queries fine (and perhaps expected them to work) after copying the examples. I think the "safe" route is to mark these functions as deprecated no-ops in the documentation/as part of the response for such queries, clean out other doc references to them, and then only remove them from the grammar next major release. |
In line with the above, I think this is more a documentation issue than a bug, since there's a clear workaround for the faulty behavior and the old sort operations haven't been supported for a very long time (or perhaps ever?). I'm not sure there's significant harm in letting the no-ops exist in peace. |
I agree with @Swiddis. I think we can remove it from our documentation safely. Removing them from the grammar might cause a breaking change for customers, we can remove those changes as part of our next major release. |
For clarity, here is a test case that illustrates the bug: Data Dataset:
Query
Expected Output
Actual Output
|
Thanks @anasalkouz and @Swiddis. Agreed, makes more sense to avoid introducing a breaking change. The existing syntax seems to be modelled on Spunk (Splunk sort documentation). If it is desirable to keep this syntax, for ease of use for those familiar with Splunk, we could alternately fix it so that it does work. This would be relatively easily to implement, since these sort field keywords could simply work as a "shorthand" for casting (see below).
Please let me know what you think! |
@Swiddis I don't that this syntax is actually referenced anywhere in the current documentation for the SQL project, which makes it less likely that customers may depend on it/have unwittingly copied it. But I don't know if it may have been part of the documentation in the past, so it's probably best to, as you suggest, wait until the next major release to remove it (if we actually do want to remove it - see my comment above). |
I like the idea of implementing it as a shorthand, I'm willing to mark this as help-wanted from external contributors since it shouldn't be very complex, if we add some links to the relevant code pieces we can also consider marking this as a good first issue. |
@Swiddis Makes sense to me. Some additional thoughts/considerations:
Based on your answers to the above, perhaps it would make sense to tackle this in the following steps:
Let me know what you think! |
I think I'm in favor of the other language changes you proposed (extending the PPL sort syntax, more sort types, and removing One thing I have run into is that using complex sort logic in OpenSearch queries can kill performance, from experience even something as simple as going from sorting by one field -> sorting by two fields (primary and secondary) will slow down queries by ~6x. For large enough indices this will cause query failures, so an implementation of arbitrary sorting expressions should be robust against resource exhaustion. |
What is the bug?
PPL supports syntax for sorting numerically, lexicographically, or by IP address (e.g. sort num(field_name), sort str(field_name), and sort ip(field_name), respectively) -- but this syntax has no effect on the resulting sort order. It should be removed.
This syntax appears to have been replaced by the addition of data types, and sorting is always done according to the data type (i.e. numerical data types are sorted numerically, strings are sorted lexicographically), rather than as specified by
str
,num
, orip
(i.e. these keywords have no effect on the result). Moreover, this syntax is not mentioned in the supporting user documentation for either OpenSearch SQL or Spark, and there is no actual implementation of the functionality in either code bases - the specified "sort type" is simply ignored.How can one reproduce the bug?
Steps to reproduce the behaviour:
str
keyword (i.e.sort str(field_name)
)What is the expected behaviour?
As a user, you would likely expect the result to be sorted as specified (i.e. numerically, lexicographically, or by IP address), but the actual behaviour is to always sort by the field's data type.
If a user still wants to sort a numerical field lexicographically (for example) once this syntax is removed, they can still do so by first casting the field to a numerical data type before sorting it.
What is your host/environment?
N/A
Do you have any screenshots?
None
Do you have any additional context?
Related to #3145 (Add IP data type) and opensearch-project/opensearch-spark#963 (same issue for Spark).
The text was updated successfully, but these errors were encountered: