* SQL: Allow select-sort-project query shapes. Fixes #7768. Design changes: - In PartialDruidQuery, allow projection after select + sort by removing the SELECT_SORT query stage and instead allowing the SORT and SORT_PROJECT stages to apply either after aggregation or after a plain non-aggregating select. This is different from prior behavior, where SORT and SORT_PROJECT were only considered valid after aggregation stages. This logic change is in the "canAccept" method. - In DruidQuery, represent either kind of sorting with a single "Sorting" class (instead of DefaultLimitSpec). The Sorting class is still convertible into a DefaultLimitSpec, but is also convertible into the sorting parameters accepted by a Scan query. - In DruidQuery, represent post-select and post-sorting projections with a single "Projection" class. This obsoletes the SortProject and SelectProjection classes, and simplifies the DruidQuery by allowing us to move virtual-column and post-aggregator-creation logic into the new Projection class. - Split "DruidQuerySignature" into RowSignature and VirtualColumnRegistry. This effectively means that instead of having mutable and immutable versions of DruidQuerySignature, we instead of RowSignature (always immutable) and VirtualColumnRegistry (always mutable, but sometimes null). This change wasn't required, but IMO it this makes the logic involving them easier to follow, and makes it more clear when the virtual column registry is active and when it's not. Other changes: - ConvertBoundsToSelectors now just accepts a RowSignature, but we use the VirtualColumnRegistry.getFullRowSignature() method to get a signature that includes all columns, and therefore allows us to simplify the logic (no need to special-case virtual columns). - Add `__time` to the Scan column list if the query is ordering by time. * Remove unused import.
Apache Druid (incubating)
Apache Druid (incubating) is a high performance analytics data store for event-driven data.
Disclaimer: Apache Druid is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
License
More Information
More information about Druid can be found on http://www.druid.io.
Documentation
You can find the documentation for the latest Druid release on the project website.
If you would like to contribute documentation, please do so under
/docs/content
in this repository and submit a pull request.
Getting Started
You can get started with Druid with our quickstart.
Reporting Issues
If you find any bugs, please file a GitHub issue.
Community
The Druid community is in the process of migrating to Apache by way of the Apache Incubator. Eventually, as we proceed along this path, our site will move from http://druid.io/ to https://druid.apache.org/.
Community support is available on the druid-user mailing list(druid-user@googlegroups.com), which is hosted at Google Groups.
Development discussions occur on dev@druid.apache.org, which you can subscribe to by emailing dev-subscribe@druid.apache.org.
We also have a couple people hanging out on IRC in #druid-dev
on
irc.freenode.net
.
Building From Source
Please note that JDK 8 is required to build Druid.
For instructions on building Druid from source, see docs/content/development/build.md
Contributing
Please follow the guidelines listed here.