Apache Druid: a high performance real-time analytics database.
Go to file
Gian Merlino 8f90589ce5
Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247)
* Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH.

These aggregation functions are documented as creating sketches. However,
they are planned into native aggregators that include finalization logic
to convert the sketch to a number of some sort. This creates an
inconsistency: the functions sometimes return sketches, and sometimes
return numbers, depending on where they lie in the native query plan.

This patch changes these SQL aggregators to _never_ finalize, by using
the "shouldFinalize" feature of the native aggregators. It already
existed for theta sketches. This patch adds the feature for hll and
quantiles sketches.

As to impact, Druid finalizes aggregators in two cases:

- When they appear in the outer level of a query (not a subquery).
- When they are used as input to an expression or finalizing-field-access
  post-aggregator (not any other kind of post-aggregator).

With this patch, the functions will no longer be finalized in these cases.

The second item is not likely to matter much. The SQL functions all declare
return type OTHER, which would be usable as an input to any other function
that makes sense and that would be planned into an expression.

So, the main effect of this patch is the first item. To provide backwards
compatibility with anyone that was depending on the old behavior, the
patch adds a "sqlFinalizeOuterSketches" query context parameter that
restores the old behavior.

Other changes:

1) Move various argument-checking logic from runtime to planning time in
   DoublesSketchListArgBaseOperatorConversion, by adding an OperandTypeChecker.

2) Add various JsonIgnores to the sketches to simplify their JSON representations.

3) Allow chaining of ExpressionPostAggregators and other PostAggregators
   in the SQL layer.

4) Avoid unnecessary FieldAccessPostAggregator wrapping in the SQL layer,
   now that expressions can operate on complex inputs.

5) Adjust return type to thetaSketch (instead of OTHER) in
   ThetaSketchSetBaseOperatorConversion.

* Fix benchmark class.

* Fix compilation error.

* Fix ThetaSketchSqlAggregatorTest.

* Hopefully fix ITAutoCompactionTest.

* Adjustment to ITAutoCompactionTest.
2022-11-03 09:43:00 -07:00
.github process: update PR template to include release notes (#13188) 2022-10-11 10:29:18 +08:00
.idea Revert Accidental Change to Druid.xml (#13190) 2022-10-06 14:42:35 -07:00
benchmarks Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
cloud Bump up the version to 25.0.0 (#12975) 2022-08-29 11:27:38 +05:30
codestyle Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
core Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
dev Make http options the default configurations (#13092) 2022-10-05 05:35:17 +05:30
distribution Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
docs Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
examples Make http options the default configurations (#13092) 2022-10-05 05:35:17 +05:30
extendedset Bump up the version to 25.0.0 (#12975) 2022-08-29 11:27:38 +05:30
extensions-contrib PrometheusEmitter NullPointerException fix (#13286) 2022-11-03 18:50:27 +08:00
extensions-core Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
helm/druid helm: add Kubernetes discovery support (#13262) 2022-10-28 15:09:48 +05:30
hll Bump up the version to 25.0.0 (#12975) 2022-08-29 11:27:38 +05:30
hooks Git hooks should fail on errors; pass args to git hooks (#12322) 2022-03-10 09:07:50 +09:00
indexing-hadoop Improve run time of coordinator duty MarkAsUnusedOvershadowedSegments (#13287) 2022-11-01 20:19:52 +05:30
indexing-service Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
integration-tests Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
integration-tests-ex Improve run time of coordinator duty MarkAsUnusedOvershadowedSegments (#13287) 2022-11-01 20:19:52 +05:30
licenses Web console: making the cell filter menu more functional, removing the old query view, and updating d3 (#13169) 2022-10-07 12:44:40 -07:00
processing Use lookup memory footprint in MSQ memory computations. (#13271) 2022-11-03 07:36:54 -07:00
publications De-incubation cleanup in code, docs, packaging (#9108) 2020-01-03 12:33:19 -05:00
server Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
services Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
sql Always return sketches from DS_HLL, DS_THETA, DS_QUANTILES_SKETCH. (#13247) 2022-11-03 09:43:00 -07:00
web-console Web console: expose in the UI that a query is stuck waiting for task slots (#13291) 2022-11-01 09:40:55 -07:00
website Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
.asf.yaml Add .asf.yaml. (#9083) 2019-12-20 16:45:38 -08:00
.backportrc.json Add 0.18.0 to .backportrc.json to facilitate backport. (#9661) 2020-04-11 13:49:04 -07:00
.codecov.yml Use Codecov (#8388) 2019-08-28 08:49:30 -07:00
.dockerignore Add docker container for druid (#6896) 2019-02-08 12:12:28 +00:00
.gitignore Add CTA and fix typo (#13009) 2022-09-06 11:16:50 -07:00
.lgtm.yml be consistent about referring to the web console by its name (#13118) 2022-09-19 15:02:17 -07:00
.travis.yml Another simpler attempt to fix travis build (#13257) 2022-10-25 11:41:01 +05:30
CONTRIBUTING.md process: update PR template to include release notes (#13188) 2022-10-11 10:29:18 +08:00
LABELS Add plain text README.txt, use relative link from README.md to build.md (#7611) 2019-05-09 21:29:26 -07:00
LICENSE support Aliyun OSS service as deep storage (#9898) 2020-07-01 22:20:53 -07:00
NOTICE Update year in the notice file and the release process instructions (#12622) 2022-08-23 18:17:18 +05:30
README.md be consistent about referring to the web console by its name (#13118) 2022-09-19 15:02:17 -07:00
README.template De-incubation cleanup in code, docs, packaging (#9108) 2020-01-03 12:33:19 -05:00
check_test_suite.py ignore licenses changes in check test script (#12964) 2022-08-25 12:31:28 -07:00
check_test_suite_test.py ignore licenses changes in check test script (#12964) 2022-08-25 12:31:28 -07:00
it.sh Building druid-it-tools and running for travis in it.sh (#12957) 2022-08-30 12:48:07 +05:30
licenses.yaml Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
owasp-dependency-check-suppressions.xml Suppress Calcite CVE (#13119) 2022-09-23 16:23:26 +05:30
pom.xml Support for middle manager less druid, tasks launch as k8s jobs (#13156) 2022-11-02 19:44:47 -07:00
upload.sh Adding licenses and enable apache-rat-plugin. (#6215) 2018-09-18 08:39:26 -07:00

README.md

Build Status Language grade: Java Coverage Status Docker Helm


Website | Twitter | Download | Get Started | Documentation | Community | Build | Contribute | License


Apache Druid

Druid is a high performance real-time analytics database. Druid's main value add is to reduce time to insight and action.

Druid is designed for workflows where fast queries and ingest really matter. Druid excels at powering UIs, running operational (ad-hoc) queries, or handling high concurrency. Consider Druid as an open source alternative to data warehouses for a variety of use cases. The design documentation explains the key concepts.

Getting started

You can get started with Druid with our local or Docker quickstart.

Druid provides a rich set of APIs (via HTTP and JDBC) for loading, managing, and querying your data. You can also interact with Druid via the built-in web console (shown below).

Load data

data loader Kafka

Load streaming and batch data using a point-and-click wizard to guide you through ingestion setup. Monitor one off tasks and ingestion supervisors.

Manage the cluster

management

Manage your cluster with ease. Get a view of your datasources, segments, ingestion tasks, and services from one convenient location. All powered by SQL systems tables, allowing you to see the underlying query for each view.

Issue queries

query view combo

Use the built-in query workbench to prototype DruidSQL and native queries or connect one of the many tools that help you make the most out of Druid.

Documentation

See the latest documentation for the documentation for the current official release. If you need information on a previous release, you can browse previous releases documentation.

Make documentation and tutorials updates in /docs using MarkDown and contribute them using a pull request.

Community

Visit the official project community page to read about getting involved in contributing to Apache Druid, and how we help one another use and operate Druid.

  • Druid users can find help in the druid-user mailing list on Google Groups, and have more technical conversations in #troubleshooting on Slack.
  • Druid development discussions take place in the druid-dev mailing list (dev@druid.apache.org). Subscribe by emailing dev-subscribe@druid.apache.org. For live conversations, join the #dev channel on Slack.

Check out the official community page for details of how to join the community Slack channels.

Find articles written by community members and a calendar of upcoming events on the project site - contribute your own events and articles by submitting a PR in the apache/druid-website-src repository.

Building from source

Please note that JDK 8 or JDK 11 is required to build Druid.

See the latest build guide for instructions on building Apache Druid from source.

Contributing

Please follow the community guidelines for contributing.

For instructions on setting up IntelliJ dev/intellij-setup.md

License

Apache License, Version 2.0