You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by la...@apache.org on 2024/02/21 05:00:30 UTC
(druid-website-src) branch 29.0.0-site created (now 99023ef3)
This is an automated email from the ASF dual-hosted git repository.
lakshsingla pushed a change to branch 29.0.0-site
in repository https://gitbox.apache.org/repos/asf/druid-website-src.git
at 99023ef3 add site for 29.0.0 release
This branch includes the following new commits:
new 99023ef3 add site for 29.0.0 release
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org
(druid-website-src) 01/01: add site for 29.0.0 release
Posted by la...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lakshsingla pushed a commit to branch 29.0.0-site
in repository https://gitbox.apache.org/repos/asf/druid-website-src.git
commit 99023ef32e9f92028439d5c913df2f15703e6e17
Author: Laksh Singla <la...@gmail.com>
AuthorDate: Wed Feb 21 10:30:11 2024 +0530
add site for 29.0.0 release
---
docs/29.0.0/api-reference/api-reference.md | 44 +
.../api-reference/automatic-compaction-api.md | 850 +
docs/29.0.0/api-reference/data-management-api.md | 593 +
.../api-reference/dynamic-configuration-api.md | 665 +
docs/29.0.0/api-reference/json-querying-api.md | 923 +
docs/29.0.0/api-reference/legacy-metadata-api.md | 340 +
docs/29.0.0/api-reference/lookups-api.md | 278 +
docs/29.0.0/api-reference/retention-rules-api.md | 562 +
docs/29.0.0/api-reference/service-status-api.md | 1342 +
docs/29.0.0/api-reference/sql-api.md | 1223 +
docs/29.0.0/api-reference/sql-ingestion-api.md | 698 +
docs/29.0.0/api-reference/sql-jdbc.md | 231 +
docs/29.0.0/api-reference/supervisor-api.md | 3556 ++
docs/29.0.0/api-reference/tasks-api.md | 1671 +
docs/29.0.0/assets/compaction-config.png | Bin 0 -> 103224 bytes
docs/29.0.0/assets/datasources-action-button.png | Bin 0 -> 800 bytes
docs/29.0.0/assets/druid-architecture.png | Bin 0 -> 134117 bytes
docs/29.0.0/assets/druid-architecture.svg | 19 +
docs/29.0.0/assets/druid-column-types.png | Bin 0 -> 93363 bytes
docs/29.0.0/assets/druid-dataflow-2x.png | Bin 0 -> 130160 bytes
docs/29.0.0/assets/druid-dataflow-3.png | Bin 0 -> 71425 bytes
docs/29.0.0/assets/druid-manage-1.png | Bin 0 -> 80415 bytes
docs/29.0.0/assets/druid-timeline.png | Bin 0 -> 24160 bytes
.../29.0.0/assets/files/kttm-kafka-supervisor.json | 66 +
docs/29.0.0/assets/indexing_service.png | Bin 0 -> 22490 bytes
.../msq-ui-download-query-results.png | Bin 0 -> 62538 bytes
.../multi-stage-query/tutorial-msq-convert.png | Bin 0 -> 80379 bytes
.../assets/multi-stage-query/ui-annotated.png | Bin 0 -> 227968 bytes
docs/29.0.0/assets/multi-stage-query/ui-empty.png | Bin 0 -> 77306 bytes
docs/29.0.0/assets/native-queries-01.png | Bin 0 -> 259507 bytes
docs/29.0.0/assets/nested-combined-json.png | Bin 0 -> 272858 bytes
docs/29.0.0/assets/nested-display-data-types.png | Bin 0 -> 254224 bytes
docs/29.0.0/assets/nested-examine-schema.png | Bin 0 -> 251706 bytes
docs/29.0.0/assets/nested-extract-as-type.png | Bin 0 -> 288918 bytes
docs/29.0.0/assets/nested-extract-elements.png | Bin 0 -> 317905 bytes
docs/29.0.0/assets/nested-group-aggregate.png | Bin 0 -> 249178 bytes
.../assets/nested-msq-ingestion-transform.png | Bin 0 -> 370419 bytes
docs/29.0.0/assets/nested-msq-ingestion.png | Bin 0 -> 302033 bytes
docs/29.0.0/assets/nested-parse-deserialize.png | Bin 0 -> 213791 bytes
docs/29.0.0/assets/nested-retrieve-json.png | Bin 0 -> 295566 bytes
docs/29.0.0/assets/nested-return-json.png | Bin 0 -> 349144 bytes
docs/29.0.0/assets/retention-rules.png | Bin 0 -> 148273 bytes
docs/29.0.0/assets/security-model-1.png | Bin 0 -> 85098 bytes
docs/29.0.0/assets/security-model-2.png | Bin 0 -> 29613 bytes
docs/29.0.0/assets/segmentPropagation.png | Bin 0 -> 30569 bytes
docs/29.0.0/assets/services-overview.png | Bin 0 -> 112702 bytes
.../assets/spectator-histogram-size-comparison.png | Bin 0 -> 45331 bytes
docs/29.0.0/assets/supervisor-info-dialog.png | Bin 0 -> 107805 bytes
docs/29.0.0/assets/supervisor-view.png | Bin 0 -> 63532 bytes
.../assets/tutorial-batch-data-loader-00.png | Bin 0 -> 2904 bytes
.../assets/tutorial-batch-data-loader-01.png | Bin 0 -> 227941 bytes
.../assets/tutorial-batch-data-loader-015.png | Bin 0 -> 206331 bytes
.../assets/tutorial-batch-data-loader-02.png | Bin 0 -> 1193472 bytes
.../assets/tutorial-batch-data-loader-03.png | Bin 0 -> 405035 bytes
.../assets/tutorial-batch-data-loader-04.png | Bin 0 -> 488906 bytes
.../assets/tutorial-batch-data-loader-05.png | Bin 0 -> 447046 bytes
.../assets/tutorial-batch-data-loader-06.png | Bin 0 -> 191383 bytes
.../assets/tutorial-batch-data-loader-07.png | Bin 0 -> 173618 bytes
.../assets/tutorial-batch-data-loader-08.png | Bin 0 -> 325806 bytes
.../assets/tutorial-batch-data-loader-09.png | Bin 0 -> 187695 bytes
.../assets/tutorial-batch-data-loader-10.png | Bin 0 -> 219732 bytes
.../assets/tutorial-batch-data-loader-11.png | Bin 0 -> 316540 bytes
.../assets/tutorial-batch-data-loader-12.png | Bin 0 -> 31752 bytes
.../assets/tutorial-batch-submit-task-01.png | Bin 0 -> 170537 bytes
.../assets/tutorial-batch-submit-task-02.png | Bin 0 -> 207377 bytes
docs/29.0.0/assets/tutorial-compaction-01.png | Bin 0 -> 35710 bytes
docs/29.0.0/assets/tutorial-compaction-02.png | Bin 0 -> 166571 bytes
docs/29.0.0/assets/tutorial-compaction-03.png | Bin 0 -> 26755 bytes
docs/29.0.0/assets/tutorial-compaction-04.png | Bin 0 -> 184365 bytes
docs/29.0.0/assets/tutorial-compaction-05.png | Bin 0 -> 26588 bytes
docs/29.0.0/assets/tutorial-compaction-06.png | Bin 0 -> 206717 bytes
docs/29.0.0/assets/tutorial-compaction-07.png | Bin 0 -> 26683 bytes
docs/29.0.0/assets/tutorial-compaction-08.png | Bin 0 -> 28751 bytes
docs/29.0.0/assets/tutorial-deletion-01.png | Bin 0 -> 163245 bytes
docs/29.0.0/assets/tutorial-deletion-02.png | Bin 0 -> 159346 bytes
docs/29.0.0/assets/tutorial-deletion-03.png | Bin 0 -> 153770 bytes
.../assets/tutorial-kafka-data-loader-01.png | Bin 0 -> 75787 bytes
.../assets/tutorial-kafka-data-loader-02.png | Bin 0 -> 420744 bytes
.../assets/tutorial-kafka-data-loader-03.png | Bin 0 -> 192051 bytes
.../assets/tutorial-kafka-data-loader-04.png | Bin 0 -> 244021 bytes
.../assets/tutorial-kafka-data-loader-05.png | Bin 0 -> 206028 bytes
.../assets/tutorial-kafka-data-loader-05b.png | Bin 0 -> 202167 bytes
.../assets/tutorial-kafka-data-loader-06.png | Bin 0 -> 95274 bytes
.../assets/tutorial-kafka-data-loader-07.png | Bin 0 -> 114038 bytes
.../assets/tutorial-kafka-data-loader-08.png | Bin 0 -> 81750 bytes
.../assets/tutorial-kafka-data-loader-09.png | Bin 0 -> 141501 bytes
.../assets/tutorial-kafka-data-loader-10.png | Bin 0 -> 80127 bytes
.../assets/tutorial-kafka-data-loader-11.png | Bin 0 -> 74913 bytes
.../assets/tutorial-kafka-data-loader-12.png | Bin 0 -> 134001 bytes
.../assets/tutorial-kafka-submit-supervisor-01.png | Bin 0 -> 130690 bytes
docs/29.0.0/assets/tutorial-query-01.png | Bin 0 -> 78666 bytes
docs/29.0.0/assets/tutorial-query-02.png | Bin 0 -> 90958 bytes
docs/29.0.0/assets/tutorial-query-03.png | Bin 0 -> 118994 bytes
docs/29.0.0/assets/tutorial-query-04.png | Bin 0 -> 136945 bytes
docs/29.0.0/assets/tutorial-query-05.png | Bin 0 -> 135626 bytes
docs/29.0.0/assets/tutorial-query-06.png | Bin 0 -> 135743 bytes
docs/29.0.0/assets/tutorial-query-07.png | Bin 0 -> 148492 bytes
.../tutorial-query-deepstorage-retention-rule.png | Bin 0 -> 99106 bytes
docs/29.0.0/assets/tutorial-quickstart-01.png | Bin 0 -> 68216 bytes
docs/29.0.0/assets/tutorial-quickstart-02.png | Bin 0 -> 115511 bytes
docs/29.0.0/assets/tutorial-quickstart-03.png | Bin 0 -> 171269 bytes
docs/29.0.0/assets/tutorial-quickstart-04.png | Bin 0 -> 129369 bytes
docs/29.0.0/assets/tutorial-quickstart-05.png | Bin 0 -> 110367 bytes
docs/29.0.0/assets/tutorial-retention-00.png | Bin 0 -> 77704 bytes
docs/29.0.0/assets/tutorial-retention-01.png | Bin 0 -> 35171 bytes
docs/29.0.0/assets/tutorial-retention-02.png | Bin 0 -> 240310 bytes
docs/29.0.0/assets/tutorial-retention-03.png | Bin 0 -> 30029 bytes
docs/29.0.0/assets/tutorial-retention-04.png | Bin 0 -> 44617 bytes
docs/29.0.0/assets/tutorial-retention-05.png | Bin 0 -> 38992 bytes
docs/29.0.0/assets/tutorial-retention-06.png | Bin 0 -> 137570 bytes
.../29.0.0/assets/tutorial-sql-aggregate-query.png | Bin 0 -> 99042 bytes
docs/29.0.0/assets/tutorial-sql-auto-queries.png | Bin 0 -> 178642 bytes
.../assets/tutorial-sql-count-distinct-help.png | Bin 0 -> 190668 bytes
docs/29.0.0/assets/tutorial-sql-count-distinct.png | Bin 0 -> 109726 bytes
docs/29.0.0/assets/tutorial-sql-demo-queries.png | Bin 0 -> 158884 bytes
docs/29.0.0/assets/tutorial-sql-query-plan.png | Bin 0 -> 152371 bytes
.../assets/tutorial-sql-result-column-actions.png | Bin 0 -> 113313 bytes
docs/29.0.0/assets/tutorial-theta-01.png | Bin 0 -> 160923 bytes
docs/29.0.0/assets/tutorial-theta-02.png | Bin 0 -> 149124 bytes
docs/29.0.0/assets/tutorial-theta-03.png | Bin 0 -> 183232 bytes
docs/29.0.0/assets/tutorial-theta-04.png | Bin 0 -> 162593 bytes
docs/29.0.0/assets/tutorial-theta-05.png | Bin 0 -> 215624 bytes
docs/29.0.0/assets/tutorial-theta-06.png | Bin 0 -> 146114 bytes
docs/29.0.0/assets/tutorial-theta-07.png | Bin 0 -> 125992 bytes
docs/29.0.0/assets/tutorial-theta-08.png | Bin 0 -> 70597 bytes
docs/29.0.0/assets/tutorial-theta-09.png | Bin 0 -> 86495 bytes
docs/29.0.0/assets/tutorial-theta-10.png | Bin 0 -> 86440 bytes
docs/29.0.0/assets/tutorial-theta-11.png | Bin 0 -> 86126 bytes
docs/29.0.0/assets/web-console-0.7-tasks.png | Bin 0 -> 83141 bytes
docs/29.0.0/assets/web-console-01-home-view.png | Bin 0 -> 87581 bytes
.../29.0.0/assets/web-console-02-data-loader-1.png | Bin 0 -> 80007 bytes
.../29.0.0/assets/web-console-03-data-loader-2.png | Bin 0 -> 268671 bytes
docs/29.0.0/assets/web-console-04-datasources.png | Bin 0 -> 97639 bytes
docs/29.0.0/assets/web-console-05-retention.png | Bin 0 -> 86941 bytes
docs/29.0.0/assets/web-console-06-segments.png | Bin 0 -> 103333 bytes
docs/29.0.0/assets/web-console-07-supervisors.png | Bin 0 -> 51193 bytes
.../assets/web-console-08-supervisor-status.png | Bin 0 -> 89501 bytes
docs/29.0.0/assets/web-console-09-task-status.png | Bin 0 -> 201632 bytes
docs/29.0.0/assets/web-console-10-servers.png | Bin 0 -> 87782 bytes
docs/29.0.0/assets/web-console-11-query-sql.png | Bin 0 -> 131799 bytes
docs/29.0.0/assets/web-console-12-query-rune.png | Bin 0 -> 106246 bytes
docs/29.0.0/assets/web-console-13-lookups.png | Bin 0 -> 66934 bytes
docs/29.0.0/comparisons/druid-vs-elasticsearch.md | 39 +
docs/29.0.0/comparisons/druid-vs-key-value.md | 46 +
docs/29.0.0/comparisons/druid-vs-kudu.md | 39 +
docs/29.0.0/comparisons/druid-vs-redshift.md | 62 +
docs/29.0.0/comparisons/druid-vs-spark.md | 42 +
docs/29.0.0/comparisons/druid-vs-sql-on-hadoop.md | 82 +
docs/29.0.0/configuration/extensions.md | 177 +
docs/29.0.0/configuration/human-readable-byte.md | 98 +
docs/29.0.0/configuration/index.md | 2233 ++
docs/29.0.0/configuration/logging.md | 173 +
.../29.0.0/data-management/automatic-compaction.md | 231 +
docs/29.0.0/data-management/compaction.md | 113 +
docs/29.0.0/data-management/delete.md | 116 +
docs/29.0.0/data-management/index.md | 34 +
docs/29.0.0/data-management/manual-compaction.md | 167 +
docs/29.0.0/data-management/schema-changes.md | 39 +
docs/29.0.0/data-management/update.md | 78 +
docs/29.0.0/design/architecture.md | 186 +
docs/29.0.0/design/broker.md | 54 +
docs/29.0.0/design/coordinator.md | 168 +
docs/29.0.0/design/deep-storage.md | 88 +
.../29.0.0/design/extensions-contrib/dropwizard.md | 670 +
docs/29.0.0/design/historical.md | 73 +
docs/29.0.0/design/index.md | 97 +
docs/29.0.0/design/indexer.md | 96 +
docs/29.0.0/design/indexing-service.md | 51 +
docs/29.0.0/design/metadata-storage.md | 175 +
docs/29.0.0/design/middlemanager.md | 43 +
docs/29.0.0/design/overlord.md | 59 +
docs/29.0.0/design/peons.md | 48 +
docs/29.0.0/design/router.md | 230 +
docs/29.0.0/design/segments.md | 226 +
docs/29.0.0/design/storage.md | 140 +
docs/29.0.0/design/zookeeper.md | 88 +
docs/29.0.0/development/build.md | 94 +
docs/29.0.0/development/docs-contribute.md | 225 +
docs/29.0.0/development/experimental.md | 37 +
.../extensions-contrib/aliyun-oss-extensions.md | 236 +
.../extensions-contrib/ambari-metrics-emitter.md | 98 +
.../development/extensions-contrib/cassandra.md | 30 +
.../development/extensions-contrib/cloudfiles.md | 98 +
.../extensions-contrib/compressed-big-decimal.md | 241 +
.../extensions-contrib/ddsketch-quantiles.md | 139 +
.../development/extensions-contrib/delta-lake.md | 61 +
.../extensions-contrib/distinctcount.md | 99 +
.../extensions-contrib/gce-extensions.md | 103 +
.../development/extensions-contrib/graphite.md | 117 +
.../development/extensions-contrib/iceberg.md | 134 +
.../development/extensions-contrib/influx.md | 67 +
.../extensions-contrib/influxdb-emitter.md | 78 +
.../development/extensions-contrib/k8s-jobs.md | 292 +
.../extensions-contrib/kafka-emitter.md | 61 +
.../extensions-contrib/materialized-view.md | 136 +
.../extensions-contrib/momentsketch-quantiles.md | 121 +
.../extensions-contrib/moving-average-query.md | 364 +
.../extensions-contrib/opentsdb-emitter.md | 62 +
.../development/extensions-contrib/prometheus.md | 115 +
.../development/extensions-contrib/redis-cache.md | 111 +
.../extensions-contrib/spectator-histogram.md | 457 +
.../development/extensions-contrib/sqlserver.md | 56 +
.../development/extensions-contrib/statsd.md | 71 +
.../extensions-contrib/tdigestsketch-quantiles.md | 151 +
.../development/extensions-contrib/thrift.md | 87 +
.../development/extensions-contrib/time-min-max.md | 104 +
.../extensions-core/approximate-histograms.md | 316 +
docs/29.0.0/development/extensions-core/avro.md | 64 +
docs/29.0.0/development/extensions-core/azure.md | 47 +
.../development/extensions-core/bloom-filter.md | 178 +
.../extensions-core/datasketches-extension.md | 40 +
.../extensions-core/datasketches-hll.md | 155 +
.../extensions-core/datasketches-kll.md | 140 +
.../extensions-core/datasketches-quantiles.md | 141 +
.../extensions-core/datasketches-theta.md | 333 +
.../extensions-core/datasketches-tuple.md | 252 +
.../development/extensions-core/druid-aws-rds.md | 38 +
.../extensions-core/druid-basic-security.md | 741 +
.../development/extensions-core/druid-kerberos.md | 125 +
.../development/extensions-core/druid-lookups.md | 164 +
.../development/extensions-core/druid-pac4j.md | 57 +
.../extensions-core/druid-ranger-security.md | 133 +
.../29.0.0/development/extensions-core/examples.md | 26 +
docs/29.0.0/development/extensions-core/google.md | 56 +
docs/29.0.0/development/extensions-core/hdfs.md | 167 +
.../extensions-core/kafka-extraction-namespace.md | 96 +
.../development/extensions-core/kubernetes.md | 87 +
.../extensions-core/lookups-cached-global.md | 387 +
docs/29.0.0/development/extensions-core/mysql.md | 192 +
docs/29.0.0/development/extensions-core/orc.md | 84 +
docs/29.0.0/development/extensions-core/parquet.md | 36 +
.../development/extensions-core/postgresql.md | 152 +
.../29.0.0/development/extensions-core/protobuf.md | 321 +
docs/29.0.0/development/extensions-core/s3.md | 151 +
.../extensions-core/simple-client-sslcontext.md | 52 +
docs/29.0.0/development/extensions-core/stats.md | 183 +
.../development/extensions-core/test-stats.md | 117 +
docs/29.0.0/development/javascript.md | 75 +
docs/29.0.0/development/modules.md | 423 +
docs/29.0.0/development/overview.md | 76 +
docs/29.0.0/development/versioning.md | 46 +
docs/29.0.0/ingestion/concurrent-append-replace.md | 142 +
docs/29.0.0/ingestion/data-formats.md | 1783 +
docs/29.0.0/ingestion/faq.md | 84 +
docs/29.0.0/ingestion/hadoop.md | 568 +
docs/29.0.0/ingestion/index.md | 81 +
docs/29.0.0/ingestion/ingestion-spec.md | 532 +
docs/29.0.0/ingestion/input-sources.md | 1054 +
docs/29.0.0/ingestion/kafka-ingestion.md | 449 +
docs/29.0.0/ingestion/kinesis-ingestion.md | 334 +
docs/29.0.0/ingestion/native-batch-firehose.md | 342 +
docs/29.0.0/ingestion/native-batch-simple-task.md | 185 +
docs/29.0.0/ingestion/native-batch.md | 765 +
docs/29.0.0/ingestion/partitioning.md | 80 +
docs/29.0.0/ingestion/rollup.md | 97 +
docs/29.0.0/ingestion/schema-design.md | 317 +
docs/29.0.0/ingestion/schema-model.md | 58 +
docs/29.0.0/ingestion/standalone-realtime.md | 45 +
docs/29.0.0/ingestion/streaming.md | 35 +
docs/29.0.0/ingestion/supervisor.md | 366 +
docs/29.0.0/ingestion/tasks.md | 471 +
docs/29.0.0/ingestion/tranquility.md | 36 +
docs/29.0.0/misc/papers-and-talks.md | 43 +
docs/29.0.0/multi-stage-query/concepts.md | 303 +
docs/29.0.0/multi-stage-query/examples.md | 477 +
docs/29.0.0/multi-stage-query/index.md | 77 +
docs/29.0.0/multi-stage-query/known-issues.md | 64 +
docs/29.0.0/multi-stage-query/reference.md | 543 +
docs/29.0.0/multi-stage-query/security.md | 83 +
docs/29.0.0/operations/alerts.md | 37 +
docs/29.0.0/operations/auth-ldap.md | 313 +
docs/29.0.0/operations/auth.md | 196 +
docs/29.0.0/operations/basic-cluster-tuning.md | 469 +
docs/29.0.0/operations/clean-metadata-store.md | 243 +
docs/29.0.0/operations/deep-storage-migration.md | 66 +
docs/29.0.0/operations/dump-segment.md | 304 +
docs/29.0.0/operations/durable-storage.md | 93 +
docs/29.0.0/operations/dynamic-config-provider.md | 78 +
docs/29.0.0/operations/export-metadata.md | 202 +
docs/29.0.0/operations/high-availability.md | 38 +
docs/29.0.0/operations/http-compression.md | 31 +
docs/29.0.0/operations/insert-segment-to-db.md | 48 +
docs/29.0.0/operations/java.md | 98 +
docs/29.0.0/operations/kubernetes.md | 34 +
docs/29.0.0/operations/metadata-migration.md | 97 +
docs/29.0.0/operations/metrics.md | 512 +
.../operations/migrate-from-firehose-ingestion.md | 209 +
docs/29.0.0/operations/mixed-workloads.md | 214 +
docs/29.0.0/operations/other-hadoop.md | 299 +
docs/29.0.0/operations/password-provider.md | 55 +
docs/29.0.0/operations/pull-deps.md | 141 +
docs/29.0.0/operations/request-logging.md | 250 +
docs/29.0.0/operations/reset-cluster.md | 79 +
docs/29.0.0/operations/rolling-updates.md | 103 +
docs/29.0.0/operations/rule-configuration.md | 355 +
docs/29.0.0/operations/security-overview.md | 304 +
docs/29.0.0/operations/security-user-auth.md | 174 +
docs/29.0.0/operations/segment-optimization.md | 104 +
docs/29.0.0/operations/single-server.md | 57 +
docs/29.0.0/operations/tls-support.md | 107 +
docs/29.0.0/operations/use_sbt_to_build_fat_jar.md | 127 +
docs/29.0.0/operations/web-console.md | 182 +
docs/29.0.0/querying/aggregations.md | 647 +
docs/29.0.0/querying/arrays.md | 253 +
docs/29.0.0/querying/caching.md | 119 +
docs/29.0.0/querying/datasource.md | 459 +
docs/29.0.0/querying/datasourcemetadataquery.md | 62 +
docs/29.0.0/querying/dimensionspecs.md | 550 +
docs/29.0.0/querying/filters.md | 911 +
docs/29.0.0/querying/geo.md | 155 +
docs/29.0.0/querying/granularities.md | 467 +
docs/29.0.0/querying/groupbyquery.md | 404 +
docs/29.0.0/querying/having.md | 266 +
docs/29.0.0/querying/hll-old.md | 141 +
docs/29.0.0/querying/joins.md | 42 +
docs/29.0.0/querying/limitspec.md | 72 +
docs/29.0.0/querying/lookups.md | 340 +
docs/29.0.0/querying/math-expr.md | 345 +
docs/29.0.0/querying/multi-value-dimensions.md | 522 +
docs/29.0.0/querying/multitenancy.md | 91 +
docs/29.0.0/querying/nested-columns.md | 692 +
docs/29.0.0/querying/post-aggregations.md | 297 +
docs/29.0.0/querying/query-context.md | 126 +
docs/29.0.0/querying/query-execution.md | 123 +
docs/29.0.0/querying/query-from-deep-storage.md | 199 +
docs/29.0.0/querying/query-processing.md | 48 +
docs/29.0.0/querying/querying.md | 154 +
docs/29.0.0/querying/scan-query.md | 230 +
docs/29.0.0/querying/searchquery.md | 191 +
docs/29.0.0/querying/segmentmetadataquery.md | 218 +
docs/29.0.0/querying/select-query.md | 27 +
docs/29.0.0/querying/sorting-orders.md | 59 +
docs/29.0.0/querying/sql-aggregations.md | 158 +
docs/29.0.0/querying/sql-array-functions.md | 65 +
docs/29.0.0/querying/sql-data-types.md | 186 +
docs/29.0.0/querying/sql-functions.md | 1586 +
docs/29.0.0/querying/sql-json-functions.md | 73 +
docs/29.0.0/querying/sql-metadata-tables.md | 314 +
.../querying/sql-multivalue-string-functions.md | 66 +
docs/29.0.0/querying/sql-operators.md | 117 +
docs/29.0.0/querying/sql-query-context.md | 85 +
docs/29.0.0/querying/sql-scalar.md | 282 +
docs/29.0.0/querying/sql-translation.md | 840 +
docs/29.0.0/querying/sql-window-functions.md | 225 +
docs/29.0.0/querying/sql.md | 402 +
docs/29.0.0/querying/timeboundaryquery.md | 63 +
docs/29.0.0/querying/timeseriesquery.md | 171 +
docs/29.0.0/querying/tips-good-queries.md | 203 +
docs/29.0.0/querying/topnmetricspec.md | 91 +
docs/29.0.0/querying/topnquery.md | 264 +
docs/29.0.0/querying/troubleshooting.md | 68 +
docs/29.0.0/querying/using-caching.md | 94 +
docs/29.0.0/querying/virtual-columns.md | 193 +
docs/29.0.0/release-info/release-notes.md | 106 +
docs/29.0.0/release-info/upgrade-notes.md | 634 +
docs/29.0.0/tutorials/cluster.md | 482 +
docs/29.0.0/tutorials/docker.md | 137 +
docs/29.0.0/tutorials/index.md | 224 +
docs/29.0.0/tutorials/tutorial-batch-hadoop.md | 261 +
docs/29.0.0/tutorials/tutorial-batch-native.md | 159 +
docs/29.0.0/tutorials/tutorial-batch.md | 179 +
docs/29.0.0/tutorials/tutorial-compaction.md | 190 +
docs/29.0.0/tutorials/tutorial-delete-data.md | 187 +
docs/29.0.0/tutorials/tutorial-ingestion-spec.md | 613 +
docs/29.0.0/tutorials/tutorial-jdbc.md | 31 +
docs/29.0.0/tutorials/tutorial-kafka.md | 298 +
docs/29.0.0/tutorials/tutorial-kerberos-hadoop.md | 123 +
docs/29.0.0/tutorials/tutorial-msq-convert-spec.md | 174 +
docs/29.0.0/tutorials/tutorial-msq-extern.md | 149 +
.../tutorials/tutorial-query-deep-storage.md | 292 +
docs/29.0.0/tutorials/tutorial-query.md | 246 +
docs/29.0.0/tutorials/tutorial-retention.md | 115 +
docs/29.0.0/tutorials/tutorial-rollup.md | 198 +
docs/29.0.0/tutorials/tutorial-sketches-theta.md | 329 +
docs/29.0.0/tutorials/tutorial-sql-query-view.md | 197 +
docs/29.0.0/tutorials/tutorial-transform-spec.md | 156 +
docs/29.0.0/tutorials/tutorial-unnest-arrays.md | 654 +
docs/29.0.0/tutorials/tutorial-update-data.md | 183 +
.../api-reference/automatic-compaction-api.md | 228 +-
docs/latest/api-reference/data-management-api.md | 578 +-
.../api-reference/dynamic-configuration-api.md | 648 +-
docs/latest/api-reference/legacy-metadata-api.md | 16 +-
docs/latest/api-reference/sql-api.md | 31 +-
docs/latest/api-reference/sql-ingestion-api.md | 5 +
docs/latest/api-reference/sql-jdbc.md | 4 +
docs/latest/api-reference/supervisor-api.md | 317 +-
docs/latest/assets/druid-architecture.svg | 19 +
.../assets/spectator-histogram-size-comparison.png | Bin 0 -> 45331 bytes
docs/latest/assets/supervisor-info-dialog.png | Bin 0 -> 107805 bytes
docs/latest/assets/supervisor-view.png | Bin 0 -> 63532 bytes
docs/latest/configuration/extensions.md | 12 +-
docs/latest/configuration/index.md | 951 +-
.../latest/data-management/automatic-compaction.md | 147 +-
docs/latest/data-management/compaction.md | 6 +-
docs/latest/data-management/delete.md | 14 +-
docs/latest/data-management/index.md | 2 +-
docs/latest/data-management/schema-changes.md | 2 +-
docs/latest/data-management/update.md | 2 +-
docs/latest/design/architecture.md | 348 +-
docs/latest/design/broker.md | 32 +-
docs/latest/design/coordinator.md | 92 +-
docs/latest/design/historical.md | 47 +-
docs/latest/design/indexer.md | 50 +-
docs/latest/design/middlemanager.md | 22 +-
docs/latest/design/overlord.md | 29 +-
docs/latest/design/peons.md | 18 +-
docs/latest/design/processes.md | 143 -
docs/latest/design/router.md | 81 +-
docs/latest/design/segments.md | 2 +-
docs/latest/design/storage.md | 140 +
docs/latest/development/docs-contribute.md | 36 +-
docs/latest/development/experimental-features.md | 59 -
.../extensions-contrib/ddsketch-quantiles.md | 139 +
.../development/extensions-contrib/delta-lake.md | 61 +
.../development/extensions-contrib/iceberg.md | 17 +
.../development/extensions-contrib/k8s-jobs.md | 2 +-
.../development/extensions-contrib/prometheus.md | 11 +-
.../extensions-contrib/spectator-histogram.md | 457 +
.../development/extensions-contrib/statsd.md | 6 +-
docs/latest/development/extensions-core/azure.md | 7 +-
.../development/extensions-core/kafka-ingestion.md | 301 -
.../extensions-core/kafka-supervisor-operations.md | 280 -
.../extensions-core/kafka-supervisor-reference.md | 261 -
.../extensions-core/kinesis-ingestion.md | 721 -
.../extensions-core/lookups-cached-global.md | 3 +-
.../latest/development/extensions-core/protobuf.md | 2 +-
docs/latest/development/modules.md | 2 +-
docs/latest/ingestion/concurrent-append-replace.md | 142 +
docs/latest/ingestion/data-formats.md | 180 +-
docs/latest/ingestion/index.md | 6 +-
docs/latest/ingestion/ingestion-spec.md | 14 +-
docs/latest/ingestion/input-sources.md | 72 +-
docs/latest/ingestion/kafka-ingestion.md | 449 +
docs/latest/ingestion/kinesis-ingestion.md | 334 +
docs/latest/ingestion/native-batch.md | 292 +-
docs/latest/ingestion/partitioning.md | 4 +-
docs/latest/ingestion/rollup.md | 4 +-
docs/latest/ingestion/schema-design.md | 7 +-
docs/latest/ingestion/standalone-realtime.md | 4 +-
docs/latest/ingestion/streaming.md | 35 +
docs/latest/ingestion/supervisor.md | 366 +
docs/latest/ingestion/tasks.md | 8 +-
docs/latest/ingestion/tranquility.md | 4 +-
docs/latest/multi-stage-query/concepts.md | 14 +-
docs/latest/multi-stage-query/examples.md | 4 +
docs/latest/multi-stage-query/known-issues.md | 5 -
docs/latest/multi-stage-query/reference.md | 106 +-
docs/latest/multi-stage-query/security.md | 2 +-
docs/latest/operations/basic-cluster-tuning.md | 4 +-
docs/latest/operations/clean-metadata-store.md | 11 +-
docs/latest/operations/durable-storage.md | 2 +-
docs/latest/operations/dynamic-config-provider.md | 2 +-
docs/latest/operations/metrics.md | 11 +-
docs/latest/operations/mixed-workloads.md | 5 +-
docs/latest/operations/pull-deps.md | 12 +-
docs/latest/operations/rolling-updates.md | 12 +-
docs/latest/operations/rule-configuration.md | 2 +
docs/latest/operations/security-overview.md | 2 -
docs/latest/operations/web-console.md | 2 +-
docs/latest/querying/aggregations.md | 8 +-
docs/latest/querying/arrays.md | 4 +-
docs/latest/querying/datasource.md | 44 +-
docs/latest/querying/dimensionspecs.md | 2 +-
docs/latest/querying/filters.md | 74 +-
docs/latest/querying/groupbyquery.md | 2 +
docs/latest/querying/lookups.md | 169 +-
docs/latest/querying/math-expr.md | 19 +-
docs/latest/querying/multi-value-dimensions.md | 4 +-
docs/latest/querying/nested-columns.md | 2 +-
docs/latest/querying/query-context.md | 10 +-
docs/latest/querying/query-processing.md | 48 +
docs/latest/querying/searchquery.md | 4 -
docs/latest/querying/sql-aggregations.md | 42 +-
docs/latest/querying/sql-array-functions.md | 4 +-
docs/latest/querying/sql-data-types.md | 24 +-
docs/latest/querying/sql-functions.md | 43 +-
docs/latest/querying/sql-json-functions.md | 1 +
docs/latest/querying/sql-metadata-tables.md | 10 +-
.../querying/sql-multivalue-string-functions.md | 4 +-
docs/latest/querying/sql-operators.md | 7 +
docs/latest/querying/sql-query-context.md | 6 +
docs/latest/querying/sql-scalar.md | 36 +-
docs/latest/querying/sql.md | 125 +-
docs/latest/querying/timeseriesquery.md | 2 +-
docs/latest/querying/tips-good-queries.md | 7 +-
docs/latest/release-info/assets/image-1.png | Bin 313721 -> 0 bytes
docs/latest/release-info/assets/image-2.png | Bin 407111 -> 0 bytes
docs/latest/release-info/assets/image-3.png | Bin 83752 -> 0 bytes
docs/latest/release-info/assets/image.png | Bin 564532 -> 0 bytes
docs/latest/release-info/release-notes.md | 841 +-
docs/latest/release-info/upgrade-notes.md | 22 +-
docs/latest/tutorials/cluster.md | 10 +-
docs/latest/tutorials/docker.md | 8 +-
docs/latest/tutorials/index.md | 26 +-
docs/latest/tutorials/tutorial-batch-hadoop.md | 4 +-
docs/latest/tutorials/tutorial-batch.md | 2 +-
docs/latest/tutorials/tutorial-ingestion-spec.md | 2 +-
docs/latest/tutorials/tutorial-jupyter-docker.md | 252 -
docs/latest/tutorials/tutorial-jupyter-index.md | 75 -
docs/latest/tutorials/tutorial-kafka.md | 4 +-
docs/latest/tutorials/tutorial-rollup.md | 2 +-
docs/latest/tutorials/tutorial-sql-query-view.md | 4 +-
package-lock.json | 2 +-
published_versions/404.html | 15 +-
published_versions/assets/css/styles.4b88a1d0.css | 1 +
...chitecture-7db1cd79d2d70b2e5ccc73b6bebfcaa4.svg | 19 +
...comparison-665af4720d1b302515a31f758b824f26.png | Bin 0 -> 45331 bytes
...nfo-dialog-300a1e58533b10622fd945eca74911e4.png | Bin 0 -> 107805 bytes
...visor-view-83f761c82cf23094ae3d37c91371b655.png | Bin 0 -> 63532 bytes
published_versions/assets/js/008dc6c0.b0c66dc0.js | 1 +
published_versions/assets/js/01019b7b.df2cb240.js | 1 +
published_versions/assets/js/0109f7c7.93e682ec.js | 1 +
published_versions/assets/js/035ed994.9be30588.js | 1 +
published_versions/assets/js/04d4205e.e446f8af.js | 1 +
published_versions/assets/js/054cf69c.a19e6887.js | 1 +
published_versions/assets/js/0591e968.777c48ed.js | 1 +
published_versions/assets/js/05b5ec86.39aa10f5.js | 1 +
published_versions/assets/js/05f6bd73.c0989214.js | 1 +
published_versions/assets/js/06350a84.d4023e8e.js | 1 +
published_versions/assets/js/06621b6d.0e734d5e.js | 1 +
published_versions/assets/js/06bb6c62.00830217.js | 1 +
published_versions/assets/js/077bf22c.dec23d2d.js | 1 +
published_versions/assets/js/0ae1be71.8612a9e1.js | 1 +
published_versions/assets/js/0bbc3844.d72f316b.js | 1 +
published_versions/assets/js/0c347cbc.ead87b74.js | 1 +
published_versions/assets/js/0c5549ae.4c422e24.js | 1 +
published_versions/assets/js/0c83841d.036feb48.js | 1 +
published_versions/assets/js/0c870731.50a1526a.js | 1 +
published_versions/assets/js/0cbf8c76.5424cc91.js | 1 +
published_versions/assets/js/0e1242db.f7b5f311.js | 1 +
published_versions/assets/js/0f521c09.9b200e06.js | 1 +
published_versions/assets/js/0f59f104.54c20929.js | 1 +
published_versions/assets/js/0f7339bc.ea4ebd6c.js | 1 +
published_versions/assets/js/10f31d44.baf397f4.js | 1 +
published_versions/assets/js/11205e05.c1e0f381.js | 1 +
published_versions/assets/js/116970cb.2b480b0e.js | 1 +
published_versions/assets/js/128e376b.e5ed2590.js | 1 +
published_versions/assets/js/12d97def.4ed8040b.js | 1 +
published_versions/assets/js/13ec796f.31199178.js | 1 +
published_versions/assets/js/1416f869.858f3ca6.js | 1 +
published_versions/assets/js/14e10449.d94f9658.js | 1 +
published_versions/assets/js/14fe9d3d.9a7449cf.js | 1 +
published_versions/assets/js/162f104e.dcb24c3f.js | 1 +
published_versions/assets/js/16cdfe1f.81d181ae.js | 1 +
published_versions/assets/js/175147d3.128ff523.js | 1 +
published_versions/assets/js/17896441.0f8a8afa.js | 1 +
published_versions/assets/js/180c7d3d.707c1fd1.js | 1 +
published_versions/assets/js/1871b932.6a7cde29.js | 1 +
published_versions/assets/js/1981460b.d8b58f4d.js | 1 +
published_versions/assets/js/1be78505.dc9b832b.js | 1 +
published_versions/assets/js/1c6ec3f0.06804c54.js | 1 +
published_versions/assets/js/1cb29896.934198b6.js | 1 +
published_versions/assets/js/1dbed9b8.0e51c37d.js | 1 +
published_versions/assets/js/1e267fd0.c8aea834.js | 1 +
published_versions/assets/js/1e55cdad.37f37478.js | 1 +
published_versions/assets/js/1f391b9e.da9e9f67.js | 1 +
published_versions/assets/js/1fb9f5aa.3a329bcd.js | 1 +
published_versions/assets/js/2006e5b3.a2eca4c1.js | 1 +
published_versions/assets/js/2078bf5c.e2ea6784.js | 1 +
published_versions/assets/js/216f5e40.744e75a2.js | 1 +
published_versions/assets/js/221e2a28.fad95750.js | 1 +
published_versions/assets/js/2271b53b.afef265c.js | 1 +
published_versions/assets/js/23d0d62d.7e05716e.js | 1 +
published_versions/assets/js/25bcdfb1.32443ef8.js | 1 +
published_versions/assets/js/25bf4862.8ca75fcf.js | 1 +
published_versions/assets/js/2677d7b8.a379283d.js | 1 +
published_versions/assets/js/268fe099.e956014b.js | 1 +
published_versions/assets/js/26f2754c.99c92df7.js | 1 +
published_versions/assets/js/274a38ba.74792bc2.js | 1 +
published_versions/assets/js/27930202.318dd3c5.js | 1 +
published_versions/assets/js/28095a7c.59fa9750.js | 1 +
published_versions/assets/js/285d2efe.14effa91.js | 1 +
published_versions/assets/js/292ba8e7.731ca173.js | 1 +
published_versions/assets/js/293487cb.6842a7bb.js | 1 +
published_versions/assets/js/2951a428.80c710ff.js | 1 +
published_versions/assets/js/2ab55e37.de48a00d.js | 1 +
published_versions/assets/js/2af72138.e305971b.js | 1 +
published_versions/assets/js/2c5b6b24.8c090f16.js | 1 +
published_versions/assets/js/2c9eea52.aebd0cb3.js | 1 +
published_versions/assets/js/2cfe4cf6.ed7a85b9.js | 1 +
published_versions/assets/js/2d2555e5.63104932.js | 1 +
published_versions/assets/js/2d6cfe83.0bcdb857.js | 1 +
published_versions/assets/js/2ec3a9a7.d9e71afb.js | 1 +
published_versions/assets/js/2fbe7d8e.bd105c0b.js | 1 +
published_versions/assets/js/2fdfe072.e4d87900.js | 1 +
published_versions/assets/js/3135cdec.bcff538c.js | 1 +
published_versions/assets/js/315053d0.d46efa53.js | 1 +
published_versions/assets/js/316.d513d091.js | 1354 +
published_versions/assets/js/31f72083.81ee5a2a.js | 1 +
published_versions/assets/js/32212b8b.46f503e7.js | 1 +
published_versions/assets/js/32256df4.f9650899.js | 1 +
published_versions/assets/js/32f5b141.9e0bb023.js | 1 +
published_versions/assets/js/32fb84ff.f33af4ca.js | 1 +
published_versions/assets/js/33d88741.83a15bff.js | 1 +
published_versions/assets/js/33e3889f.9460f763.js | 1 +
published_versions/assets/js/349c2143.32b574c0.js | 1 +
published_versions/assets/js/34da69bb.982f2300.js | 1 +
published_versions/assets/js/36497d9a.6efd4c0b.js | 1 +
published_versions/assets/js/382081cb.b59151ac.js | 1 +
published_versions/assets/js/3850f2cd.58e04bb5.js | 1 +
published_versions/assets/js/39e8690f.2ffc331d.js | 1 +
published_versions/assets/js/3aef39f9.3de885bc.js | 1 +
published_versions/assets/js/3ba5c2fc.5394fc02.js | 1 +
published_versions/assets/js/3ccbe206.01fa8f49.js | 1 +
published_versions/assets/js/3dc3081e.62800137.js | 1 +
published_versions/assets/js/3dc48ea3.f15de7db.js | 1 +
published_versions/assets/js/3df53c0b.65b6d642.js | 1 +
published_versions/assets/js/3ee44481.abc535f5.js | 1 +
published_versions/assets/js/3f8e7beb.07e5364e.js | 1 +
published_versions/assets/js/3fc4ca5f.ab4b8ed7.js | 1 +
published_versions/assets/js/3fdeab71.b7507521.js | 1 +
published_versions/assets/js/404e84a5.ba2699df.js | 1 +
published_versions/assets/js/408f2282.6e6122b4.js | 1 +
published_versions/assets/js/4113b856.4af9b667.js | 1 +
published_versions/assets/js/412ee224.e53b5e8a.js | 1 +
published_versions/assets/js/41b2c32b.4a21a0f6.js | 1 +
published_versions/assets/js/41dbc86e.8551d373.js | 1 +
published_versions/assets/js/42be3a3f.68dace42.js | 1 +
published_versions/assets/js/42dd4fd0.12d78f44.js | 1 +
published_versions/assets/js/43c5580d.ca58458d.js | 1 +
published_versions/assets/js/4451b7a8.95b1a952.js | 1 +
published_versions/assets/js/445bf8fb.4e0bced4.js | 1 +
published_versions/assets/js/4505fb1c.a185dac4.js | 1 +
published_versions/assets/js/45247bbe.62d650d4.js | 1 +
published_versions/assets/js/457e0700.4b216276.js | 1 +
published_versions/assets/js/4611.3eff0f4d.js | 2 +
.../assets/js/4611.3eff0f4d.js.LICENSE.txt | 61 +
published_versions/assets/js/47002093.b2c8850f.js | 1 +
published_versions/assets/js/48151658.e2d74e0e.js | 1 +
published_versions/assets/js/487.7b135b0c.js | 7370 ++++
published_versions/assets/js/4972.0ee7f713.js | 1 +
published_versions/assets/js/4cf66254.6fb71127.js | 1 +
published_versions/assets/js/4d24b7c4.8b3c195f.js | 1 +
published_versions/assets/js/4e063dea.784855f4.js | 1 +
published_versions/assets/js/4eb80632.88d40c9e.js | 1 +
published_versions/assets/js/4ec2c662.f86c8180.js | 1 +
published_versions/assets/js/4f22fcc6.4bc27347.js | 1 +
published_versions/assets/js/4fbcb8e1.875f4296.js | 1 +
published_versions/assets/js/503ba086.d7a0a453.js | 1 +
published_versions/assets/js/504b36f7.ab674110.js | 1 +
published_versions/assets/js/50d798df.8a7dfcd3.js | 1 +
published_versions/assets/js/52c72b17.3c3f1a41.js | 1 +
published_versions/assets/js/547788e1.ea1f02de.js | 1 +
published_versions/assets/js/54a411b6.1809665d.js | 1 +
published_versions/assets/js/55e202dc.1672e293.js | 1 +
published_versions/assets/js/55fdd877.fa6cdc5b.js | 1 +
published_versions/assets/js/5670b262.8b204301.js | 1 +
published_versions/assets/js/567f2b24.ec1360b7.js | 1 +
published_versions/assets/js/57ee89c0.657f47cd.js | 1 +
published_versions/assets/js/58874471.df827411.js | 1 +
published_versions/assets/js/58b22988.1099322e.js | 1 +
published_versions/assets/js/58edcf77.54f995dd.js | 1 +
published_versions/assets/js/5a08e3a4.0dc414dc.js | 1 +
published_versions/assets/js/5a722b3b.f8a27ddb.js | 1 +
published_versions/assets/js/5a89402e.290f6fca.js | 1 +
published_versions/assets/js/5bb38577.8f6fc382.js | 1 +
published_versions/assets/js/5bcd0a3f.34b8ea77.js | 1 +
published_versions/assets/js/5bcd0a3f.7614ccc8.js | 1 +
published_versions/assets/js/5bf6e863.2581593c.js | 1 +
published_versions/assets/js/5c6b73c5.d2057bbd.js | 1 +
published_versions/assets/js/5ddf27b8.c496dfeb.js | 1 +
published_versions/assets/js/5e9ea8d6.ba24b662.js | 1 +
published_versions/assets/js/5ecd7b94.e5cc6a4a.js | 1 +
published_versions/assets/js/5eed60db.a3a7fd4b.js | 1 +
published_versions/assets/js/5f349eee.98a22383.js | 1 +
published_versions/assets/js/5f40121b.d96ad403.js | 1 +
published_versions/assets/js/5f8c15b3.ed8bb0fb.js | 1 +
published_versions/assets/js/5fa314af.2cfb1279.js | 1 +
published_versions/assets/js/5ff9c08d.d242e779.js | 1 +
published_versions/assets/js/5ffc9c90.afd4ea4e.js | 1 +
published_versions/assets/js/6062.19bec321.js | 2 +
.../assets/js/6062.19bec321.js.LICENSE.txt | 9 +
published_versions/assets/js/60b9c99e.bd70a20e.js | 1 +
published_versions/assets/js/60f9804e.2cfc53a6.js | 1 +
published_versions/assets/js/612017ab.8fdafdb0.js | 1 +
published_versions/assets/js/615c06f6.379146e8.js | 1 +
published_versions/assets/js/6316.b40fb8e3.js | 1 +
published_versions/assets/js/6547e5cb.917f866f.js | 1 +
published_versions/assets/js/672a9227.4342d623.js | 1 +
published_versions/assets/js/67933092.fde7658a.js | 1 +
published_versions/assets/js/67c671c5.28c16b0a.js | 1 +
published_versions/assets/js/68368662.c2178e3f.js | 1 +
published_versions/assets/js/6865240a.d68f5211.js | 1 +
published_versions/assets/js/688a6cad.8d4f3604.js | 1 +
published_versions/assets/js/6979e7da.d97c9f61.js | 1 +
published_versions/assets/js/69bee408.8882c7c2.js | 1 +
published_versions/assets/js/6bb9967c.8feb102e.js | 1 +
published_versions/assets/js/6c62c6c7.e9d2a8ad.js | 1 +
published_versions/assets/js/6cdb5461.42743f61.js | 1 +
published_versions/assets/js/6d081973.8d4c385d.js | 1 +
published_versions/assets/js/6d18db1d.6c07f099.js | 1 +
published_versions/assets/js/6d526f5c.7e5d2fb3.js | 1 +
published_versions/assets/js/6f318b00.7914511b.js | 1 +
published_versions/assets/js/704b58a6.b64f6b15.js | 1 +
published_versions/assets/js/7178b9b6.399be51c.js | 1 +
published_versions/assets/js/71b76a87.7a988d04.js | 1 +
published_versions/assets/js/71de5257.91f5368b.js | 1 +
published_versions/assets/js/723062a3.df8c1a00.js | 1 +
published_versions/assets/js/724.f641e451.js | 38485 +++++++++++++++++++
published_versions/assets/js/72f6be96.e794eb4d.js | 1 +
published_versions/assets/js/73d55dcf.bd6efb62.js | 1 +
published_versions/assets/js/740ee517.97509c96.js | 1 +
published_versions/assets/js/760e0b1e.e6936821.js | 1 +
published_versions/assets/js/769d5196.7f02d2cf.js | 1 +
published_versions/assets/js/7724.4bbc210b.js | 2 +
.../assets/js/7724.4bbc210b.js.LICENSE.txt | 9 +
published_versions/assets/js/7761ea0c.8eb24979.js | 1 +
published_versions/assets/js/77f0d0af.27f124ff.js | 1 +
published_versions/assets/js/77f7adac.ab4a94da.js | 1 +
published_versions/assets/js/782e3668.d188f03e.js | 1 +
published_versions/assets/js/7a0ffe1e.bd61dc20.js | 1 +
published_versions/assets/js/7a4a6d4c.8a4ba79c.js | 1 +
published_versions/assets/js/7ac80b3d.5467c585.js | 1 +
published_versions/assets/js/7b942940.aac2c16c.js | 1 +
published_versions/assets/js/7bfab197.17dedc09.js | 1 +
published_versions/assets/js/7db7c644.cd58d407.js | 1 +
published_versions/assets/js/7ddaea69.40f9b81e.js | 1 +
published_versions/assets/js/7ef2feef.9cb1986d.js | 1 +
published_versions/assets/js/7f61aae6.45872686.js | 1 +
published_versions/assets/js/7f7ce349.24e19205.js | 1 +
published_versions/assets/js/819280be.ad403629.js | 1 +
published_versions/assets/js/81985269.667904c0.js | 1 +
published_versions/assets/js/82593e9b.db6540b9.js | 1 +
published_versions/assets/js/82732c32.995769da.js | 1 +
published_versions/assets/js/84ac5748.348da100.js | 1 +
published_versions/assets/js/84fd1959.4c949af6.js | 1 +
published_versions/assets/js/8549cd83.4d7f5362.js | 1 +
published_versions/assets/js/85811133.0dfd32dd.js | 1 +
published_versions/assets/js/8603200e.bd17c7d1.js | 1 +
published_versions/assets/js/86365239.14ceacc7.js | 1 +
published_versions/assets/js/8643da2b.294cded3.js | 1 +
published_versions/assets/js/866dea45.95338ded.js | 1 +
published_versions/assets/js/86f503e8.c2b18ce8.js | 1 +
published_versions/assets/js/86ff69a9.8a670032.js | 1 +
published_versions/assets/js/881b6e93.432caf22.js | 1 +
published_versions/assets/js/8902724d.a141c0fc.js | 1 +
published_versions/assets/js/8926f85a.9d0552b6.js | 1 +
published_versions/assets/js/8a6641d6.e3b91fae.js | 1 +
published_versions/assets/js/8a6a3c86.17196902.js | 1 +
published_versions/assets/js/8abd3472.f8fa029e.js | 1 +
published_versions/assets/js/8adf3ad1.71f65ec1.js | 1 +
published_versions/assets/js/8bf451e3.902fd53b.js | 1 +
published_versions/assets/js/8c07abe5.6ecccace.js | 1 +
published_versions/assets/js/8cdd5c5f.58196c75.js | 1 +
published_versions/assets/js/8d1560b6.9c5b7e81.js | 1 +
published_versions/assets/js/8d4becf1.56f6f2eb.js | 1 +
published_versions/assets/js/8dd13a4f.36da6c63.js | 1 +
published_versions/assets/js/8e7882e3.5bc26421.js | 1 +
published_versions/assets/js/8e848799.58573e85.js | 1 +
published_versions/assets/js/8e96f099.c52af446.js | 1 +
published_versions/assets/js/8ea8f2dd.0029585d.js | 1 +
published_versions/assets/js/90a27bdd.780c4b65.js | 1 +
published_versions/assets/js/91b90c19.98009396.js | 1 +
published_versions/assets/js/91e63cf7.ca58e95d.js | 1 +
published_versions/assets/js/9216ddc9.cf149453.js | 1 +
published_versions/assets/js/92754ac2.a2dd36a1.js | 1 +
published_versions/assets/js/92ec0124.a1c382e9.js | 1 +
published_versions/assets/js/935f2afb.219550b5.js | 1 +
published_versions/assets/js/935f2afb.d18a490d.js | 1 +
published_versions/assets/js/941133d2.df5d8313.js | 1 +
published_versions/assets/js/9487.d7417db1.js | 1 +
published_versions/assets/js/94aa3d86.0100b836.js | 1 +
published_versions/assets/js/9537a24c.5ee59965.js | 1 +
published_versions/assets/js/95eaac7a.cf551134.js | 1 +
published_versions/assets/js/96217456.7069dac1.js | 1 +
published_versions/assets/js/9636e5c7.e1eb8f49.js | 1 +
published_versions/assets/js/98453339.26609af0.js | 1 +
published_versions/assets/js/993fdb06.526a9a51.js | 1 +
published_versions/assets/js/99d91b5a.b3b27599.js | 1 +
published_versions/assets/js/9a41d3c9.12c56391.js | 1 +
published_versions/assets/js/9af5fee7.7d818885.js | 1 +
published_versions/assets/js/9b520f78.77f3f09e.js | 1 +
published_versions/assets/js/9c46ead5.0d697bcb.js | 1 +
published_versions/assets/js/9dd30c58.a986960f.js | 1 +
published_versions/assets/js/9e519bb2.ce1b3720.js | 1 +
published_versions/assets/js/a0538546.8897931b.js | 1 +
published_versions/assets/js/a0cfed8c.c6f76726.js | 1 +
published_versions/assets/js/a1bd808f.b82a0324.js | 1 +
published_versions/assets/js/a1d693f4.3de35b08.js | 1 +
published_versions/assets/js/a25872ab.832b9894.js | 1 +
published_versions/assets/js/a2b332f7.b21ffb39.js | 1 +
published_versions/assets/js/a2f5bdb0.aa7eb400.js | 1 +
published_versions/assets/js/a8e19f39.4592ea89.js | 1 +
published_versions/assets/js/a94c6434.d08b1e24.js | 1 +
published_versions/assets/js/aac9aa13.9fb629ed.js | 1 +
published_versions/assets/js/ab046938.5dd20524.js | 1 +
published_versions/assets/js/ab897d12.1ed03d2e.js | 1 +
published_versions/assets/js/ac78a47c.9cbde4c3.js | 1 +
published_versions/assets/js/aded680a.7eaf00d1.js | 1 +
published_versions/assets/js/af06fdec.ec0839e3.js | 1 +
published_versions/assets/js/af159704.1e1dbb43.js | 1 +
published_versions/assets/js/b019fc37.947c79e6.js | 1 +
published_versions/assets/js/b0b17773.36e5017a.js | 1 +
published_versions/assets/js/b0c79e6c.d13182c8.js | 1 +
published_versions/assets/js/b174ad29.9a13ce18.js | 1 +
published_versions/assets/js/b213d090.e86cb13b.js | 1 +
published_versions/assets/js/b2231989.b81bfb4a.js | 1 +
published_versions/assets/js/b2d41fa9.1591430b.js | 1 +
published_versions/assets/js/b2d97b87.8c13ac3f.js | 1 +
published_versions/assets/js/b307eceb.3ca1079f.js | 1 +
published_versions/assets/js/b3507710.f99092dd.js | 1 +
published_versions/assets/js/b358c051.c6bdc00a.js | 1 +
published_versions/assets/js/b647b2cd.67a13c69.js | 1 +
published_versions/assets/js/b6d914f5.73af5089.js | 1 +
published_versions/assets/js/b6d922f1.3bfa5b43.js | 1 +
published_versions/assets/js/b75463b7.76cb827a.js | 1 +
published_versions/assets/js/b8e9cb00.b4eed726.js | 1 +
published_versions/assets/js/b964b515.c9366a58.js | 1 +
published_versions/assets/js/ba471ed5.6ce98e57.js | 1 +
published_versions/assets/js/ba8ae3fa.0e18b2cb.js | 1 +
published_versions/assets/js/bbfa20a6.e5d9b62b.js | 1 +
published_versions/assets/js/bd17f600.da8bbbb6.js | 1 +
published_versions/assets/js/be1891ad.54100ce9.js | 1 +
published_versions/assets/js/bee5d326.5390bc2c.js | 1 +
published_versions/assets/js/c0161e79.1475e2aa.js | 1 +
published_versions/assets/js/c0995780.7f1d4065.js | 1 +
published_versions/assets/js/c233c888.70421ba6.js | 1 +
published_versions/assets/js/c2ae6274.39176d8a.js | 1 +
published_versions/assets/js/c35a7924.ae3f9ae8.js | 1 +
published_versions/assets/js/c3bd4d0f.ae9217db.js | 1 +
published_versions/assets/js/c4a9afd3.5141d653.js | 1 +
published_versions/assets/js/c4eaa713.a962883d.js | 1 +
published_versions/assets/js/c4f5d8e4.aee9fefb.js | 1 +
published_versions/assets/js/c5224f77.98816c07.js | 1 +
published_versions/assets/js/c5760f30.f6c45127.js | 1 +
published_versions/assets/js/c6999de6.c6510e0a.js | 1 +
published_versions/assets/js/c704e2c0.dee0a548.js | 1 +
published_versions/assets/js/c7bb32c0.9acf0668.js | 1 +
published_versions/assets/js/c87bd0b3.ea050f30.js | 1 +
published_versions/assets/js/c89bccce.7b31a4c1.js | 1 +
published_versions/assets/js/c971ecb2.4362f2dd.js | 1 +
published_versions/assets/js/c9fa3e8f.c2d9c85f.js | 1 +
published_versions/assets/js/caadb9e4.b6a9a59c.js | 1 +
published_versions/assets/js/caed696f.63204d3c.js | 1 +
published_versions/assets/js/cc2b1268.1b07cfcd.js | 1 +
published_versions/assets/js/cc5f8c18.a28508ea.js | 1 +
published_versions/assets/js/ccecb300.632499ae.js | 1 +
published_versions/assets/js/cd07172b.00a782e1.js | 1 +
published_versions/assets/js/cd22c7ca.1fb99329.js | 1 +
published_versions/assets/js/cd770d37.81e0dcee.js | 1 +
published_versions/assets/js/cdec71b5.b34313c4.js | 1 +
published_versions/assets/js/ce3c7d34.40bed509.js | 1 +
published_versions/assets/js/ce66ed34.ff0662e3.js | 1 +
published_versions/assets/js/cea8fd56.e216baa8.js | 1 +
published_versions/assets/js/cff5438d.2eb62d05.js | 1 +
published_versions/assets/js/d05fa046.fabf2290.js | 1 +
published_versions/assets/js/d099cfd7.7fc85cd5.js | 1 +
published_versions/assets/js/d09adf36.59363a49.js | 1 +
published_versions/assets/js/d10cff76.4c68c43a.js | 1 +
published_versions/assets/js/d20adcc9.660ee0a1.js | 1 +
published_versions/assets/js/d24799e9.15802b64.js | 1 +
published_versions/assets/js/d348e71d.64acf387.js | 1 +
published_versions/assets/js/d6226c05.8848a413.js | 1 +
published_versions/assets/js/d800148d.809f2467.js | 1 +
published_versions/assets/js/db509a08.98017939.js | 1 +
published_versions/assets/js/dc3899c8.1ae1b487.js | 1 +
published_versions/assets/js/dc670d7c.bbdddac1.js | 1 +
published_versions/assets/js/dc86ecba.0de818c7.js | 1 +
published_versions/assets/js/dc8d8ba6.6839562f.js | 1 +
published_versions/assets/js/dcd3699e.638b86e9.js | 1 +
published_versions/assets/js/dd08839c.318d6fe9.js | 1 +
published_versions/assets/js/dd1dce50.6858b4b6.js | 1 +
published_versions/assets/js/dd5346cc.b0d10743.js | 1 +
published_versions/assets/js/dd5c39f7.6fdce2c0.js | 1 +
published_versions/assets/js/dec790ad.6df46cb4.js | 1 +
published_versions/assets/js/e42f7105.1b2ea53d.js | 1 +
published_versions/assets/js/e44d1fc1.667f6903.js | 1 +
published_versions/assets/js/e577ad77.9fef75e1.js | 1 +
published_versions/assets/js/e5b4ea37.bf7735eb.js | 1 +
published_versions/assets/js/e6ea7cb8.d9b35549.js | 1 +
published_versions/assets/js/e7087650.f0c11cf8.js | 1 +
published_versions/assets/js/e771c2cf.ae085ac4.js | 1 +
published_versions/assets/js/e7f0645b.bd9c88fb.js | 1 +
published_versions/assets/js/e826572d.de285e36.js | 1 +
published_versions/assets/js/e89091c2.2a9eaf86.js | 1 +
published_versions/assets/js/e9483372.344761af.js | 1 +
published_versions/assets/js/e988a960.2f81cda2.js | 1 +
published_versions/assets/js/ec725065.b5437684.js | 1 +
published_versions/assets/js/ec931258.fc9586a9.js | 1 +
published_versions/assets/js/ecf09596.71296534.js | 1 +
published_versions/assets/js/ee0b5f0e.a3dc2d84.js | 1 +
published_versions/assets/js/efa71475.7c5da26c.js | 1 +
published_versions/assets/js/f04833a0.9554dee7.js | 1 +
published_versions/assets/js/f0a1c229.d34fde1e.js | 1 +
published_versions/assets/js/f0b33a95.c74e816d.js | 1 +
published_versions/assets/js/f0e31bc8.36fb3eab.js | 1 +
published_versions/assets/js/f3422945.7ece9949.js | 1 +
published_versions/assets/js/f5acae74.7b6ff7e9.js | 1 +
published_versions/assets/js/f5f3bf76.5c8c336c.js | 1 +
published_versions/assets/js/f601ecc3.d977d1a4.js | 1 +
published_versions/assets/js/f7252a63.2b66f02d.js | 1 +
published_versions/assets/js/f782f0c3.036102a4.js | 1 +
published_versions/assets/js/f8b35359.dc1c0a48.js | 1 +
published_versions/assets/js/f8ca60be.70e2d0d4.js | 1 +
published_versions/assets/js/fa493215.9a43c59f.js | 1 +
published_versions/assets/js/fa98c789.1a9ab9eb.js | 1 +
published_versions/assets/js/fa9c8cab.f07f995b.js | 1 +
published_versions/assets/js/fab582b2.8fe58274.js | 1 +
published_versions/assets/js/fac897f3.6c1caa13.js | 1 +
published_versions/assets/js/faf0402f.ac406d0a.js | 1 +
published_versions/assets/js/fb0a26d1.397d5277.js | 1 +
published_versions/assets/js/fb83fc4a.3eef1277.js | 1 +
published_versions/assets/js/fc3af10a.bbc66a3d.js | 1 +
published_versions/assets/js/fc6289eb.96cceb80.js | 1 +
published_versions/assets/js/fe77072c.c6796000.js | 1 +
published_versions/assets/js/fe8f4de1.476856ee.js | 1 +
published_versions/assets/js/feb31aca.180e5600.js | 1 +
published_versions/assets/js/ff52e0a2.1cd16d5d.js | 1 +
published_versions/assets/js/ff6b2e0d.9b462181.js | 1 +
published_versions/assets/js/main.66359c18.js | 2 +
.../assets/js/main.66359c18.js.LICENSE.txt | 70 +
published_versions/assets/js/main.9edfa408.js | 2 +
.../assets/js/main.9edfa408.js.LICENSE.txt | 70 +
.../assets/js/runtime~main.06837abf.js | 1 +
.../assets/js/runtime~main.fc3ed64b.js | 1 +
published_versions/blog/index.html | 15 +-
published_versions/community/cla/index.html | 15 +-
published_versions/community/index.html | 19 +-
published_versions/community/join-slack/index.html | 19 +-
.../docs/29.0.0/api-reference.html/index.html | 11 +
.../automatic-compaction-api.html/index.html | 11 +
.../automatic-compaction-api/index.html | 26 +
.../data-management-api.html/index.html | 11 +
.../api-reference/data-management-api/index.html | 43 +
.../dynamic-configuration-api.html/index.html | 11 +
.../dynamic-configuration-api/index.html | 35 +
.../docs/29.0.0/api-reference/index.html | 26 +
.../json-querying-api.html/index.html | 11 +
.../api-reference/json-querying-api/index.html | 26 +
.../legacy-metadata-api.html/index.html | 11 +
.../api-reference/legacy-metadata-api/index.html | 55 +
.../api-reference/lookups-api.html/index.html | 11 +
.../29.0.0/api-reference/lookups-api/index.html | 32 +
.../retention-rules-api.html/index.html | 11 +
.../api-reference/retention-rules-api/index.html | 27 +
.../service-status-api.html/index.html | 11 +
.../api-reference/service-status-api/index.html | 32 +
.../29.0.0/api-reference/sql-api.html/index.html | 11 +
.../docs/29.0.0/api-reference/sql-api/index.html | 29 +
.../sql-ingestion-api.html/index.html | 11 +
.../api-reference/sql-ingestion-api/index.html | 38 +
.../29.0.0/api-reference/sql-jdbc.html/index.html | 11 +
.../docs/29.0.0/api-reference/sql-jdbc/index.html | 38 +
.../api-reference/supervisor-api.html/index.html | 11 +
.../29.0.0/api-reference/supervisor-api/index.html | 33 +
.../29.0.0/api-reference/tasks-api.html/index.html | 11 +
.../docs/29.0.0/api-reference/tasks-api/index.html | 29 +
.../druid-vs-elasticsearch.html/index.html | 11 +
.../comparisons/druid-vs-elasticsearch/index.html | 33 +
.../comparisons/druid-vs-key-value.html/index.html | 11 +
.../comparisons/druid-vs-key-value/index.html | 37 +
.../comparisons/druid-vs-kudu.html/index.html | 11 +
.../29.0.0/comparisons/druid-vs-kudu/index.html | 37 +
.../comparisons/druid-vs-redshift.html/index.html | 11 +
.../comparisons/druid-vs-redshift/index.html | 26 +
.../comparisons/druid-vs-spark.html/index.html | 11 +
.../29.0.0/comparisons/druid-vs-spark/index.html | 34 +
.../druid-vs-sql-on-hadoop.html/index.html | 11 +
.../comparisons/druid-vs-sql-on-hadoop/index.html | 44 +
.../docs/29.0.0/configuration.html/index.html | 11 +
.../docs/29.0.0/configuration/auth.html/index.html | 11 +
.../29.0.0/configuration/broker.html/index.html | 11 +
.../29.0.0/configuration/caching.html/index.html | 11 +
.../configuration/coordinator.html/index.html | 11 +
.../configuration/extensions.html/index.html | 11 +
.../29.0.0/configuration/extensions/index.html | 46 +
.../29.0.0/configuration/hadoop.html/index.html | 11 +
.../configuration/historical.html/index.html | 11 +
.../human-readable-byte.html/index.html | 11 +
.../configuration/human-readable-byte/index.html | 27 +
.../docs/29.0.0/configuration/index.html | 128 +
.../configuration/indexing-service.html/index.html | 11 +
.../29.0.0/configuration/logging.html/index.html | 11 +
.../docs/29.0.0/configuration/logging/index.html | 45 +
.../production-cluster.html/index.html | 11 +
.../29.0.0/configuration/realtime.html/index.html | 11 +
.../configuration/simple-cluster.html/index.html | 11 +
.../29.0.0/configuration/zookeeper.html/index.html | 11 +
.../docs/29.0.0/data-management.html/index.html | 11 +
.../automatic-compaction.html/index.html | 11 +
.../automatic-compaction/index.html | 46 +
.../data-management/compaction.html/index.html | 11 +
.../29.0.0/data-management/compaction/index.html | 30 +
.../29.0.0/data-management/delete.html/index.html | 11 +
.../docs/29.0.0/data-management/delete/index.html | 51 +
.../docs/29.0.0/data-management/index.html | 29 +
.../manual-compaction.html/index.html | 11 +
.../data-management/manual-compaction/index.html | 27 +
.../data-management/schema-changes.html/index.html | 11 +
.../data-management/schema-changes/index.html | 33 +
.../29.0.0/data-management/update.html/index.html | 11 +
.../docs/29.0.0/data-management/update/index.html | 46 +
.../cassandra-deep-storage.html/index.html | 11 +
.../29.0.0/dependencies/zookeeper.html/index.html | 11 +
.../docs/29.0.0/design.html/index.html | 11 +
.../29.0.0/design/architecture.html/index.html | 11 +
.../docs/29.0.0/design/architecture/index.html | 38 +
.../docs/29.0.0/design/auth.html/index.html | 11 +
.../docs/29.0.0/design/broker.html/index.html | 11 +
.../docs/29.0.0/design/broker/index.html | 27 +
.../concepts-and-terminology.html/index.html | 11 +
.../docs/29.0.0/design/coordinator.html/index.html | 11 +
.../docs/29.0.0/design/coordinator/index.html | 59 +
.../29.0.0/design/deep-storage.html/index.html | 11 +
.../docs/29.0.0/design/deep-storage/index.html | 30 +
.../docs/29.0.0/design/design.html/index.html | 11 +
.../extensions-contrib/dropwizard.html/index.html | 11 +
.../extensions-contrib/dropwizard/index.html | 33 +
.../docs/29.0.0/design/historical.html/index.html | 11 +
.../docs/29.0.0/design/historical/index.html | 29 +
published_versions/docs/29.0.0/design/index.html | 44 +
.../docs/29.0.0/design/indexer.html/index.html | 11 +
.../docs/29.0.0/design/indexer/index.html | 28 +
.../29.0.0/design/indexing-service.html/index.html | 11 +
.../docs/29.0.0/design/indexing-service/index.html | 27 +
.../29.0.0/design/metadata-storage.html/index.html | 11 +
.../docs/29.0.0/design/metadata-storage/index.html | 50 +
.../29.0.0/design/middlemanager.html/index.html | 11 +
.../docs/29.0.0/design/middlemanager/index.html | 27 +
.../docs/29.0.0/design/overlord.html/index.html | 11 +
.../docs/29.0.0/design/overlord/index.html | 29 +
.../docs/29.0.0/design/peons.html/index.html | 11 +
.../docs/29.0.0/design/peons/index.html | 28 +
.../docs/29.0.0/design/plumber.html/index.html | 11 +
.../docs/29.0.0/design/processes.html/index.html | 11 +
.../docs/29.0.0/design/realtime.html/index.html | 11 +
.../docs/29.0.0/design/router.html/index.html | 11 +
.../docs/29.0.0/design/router/index.html | 43 +
.../docs/29.0.0/design/segments.html/index.html | 11 +
.../docs/29.0.0/design/segments/index.html | 42 +
.../docs/29.0.0/design/storage.html/index.html | 11 +
.../docs/29.0.0/design/storage/index.html | 36 +
.../docs/29.0.0/design/zookeeper.html/index.html | 11 +
.../docs/29.0.0/design/zookeeper/index.html | 26 +
.../approximate-histograms.html/index.html | 11 +
.../docs/29.0.0/development/build.html/index.html | 11 +
.../community-extensions/azure.html/index.html | 11 +
.../community-extensions/cassandra.html/index.html | 11 +
.../cloudfiles.html/index.html | 11 +
.../community-extensions/graphite.html/index.html | 11 +
.../kafka-simple.html/index.html | 11 +
.../community-extensions/rabbitmq.html/index.html | 11 +
.../development/contribute-to-docs.html/index.html | 11 +
.../development/contribute-to-docs/index.html | 31 +
.../development/experimental.html/index.html | 11 +
.../29.0.0/development/experimental/index.html | 29 +
.../extensions-contrib/aliyun-oss.html/index.html | 11 +
.../extensions-contrib/aliyun-oss/index.html | 30 +
.../ambari-metrics-emitter.html/index.html | 11 +
.../ambari-metrics-emitter/index.html | 35 +
.../extensions-contrib/cassandra.html/index.html | 11 +
.../extensions-contrib/cassandra/index.html | 28 +
.../extensions-contrib/cloudfiles.html/index.html | 11 +
.../extensions-contrib/cloudfiles/index.html | 28 +
.../compressed-big-decimal.html/index.html | 11 +
.../compressed-big-decimal/index.html | 26 +
.../ddsketch-quantiles.html/index.html | 11 +
.../ddsketch-quantiles/index.html | 26 +
.../extensions-contrib/delta-lake.html/index.html | 11 +
.../extensions-contrib/delta-lake/index.html | 32 +
.../distinctcount.html/index.html | 11 +
.../extensions-contrib/distinctcount/index.html | 26 +
.../gce-extensions.html/index.html | 11 +
.../extensions-contrib/gce-extensions/index.html | 38 +
.../extensions-contrib/google.html/index.html | 11 +
.../extensions-contrib/graphite.html/index.html | 11 +
.../extensions-contrib/graphite/index.html | 41 +
.../extensions-contrib/iceberg.html/index.html | 11 +
.../extensions-contrib/iceberg/index.html | 35 +
.../extensions-contrib/influx.html/index.html | 11 +
.../extensions-contrib/influx/index.html | 26 +
.../influxdb-emitter.html/index.html | 11 +
.../extensions-contrib/influxdb-emitter/index.html | 30 +
.../extensions-contrib/k8s-jobs.html/index.html | 11 +
.../extensions-contrib/k8s-jobs/index.html | 36 +
.../kafka-emitter.html/index.html | 11 +
.../extensions-contrib/kafka-emitter/index.html | 29 +
.../kafka-simple.html/index.html | 11 +
.../materialized-view.html/index.html | 11 +
.../materialized-view/index.html | 27 +
.../momentsketch-quantiles.html/index.html | 11 +
.../momentsketch-quantiles/index.html | 27 +
.../moving-average-query.html/index.html | 11 +
.../moving-average-query/index.html | 31 +
.../opentsdb-emitter.html/index.html | 11 +
.../extensions-contrib/opentsdb-emitter/index.html | 29 +
.../extensions-contrib/orc.html/index.html | 11 +
.../extensions-contrib/parquet.html/index.html | 11 +
.../extensions-contrib/prometheus.html/index.html | 11 +
.../extensions-contrib/prometheus/index.html | 32 +
.../extensions-contrib/rabbitmq.html/index.html | 11 +
.../extensions-contrib/redis-cache.html/index.html | 11 +
.../extensions-contrib/redis-cache/index.html | 26 +
.../extensions-contrib/rocketmq.html/index.html | 11 +
.../extensions-contrib/scan-query.html/index.html | 11 +
.../spectator-histogram.html/index.html | 11 +
.../spectator-histogram/index.html | 93 +
.../extensions-contrib/sqlserver.html/index.html | 11 +
.../extensions-contrib/sqlserver/index.html | 27 +
.../extensions-contrib/statsd.html/index.html | 11 +
.../extensions-contrib/statsd/index.html | 41 +
.../tdigestsketch-quantiles.html/index.html | 11 +
.../tdigestsketch-quantiles/index.html | 35 +
.../extensions-contrib/thrift.html/index.html | 11 +
.../extensions-contrib/thrift/index.html | 26 +
.../time-min-max.html/index.html | 11 +
.../extensions-contrib/time-min-max/index.html | 28 +
.../approximate-histograms.html/index.html | 11 +
.../approximate-histograms/index.html | 52 +
.../extensions-core/avro.html/index.html | 11 +
.../development/extensions-core/avro/index.html | 26 +
.../extensions-core/azure.html/index.html | 11 +
.../development/extensions-core/azure/index.html | 26 +
.../extensions-core/bloom-filter.html/index.html | 11 +
.../extensions-core/bloom-filter/index.html | 41 +
.../extensions-core/caffeine-cache.html/index.html | 11 +
.../datasketches-extension.html/index.html | 11 +
.../datasketches-extension/index.html | 26 +
.../datasketches-hll.html/index.html | 11 +
.../extensions-core/datasketches-hll/index.html | 32 +
.../datasketches-kll.html/index.html | 11 +
.../extensions-core/datasketches-kll/index.html | 26 +
.../datasketches-quantiles.html/index.html | 11 +
.../datasketches-quantiles/index.html | 26 +
.../datasketches-theta.html/index.html | 11 +
.../extensions-core/datasketches-theta/index.html | 28 +
.../datasketches-tuple.html/index.html | 11 +
.../extensions-core/datasketches-tuple/index.html | 26 +
.../extensions-core/druid-aws-rds.html/index.html | 11 +
.../extensions-core/druid-aws-rds/index.html | 27 +
.../druid-basic-security.html/index.html | 11 +
.../druid-basic-security/index.html | 156 +
.../extensions-core/druid-kerberos.html/index.html | 11 +
.../extensions-core/druid-kerberos/index.html | 34 +
.../extensions-core/druid-lookups.html/index.html | 11 +
.../extensions-core/druid-lookups/index.html | 41 +
.../extensions-core/druid-pac4j.html/index.html | 11 +
.../extensions-core/druid-pac4j/index.html | 28 +
.../druid-ranger-security.html/index.html | 11 +
.../druid-ranger-security/index.html | 26 +
.../extensions-core/examples.html/index.html | 11 +
.../extensions-core/examples/index.html | 26 +
.../extensions-core/google.html/index.html | 11 +
.../development/extensions-core/google/index.html | 28 +
.../extensions-core/hdfs.html/index.html | 11 +
.../development/extensions-core/hdfs/index.html | 48 +
.../kafka-eight-firehose.html/index.html | 11 +
.../kafka-extraction-namespace.html/index.html | 11 +
.../kafka-extraction-namespace/index.html | 26 +
.../kafka-supervisor-operations.html/index.html | 11 +
.../kafka-supervisor-reference.html/index.html | 11 +
.../kinesis-ingestion.html/index.html | 11 +
.../extensions-core/kubernetes.html/index.html | 11 +
.../extensions-core/kubernetes/index.html | 30 +
.../lookups-cached-global.html/index.html | 11 +
.../lookups-cached-global/index.html | 44 +
.../extensions-core/mysql.html/index.html | 11 +
.../development/extensions-core/mysql/index.html | 31 +
.../namespaced-lookup.html/index.html | 11 +
.../extensions-core/orc.html/index.html | 11 +
.../development/extensions-core/orc/index.html | 38 +
.../extensions-core/parquet.html/index.html | 11 +
.../development/extensions-core/parquet/index.html | 32 +
.../extensions-core/postgresql.html/index.html | 11 +
.../extensions-core/postgresql/index.html | 30 +
.../extensions-core/protobuf.html/index.html | 11 +
.../extensions-core/protobuf/index.html | 28 +
.../development/extensions-core/s3.html/index.html | 11 +
.../development/extensions-core/s3/index.html | 28 +
.../simple-client-sslcontext.html/index.html | 11 +
.../simple-client-sslcontext/index.html | 29 +
.../extensions-core/stats.html/index.html | 11 +
.../development/extensions-core/stats/index.html | 36 +
.../extensions-core/test-stats.html/index.html | 11 +
.../extensions-core/test-stats/index.html | 27 +
.../docs/29.0.0/development/extensions/index.html | 11 +
.../29.0.0/development/indexer.html/index.html | 11 +
.../index.html | 11 +
.../29.0.0/development/javascript.html/index.html | 11 +
.../docs/29.0.0/development/javascript/index.html | 38 +
.../kafka-simple-consumer-firehose.html/index.html | 11 +
.../29.0.0/development/modules.html/index.html | 11 +
.../docs/29.0.0/development/modules/index.html | 52 +
.../29.0.0/development/overview.html/index.html | 11 +
.../docs/29.0.0/development/overview/index.html | 35 +
.../docs/29.0.0/development/router.html/index.html | 11 +
.../development/select-query.html/index.html | 11 +
.../29.0.0/development/versioning.html/index.html | 11 +
.../docs/29.0.0/development/versioning/index.html | 26 +
published_versions/docs/29.0.0/index.html | 11 +
.../docs/29.0.0/ingestion.html/index.html | 11 +
.../ingestion/automatic-compaction.html/index.html | 11 +
.../ingestion/batch-ingestion.html/index.html | 11 +
.../command-line-hadoop-indexer.html/index.html | 11 +
.../29.0.0/ingestion/compaction.html/index.html | 11 +
.../concurrent-append-replace.html/index.html | 11 +
.../ingestion/concurrent-append-replace/index.html | 27 +
.../29.0.0/ingestion/data-formats.html/index.html | 11 +
.../docs/29.0.0/ingestion/data-formats/index.html | 112 +
.../ingestion/data-management.html/index.html | 11 +
.../29.0.0/ingestion/delete-data.html/index.html | 11 +
.../docs/29.0.0/ingestion/faq.html/index.html | 11 +
.../docs/29.0.0/ingestion/faq/index.html | 32 +
.../docs/29.0.0/ingestion/firehose.html/index.html | 11 +
.../29.0.0/ingestion/flatten-json.html/index.html | 11 +
.../hadoop-vs-native-batch.html/index.html | 11 +
.../docs/29.0.0/ingestion/hadoop.html/index.html | 11 +
.../docs/29.0.0/ingestion/hadoop/index.html | 73 +
.../docs/29.0.0/ingestion/index.html | 35 +
.../ingestion/ingestion-spec.html/index.html | 11 +
.../29.0.0/ingestion/ingestion-spec/index.html | 81 +
.../29.0.0/ingestion/ingestion.html/index.html | 11 +
.../29.0.0/ingestion/input-sources.html/index.html | 11 +
.../docs/29.0.0/ingestion/input-sources/index.html | 72 +
.../ingestion/kafka-ingestion.html/index.html | 11 +
.../29.0.0/ingestion/kafka-ingestion/index.html | 39 +
.../ingestion/kinesis-ingestion.html/index.html | 11 +
.../29.0.0/ingestion/kinesis-ingestion/index.html | 48 +
.../ingestion/locking-and-priority.html/index.html | 11 +
.../ingestion/migrate-from-firehose/index.html | 11 +
.../29.0.0/ingestion/misc-tasks.html/index.html | 11 +
.../native-batch-firehose.html/index.html | 11 +
.../ingestion/native-batch-firehose/index.html | 59 +
.../native-batch-input-sources.html/index.html | 11 +
.../native-batch-simple-task.html/index.html | 11 +
.../ingestion/native-batch-simple-task/index.html | 35 +
.../29.0.0/ingestion/native-batch.html/index.html | 11 +
.../docs/29.0.0/ingestion/native-batch/index.html | 101 +
.../29.0.0/ingestion/native_tasks.html/index.html | 11 +
.../docs/29.0.0/ingestion/overview.html/index.html | 11 +
.../29.0.0/ingestion/partitioning.html/index.html | 11 +
.../docs/29.0.0/ingestion/partitioning/index.html | 30 +
.../ingestion/realtime-ingestion.html/index.html | 11 +
.../docs/29.0.0/ingestion/reports.html/index.html | 11 +
.../docs/29.0.0/ingestion/rollup.html/index.html | 11 +
.../docs/29.0.0/ingestion/rollup/index.html | 28 +
.../ingestion/schema-changes.html/index.html | 11 +
.../29.0.0/ingestion/schema-design.html/index.html | 11 +
.../docs/29.0.0/ingestion/schema-design/index.html | 110 +
.../29.0.0/ingestion/schema-model.html/index.html | 11 +
.../docs/29.0.0/ingestion/schema-model/index.html | 31 +
.../ingestion/standalone-realtime.html/index.html | 11 +
.../ingestion/standalone-realtime/index.html | 33 +
.../ingestion/stream-ingestion.html/index.html | 11 +
.../29.0.0/ingestion/stream-pull.html/index.html | 11 +
.../29.0.0/ingestion/stream-push.html/index.html | 11 +
.../29.0.0/ingestion/streaming.html/index.html | 11 +
.../docs/29.0.0/ingestion/streaming/index.html | 29 +
.../29.0.0/ingestion/supervisor.html/index.html | 11 +
.../docs/29.0.0/ingestion/supervisor/index.html | 44 +
.../docs/29.0.0/ingestion/tasks.html/index.html | 11 +
.../docs/29.0.0/ingestion/tasks/index.html | 77 +
.../29.0.0/ingestion/tranquility.html/index.html | 11 +
.../docs/29.0.0/ingestion/tranquility/index.html | 31 +
.../ingestion/transform-spec.html/index.html | 11 +
.../ingestion/update-existing-data.html/index.html | 11 +
.../docs/29.0.0/misc/cluster-setup.html/index.html | 11 +
.../docs/29.0.0/misc/evaluate.html/index.html | 11 +
.../docs/29.0.0/misc/math-expr.html/index.html | 11 +
.../29.0.0/misc/papers-and-talks.html/index.html | 11 +
.../docs/29.0.0/misc/papers-and-talks/index.html | 26 +
.../docs/29.0.0/misc/tasks.html/index.html | 11 +
.../docs/29.0.0/multi-stage-query.html/index.html | 11 +
.../29.0.0/multi-stage-query/api.html/index.html | 11 +
.../multi-stage-query/concepts.html/index.html | 11 +
.../29.0.0/multi-stage-query/concepts/index.html | 120 +
.../multi-stage-query/examples.html/index.html | 11 +
.../29.0.0/multi-stage-query/examples/index.html | 28 +
.../docs/29.0.0/multi-stage-query/index.html | 44 +
.../multi-stage-query/known-issues.html/index.html | 11 +
.../multi-stage-query/known-issues/index.html | 36 +
.../multi-stage-query/reference.html/index.html | 11 +
.../29.0.0/multi-stage-query/reference/index.html | 82 +
.../multi-stage-query/security.html/index.html | 11 +
.../29.0.0/multi-stage-query/security/index.html | 37 +
.../docs/29.0.0/operations/alerts.html/index.html | 11 +
.../docs/29.0.0/operations/alerts/index.html | 26 +
.../operations/api-reference.html/index.html | 11 +
.../29.0.0/operations/api-reference/index.html | 11 +
.../29.0.0/operations/auth-ldap.html/index.html | 11 +
.../docs/29.0.0/operations/auth-ldap/index.html | 27 +
.../docs/29.0.0/operations/auth.html/index.html | 11 +
.../docs/29.0.0/operations/auth/index.html | 27 +
.../basic-cluster-tuning.html/index.html | 11 +
.../operations/basic-cluster-tuning/index.html | 28 +
.../clean-metadata-store.html/index.html | 11 +
.../operations/clean-metadata-store/index.html | 39 +
.../deep-storage-migration.html/index.html | 11 +
.../operations/deep-storage-migration/index.html | 29 +
.../operations/druid-console.html/index.html | 11 +
.../29.0.0/operations/dump-segment.html/index.html | 11 +
.../docs/29.0.0/operations/dump-segment/index.html | 41 +
.../operations/durable-storage.html/index.html | 11 +
.../29.0.0/operations/durable-storage/index.html | 31 +
.../dynamic-config-provider.html/index.html | 11 +
.../operations/dynamic-config-provider/index.html | 26 +
.../operations/export-metadata.html/index.html | 11 +
.../29.0.0/operations/export-metadata/index.html | 27 +
.../29.0.0/operations/getting-started/index.html | 11 +
.../operations/high-availability.html/index.html | 11 +
.../29.0.0/operations/high-availability/index.html | 33 +
.../operations/http-compression.html/index.html | 11 +
.../29.0.0/operations/http-compression/index.html | 26 +
.../including-extensions.html/index.html | 11 +
.../insert-segment-to-db.html/index.html | 11 +
.../operations/insert-segment-to-db/index.html | 38 +
.../docs/29.0.0/operations/java.html/index.html | 11 +
.../docs/29.0.0/operations/java/index.html | 46 +
.../29.0.0/operations/kubernetes.html/index.html | 11 +
.../docs/29.0.0/operations/kubernetes/index.html | 26 +
.../operations/management-uis.html/index.html | 11 +
.../operations/metadata-migration.html/index.html | 11 +
.../operations/metadata-migration/index.html | 30 +
.../docs/29.0.0/operations/metrics.html/index.html | 11 +
.../docs/29.0.0/operations/metrics/index.html | 33 +
.../migrate-from-firehose.html/index.html | 11 +
.../operations/migrate-from-firehose/index.html | 27 +
.../operations/mixed-workloads.html/index.html | 11 +
.../29.0.0/operations/mixed-workloads/index.html | 51 +
.../29.0.0/operations/multitenancy.html/index.html | 11 +
.../29.0.0/operations/other-hadoop.html/index.html | 11 +
.../docs/29.0.0/operations/other-hadoop/index.html | 53 +
.../operations/password-provider.html/index.html | 11 +
.../29.0.0/operations/password-provider/index.html | 26 +
.../operations/performance-faq.html/index.html | 11 +
.../29.0.0/operations/pull-deps.html/index.html | 11 +
.../docs/29.0.0/operations/pull-deps/index.html | 26 +
.../operations/recommendations.html/index.html | 11 +
.../operations/request-logging.html/index.html | 11 +
.../29.0.0/operations/request-logging/index.html | 36 +
.../operations/reset-cluster.html/index.html | 11 +
.../29.0.0/operations/reset-cluster/index.html | 30 +
.../operations/rolling-updates.html/index.html | 11 +
.../29.0.0/operations/rolling-updates/index.html | 48 +
.../operations/rule-configuration.html/index.html | 11 +
.../operations/rule-configuration/index.html | 26 +
.../operations/security-overview.html/index.html | 11 +
.../29.0.0/operations/security-overview/index.html | 32 +
.../operations/security-user-auth.html/index.html | 11 +
.../operations/security-user-auth/index.html | 33 +
.../segment-optimization.html/index.html | 11 +
.../operations/segment-optimization/index.html | 57 +
.../operations/single-server.html/index.html | 11 +
.../29.0.0/operations/single-server/index.html | 29 +
.../29.0.0/operations/tls-support.html/index.html | 11 +
.../docs/29.0.0/operations/tls-support/index.html | 41 +
.../use_sbt_to_build_fat_jar.html/index.html | 11 +
.../operations/use_sbt_to_build_fat_jar/index.html | 26 +
.../29.0.0/operations/web-console.html/index.html | 11 +
.../docs/29.0.0/operations/web-console/index.html | 52 +
.../docs/29.0.0/querying.html/index.html | 11 +
.../29.0.0/querying/aggregations.html/index.html | 11 +
.../docs/29.0.0/querying/aggregations/index.html | 43 +
.../docs/29.0.0/querying/arrays.html/index.html | 11 +
.../docs/29.0.0/querying/arrays/index.html | 28 +
.../docs/29.0.0/querying/caching.html/index.html | 11 +
.../docs/29.0.0/querying/caching/index.html | 26 +
.../29.0.0/querying/datasource.html/index.html | 11 +
.../docs/29.0.0/querying/datasource/index.html | 91 +
.../datasourcemetadataquery.html/index.html | 11 +
.../querying/datasourcemetadataquery/index.html | 28 +
.../29.0.0/querying/dimensionspecs.html/index.html | 11 +
.../docs/29.0.0/querying/dimensionspecs/index.html | 78 +
.../docs/29.0.0/querying/filters.html/index.html | 11 +
.../docs/29.0.0/querying/filters/index.html | 47 +
.../docs/29.0.0/querying/geo.html/index.html | 11 +
.../docs/29.0.0/querying/geo/index.html | 33 +
.../29.0.0/querying/granularities.html/index.html | 11 +
.../docs/29.0.0/querying/granularities/index.html | 36 +
.../29.0.0/querying/groupbyquery.html/index.html | 11 +
.../docs/29.0.0/querying/groupbyquery/index.html | 80 +
.../docs/29.0.0/querying/having.html/index.html | 11 +
.../docs/29.0.0/querying/having/index.html | 35 +
.../docs/29.0.0/querying/hll-old.html/index.html | 11 +
.../docs/29.0.0/querying/hll-old/index.html | 35 +
published_versions/docs/29.0.0/querying/index.html | 40 +
.../docs/29.0.0/querying/joins.html/index.html | 11 +
.../docs/29.0.0/querying/joins/index.html | 35 +
.../docs/29.0.0/querying/limitspec.html/index.html | 11 +
.../docs/29.0.0/querying/limitspec/index.html | 34 +
.../docs/29.0.0/querying/lookups.html/index.html | 11 +
.../docs/29.0.0/querying/lookups/index.html | 75 +
.../docs/29.0.0/querying/math-expr.html/index.html | 11 +
.../docs/29.0.0/querying/math-expr/index.html | 33 +
.../multi-value-dimensions.html/index.html | 11 +
.../querying/multi-value-dimensions/index.html | 47 +
.../29.0.0/querying/multitenancy.html/index.html | 11 +
.../docs/29.0.0/querying/multitenancy/index.html | 49 +
.../29.0.0/querying/nested-columns.html/index.html | 11 +
.../docs/29.0.0/querying/nested-columns/index.html | 26 +
.../29.0.0/querying/optimizations.html/index.html | 11 +
.../querying/post-aggregations.html/index.html | 11 +
.../29.0.0/querying/post-aggregations/index.html | 35 +
.../29.0.0/querying/query-context.html/index.html | 11 +
.../docs/29.0.0/querying/query-context/index.html | 37 +
.../querying/query-deep-storage.html/index.html | 11 +
.../29.0.0/querying/query-deep-storage/index.html | 26 +
.../querying/query-execution.html/index.html | 11 +
.../29.0.0/querying/query-execution/index.html | 66 +
.../querying/query-processing.html/index.html | 11 +
.../29.0.0/querying/query-processing/index.html | 26 +
.../29.0.0/querying/scan-query.html/index.html | 11 +
.../docs/29.0.0/querying/scan-query/index.html | 56 +
.../29.0.0/querying/searchquery.html/index.html | 11 +
.../docs/29.0.0/querying/searchquery/index.html | 38 +
.../querying/searchqueryspec.html/index.html | 11 +
.../querying/segmentmetadataquery.html/index.html | 11 +
.../querying/segmentmetadataquery/index.html | 46 +
.../29.0.0/querying/select-query.html/index.html | 11 +
.../docs/29.0.0/querying/select-query/index.html | 26 +
.../29.0.0/querying/sorting-orders.html/index.html | 11 +
.../docs/29.0.0/querying/sorting-orders/index.html | 29 +
.../querying/sql-aggregations.html/index.html | 11 +
.../29.0.0/querying/sql-aggregations/index.html | 35 +
.../docs/29.0.0/querying/sql-api.html/index.html | 11 +
.../querying/sql-array-functions.html/index.html | 11 +
.../29.0.0/querying/sql-array-functions/index.html | 31 +
.../29.0.0/querying/sql-data-types.html/index.html | 11 +
.../docs/29.0.0/querying/sql-data-types/index.html | 63 +
.../29.0.0/querying/sql-functions.html/index.html | 11 +
.../docs/29.0.0/querying/sql-functions/index.html | 29 +
.../docs/29.0.0/querying/sql-jdbc.html/index.html | 11 +
.../querying/sql-json-functions.html/index.html | 11 +
.../29.0.0/querying/sql-json-functions/index.html | 26 +
.../querying/sql-metadata-tables.html/index.html | 11 +
.../29.0.0/querying/sql-metadata-tables/index.html | 37 +
.../index.html | 11 +
.../sql-multivalue-string-functions/index.html | 33 +
.../29.0.0/querying/sql-operators.html/index.html | 11 +
.../docs/29.0.0/querying/sql-operators/index.html | 30 +
.../querying/sql-query-context.html/index.html | 11 +
.../29.0.0/querying/sql-query-context/index.html | 29 +
.../29.0.0/querying/sql-scalar.html/index.html | 11 +
.../docs/29.0.0/querying/sql-scalar/index.html | 53 +
.../querying/sql-translation.html/index.html | 11 +
.../29.0.0/querying/sql-translation/index.html | 88 +
.../querying/sql-window-functions.html/index.html | 11 +
.../querying/sql-window-functions/index.html | 29 +
.../docs/29.0.0/querying/sql.html/index.html | 11 +
.../docs/29.0.0/querying/sql/index.html | 80 +
.../querying/timeboundaryquery.html/index.html | 11 +
.../29.0.0/querying/timeboundaryquery/index.html | 28 +
.../querying/timeseriesquery.html/index.html | 11 +
.../29.0.0/querying/timeseriesquery/index.html | 36 +
.../querying/tips-good-queries.html/index.html | 11 +
.../29.0.0/querying/tips-good-queries/index.html | 28 +
.../29.0.0/querying/topnmetricspec.html/index.html | 11 +
.../docs/29.0.0/querying/topnmetricspec/index.html | 28 +
.../docs/29.0.0/querying/topnquery.html/index.html | 11 +
.../docs/29.0.0/querying/topnquery/index.html | 35 +
.../querying/troubleshooting.html/index.html | 11 +
.../29.0.0/querying/troubleshooting/index.html | 34 +
.../29.0.0/querying/using-caching.html/index.html | 11 +
.../docs/29.0.0/querying/using-caching/index.html | 26 +
.../querying/virtual-columns.html/index.html | 11 +
.../29.0.0/querying/virtual-columns/index.html | 37 +
.../release-info/release-notes.html/index.html | 11 +
.../29.0.0/release-info/release-notes/index.html | 27 +
.../release-info/upgrade-notes.html/index.html | 11 +
.../29.0.0/release-info/upgrade-notes/index.html | 48 +
.../docs/29.0.0/tutorials.html/index.html | 11 +
.../booting-a-production-cluster.html/index.html | 11 +
.../docs/29.0.0/tutorials/cluster.html/index.html | 11 +
.../docs/29.0.0/tutorials/cluster/index.html | 56 +
.../docs/29.0.0/tutorials/docker.html/index.html | 11 +
.../docs/29.0.0/tutorials/docker/index.html | 28 +
.../docs/29.0.0/tutorials/examples.html/index.html | 11 +
.../docs/29.0.0/tutorials/firewall.html/index.html | 11 +
.../docs/29.0.0/tutorials/index.html | 38 +
.../tutorials/ingestion-streams.html/index.html | 11 +
.../29.0.0/tutorials/ingestion.html/index.html | 11 +
.../29.0.0/tutorials/quickstart.html/index.html | 11 +
.../tutorial-a-first-look-at-druid.html/index.html | 11 +
.../tutorial-all-about-queries.html/index.html | 11 +
.../tutorial-batch-hadoop.html/index.html | 11 +
.../tutorials/tutorial-batch-hadoop/index.html | 29 +
.../tutorial-batch-native.html/index.html | 11 +
.../tutorials/tutorial-batch-native/index.html | 43 +
.../tutorials/tutorial-batch.html/index.html | 11 +
.../29.0.0/tutorials/tutorial-batch/index.html | 30 +
.../tutorials/tutorial-compaction.html/index.html | 11 +
.../tutorials/tutorial-compaction/index.html | 34 +
.../tutorials/tutorial-delete-data.html/index.html | 11 +
.../tutorials/tutorial-delete-data/index.html | 30 +
.../tutorial-ingestion-spec.html/index.html | 11 +
.../tutorials/tutorial-ingestion-spec/index.html | 27 +
.../29.0.0/tutorials/tutorial-jdbc.html/index.html | 11 +
.../docs/29.0.0/tutorials/tutorial-jdbc/index.html | 26 +
.../tutorials/tutorial-kafka.html/index.html | 11 +
.../29.0.0/tutorials/tutorial-kafka/index.html | 27 +
.../tutorial-kerberos-hadoop.html/index.html | 11 +
.../tutorials/tutorial-kerberos-hadoop/index.html | 30 +
.../tutorial-loading-batch-data.html/index.html | 11 +
.../index.html | 11 +
.../tutorial-msq-convert-spec.html/index.html | 11 +
.../tutorials/tutorial-msq-convert-spec/index.html | 29 +
.../tutorials/tutorial-msq-extern.html/index.html | 11 +
.../tutorials/tutorial-msq-extern/index.html | 31 +
.../tutorial-query-deep-storage.html/index.html | 11 +
.../tutorial-query-deep-storage/index.html | 26 +
.../tutorials/tutorial-query.html/index.html | 11 +
.../29.0.0/tutorials/tutorial-query/index.html | 47 +
.../tutorials/tutorial-retention.html/index.html | 11 +
.../29.0.0/tutorials/tutorial-retention/index.html | 28 +
.../tutorials/tutorial-rollup.html/index.html | 11 +
.../29.0.0/tutorials/tutorial-rollup/index.html | 27 +
.../tutorial-sketches-theta.html/index.html | 11 +
.../tutorials/tutorial-sketches-theta/index.html | 34 +
.../tutorial-sql-query-view.html/index.html | 11 +
.../tutorials/tutorial-sql-query-view/index.html | 26 +
.../tutorial-the-druid-cluster.html/index.html | 11 +
.../tutorials/tutorial-tranquility.html/index.html | 11 +
.../tutorial-transform-spec.html/index.html | 11 +
.../tutorials/tutorial-transform-spec/index.html | 27 +
.../tutorial-unnest-arrays.html/index.html | 11 +
.../tutorials/tutorial-unnest-arrays/index.html | 26 +
.../tutorials/tutorial-update-data.html/index.html | 11 +
.../tutorials/tutorial-update-data/index.html | 31 +
.../automatic-compaction-api/index.html | 17 +-
.../api-reference/data-management-api/index.html | 44 +-
.../dynamic-configuration-api/index.html | 30 +-
.../docs/latest/api-reference/index.html | 15 +-
.../api-reference/json-querying-api/index.html | 15 +-
.../api-reference/legacy-metadata-api/index.html | 23 +-
.../latest/api-reference/lookups-api/index.html | 15 +-
.../api-reference/retention-rules-api/index.html | 15 +-
.../api-reference/service-status-api/index.html | 15 +-
.../docs/latest/api-reference/sql-api/index.html | 19 +-
.../api-reference/sql-ingestion-api/index.html | 17 +-
.../docs/latest/api-reference/sql-jdbc/index.html | 17 +-
.../latest/api-reference/supervisor-api/index.html | 28 +-
.../docs/latest/api-reference/tasks-api/index.html | 15 +-
.../comparisons/druid-vs-elasticsearch/index.html | 15 +-
.../comparisons/druid-vs-key-value/index.html | 15 +-
.../latest/comparisons/druid-vs-kudu/index.html | 15 +-
.../comparisons/druid-vs-redshift/index.html | 15 +-
.../latest/comparisons/druid-vs-spark/index.html | 15 +-
.../comparisons/druid-vs-sql-on-hadoop/index.html | 15 +-
.../latest/configuration/extensions/index.html | 23 +-
.../configuration/human-readable-byte/index.html | 15 +-
.../docs/latest/configuration/index.html | 119 +-
.../docs/latest/configuration/logging/index.html | 15 +-
.../automatic-compaction/index.html | 22 +-
.../latest/data-management/compaction/index.html | 19 +-
.../docs/latest/data-management/delete/index.html | 21 +-
.../docs/latest/data-management/index.html | 17 +-
.../data-management/manual-compaction/index.html | 15 +-
.../data-management/schema-changes/index.html | 17 +-
.../docs/latest/data-management/update/index.html | 17 +-
.../docs/latest/design/architecture/index.html | 126 +-
.../docs/latest/design/broker/index.html | 22 +-
.../docs/latest/design/coordinator/index.html | 48 +-
.../docs/latest/design/deep-storage/index.html | 19 +-
.../extensions-contrib/dropwizard/index.html | 15 +-
.../docs/latest/design/historical/index.html | 22 +-
published_versions/docs/latest/design/index.html | 15 +-
.../docs/latest/design/indexer/index.html | 22 +-
.../docs/latest/design/indexing-service/index.html | 15 +-
.../docs/latest/design/metadata-storage/index.html | 17 +-
.../docs/latest/design/middlemanager/index.html | 21 +-
.../docs/latest/design/overlord/index.html | 25 +-
.../docs/latest/design/peons/index.html | 23 +-
.../docs/latest/design/processes.html/index.html | 6 +-
.../docs/latest/design/processes/index.html | 38 -
.../docs/latest/design/router/index.html | 34 +-
.../docs/latest/design/segments/index.html | 21 +-
.../docs/latest/design/storage.html/index.html | 11 +
.../docs/latest/design/storage/index.html | 36 +
.../docs/latest/design/zookeeper/index.html | 17 +-
.../kafka-simple.html/index.html | 6 +-
.../community-extensions/rabbitmq.html/index.html | 6 +-
.../development/contribute-to-docs/index.html | 22 +-
.../experimental-features.html/index.html | 11 -
.../development/experimental-features/index.html | 25 -
.../latest/development/experimental/index.html | 15 +-
.../extensions-contrib/aliyun-oss/index.html | 15 +-
.../ambari-metrics-emitter/index.html | 15 +-
.../extensions-contrib/cassandra/index.html | 15 +-
.../extensions-contrib/cloudfiles/index.html | 15 +-
.../compressed-big-decimal/index.html | 15 +-
.../ddsketch-quantiles.html/index.html | 11 +
.../ddsketch-quantiles/index.html | 26 +
.../extensions-contrib/delta-lake.html/index.html | 11 +
.../extensions-contrib/delta-lake/index.html | 32 +
.../extensions-contrib/distinctcount/index.html | 15 +-
.../extensions-contrib/gce-extensions/index.html | 15 +-
.../extensions-contrib/graphite/index.html | 15 +-
.../extensions-contrib/iceberg/index.html | 18 +-
.../extensions-contrib/influx/index.html | 15 +-
.../extensions-contrib/influxdb-emitter/index.html | 15 +-
.../extensions-contrib/k8s-jobs/index.html | 17 +-
.../extensions-contrib/kafka-emitter/index.html | 15 +-
.../materialized-view/index.html | 15 +-
.../momentsketch-quantiles/index.html | 15 +-
.../moving-average-query/index.html | 15 +-
.../extensions-contrib/opentsdb-emitter/index.html | 15 +-
.../extensions-contrib/prometheus/index.html | 19 +-
.../extensions-contrib/redis-cache/index.html | 15 +-
.../spectator-histogram.html/index.html | 11 +
.../spectator-histogram/index.html | 93 +
.../extensions-contrib/sqlserver/index.html | 15 +-
.../extensions-contrib/statsd/index.html | 19 +-
.../tdigestsketch-quantiles/index.html | 15 +-
.../extensions-contrib/thrift/index.html | 15 +-
.../extensions-contrib/time-min-max/index.html | 15 +-
.../approximate-histograms/index.html | 15 +-
.../development/extensions-core/avro/index.html | 15 +-
.../development/extensions-core/azure/index.html | 17 +-
.../extensions-core/bloom-filter/index.html | 15 +-
.../datasketches-extension/index.html | 15 +-
.../extensions-core/datasketches-hll/index.html | 15 +-
.../extensions-core/datasketches-kll/index.html | 15 +-
.../datasketches-quantiles/index.html | 15 +-
.../extensions-core/datasketches-theta/index.html | 15 +-
.../extensions-core/datasketches-tuple/index.html | 15 +-
.../extensions-core/druid-aws-rds/index.html | 15 +-
.../druid-basic-security/index.html | 15 +-
.../extensions-core/druid-kerberos/index.html | 15 +-
.../extensions-core/druid-lookups/index.html | 15 +-
.../extensions-core/druid-pac4j/index.html | 15 +-
.../druid-ranger-security/index.html | 15 +-
.../extensions-core/examples/index.html | 15 +-
.../development/extensions-core/google/index.html | 15 +-
.../development/extensions-core/hdfs/index.html | 15 +-
.../kafka-extraction-namespace/index.html | 15 +-
.../kafka-ingestion.html/index.html | 11 -
.../extensions-core/kafka-ingestion/index.html | 31 -
.../kafka-supervisor-operations.html/index.html | 6 +-
.../kafka-supervisor-operations/index.html | 112 -
.../kafka-supervisor-reference.html/index.html | 6 +-
.../kafka-supervisor-reference/index.html | 38 -
.../kinesis-ingestion.html/index.html | 6 +-
.../extensions-core/kinesis-ingestion/index.html | 92 -
.../extensions-core/kubernetes/index.html | 15 +-
.../lookups-cached-global/index.html | 19 +-
.../development/extensions-core/mysql/index.html | 15 +-
.../development/extensions-core/orc/index.html | 15 +-
.../development/extensions-core/parquet/index.html | 15 +-
.../extensions-core/postgresql/index.html | 15 +-
.../extensions-core/protobuf/index.html | 17 +-
.../development/extensions-core/s3/index.html | 15 +-
.../simple-client-sslcontext/index.html | 15 +-
.../development/extensions-core/stats/index.html | 15 +-
.../extensions-core/test-stats/index.html | 15 +-
.../docs/latest/development/javascript/index.html | 15 +-
.../kafka-simple-consumer-firehose.html/index.html | 6 +-
.../docs/latest/development/modules/index.html | 17 +-
.../docs/latest/development/overview/index.html | 15 +-
.../docs/latest/development/versioning/index.html | 15 +-
.../concurrent-append-replace.html/index.html | 11 +
.../ingestion/concurrent-append-replace/index.html | 27 +
.../docs/latest/ingestion/data-formats/index.html | 33 +-
.../docs/latest/ingestion/faq/index.html | 19 +-
.../docs/latest/ingestion/hadoop/index.html | 17 +-
.../docs/latest/ingestion/index.html | 23 +-
.../latest/ingestion/ingestion-spec/index.html | 27 +-
.../docs/latest/ingestion/input-sources/index.html | 38 +-
.../ingestion/kafka-ingestion.html/index.html | 11 +
.../latest/ingestion/kafka-ingestion/index.html | 39 +
.../ingestion/kinesis-ingestion.html/index.html | 11 +
.../latest/ingestion/kinesis-ingestion/index.html | 48 +
.../ingestion/native-batch-firehose/index.html | 15 +-
.../ingestion/native-batch-simple-task/index.html | 15 +-
.../docs/latest/ingestion/native-batch/index.html | 73 +-
.../docs/latest/ingestion/partitioning/index.html | 19 +-
.../docs/latest/ingestion/rollup/index.html | 19 +-
.../docs/latest/ingestion/schema-design/index.html | 24 +-
.../docs/latest/ingestion/schema-model/index.html | 17 +-
.../ingestion/standalone-realtime/index.html | 19 +-
.../latest/ingestion/streaming.html/index.html | 11 +
.../docs/latest/ingestion/streaming/index.html | 29 +
.../latest/ingestion/supervisor.html/index.html | 11 +
.../docs/latest/ingestion/supervisor/index.html | 44 +
.../docs/latest/ingestion/tasks/index.html | 23 +-
.../docs/latest/ingestion/tranquility/index.html | 19 +-
.../docs/latest/misc/papers-and-talks/index.html | 15 +-
.../latest/multi-stage-query/concepts/index.html | 29 +-
.../latest/multi-stage-query/examples/index.html | 19 +-
.../docs/latest/multi-stage-query/index.html | 17 +-
.../multi-stage-query/known-issues/index.html | 26 +-
.../latest/multi-stage-query/reference/index.html | 37 +-
.../latest/multi-stage-query/security/index.html | 19 +-
.../docs/latest/operations/alerts/index.html | 15 +-
.../docs/latest/operations/auth-ldap/index.html | 15 +-
.../docs/latest/operations/auth/index.html | 15 +-
.../operations/basic-cluster-tuning/index.html | 17 +-
.../operations/clean-metadata-store/index.html | 19 +-
.../operations/deep-storage-migration/index.html | 15 +-
.../docs/latest/operations/dump-segment/index.html | 15 +-
.../latest/operations/durable-storage/index.html | 17 +-
.../operations/dynamic-config-provider/index.html | 17 +-
.../latest/operations/export-metadata/index.html | 15 +-
.../latest/operations/high-availability/index.html | 15 +-
.../latest/operations/http-compression/index.html | 15 +-
.../operations/insert-segment-to-db/index.html | 15 +-
.../docs/latest/operations/java/index.html | 15 +-
.../docs/latest/operations/kubernetes/index.html | 15 +-
.../operations/metadata-migration/index.html | 15 +-
.../docs/latest/operations/metrics/index.html | 21 +-
.../operations/migrate-from-firehose/index.html | 15 +-
.../latest/operations/mixed-workloads/index.html | 17 +-
.../docs/latest/operations/other-hadoop/index.html | 15 +-
.../latest/operations/password-provider/index.html | 15 +-
.../docs/latest/operations/pull-deps/index.html | 17 +-
.../latest/operations/request-logging/index.html | 15 +-
.../latest/operations/reset-cluster/index.html | 15 +-
.../latest/operations/rolling-updates/index.html | 17 +-
.../operations/rule-configuration/index.html | 17 +-
.../latest/operations/security-overview/index.html | 18 +-
.../operations/security-user-auth/index.html | 15 +-
.../operations/segment-optimization/index.html | 15 +-
.../latest/operations/single-server/index.html | 15 +-
.../docs/latest/operations/tls-support/index.html | 15 +-
.../operations/use_sbt_to_build_fat_jar/index.html | 15 +-
.../docs/latest/operations/web-console/index.html | 17 +-
.../docs/latest/querying/aggregations/index.html | 22 +-
.../docs/latest/querying/arrays/index.html | 19 +-
.../docs/latest/querying/caching/index.html | 17 +-
.../docs/latest/querying/datasource/index.html | 44 +-
.../querying/datasourcemetadataquery/index.html | 17 +-
.../docs/latest/querying/dimensionspecs/index.html | 19 +-
.../docs/latest/querying/filters/index.html | 29 +-
.../docs/latest/querying/geo/index.html | 17 +-
.../docs/latest/querying/granularities/index.html | 17 +-
.../docs/latest/querying/groupbyquery/index.html | 19 +-
.../docs/latest/querying/having/index.html | 17 +-
.../docs/latest/querying/hll-old/index.html | 15 +-
published_versions/docs/latest/querying/index.html | 19 +-
.../docs/latest/querying/joins/index.html | 17 +-
.../docs/latest/querying/limitspec/index.html | 17 +-
.../docs/latest/querying/lookups/index.html | 66 +-
.../docs/latest/querying/math-expr/index.html | 21 +-
.../querying/multi-value-dimensions/index.html | 21 +-
.../docs/latest/querying/multitenancy/index.html | 17 +-
.../docs/latest/querying/nested-columns/index.html | 17 +-
.../latest/querying/post-aggregations/index.html | 17 +-
.../docs/latest/querying/query-context/index.html | 22 +-
.../latest/querying/query-deep-storage/index.html | 17 +-
.../latest/querying/query-execution/index.html | 19 +-
.../querying/query-processing.html/index.html | 11 +
.../latest/querying/query-processing/index.html | 26 +
.../docs/latest/querying/scan-query/index.html | 17 +-
.../docs/latest/querying/searchquery/index.html | 21 +-
.../querying/segmentmetadataquery/index.html | 17 +-
.../docs/latest/querying/select-query/index.html | 15 +-
.../docs/latest/querying/sorting-orders/index.html | 17 +-
.../latest/querying/sql-aggregations/index.html | 19 +-
.../latest/querying/sql-array-functions/index.html | 19 +-
.../docs/latest/querying/sql-data-types/index.html | 36 +-
.../docs/latest/querying/sql-functions/index.html | 21 +-
.../latest/querying/sql-json-functions/index.html | 17 +-
.../latest/querying/sql-metadata-tables/index.html | 21 +-
.../sql-multivalue-string-functions/index.html | 19 +-
.../docs/latest/querying/sql-operators/index.html | 19 +-
.../latest/querying/sql-query-context/index.html | 19 +-
.../docs/latest/querying/sql-scalar/index.html | 23 +-
.../latest/querying/sql-translation/index.html | 17 +-
.../querying/sql-window-functions/index.html | 17 +-
.../docs/latest/querying/sql/index.html | 24 +-
.../latest/querying/timeboundaryquery/index.html | 17 +-
.../latest/querying/timeseriesquery/index.html | 19 +-
.../latest/querying/tips-good-queries/index.html | 18 +-
.../docs/latest/querying/topnmetricspec/index.html | 17 +-
.../docs/latest/querying/topnquery/index.html | 17 +-
.../latest/querying/troubleshooting/index.html | 17 +-
.../docs/latest/querying/using-caching/index.html | 17 +-
.../latest/querying/virtual-columns/index.html | 17 +-
.../latest/release-info/release-notes/index.html | 69 +-
.../latest/release-info/upgrade-notes/index.html | 21 +-
.../docs/latest/tutorials/cluster/index.html | 21 +-
.../docs/latest/tutorials/docker/index.html | 19 +-
.../docs/latest/tutorials/index.html | 27 +-
.../tutorials/tutorial-batch-hadoop/index.html | 19 +-
.../tutorials/tutorial-batch-native/index.html | 15 +-
.../latest/tutorials/tutorial-batch/index.html | 17 +-
.../tutorials/tutorial-compaction/index.html | 17 +-
.../tutorials/tutorial-delete-data/index.html | 17 +-
.../tutorials/tutorial-ingestion-spec/index.html | 19 +-
.../docs/latest/tutorials/tutorial-jdbc/index.html | 17 +-
.../tutorial-jupyter-docker.html/index.html | 11 -
.../tutorials/tutorial-jupyter-docker/index.html | 52 -
.../tutorial-jupyter-index.html/index.html | 11 -
.../tutorials/tutorial-jupyter-index/index.html | 39 -
.../latest/tutorials/tutorial-kafka/index.html | 19 +-
.../tutorials/tutorial-kerberos-hadoop/index.html | 17 +-
.../tutorials/tutorial-msq-convert-spec/index.html | 17 +-
.../tutorials/tutorial-msq-extern/index.html | 17 +-
.../tutorial-query-deep-storage/index.html | 17 +-
.../latest/tutorials/tutorial-query/index.html | 17 +-
.../latest/tutorials/tutorial-retention/index.html | 17 +-
.../latest/tutorials/tutorial-rollup/index.html | 19 +-
.../tutorials/tutorial-sketches-theta/index.html | 17 +-
.../tutorials/tutorial-sql-query-view/index.html | 17 +-
.../tutorials/tutorial-transform-spec/index.html | 17 +-
.../tutorials/tutorial-unnest-arrays/index.html | 17 +-
.../tutorials/tutorial-update-data/index.html | 17 +-
published_versions/downloads/index.html | 21 +-
published_versions/druid-powered/index.html | 19 +-
published_versions/faq/index.html | 15 +-
published_versions/index.html | 17 +-
published_versions/js/version.js | 8 +-
published_versions/libraries/index.html | 15 +-
published_versions/licensing/index.html | 15 +-
published_versions/lunr-index-1708491193450.json | 1 +
published_versions/lunr-index-1708491258403.json | 1 +
published_versions/lunr-index.json | 2 +-
published_versions/search-doc-1708491193450.json | 1 +
published_versions/search-doc-1708491258403.json | 1 +
published_versions/search-doc.json | 2 +-
published_versions/sitemap.xml | 2 +-
published_versions/technology/index.html | 19 +-
published_versions/use-cases/index.html | 31 +-
redirects.js | 17 +-
scripts/copy_druid_docs.py | 6 +-
sidebars.json | 28 +-
static/js/version.js | 8 +-
yarn.lock | 23580 +++++-------
1817 files changed, 144232 insertions(+), 21136 deletions(-)
diff --git a/docs/29.0.0/api-reference/api-reference.md b/docs/29.0.0/api-reference/api-reference.md
new file mode 100644
index 00000000..dd4a4ab6
--- /dev/null
+++ b/docs/29.0.0/api-reference/api-reference.md
@@ -0,0 +1,44 @@
+---
+id: api-reference
+title: API reference
+sidebar_label: Overview
+---
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+
+This topic is an index to the Apache Druid API documentation.
+
+## HTTP APIs
+* [Druid SQL queries](./sql-api.md) to submit SQL queries using the Druid SQL API.
+* [SQL-based ingestion](./sql-ingestion-api.md) to submit SQL-based batch ingestion requests.
+* [JSON querying](./json-querying-api.md) to submit JSON-based native queries.
+* [Tasks](./tasks-api.md) to manage data ingestion operations.
+* [Supervisors](./supervisor-api.md) to manage supervisors for data ingestion lifecycle and data processing.
+* [Retention rules](./retention-rules-api.md) to define and manage data retention rules across datasources.
+* [Data management](./data-management-api.md) to manage data segments.
+* [Automatic compaction](./automatic-compaction-api.md) to optimize segment sizes after ingestion.
+* [Lookups](./lookups-api.md) to manage and modify key-value datasources.
+* [Service status](./service-status-api.md) to monitor components within the Druid cluster.
+* [Dynamic configuration](./dynamic-configuration-api.md) to configure the behavior of the Coordinator and Overlord processes.
+* [Legacy metadata](./legacy-metadata-api.md) to retrieve datasource metadata.
+
+## Java APIs
+* [SQL JDBC driver](./sql-jdbc.md) to connect to Druid and make Druid SQL queries using the Avatica JDBC driver.
\ No newline at end of file
diff --git a/docs/29.0.0/api-reference/automatic-compaction-api.md b/docs/29.0.0/api-reference/automatic-compaction-api.md
new file mode 100644
index 00000000..a986585e
--- /dev/null
+++ b/docs/29.0.0/api-reference/automatic-compaction-api.md
@@ -0,0 +1,850 @@
+---
+id: automatic-compaction-api
+title: Automatic compaction API
+sidebar_label: Automatic compaction
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+<!--
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This topic describes the status and configuration API endpoints for [automatic compaction](../data-management/automatic-compaction.md) in Apache Druid. You can configure automatic compaction in the Druid web console or API.
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use `http://localhost:8888` for quickstart deployments.
+
+## Manage automatic compaction
+
+### Create or update automatic compaction configuration
+
+Creates or updates the automatic compaction configuration for a datasource. Pass the automatic compaction as a JSON object in the request body.
+
+The automatic compaction configuration requires only the `dataSource` property. Druid fills all other properties with default values if not specified. See [Automatic compaction dynamic configuration](../configuration/index.md#automatic-compaction-dynamic-configuration) for configuration details.
+
+Note that this endpoint returns an HTTP `200 OK` message code even if the datasource name does not exist.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/config/compaction</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully submitted auto compaction configuration*
+
+</TabItem>
+</Tabs>
+
+---
+#### Sample request
+
+The following example creates an automatic compaction configuration for the datasource `wikipedia_hour`, which was ingested with `HOUR` segment granularity. This automatic compaction configuration performs compaction on `wikipedia_hour`, resulting in compacted segments that represent a day interval of data.
+
+In this example:
+
+* `wikipedia_hour` is a datasource with `HOUR` segment granularity.
+* `skipOffsetFromLatest` is set to `PT0S`, meaning that no data is skipped.
+* `partitionsSpec` is set to the default `dynamic`, allowing Druid to dynamically determine the optimal partitioning strategy.
+* `type` is set to `index_parallel`, meaning that parallel indexing is used.
+* `segmentGranularity` is set to `DAY`, meaning that each compacted segment is a day of data.
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction"\
+--header 'Content-Type: application/json' \
+--data '{
+ "dataSource": "wikipedia_hour",
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "partitionsSpec": {
+ "type": "dynamic"
+ },
+ "type": "index_parallel"
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY"
+ }
+}'
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/config/compaction HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 281
+
+{
+ "dataSource": "wikipedia_hour",
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "partitionsSpec": {
+ "type": "dynamic"
+ },
+ "type": "index_parallel"
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY"
+ }
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+
+### Remove automatic compaction configuration
+
+Removes the automatic compaction configuration for a datasource. This updates the compaction status of the datasource to "Not enabled."
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/coordinator/v1/config/compaction/:dataSource</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+*Successfully deleted automatic compaction configuration*
+
+</TabItem>
+<TabItem value="5" label="404 NOT FOUND">
+
+
+*Datasource does not have automatic compaction or invalid datasource name*
+
+</TabItem>
+</Tabs>
+
+---
+
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="6" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction/wikipedia_hour"
+```
+
+</TabItem>
+<TabItem value="7" label="HTTP">
+
+
+```HTTP
+DELETE /druid/coordinator/v1/config/compaction/wikipedia_hour HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+### Update capacity for compaction tasks
+
+Updates the capacity for compaction tasks. The minimum number of compaction tasks is 1 and the maximum is 2147483647.
+
+Note that while the max compaction tasks can theoretically be set to 2147483647, the practical limit is determined by the available cluster capacity and is capped at 10% of the cluster's total capacity.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/config/compaction/taskslots</code>
+
+#### Query parameters
+
+To limit the maximum number of compaction tasks, use the optional query parameters `ratio` and `max`:
+
+* `ratio` (optional)
+ * Type: Float
+ * Default: 0.1
+ * Limits the ratio of the total task slots to compaction task slots.
+* `max` (optional)
+ * Type: Int
+ * Default: 2147483647
+ * Limits the maximum number of task slots for compaction tasks.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="8" label="200 SUCCESS">
+
+
+*Successfully updated compaction configuration*
+
+</TabItem>
+<TabItem value="9" label="404 NOT FOUND">
+
+
+*Invalid `max` value*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="10" label="cURL">
+
+
+```shell
+curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction/taskslots?ratio=0.2&max=250000"
+```
+
+</TabItem>
+<TabItem value="11" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/config/compaction/taskslots?ratio=0.2&max=250000 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+## View automatic compaction configuration
+
+### Get all automatic compaction configurations
+
+Retrieves all automatic compaction configurations. Returns a `compactionConfigs` object containing the active automatic compaction configurations of all datasources.
+
+You can use this endpoint to retrieve `compactionTaskSlotRatio` and `maxCompactionTaskSlots` values for managing resource allocation of compaction tasks.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/config/compaction</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="12" label="200 SUCCESS">
+
+
+*Successfully retrieved automatic compaction configurations*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="13" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction"
+```
+
+</TabItem>
+<TabItem value="14" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/config/compaction HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+{
+ "compactionConfigs": [
+ {
+ "dataSource": "wikipedia_hour",
+ "taskPriority": 25,
+ "inputSegmentSizeBytes": 100000000000000,
+ "maxRowsPerSegment": null,
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "maxRowsInMemory": null,
+ "appendableIndexSpec": null,
+ "maxBytesInMemory": null,
+ "maxTotalRows": null,
+ "splitHintSpec": null,
+ "partitionsSpec": {
+ "type": "dynamic",
+ "maxRowsPerSegment": 5000000,
+ "maxTotalRows": null
+ },
+ "indexSpec": null,
+ "indexSpecForIntermediatePersists": null,
+ "maxPendingPersists": null,
+ "pushTimeout": null,
+ "segmentWriteOutMediumFactory": null,
+ "maxNumConcurrentSubTasks": null,
+ "maxRetry": null,
+ "taskStatusCheckPeriodMs": null,
+ "chatHandlerTimeout": null,
+ "chatHandlerNumRetries": null,
+ "maxNumSegmentsToMerge": null,
+ "totalNumMergeTasks": null,
+ "maxColumnsToMerge": null,
+ "type": "index_parallel",
+ "forceGuaranteedRollup": false
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY",
+ "queryGranularity": null,
+ "rollup": null
+ },
+ "dimensionsSpec": null,
+ "metricsSpec": null,
+ "transformSpec": null,
+ "ioConfig": null,
+ "taskContext": null
+ },
+ {
+ "dataSource": "wikipedia",
+ "taskPriority": 25,
+ "inputSegmentSizeBytes": 100000000000000,
+ "maxRowsPerSegment": null,
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "maxRowsInMemory": null,
+ "appendableIndexSpec": null,
+ "maxBytesInMemory": null,
+ "maxTotalRows": null,
+ "splitHintSpec": null,
+ "partitionsSpec": {
+ "type": "dynamic",
+ "maxRowsPerSegment": 5000000,
+ "maxTotalRows": null
+ },
+ "indexSpec": null,
+ "indexSpecForIntermediatePersists": null,
+ "maxPendingPersists": null,
+ "pushTimeout": null,
+ "segmentWriteOutMediumFactory": null,
+ "maxNumConcurrentSubTasks": null,
+ "maxRetry": null,
+ "taskStatusCheckPeriodMs": null,
+ "chatHandlerTimeout": null,
+ "chatHandlerNumRetries": null,
+ "maxNumSegmentsToMerge": null,
+ "totalNumMergeTasks": null,
+ "maxColumnsToMerge": null,
+ "type": "index_parallel",
+ "forceGuaranteedRollup": false
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY",
+ "queryGranularity": null,
+ "rollup": null
+ },
+ "dimensionsSpec": null,
+ "metricsSpec": null,
+ "transformSpec": null,
+ "ioConfig": null,
+ "taskContext": null
+ }
+ ],
+ "compactionTaskSlotRatio": 0.1,
+ "maxCompactionTaskSlots": 2147483647,
+ "useAutoScaleSlots": false
+}
+```
+</details>
+
+### Get automatic compaction configuration
+
+Retrieves the automatic compaction configuration for a datasource.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/config/compaction/:dataSource</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="15" label="200 SUCCESS">
+
+
+*Successfully retrieved configuration for datasource*
+
+</TabItem>
+<TabItem value="16" label="404 NOT FOUND">
+
+
+*Invalid datasource or datasource does not have automatic compaction enabled*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example retrieves the automatic compaction configuration for datasource `wikipedia_hour`.
+
+<Tabs>
+
+<TabItem value="17" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction/wikipedia_hour"
+```
+
+</TabItem>
+<TabItem value="18" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/config/compaction/wikipedia_hour HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+{
+ "dataSource": "wikipedia_hour",
+ "taskPriority": 25,
+ "inputSegmentSizeBytes": 100000000000000,
+ "maxRowsPerSegment": null,
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "maxRowsInMemory": null,
+ "appendableIndexSpec": null,
+ "maxBytesInMemory": null,
+ "maxTotalRows": null,
+ "splitHintSpec": null,
+ "partitionsSpec": {
+ "type": "dynamic",
+ "maxRowsPerSegment": 5000000,
+ "maxTotalRows": null
+ },
+ "indexSpec": null,
+ "indexSpecForIntermediatePersists": null,
+ "maxPendingPersists": null,
+ "pushTimeout": null,
+ "segmentWriteOutMediumFactory": null,
+ "maxNumConcurrentSubTasks": null,
+ "maxRetry": null,
+ "taskStatusCheckPeriodMs": null,
+ "chatHandlerTimeout": null,
+ "chatHandlerNumRetries": null,
+ "maxNumSegmentsToMerge": null,
+ "totalNumMergeTasks": null,
+ "maxColumnsToMerge": null,
+ "type": "index_parallel",
+ "forceGuaranteedRollup": false
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY",
+ "queryGranularity": null,
+ "rollup": null
+ },
+ "dimensionsSpec": null,
+ "metricsSpec": null,
+ "transformSpec": null,
+ "ioConfig": null,
+ "taskContext": null
+}
+```
+</details>
+
+### Get automatic compaction configuration history
+
+Retrieves the history of the automatic compaction configuration for a datasource. Returns an empty list if the datasource does not exist or there is no compaction history for the datasource.
+
+The response contains a list of objects with the following keys:
+* `globalConfig`: A JSON object containing automatic compaction configuration that applies to the entire cluster.
+* `compactionConfig`: A JSON object containing the automatic compaction configuration for the datasource.
+* `auditInfo`: A JSON object containing information about the change made, such as `author`, `comment` or `ip`.
+* `auditTime`: The date and time when the change was made.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/config/compaction/:dataSource/history</code>
+
+#### Query parameters
+* `interval` (optional)
+ * Type: ISO-8601
+ * Limits the results within a specified interval. Use `/` as the delimiter for the interval string.
+* `count` (optional)
+ * Type: Int
+ * Limits the number of results.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="19" label="200 SUCCESS">
+
+
+*Successfully retrieved configuration history*
+
+</TabItem>
+<TabItem value="20" label="400 BAD REQUEST">
+
+
+*Invalid `count` value*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="21" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/compaction/wikipedia_hour/history"
+```
+
+</TabItem>
+<TabItem value="22" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/config/compaction/wikipedia_hour/history HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "globalConfig": {
+ "compactionTaskSlotRatio": 0.1,
+ "maxCompactionTaskSlots": 2147483647,
+ "useAutoScaleSlots": false
+ },
+ "compactionConfig": {
+ "dataSource": "wikipedia_hour",
+ "taskPriority": 25,
+ "inputSegmentSizeBytes": 100000000000000,
+ "maxRowsPerSegment": null,
+ "skipOffsetFromLatest": "P1D",
+ "tuningConfig": null,
+ "granularitySpec": {
+ "segmentGranularity": "DAY",
+ "queryGranularity": null,
+ "rollup": null
+ },
+ "dimensionsSpec": null,
+ "metricsSpec": null,
+ "transformSpec": null,
+ "ioConfig": null,
+ "taskContext": null
+ },
+ "auditInfo": {
+ "author": "",
+ "comment": "",
+ "ip": "127.0.0.1"
+ },
+ "auditTime": "2023-07-31T18:15:19.302Z"
+ },
+ {
+ "globalConfig": {
+ "compactionTaskSlotRatio": 0.1,
+ "maxCompactionTaskSlots": 2147483647,
+ "useAutoScaleSlots": false
+ },
+ "compactionConfig": {
+ "dataSource": "wikipedia_hour",
+ "taskPriority": 25,
+ "inputSegmentSizeBytes": 100000000000000,
+ "maxRowsPerSegment": null,
+ "skipOffsetFromLatest": "PT0S",
+ "tuningConfig": {
+ "maxRowsInMemory": null,
+ "appendableIndexSpec": null,
+ "maxBytesInMemory": null,
+ "maxTotalRows": null,
+ "splitHintSpec": null,
+ "partitionsSpec": {
+ "type": "dynamic",
+ "maxRowsPerSegment": 5000000,
+ "maxTotalRows": null
+ },
+ "indexSpec": null,
+ "indexSpecForIntermediatePersists": null,
+ "maxPendingPersists": null,
+ "pushTimeout": null,
+ "segmentWriteOutMediumFactory": null,
+ "maxNumConcurrentSubTasks": null,
+ "maxRetry": null,
+ "taskStatusCheckPeriodMs": null,
+ "chatHandlerTimeout": null,
+ "chatHandlerNumRetries": null,
+ "maxNumSegmentsToMerge": null,
+ "totalNumMergeTasks": null,
+ "maxColumnsToMerge": null,
+ "type": "index_parallel",
+ "forceGuaranteedRollup": false
+ },
+ "granularitySpec": {
+ "segmentGranularity": "DAY",
+ "queryGranularity": null,
+ "rollup": null
+ },
+ "dimensionsSpec": null,
+ "metricsSpec": null,
+ "transformSpec": null,
+ "ioConfig": null,
+ "taskContext": null
+ },
+ "auditInfo": {
+ "author": "",
+ "comment": "",
+ "ip": "127.0.0.1"
+ },
+ "auditTime": "2023-07-31T18:16:16.362Z"
+ }
+]
+```
+</details>
+
+## View automatic compaction status
+
+### Get segments awaiting compaction
+
+Returns the total size of segments awaiting compaction for a given datasource. Returns a 404 response if a datasource does not have automatic compaction enabled.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/compaction/progress?dataSource=:dataSource</code>
+
+#### Query parameter
+* `dataSource` (required)
+ * Type: String
+ * Name of the datasource for this status information.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="23" label="200 SUCCESS">
+
+
+*Successfully retrieved segment size awaiting compaction*
+
+</TabItem>
+<TabItem value="24" label="404 NOT FOUND">
+
+
+*Unknown datasource name or datasource does not have automatic compaction enabled*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example retrieves the remaining segments to be compacted for datasource `wikipedia_hour`.
+
+<Tabs>
+
+<TabItem value="25" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/compaction/progress?dataSource=wikipedia_hour"
+```
+
+</TabItem>
+<TabItem value="26" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/compaction/progress?dataSource=wikipedia_hour HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+{
+ "remainingSegmentSize": 7615837
+}
+```
+</details>
+
+
+### Get compaction status and statistics
+
+Retrieves an array of `latestStatus` objects representing the status and statistics from the latest automatic compaction run for all datasources with automatic compaction enabled.
+
+The `latestStatus` object has the following properties:
+* `dataSource`: Name of the datasource for this status information.
+* `scheduleStatus`: Automatic compaction scheduling status. Possible values are `NOT_ENABLED` and `RUNNING`. Returns `RUNNING ` if the datasource has an active automatic compaction configuration submitted. Otherwise, returns `NOT_ENABLED`.
+* `bytesAwaitingCompaction`: Total bytes of this datasource waiting to be compacted by the automatic compaction (only consider intervals/segments that are eligible for automatic compaction).
+* `bytesCompacted`: Total bytes of this datasource that are already compacted with the spec set in the automatic compaction configuration.
+* `bytesSkipped`: Total bytes of this datasource that are skipped (not eligible for automatic compaction) by the automatic compaction.
+* `segmentCountAwaitingCompaction`: Total number of segments of this datasource waiting to be compacted by the automatic compaction (only consider intervals/segments that are eligible for automatic compaction).
+* `segmentCountCompacted`: Total number of segments of this datasource that are already compacted with the spec set in the automatic compaction configuration.
+* `segmentCountSkipped`: Total number of segments of this datasource that are skipped (not eligible for automatic compaction) by the automatic compaction.
+* `intervalCountAwaitingCompaction`: Total number of intervals of this datasource waiting to be compacted by the automatic compaction (only consider intervals/segments that are eligible for automatic compaction).
+* `intervalCountCompacted`: Total number of intervals of this datasource that are already compacted with the spec set in the automatic compaction configuration.
+* `intervalCountSkipped`: Total number of intervals of this datasource that are skipped (not eligible for automatic compaction) by the automatic compaction.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/compaction/status</code>
+
+#### Query parameters
+* `dataSource` (optional)
+ * Type: String
+ * Filter the result by name of a specific datasource.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="27" label="200 SUCCESS">
+
+
+*Successfully retrieved `latestStatus` object*
+
+</TabItem>
+</Tabs>
+
+---
+#### Sample request
+
+<Tabs>
+
+<TabItem value="28" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/compaction/status"
+```
+
+</TabItem>
+<TabItem value="29" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/compaction/status HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+{
+ "latestStatus": [
+ {
+ "dataSource": "wikipedia_api",
+ "scheduleStatus": "RUNNING",
+ "bytesAwaitingCompaction": 0,
+ "bytesCompacted": 0,
+ "bytesSkipped": 64133616,
+ "segmentCountAwaitingCompaction": 0,
+ "segmentCountCompacted": 0,
+ "segmentCountSkipped": 8,
+ "intervalCountAwaitingCompaction": 0,
+ "intervalCountCompacted": 0,
+ "intervalCountSkipped": 1
+ },
+ {
+ "dataSource": "wikipedia_hour",
+ "scheduleStatus": "RUNNING",
+ "bytesAwaitingCompaction": 0,
+ "bytesCompacted": 5998634,
+ "bytesSkipped": 0,
+ "segmentCountAwaitingCompaction": 0,
+ "segmentCountCompacted": 1,
+ "segmentCountSkipped": 0,
+ "intervalCountAwaitingCompaction": 0,
+ "intervalCountCompacted": 1,
+ "intervalCountSkipped": 0
+ }
+ ]
+}
+```
+</details>
diff --git a/docs/29.0.0/api-reference/data-management-api.md b/docs/29.0.0/api-reference/data-management-api.md
new file mode 100644
index 00000000..4adeaa8b
--- /dev/null
+++ b/docs/29.0.0/api-reference/data-management-api.md
@@ -0,0 +1,593 @@
+---
+id: data-management-api
+title: Data management API
+sidebar_label: Data management
+---
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+This topic describes the data management API endpoints for Apache Druid.
+This includes information on how to mark segments as used or unused and delete them from Druid.
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port.
+Replace it with the information for your deployment.
+For example, use `http://localhost:8888` for quickstart deployments.
+
+:::info
+Avoid using indexing or kill tasks and these APIs at the same time for the same datasource and time chunk.
+:::
+
+## Segment management
+
+You can mark segments as used by sending POST requests to the datasource, but the Coordinator may subsequently mark segments as unused if they meet any configured [drop rules](../operations/rule-configuration.md#drop-rules).
+Even if these API requests update segments to used, you still need to configure a [load rule](../operations/rule-configuration.md#load-rules) to load them onto Historical processes.
+
+When you use these APIs concurrently with an indexing task or a kill task, the behavior is undefined.
+Druid terminates some segments and marks others as used.
+Furthermore, it is possible that all segments could be unused, yet an indexing task might still be able to read data from these segments and complete successfully.
+
+### Segment IDs
+
+You must provide segment IDs when using many of the endpoints described in this topic.
+For information on segment IDs, see [Segment identification](../design/segments.md#segment-identification).
+For information on finding segment IDs in the web console, see [Segments](../operations/web-console.md#segments).
+
+### Mark a single segment unused
+
+Marks the state of a segment as unused, using the segment ID.
+This is a "soft delete" of the segment from Historicals.
+To undo this action, [mark the segment used](#mark-a-single-segment-as-used).
+
+Note that this endpoint returns an HTTP `200 OK` response code even if the segment ID or datasource doesn't exist.
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/coordinator/v1/datasources/:datasource/segments/:segmentId</code>
+
+#### Header
+
+The following headers are required for this request:
+
+```json
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully updated segment*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example updates the segment `wikipedia_hour_2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z_2023-08-10T04:12:03.860Z` from datasource `wikipedia_hour` as `unused`.
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour/segments/wikipedia_hour_2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z_2023-08-10T04:12:03.860Z" \
+--header 'Content-Type: application/json' \
+--header 'Accept: application/json, text/plain'
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```HTTP
+DELETE /druid/coordinator/v1/datasources/wikipedia_hour/segments/wikipedia_hour_2015-09-12T16:00:00.000Z_2015-09-12T17:00:00.000Z_2023-08-10T04:12:03.860Z HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "segmentStateChanged": true
+}
+```
+</details>
+
+### Mark a single segment as used
+
+Marks the state of a segment as used, using the segment ID.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/datasources/segments/:segmentId</code>
+
+#### Header
+
+The following headers are required for this request:
+
+```json
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+*Successfully updated segments*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example updates the segment with ID `wikipedia_hour_2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z_2023-08-10T04:12:03.860Z` to used.
+
+<Tabs>
+
+<TabItem value="5" label="cURL">
+
+
+```shell
+curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour/segments/wikipedia_hour_2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z_2023-08-10T04:12:03.860Z" \
+--header 'Content-Type: application/json' \
+--header 'Accept: application/json, text/plain'
+```
+
+</TabItem>
+<TabItem value="6" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/datasources/wikipedia_hour/segments/wikipedia_hour_2015-09-12T18:00:00.000Z_2015-09-12T19:00:00.000Z_2023-08-10T04:12:03.860Z HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "segmentStateChanged": true
+}
+```
+</details>
+
+### Mark a group of segments unused
+
+Marks the state of a group of segments as unused, using an array of segment IDs or an interval.
+Pass the array of segment IDs or interval as a JSON object in the request body.
+
+For the interval, specify the start and end times as ISO 8601 strings to identify segments inclusive of the start time and exclusive of the end time.
+Druid only updates the segments completely contained within the specified interval; partially overlapping segments are not affected.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/datasources/:datasource/markUnused</code>
+
+#### Request body
+
+The group of segments is sent as a JSON request payload that accepts one of the following properties:
+
+|Property|Description|Example|
+|----------|-------------|---------|
+|`interval`|ISO 8601 segments interval.|`"2015-09-12T03:00:00.000Z/2015-09-12T05:00:00.000Z"`|
+|`segmentIds`|Array of segment IDs.|`["segmentId1", "segmentId2"]`|
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="7" label="200 SUCCESS">
+
+
+*Successfully updated segments*
+
+</TabItem>
+<TabItem value="8" label="204 NO CONTENT">
+
+
+*Invalid datasource name*
+
+</TabItem>
+<TabItem value="9" label="400 BAD REQUEST">
+
+
+*Invalid request payload*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example marks two segments from the `wikipedia_hour` datasource unused based on their segment IDs.
+
+<Tabs>
+
+<TabItem value="10" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour/markUnused" \
+--header 'Content-Type: application/json' \
+--data '{
+ "segmentIds": [
+ "wikipedia_hour_2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z_2023-08-10T04:12:03.860Z",
+ "wikipedia_hour_2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z_2023-08-10T04:12:03.860Z"
+ ]
+}'
+```
+
+</TabItem>
+<TabItem value="11" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/datasources/wikipedia_hour/markUnused HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 230
+
+{
+ "segmentIds": [
+ "wikipedia_hour_2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z_2023-08-10T04:12:03.860Z",
+ "wikipedia_hour_2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z_2023-08-10T04:12:03.860Z"
+ ]
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "numChangedSegments": 2
+}
+```
+</details>
+
+### Mark a group of segments used
+
+Marks the state of a group of segments as used, using an array of segment IDs or an interval.
+Pass the array of segment IDs or interval as a JSON object in the request body.
+
+For the interval, specify the start and end times as ISO 8601 strings to identify segments inclusive of the start time and exclusive of the end time.
+Druid only updates the segments completely contained within the specified interval; partially overlapping segments are not affected.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/datasources/:datasource/markUsed</code>
+
+#### Request body
+
+The group of segments is sent as a JSON request payload that accepts one of the following properties:
+
+|Property|Description|Example|
+|----------|-------------|---------|
+|`interval`| ISO 8601 segments interval.|`"2015-09-12T03:00:00.000Z/2015-09-12T05:00:00.000Z"`|
+|`segmentIds`|Array of segment IDs.|`["segmentId1", "segmentId2"]`|
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="12" label="200 SUCCESS">
+
+
+*Successfully updated segments*
+
+</TabItem>
+<TabItem value="13" label="204 NO CONTENT">
+
+
+*Invalid datasource name*
+
+</TabItem>
+<TabItem value="14" label="400 BAD REQUEST">
+
+
+*Invalid request payload*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example marks two segments from the `wikipedia_hour` datasource used based on their segment IDs.
+
+<Tabs>
+
+<TabItem value="15" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour/markUsed" \
+--header 'Content-Type: application/json' \
+--data '{
+ "segmentIds": [
+ "wikipedia_hour_2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z_2023-08-10T04:12:03.860Z",
+ "wikipedia_hour_2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z_2023-08-10T04:12:03.860Z"
+ ]
+}'
+```
+
+</TabItem>
+<TabItem value="16" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/datasources/wikipedia_hour/markUsed HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 230
+
+{
+ "segmentIds": [
+ "wikipedia_hour_2015-09-12T14:00:00.000Z_2015-09-12T15:00:00.000Z_2023-08-10T04:12:03.860Z",
+ "wikipedia_hour_2015-09-12T04:00:00.000Z_2015-09-12T05:00:00.000Z_2023-08-10T04:12:03.860Z"
+ ]
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "numChangedSegments": 2
+}
+```
+</details>
+
+### Mark all segments unused
+
+Marks the state of all segments of a datasource as unused.
+This action performs a "soft delete" of the segments from Historicals.
+
+Note that this endpoint returns an HTTP `200 OK` response code even if the datasource doesn't exist.
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/coordinator/v1/datasources/:datasource</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="17" label="200 SUCCESS">
+
+
+*Successfully updated segments*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="18" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour"
+```
+
+</TabItem>
+<TabItem value="19" label="HTTP">
+
+
+```HTTP
+DELETE /druid/coordinator/v1/datasources/wikipedia_hour HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "numChangedSegments": 24
+}
+```
+</details>
+
+### Mark all segments used
+
+Marks the state of all unused segments of a datasource as used.
+The endpoint returns the number of changed segments.
+
+Note that this endpoint returns an HTTP `200 OK` response code even if the datasource doesn't exist.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/datasources/:datasource</code>
+
+#### Header
+
+The following headers are required for this request:
+
+```json
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+#### Responses
+
+<Tabs>
+
+<TabItem value="20" label="200 SUCCESS">
+
+
+*Successfully updated segments*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example updates all unused segments of `wikipedia_hour` to used.
+`wikipedia_hour` contains one unused segment eligible to be marked as used.
+
+<Tabs>
+
+<TabItem value="21" label="cURL">
+
+
+```shell
+curl --request POST "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour" \
+--header 'Content-Type: application/json' \
+--header 'Accept: application/json, text/plain'
+```
+
+</TabItem>
+<TabItem value="22" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/datasources/wikipedia_hour HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Accept: application/json, text/plain
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Show sample response</summary>
+
+```json
+{
+ "numChangedSegments": 1
+}
+```
+</details>
+
+## Segment deletion
+
+### Permanently delete segments
+
+The DELETE endpoint sends a [kill task](../ingestion/tasks.md) for a given interval and datasource. The interval value is an ISO 8601 string delimited by `_`. This request permanently deletes all metadata for unused segments and removes them from deep storage.
+
+Note that this endpoint returns an HTTP `200 OK` response code even if the datasource doesn't exist.
+
+This endpoint supersedes the deprecated endpoint: `DELETE /druid/coordinator/v1/datasources/:datasource?kill=true&interval=:interval`
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/coordinator/v1/datasources/:datasource/intervals/:interval</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="23" label="200 SUCCESS">
+
+
+*Successfully sent kill task*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example sends a kill task to permanently delete segments in the datasource `wikipedia_hour` from the interval `2015-09-12` to `2015-09-13`.
+
+<Tabs>
+
+<TabItem value="24" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/datasources/wikipedia_hour/intervals/2015-09-12_2015-09-13"
+```
+
+</TabItem>
+<TabItem value="25" label="HTTP">
+
+
+```HTTP
+DELETE /druid/coordinator/v1/datasources/wikipedia_hour/intervals/2015-09-12_2015-09-13 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` and an empty response body.
diff --git a/docs/29.0.0/api-reference/dynamic-configuration-api.md b/docs/29.0.0/api-reference/dynamic-configuration-api.md
new file mode 100644
index 00000000..00d49cd5
--- /dev/null
+++ b/docs/29.0.0/api-reference/dynamic-configuration-api.md
@@ -0,0 +1,665 @@
+---
+id: dynamic-configuration-api
+title: Dynamic configuration API
+sidebar_label: Dynamic configuration
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+<!--
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This document describes the API endpoints to retrieve and manage dynamic configurations for the [Coordinator](../design/coordinator.md) and [Overlord](../design/overlord.md) in Apache Druid.
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port.
+Replace it with the information for your deployment.
+For example, use `http://localhost:8888` for quickstart deployments.
+
+## Coordinator dynamic configuration
+
+The Coordinator has dynamic configurations to tune certain behavior on the fly, without requiring a service restart.
+For information on the supported properties, see [Coordinator dynamic configuration](../configuration/index.md#dynamic-configuration).
+
+### Get dynamic configuration
+
+Retrieves the current Coordinator dynamic configuration. Returns a JSON object with the dynamic configuration properties.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/config</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully retrieved dynamic configuration*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config"
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/config HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+<summary>Click to show sample response</summary>
+
+```json
+{
+ "millisToWaitBeforeDeleting": 900000,
+ "mergeBytesLimit": 524288000,
+ "mergeSegmentsLimit": 100,
+ "maxSegmentsToMove": 100,
+ "replicantLifetime": 15,
+ "replicationThrottleLimit": 500,
+ "balancerComputeThreads": 1,
+ "killDataSourceWhitelist": [],
+ "killPendingSegmentsSkipList": [],
+ "maxSegmentsInNodeLoadingQueue": 500,
+ "decommissioningNodes": [],
+ "decommissioningMaxPercentOfMaxSegmentsToMove": 70,
+ "pauseCoordination": false,
+ "replicateAfterLoadTimeout": false,
+ "maxNonPrimaryReplicantsToLoad": 2147483647,
+ "useRoundRobinSegmentAssignment": true,
+ "smartSegmentLoading": true,
+ "debugDimensions": null
+}
+```
+
+</details>
+
+### Update dynamic configuration
+
+Submits a JSON-based dynamic configuration spec to the Coordinator.
+For information on the supported properties, see [Dynamic configuration](../configuration/index.md#dynamic-configuration).
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/config</code>
+
+#### Header parameters
+
+The endpoint supports a set of optional header parameters to populate the `author` and `comment` fields in the configuration history.
+
+* `X-Druid-Author`
+ * Type: String
+ * Author of the configuration change.
+* `X-Druid-Comment`
+ * Type: String
+ * Description for the update.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+*Successfully updated dynamic configuration*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="5" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config" \
+--header 'Content-Type: application/json' \
+--data '{
+ "millisToWaitBeforeDeleting": 900000,
+ "mergeBytesLimit": 524288000,
+ "mergeSegmentsLimit": 100,
+ "maxSegmentsToMove": 5,
+ "percentOfSegmentsToConsiderPerMove": 100,
+ "useBatchedSegmentSampler": true,
+ "replicantLifetime": 15,
+ "replicationThrottleLimit": 10,
+ "balancerComputeThreads": 1,
+ "emitBalancingStats": true,
+ "killDataSourceWhitelist": [],
+ "killPendingSegmentsSkipList": [],
+ "maxSegmentsInNodeLoadingQueue": 100,
+ "decommissioningNodes": [],
+ "decommissioningMaxPercentOfMaxSegmentsToMove": 70,
+ "pauseCoordination": false,
+ "replicateAfterLoadTimeout": false,
+ "maxNonPrimaryReplicantsToLoad": 2147483647,
+ "useRoundRobinSegmentAssignment": true
+}'
+```
+
+</TabItem>
+<TabItem value="6" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/config HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 683
+
+{
+ "millisToWaitBeforeDeleting": 900000,
+ "mergeBytesLimit": 524288000,
+ "mergeSegmentsLimit": 100,
+ "maxSegmentsToMove": 5,
+ "percentOfSegmentsToConsiderPerMove": 100,
+ "useBatchedSegmentSampler": true,
+ "replicantLifetime": 15,
+ "replicationThrottleLimit": 10,
+ "balancerComputeThreads": 1,
+ "emitBalancingStats": true,
+ "killDataSourceWhitelist": [],
+ "killPendingSegmentsSkipList": [],
+ "maxSegmentsInNodeLoadingQueue": 100,
+ "decommissioningNodes": [],
+ "decommissioningMaxPercentOfMaxSegmentsToMove": 70,
+ "pauseCoordination": false,
+ "replicateAfterLoadTimeout": false,
+ "maxNonPrimaryReplicantsToLoad": 2147483647,
+ "useRoundRobinSegmentAssignment": true
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+### Get dynamic configuration history
+
+Retrieves the history of changes to Coordinator dynamic configuration over an interval of time. Returns an empty array if there are no history records available.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/config/history</code>
+
+#### Query parameters
+
+The endpoint supports a set of optional query parameters to filter results.
+
+* `interval`
+ * Type: String
+ * Limit the results to the specified time interval in ISO 8601 format delimited with `/`. For example, `2023-07-13/2023-07-19`. The default interval is one week. You can change this period by setting `druid.audit.manager.auditHistoryMillis` in the `runtime.properties` file for the Coordinator.
+
+* `count`
+ * Type: Integer
+ * Limit the number of results to the last `n` entries.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="7" label="200 SUCCESS">
+
+
+*Successfully retrieved history*
+
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example retrieves the dynamic configuration history between `2022-07-13` and `2024-07-19`. The response is limited to 10 entries.
+
+<Tabs>
+
+<TabItem value="8" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/config/history?interval=2022-07-13%2F2024-07-19&count=10"
+```
+
+</TabItem>
+<TabItem value="9" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/config/history?interval=2022-07-13/2024-07-19&count=10 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "key": "coordinator.config",
+ "type": "coordinator.config",
+ "auditInfo": {
+ "author": "",
+ "comment": "",
+ "ip": "127.0.0.1"
+ },
+ "payload": "{\"millisToWaitBeforeDeleting\":900000,\"mergeBytesLimit\":524288000,\"mergeSegmentsLimit\":100,\"maxSegmentsToMove\":5,\"replicantLifetime\":15,\"replicationThrottleLimit\":10,\"balancerComputeThreads\":1,\"killDataSourceWhitelist\":[],\"killPendingSegmentsSkipList\":[],\"maxSegmentsInNodeLoadingQueue\":100,\"decommissioningNodes\":[],\"decommissioningMaxPercentOfMaxSegmentsToMove\":70,\"pauseCoordination\":false,\"replicateAfterLoadTimeout\":false,\"maxNonPrimaryRep [...]
+ "auditTime": "2023-10-03T20:59:51.622Z"
+ }
+]
+```
+</details>
+
+## Overlord dynamic configuration
+
+The Overlord has dynamic configurations to tune how Druid assigns tasks to workers.
+For information on the supported properties, see [Overlord dynamic configuration](../configuration/index.md#overlord-dynamic-configuration).
+
+### Get dynamic configuration
+
+Retrieves the current Overlord dynamic configuration.
+Returns a JSON object with the dynamic configuration properties.
+Returns an empty response body if there is no current Overlord dynamic configuration.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/worker</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="10" label="200 SUCCESS">
+
+
+*Successfully retrieved dynamic configuration*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="11" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/worker"
+```
+
+</TabItem>
+<TabItem value="12" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/worker HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+{
+ "type": "default",
+ "selectStrategy": {
+ "type": "fillCapacityWithCategorySpec",
+ "workerCategorySpec": {
+ "categoryMap": {},
+ "strong": true
+ }
+ },
+ "autoScaler": null
+}
+```
+
+</details>
+
+### Update dynamic configuration
+
+Submits a JSON-based dynamic configuration spec to the Overlord.
+For information on the supported properties, see [Overlord dynamic configuration](../configuration/index.md#overlord-dynamic-configuration).
+
+#### URL
+
+<code class="postAPI">POST</code><code>/druid/indexer/v1/worker</code>
+
+#### Header parameters
+
+The endpoint supports a set of optional header parameters to populate the `author` and `comment` fields in the configuration history.
+
+* `X-Druid-Author`
+ * Type: String
+ * Author of the configuration change.
+* `X-Druid-Comment`
+ * Type: String
+ * Description for the update.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="13" label="200 SUCCESS">
+
+
+*Successfully updated dynamic configuration*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="14" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/worker" \
+--header 'Content-Type: application/json' \
+--data '{
+ "type": "default",
+ "selectStrategy": {
+ "type": "fillCapacityWithCategorySpec",
+ "workerCategorySpec": {
+ "categoryMap": {},
+ "strong": true
+ }
+ },
+ "autoScaler": null
+}'
+```
+
+</TabItem>
+<TabItem value="15" label="HTTP">
+
+
+```HTTP
+POST /druid/indexer/v1/worker HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 196
+
+{
+ "type": "default",
+ "selectStrategy": {
+ "type": "fillCapacityWithCategorySpec",
+ "workerCategorySpec": {
+ "categoryMap": {},
+ "strong": true
+ }
+ },
+ "autoScaler": null
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+### Get dynamic configuration history
+
+Retrieves the history of changes to Overlord dynamic configuration over an interval of time. Returns an empty array if there are no history records available.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/worker/history</code>
+
+
+#### Query parameters
+
+The endpoint supports a set of optional query parameters to filter results.
+
+* `interval`
+ * Type: String
+ * Limit the results to the specified time interval in ISO 8601 format delimited with `/`. For example, `2023-07-13/2023-07-19`. The default interval is one week. You can change this period by setting `druid.audit.manager.auditHistoryMillis` in the `runtime.properties` file for the Overlord.
+
+* `count`
+ * Type: Integer
+ * Limit the number of results to the last `n` entries.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="16" label="200 SUCCESS">
+
+
+*Successfully retrieved history*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example retrieves the dynamic configuration history between `2022-07-13` and `2024-07-19`. The response is limited to 10 entries.
+
+<Tabs>
+
+<TabItem value="17" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/worker/history?interval=2022-07-13%2F2024-07-19&count=10"
+```
+
+</TabItem>
+<TabItem value="18" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/worker/history?interval=2022-07-13%2F2024-07-19&count=10 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "key": "worker.config",
+ "type": "worker.config",
+ "auditInfo": {
+ "author": "",
+ "comment": "",
+ "ip": "127.0.0.1"
+ },
+ "payload": "{\"type\":\"default\",\"selectStrategy\":{\"type\":\"fillCapacityWithCategorySpec\",\"workerCategorySpec\":{\"categoryMap\":{},\"strong\":true}},\"autoScaler\":null}",
+ "auditTime": "2023-10-03T21:49:49.991Z"
+ }
+]
+```
+
+</details>
+
+### Get an array of worker nodes in the cluster
+
+Returns an array of all the worker nodes in the cluster along with its corresponding metadata.
+
+<code class="getAPI">GET</code><code>/druid/indexer/v1/workers</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="19" label="200 SUCCESS">
+
+
+*Successfully retrieved worker nodes*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="20" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/workers"
+```
+
+</TabItem>
+<TabItem value="21" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/workers HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "worker": {
+ "scheme": "http",
+ "host": "localhost:8091",
+ "ip": "198.51.100.0",
+ "capacity": 2,
+ "version": "0",
+ "category": "_default_worker_category"
+ },
+ "currCapacityUsed": 0,
+ "currParallelIndexCapacityUsed": 0,
+ "availabilityGroups": [],
+ "runningTasks": [],
+ "lastCompletedTaskTime": "2023-09-29T19:13:05.505Z",
+ "blacklistedUntil": null
+ }
+]
+```
+
+</details>
+
+### Get scaling events
+
+Returns Overlord scaling events if autoscaling runners are in use.
+Returns an empty response body if there are no Overlord scaling events.
+
+#### URL
+
+<code class="getAPI">GET</code><code>/druid/indexer/v1/scaling</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="22" label="200 SUCCESS">
+
+
+*Successfully retrieved scaling events*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="23" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/scaling"
+```
+
+</TabItem>
+<TabItem value="24" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/scaling HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns a `200 OK` response and an array of scaling events.
diff --git a/docs/29.0.0/api-reference/json-querying-api.md b/docs/29.0.0/api-reference/json-querying-api.md
new file mode 100644
index 00000000..633a04d1
--- /dev/null
+++ b/docs/29.0.0/api-reference/json-querying-api.md
@@ -0,0 +1,923 @@
+---
+id: json-querying-api
+title: JSON querying API
+sidebar_label: JSON querying
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+<!--
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This topic describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid.
+
+In this topic, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`.
+
+
+## Submit a query
+
+Submits a JSON-based native query. The body of the request is the native query itself.
+
+Druid supports different types of queries for different use cases. All queries require the following properties:
+* `queryType`: A string representing the type of query. Druid supports the following native query types: `timeseries`, `topN`, `groupBy`, `timeBoundaries`, `segmentMetadata`, `datasourceMetadata`, `scan`, and `search`.
+* `dataSource`: A string or object defining the source of data to query. The most common value is the name of the datasource to query. For more information, see [Datasources](../querying/datasource.md).
+
+For additional properties based on your query type or use case, see [available native queries](../querying/querying.md#available-queries).
+
+### URL
+
+<code class="postAPI">POST</code> <code>/druid/v2/</code>
+
+### Query parameters
+
+* `pretty` (optional)
+ * Druid returns the response in a pretty-printed format using indentation and line breaks.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully submitted query*
+
+</TabItem>
+<TabItem value="2" label="400 BAD REQUEST">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "A well-defined error code.",
+ "errorMessage": "A message with additional details about the error.",
+ "errorClass": "Class of exception that caused this error.",
+ "host": "The host on which the error occurred."
+}
+```
+For more information on possible error messages, see [query execution failures](../querying/querying.md#query-execution-failures).
+
+</TabItem>
+</Tabs>
+
+---
+
+### Example query: `topN`
+
+The following example shows a `topN` query. The query analyzes the `social_media` datasource to return the top five users from the `username` dimension with the highest number of views from the `views` metric.
+
+<Tabs>
+
+<TabItem value="3" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2?pretty=null" \
+--header 'Content-Type: application/json' \
+--data '{
+ "queryType": "topN",
+ "dataSource": "social_media",
+ "dimension": "username",
+ "threshold": 5,
+ "metric": "views",
+ "granularity": "all",
+ "aggregations": [
+ {
+ "type": "longSum",
+ "name": "views",
+ "fieldName": "views"
+ }
+ ],
+ "intervals": [
+ "2022-01-01T00:00:00.000/2024-01-01T00:00:00.000"
+ ]
+}'
+```
+</TabItem>
+<TabItem value="4" label="HTTP">
+
+
+```HTTP
+POST /druid/v2?pretty=null HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 336
+
+{
+ "queryType": "topN",
+ "dataSource": "social_media",
+ "dimension": "username",
+ "threshold": 5,
+ "metric": "views",
+ "granularity": "all",
+ "aggregations": [
+ {
+ "type": "longSum",
+ "name": "views",
+ "fieldName": "views"
+ }
+ ],
+ "intervals": [
+ "2022-01-01T00:00:00.000/2024-01-01T00:00:00.000"
+ ]
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Example response: `topN`
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+[
+ {
+ "timestamp": "2023-07-03T18:49:54.848Z",
+ "result": [
+ {
+ "views": 11591218026,
+ "username": "gus"
+ },
+ {
+ "views": 11578638578,
+ "username": "miette"
+ },
+ {
+ "views": 11561618880,
+ "username": "leon"
+ },
+ {
+ "views": 11552609824,
+ "username": "mia"
+ },
+ {
+ "views": 11551537517,
+ "username": "milton"
+ }
+ ]
+ }
+]
+ ```
+</details>
+
+### Example query: `groupBy`
+
+The following example submits a JSON query of the `groupBy` type to retrieve the `username` with the highest votes to posts ratio from the `social_media` datasource.
+
+In this query:
+* The `upvoteSum` aggregation calculates the sum of the `upvotes` for each user.
+* The `postCount` aggregation calculates the sum of posts for each user.
+* The `upvoteToPostRatio` is a post-aggregation of the `upvoteSum` and the `postCount`, divided to calculate the ratio.
+* The result is sorted based on the `upvoteToPostRatio` in descending order.
+
+<Tabs>
+
+<TabItem value="5" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2" \
+--header 'Content-Type: application/json' \
+--data '{
+ "queryType": "groupBy",
+ "dataSource": "social_media",
+ "dimensions": ["username"],
+ "granularity": "all",
+ "aggregations": [
+ { "type": "doubleSum", "name": "upvoteSum", "fieldName": "upvotes" },
+ { "type": "count", "name": "postCount", "fieldName": "post_title" }
+ ],
+ "postAggregations": [
+ {
+ "type": "arithmetic",
+ "name": "upvoteToPostRatio",
+ "fn": "/",
+ "fields": [
+ { "type": "fieldAccess", "name": "upvoteSum", "fieldName": "upvoteSum" },
+ { "type": "fieldAccess", "name": "postCount", "fieldName": "postCount" }
+ ]
+ }
+ ],
+ "intervals": ["2022-01-01T00:00:00.000/2024-01-01T00:00:00.000"],
+ "limitSpec": {
+ "type": "default",
+ "limit": 1,
+ "columns": [
+ { "dimension": "upvoteToPostRatio", "direction": "descending" }
+ ]
+ }
+}'
+```
+
+</TabItem>
+
+<TabItem value="6" label="HTTP">
+
+```HTTP
+POST /druid/v2?pretty=null HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 817
+
+{
+ "queryType": "groupBy",
+ "dataSource": "social_media",
+ "dimensions": ["username"],
+ "granularity": "all",
+ "aggregations": [
+ { "type": "doubleSum", "name": "upvoteSum", "fieldName": "upvotes" },
+ { "type": "count", "name": "postCount", "fieldName": "post_title" }
+ ],
+ "postAggregations": [
+ {
+ "type": "arithmetic",
+ "name": "upvoteToPostRatio",
+ "fn": "/",
+ "fields": [
+ { "type": "fieldAccess", "name": "upvoteSum", "fieldName": "upvoteSum" },
+ { "type": "fieldAccess", "name": "postCount", "fieldName": "postCount" }
+ ]
+ }
+ ],
+ "intervals": ["2022-01-01T00:00:00.000/2024-01-01T00:00:00.000"],
+ "limitSpec": {
+ "type": "default",
+ "limit": 1,
+ "columns": [
+ { "dimension": "upvoteToPostRatio", "direction": "descending" }
+ ]
+ }
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Example response: `groupBy`
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "version": "v1",
+ "timestamp": "2022-01-01T00:00:00.000Z",
+ "event": {
+ "upvoteSum": 8.0419541E7,
+ "upvoteToPostRatio": 69.53014661762697,
+ "postCount": 1156614,
+ "username": "miette"
+ }
+ }
+]
+```
+</details>
+
+## Get segment information for query
+
+Retrieves an array that contains objects with segment information, including the server locations associated with the query provided in the request body.
+
+### URL
+
+<code class="postAPI">POST</code> <code>/druid/v2/candidates/</code>
+
+### Query parameters
+* `pretty` (optional)
+ * Druid returns the response in a pretty-printed format using indentation and line breaks.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="7" label="200 SUCCESS">
+
+
+*Successfully retrieved segment information*
+
+</TabItem>
+<TabItem value="8" label="400 BAD REQUEST">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "A well-defined error code.",
+ "errorMessage": "A message with additional details about the error.",
+ "errorClass": "Class of exception that caused this error.",
+ "host": "The host on which the error occurred."
+}
+```
+For more information on possible error messages, see [query execution failures](../querying/querying.md#query-execution-failures).
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+<Tabs>
+
+<TabItem value="9" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2/candidates" \
+--header 'Content-Type: application/json' \
+--data '{
+ "queryType": "topN",
+ "dataSource": "social_media",
+ "dimension": "username",
+ "threshold": 5,
+ "metric": "views",
+ "granularity": "all",
+ "aggregations": [
+ {
+ "type": "longSum",
+ "name": "views",
+ "fieldName": "views"
+ }
+ ],
+ "intervals": [
+ "2022-01-01T00:00:00.000/2024-01-01T00:00:00.000"
+ ]
+}'
+```
+
+</TabItem>
+<TabItem value="10" label="HTTP">
+
+
+```HTTP
+POST /druid/v2/candidates HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 336
+
+{
+ "queryType": "topN",
+ "dataSource": "social_media",
+ "dimension": "username",
+ "threshold": 5,
+ "metric": "views",
+ "granularity": "all",
+
+ "aggregations": [
+ {
+ "type": "longSum",
+ "name": "views",
+ "fieldName": "views"
+ }
+ ],
+ "intervals": [
+ "2020-01-01T00:00:00.000/2024-01-01T00:00:00.000"
+ ]
+}
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+[
+ {
+ "interval": "2023-07-03T18:00:00.000Z/2023-07-03T19:00:00.000Z",
+ "version": "2023-07-03T18:51:18.905Z",
+ "partitionNumber": 0,
+ "size": 21563693,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-03T19:00:00.000Z/2023-07-03T20:00:00.000Z",
+ "version": "2023-07-03T19:00:00.657Z",
+ "partitionNumber": 0,
+ "size": 6057236,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-05T21:00:00.000Z/2023-07-05T22:00:00.000Z",
+ "version": "2023-07-05T21:09:58.102Z",
+ "partitionNumber": 0,
+ "size": 223926186,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-05T21:00:00.000Z/2023-07-05T22:00:00.000Z",
+ "version": "2023-07-05T21:09:58.102Z",
+ "partitionNumber": 1,
+ "size": 20244827,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-05T22:00:00.000Z/2023-07-05T23:00:00.000Z",
+ "version": "2023-07-05T22:00:00.524Z",
+ "partitionNumber": 0,
+ "size": 104628051,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-05T22:00:00.000Z/2023-07-05T23:00:00.000Z",
+ "version": "2023-07-05T22:00:00.524Z",
+ "partitionNumber": 1,
+ "size": 1603995,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-05T23:00:00.000Z/2023-07-06T00:00:00.000Z",
+ "version": "2023-07-05T23:21:55.242Z",
+ "partitionNumber": 0,
+ "size": 181506843,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T00:00:00.000Z/2023-07-06T01:00:00.000Z",
+ "version": "2023-07-06T00:02:08.498Z",
+ "partitionNumber": 0,
+ "size": 9170974,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T00:00:00.000Z/2023-07-06T01:00:00.000Z",
+ "version": "2023-07-06T00:02:08.498Z",
+ "partitionNumber": 1,
+ "size": 23969632,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T01:00:00.000Z/2023-07-06T02:00:00.000Z",
+ "version": "2023-07-06T01:13:53.982Z",
+ "partitionNumber": 0,
+ "size": 599895,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T01:00:00.000Z/2023-07-06T02:00:00.000Z",
+ "version": "2023-07-06T01:13:53.982Z",
+ "partitionNumber": 1,
+ "size": 1627041,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T02:00:00.000Z/2023-07-06T03:00:00.000Z",
+ "version": "2023-07-06T02:55:50.701Z",
+ "partitionNumber": 0,
+ "size": 629753,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T02:00:00.000Z/2023-07-06T03:00:00.000Z",
+ "version": "2023-07-06T02:55:50.701Z",
+ "partitionNumber": 1,
+ "size": 1342360,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T04:00:00.000Z/2023-07-06T05:00:00.000Z",
+ "version": "2023-07-06T04:02:36.562Z",
+ "partitionNumber": 0,
+ "size": 2131434,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T05:00:00.000Z/2023-07-06T06:00:00.000Z",
+ "version": "2023-07-06T05:23:27.856Z",
+ "partitionNumber": 0,
+ "size": 797161,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T05:00:00.000Z/2023-07-06T06:00:00.000Z",
+ "version": "2023-07-06T05:23:27.856Z",
+ "partitionNumber": 1,
+ "size": 1176858,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T06:00:00.000Z/2023-07-06T07:00:00.000Z",
+ "version": "2023-07-06T06:46:34.638Z",
+ "partitionNumber": 0,
+ "size": 2148760,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T07:00:00.000Z/2023-07-06T08:00:00.000Z",
+ "version": "2023-07-06T07:38:28.050Z",
+ "partitionNumber": 0,
+ "size": 2040748,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T08:00:00.000Z/2023-07-06T09:00:00.000Z",
+ "version": "2023-07-06T08:27:31.407Z",
+ "partitionNumber": 0,
+ "size": 678723,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T08:00:00.000Z/2023-07-06T09:00:00.000Z",
+ "version": "2023-07-06T08:27:31.407Z",
+ "partitionNumber": 1,
+ "size": 1437866,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T10:00:00.000Z/2023-07-06T11:00:00.000Z",
+ "version": "2023-07-06T10:02:42.079Z",
+ "partitionNumber": 0,
+ "size": 1671296,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T11:00:00.000Z/2023-07-06T12:00:00.000Z",
+ "version": "2023-07-06T11:27:23.902Z",
+ "partitionNumber": 0,
+ "size": 574893,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T11:00:00.000Z/2023-07-06T12:00:00.000Z",
+ "version": "2023-07-06T11:27:23.902Z",
+ "partitionNumber": 1,
+ "size": 1427384,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T12:00:00.000Z/2023-07-06T13:00:00.000Z",
+ "version": "2023-07-06T12:52:00.846Z",
+ "partitionNumber": 0,
+ "size": 2115172,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T14:00:00.000Z/2023-07-06T15:00:00.000Z",
+ "version": "2023-07-06T14:32:33.926Z",
+ "partitionNumber": 0,
+ "size": 589108,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T14:00:00.000Z/2023-07-06T15:00:00.000Z",
+ "version": "2023-07-06T14:32:33.926Z",
+ "partitionNumber": 1,
+ "size": 1392649,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T15:00:00.000Z/2023-07-06T16:00:00.000Z",
+ "version": "2023-07-06T15:53:25.467Z",
+ "partitionNumber": 0,
+ "size": 2037851,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T16:00:00.000Z/2023-07-06T17:00:00.000Z",
+ "version": "2023-07-06T16:02:26.568Z",
+ "partitionNumber": 0,
+ "size": 230400650,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T16:00:00.000Z/2023-07-06T17:00:00.000Z",
+ "version": "2023-07-06T16:02:26.568Z",
+ "partitionNumber": 1,
+ "size": 38209056,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ },
+ {
+ "interval": "2023-07-06T17:00:00.000Z/2023-07-06T18:00:00.000Z",
+ "version": "2023-07-06T17:00:02.391Z",
+ "partitionNumber": 0,
+ "size": 211099463,
+ "locations": [
+ {
+ "name": "localhost:8083",
+ "host": "localhost:8083",
+ "hostAndTlsPort": null,
+ "maxSize": 300000000000,
+ "type": "historical",
+ "tier": "_default_tier",
+ "priority": 0
+ }
+ ]
+ }
+]
+ ```
+</details>
diff --git a/docs/29.0.0/api-reference/legacy-metadata-api.md b/docs/29.0.0/api-reference/legacy-metadata-api.md
new file mode 100644
index 00000000..453159c1
--- /dev/null
+++ b/docs/29.0.0/api-reference/legacy-metadata-api.md
@@ -0,0 +1,340 @@
+---
+id: legacy-metadata-api
+title: Legacy metadata API
+sidebar_label: Legacy metadata
+---
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This document describes the legacy API endpoints to retrieve datasource metadata from Apache Druid. Use the [SQL metadata tables](../querying/sql-metadata-tables.md) to retrieve datasource metadata instead.
+
+## Segment loading
+
+`GET /druid/coordinator/v1/loadstatus`
+
+Returns the percentage of segments actually loaded in the cluster versus segments that should be loaded in the cluster.
+
+`GET /druid/coordinator/v1/loadstatus?simple`
+
+Returns the number of segments left to load until segments that should be loaded in the cluster are available for queries. This does not include segment replication counts.
+
+`GET /druid/coordinator/v1/loadstatus?full`
+
+Returns the number of segments left to load in each tier until segments that should be loaded in the cluster are all available. This includes segment replication counts.
+
+`GET /druid/coordinator/v1/loadstatus?full&computeUsingClusterView`
+
+Returns the number of segments not yet loaded for each tier until all segments loading in the cluster are available.
+The result includes segment replication counts. It also factors in the number of available nodes that are of a service type that can load the segment when computing the number of segments remaining to load.
+A segment is considered fully loaded when:
+- Druid has replicated it the number of times configured in the corresponding load rule.
+- Or the number of replicas for the segment in each tier where it is configured to be replicated equals the available nodes of a service type that are currently allowed to load the segment in the tier.
+
+`GET /druid/coordinator/v1/loadqueue`
+
+Returns the ids of segments to load and drop for each Historical process.
+
+`GET /druid/coordinator/v1/loadqueue?simple`
+
+Returns the number of segments to load and drop, as well as the total segment load and drop size in bytes for each Historical process.
+
+`GET /druid/coordinator/v1/loadqueue?full`
+
+Returns the serialized JSON of segments to load and drop for each Historical process.
+
+## Segment loading by datasource
+
+Note that all _interval_ query parameters are ISO 8601 strings—for example, 2016-06-27/2016-06-28.
+Also note that these APIs only guarantees that the segments are available at the time of the call.
+Segments can still become missing because of historical process failures or any other reasons afterward.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?forceMetadataRefresh={boolean}&interval={myInterval}`
+
+Returns the percentage of segments actually loaded in the cluster versus segments that should be loaded in the cluster for the given
+datasource over the given interval (or last 2 weeks if interval is not given). `forceMetadataRefresh` is required to be set.
+* Setting `forceMetadataRefresh` to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: `forceMetadataRefresh=true` refreshes Coordinator's metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments' load status)
+* Setting `forceMetadataRefresh` to false will use the metadata cached on the coordinator from the last force/periodic refresh.
+If no used segments are found for the given inputs, this API returns `204 No Content`
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?simple&forceMetadataRefresh={boolean}&interval={myInterval}`
+
+Returns the number of segments left to load until segments that should be loaded in the cluster are available for the given datasource
+over the given interval (or last 2 weeks if interval is not given). This does not include segment replication counts. `forceMetadataRefresh` is required to be set.
+* Setting `forceMetadataRefresh` to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: `forceMetadataRefresh=true` refreshes Coordinator's metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments' load status)
+* Setting `forceMetadataRefresh` to false will use the metadata cached on the coordinator from the last force/periodic refresh.
+If no used segments are found for the given inputs, this API returns `204 No Content`
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?full&forceMetadataRefresh={boolean}&interval={myInterval}`
+
+Returns the number of segments left to load in each tier until segments that should be loaded in the cluster are all available for the given datasource over the given interval (or last 2 weeks if interval is not given). This includes segment replication counts. `forceMetadataRefresh` is required to be set.
+* Setting `forceMetadataRefresh` to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: `forceMetadataRefresh=true` refreshes Coordinator's metadata cache of all datasources. This can be a heavy operation in terms
+of the load on the metadata store but can be necessary to make sure that we verify all the latest segments' load status)
+* Setting `forceMetadataRefresh` to false will use the metadata cached on the coordinator from the last force/periodic refresh.
+
+You can pass the optional query parameter `computeUsingClusterView` to factor in the available cluster services when calculating
+the segments left to load. See [Coordinator Segment Loading](#segment-loading) for details.
+If no used segments are found for the given inputs, this API returns `204 No Content`
+
+## Metadata store information
+
+:::info
+ Note: Much of this information is available in a simpler, easier-to-use form through the Druid SQL
+ [`sys.segments`](../querying/sql-metadata-tables.md#segments-table) table.
+:::
+
+`GET /druid/coordinator/v1/metadata/segments`
+
+Returns a list of all segments for each datasource enabled in the cluster.
+
+`GET /druid/coordinator/v1/metadata/segments?datasources={dataSourceName1}&datasources={dataSourceName2}`
+
+Returns a list of all segments for one or more specific datasources enabled in the cluster.
+
+`GET /druid/coordinator/v1/metadata/segments?includeOvershadowedStatus`
+
+Returns a list of all segments for each datasource with the full segment metadata and an extra field `overshadowed`.
+
+`GET /druid/coordinator/v1/metadata/segments?includeOvershadowedStatus&includeRealtimeSegments`
+
+Returns a list of all published and realtime segments for each datasource with the full segment metadata and extra fields `overshadowed`,`realtime` & `numRows`. Realtime segments are returned only when `druid.centralizedDatasourceSchema.enabled` is set on the Coordinator.
+
+`GET /druid/coordinator/v1/metadata/segments?includeOvershadowedStatus&datasources={dataSourceName1}&datasources={dataSourceName2}`
+
+Returns a list of all segments for one or more specific datasources with the full segment metadata and an extra field `overshadowed`.
+
+`GET /druid/coordinator/v1/metadata/segments?includeOvershadowedStatus&includeRealtimeSegments&datasources={dataSourceName1}&datasources={dataSourceName2}`
+
+Returns a list of all published and realtime segments for the specified datasources with the full segment metadata and extra fields `overshadwed`,`realtime` & `numRows`. Realtime segments are returned only when `druid.centralizedDatasourceSchema.enabled` is set on the Coordinator.
+
+`GET /druid/coordinator/v1/metadata/datasources`
+
+Returns a list of the names of datasources with at least one used segment in the cluster, retrieved from the metadata database. Users should call this API to get the eventual state that the system will be in.
+
+`GET /druid/coordinator/v1/metadata/datasources?includeUnused`
+
+Returns a list of the names of datasources, regardless of whether there are used segments belonging to those datasources in the cluster or not.
+
+`GET /druid/coordinator/v1/metadata/datasources?includeDisabled`
+
+Returns a list of the names of datasources, regardless of whether the datasource is disabled or not.
+
+`GET /druid/coordinator/v1/metadata/datasources?full`
+
+Returns a list of all datasources with at least one used segment in the cluster. Returns all metadata about those datasources as stored in the metadata store.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}`
+
+Returns full metadata for a datasource as stored in the metadata store.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments`
+
+Returns a list of all segments for a datasource as stored in the metadata store.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full`
+
+Returns a list of all segments for a datasource with the full segment metadata as stored in the metadata store.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments/{segmentId}`
+
+Returns full segment metadata for a specific segment as stored in the metadata store, if the segment is used. If the
+segment is unused, or is unknown, a 404 response is returned.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments/{segmentId}?includeUnused=true`
+
+Returns full segment metadata for a specific segment as stored in the metadata store. If it is unknown, a 404 response
+is returned.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments`
+
+Returns a list of all segments, overlapping with any of given intervals, for a datasource as stored in the metadata store. Request body is array of string IS0 8601 intervals like `[interval1, interval2,...]`—for example, `["2012-01-01T00:00:00.000/2012-01-03T00:00:00.000", "2012-01-05T00:00:00.000/2012-01-07T00:00:00.000"]`.
+
+`GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full`
+
+Returns a list of all segments, overlapping with any of given intervals, for a datasource with the full segment metadata as stored in the metadata store. Request body is array of string ISO 8601 intervals like `[interval1, interval2,...]`—for example, `["2012-01-01T00:00:00.000/2012-01-03T00:00:00.000", "2012-01-05T00:00:00.000/2012-01-07T00:00:00.000"]`.
+
+`POST /druid/coordinator/v1/metadata/dataSourceInformation`
+
+Returns information about the specified datasources, including the datasource schema.
+
+<a name="coordinator-datasources"></a>
+
+## Datasources
+
+Note that all _interval_ URL parameters are ISO 8601 strings delimited by a `_` instead of a `/`—for example, `2016-06-27_2016-06-28`.
+
+`GET /druid/coordinator/v1/datasources`
+
+Returns a list of datasource names found in the cluster as seen by the coordinator. This view is updated every [`druid.coordinator.period`](../configuration/index.md#coordinator-operation).
+
+`GET /druid/coordinator/v1/datasources?simple`
+
+Returns a list of JSON objects containing the name and properties of datasources found in the cluster. Properties include segment count, total segment byte size, replicated total segment byte size, minTime, and maxTime.
+
+`GET /druid/coordinator/v1/datasources?full`
+
+Returns a list of datasource names found in the cluster with all metadata about those datasources.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}`
+
+Returns a JSON object containing the name and properties of a datasource. Properties include segment count, total segment byte size, replicated total segment byte size, minTime, and maxTime.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}?full`
+
+Returns full metadata for a datasource.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals`
+
+Returns a set of segment intervals.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals?simple`
+
+Returns a map of an interval to a JSON object containing the total byte size of segments and number of segments for that interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals?full`
+
+Returns a map of an interval to a map of segment metadata to a set of server names that contain the segment for that interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals/{interval}`
+
+Returns a set of segment ids for an interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals/{interval}?simple`
+
+Returns a map of segment intervals contained within the specified interval to a JSON object containing the total byte size of segments and number of segments for an interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals/{interval}?full`
+
+Returns a map of segment intervals contained within the specified interval to a map of segment metadata to a set of server names that contain the segment for an interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/intervals/{interval}/serverview`
+
+Returns a map of segment intervals contained within the specified interval to information about the servers that contain the segment for an interval.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/segments`
+
+Returns a list of all segments for a datasource in the cluster.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/segments?full`
+
+Returns a list of all segments for a datasource in the cluster with the full segment metadata.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/segments/{segmentId}`
+
+Returns full segment metadata for a specific segment in the cluster.
+
+`GET /druid/coordinator/v1/datasources/{dataSourceName}/tiers`
+
+Return the tiers that a datasource exists in.
+
+## Intervals
+
+Note that all _interval_ URL parameters are ISO 8601 strings delimited by a `_` instead of a `/` as in `2016-06-27_2016-06-28`.
+
+`GET /druid/coordinator/v1/intervals`
+
+Returns all intervals for all datasources with total size and count.
+
+`GET /druid/coordinator/v1/intervals/{interval}`
+
+Returns aggregated total size and count for all intervals that intersect given ISO interval.
+
+`GET /druid/coordinator/v1/intervals/{interval}?simple`
+
+Returns total size and count for each interval within given ISO interval.
+
+`GET /druid/coordinator/v1/intervals/{interval}?full`
+
+Returns total size and count for each datasource for each interval within given ISO interval.
+
+## Server information
+
+`GET /druid/coordinator/v1/servers`
+
+Returns a list of servers URLs using the format `{hostname}:{port}`. Note that
+processes that run with different types will appear multiple times with different
+ports.
+
+`GET /druid/coordinator/v1/servers?simple`
+
+Returns a list of server data objects in which each object has the following keys:
+* `host`: host URL include (`{hostname}:{port}`)
+* `type`: process type (`indexer-executor`, `historical`)
+* `currSize`: storage size currently used
+* `maxSize`: maximum storage size
+* `priority`
+* `tier`
+
+
+## Query server
+
+This section documents the API endpoints for the services that reside on Query servers (Brokers) in the suggested [three-server configuration](../design/architecture.md#druid-servers).
+
+### Broker
+
+#### Datasource information
+
+Note that all _interval_ URL parameters are ISO 8601 strings delimited by a `_` instead of a `/`
+as in `2016-06-27_2016-06-28`.
+
+:::info
+ Note: Much of this information is available in a simpler, easier-to-use form through the Druid SQL
+ [`INFORMATION_SCHEMA.TABLES`](../querying/sql-metadata-tables.md#tables-table),
+ [`INFORMATION_SCHEMA.COLUMNS`](../querying/sql-metadata-tables.md#columns-table), and
+ [`sys.segments`](../querying/sql-metadata-tables.md#segments-table) tables.
+:::
+
+`GET /druid/v2/datasources`
+
+Returns a list of queryable datasources.
+
+`GET /druid/v2/datasources/{dataSourceName}`
+
+Returns the dimensions and metrics of the datasource. Optionally, you can provide request parameter "full" to get list of served intervals with dimensions and metrics being served for those intervals. You can also provide request param "interval" explicitly to refer to a particular interval.
+
+If no interval is specified, a default interval spanning a configurable period before the current time will be used. The default duration of this interval is specified in ISO 8601 duration format via: `druid.query.segmentMetadata.defaultHistory`
+
+`GET /druid/v2/datasources/{dataSourceName}/dimensions`
+
+:::info
+ This API is deprecated and will be removed in future releases. Please use [SegmentMetadataQuery](../querying/segmentmetadataquery.md) instead
+ which provides more comprehensive information and supports all dataSource types including streaming dataSources. It's also encouraged to use [INFORMATION_SCHEMA tables](../querying/sql-metadata-tables.md)
+ if you're using SQL.
+:::
+
+Returns the dimensions of the datasource.
+
+`GET /druid/v2/datasources/{dataSourceName}/metrics`
+
+:::info
+ This API is deprecated and will be removed in future releases. Please use [SegmentMetadataQuery](../querying/segmentmetadataquery.md) instead
+ which provides more comprehensive information and supports all dataSource types including streaming dataSources. It's also encouraged to use [INFORMATION_SCHEMA tables](../querying/sql-metadata-tables.md)
+ if you're using SQL.
+:::
+
+Returns the metrics of the datasource.
+
+`GET /druid/v2/datasources/{dataSourceName}/candidates?intervals={comma-separated-intervals}&numCandidates={numCandidates}`
+
+Returns segment information lists including server locations for the given datasource and intervals. If "numCandidates" is not specified, it will return all servers for each interval.
diff --git a/docs/29.0.0/api-reference/lookups-api.md b/docs/29.0.0/api-reference/lookups-api.md
new file mode 100644
index 00000000..9238ade0
--- /dev/null
+++ b/docs/29.0.0/api-reference/lookups-api.md
@@ -0,0 +1,278 @@
+---
+id: lookups-api
+title: Lookups API
+sidebar_label: Lookups
+---
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This document describes the API endpoints to configure, update, retrieve, and manage lookups for Apache Druid.
+
+## Configure lookups
+
+### Bulk update
+Lookups can be updated in bulk by posting a JSON object to `/druid/coordinator/v1/lookups/config`. The format of the json object is as follows:
+
+```json
+{
+ "<tierName>": {
+ "<lookupName>": {
+ "version": "<version>",
+ "lookupExtractorFactory": {
+ "type": "<someExtractorFactoryType>",
+ "<someExtractorField>": "<someExtractorValue>"
+ }
+ }
+ }
+}
+```
+
+Note that "version" is an arbitrary string assigned by the user, when making updates to existing lookup then user would need to specify a lexicographically higher version.
+
+For example, a config might look something like:
+
+```json
+{
+ "__default": {
+ "country_code": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "77483": "United States"
+ }
+ }
+ },
+ "site_id": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "cachedNamespace",
+ "extractionNamespace": {
+ "type": "jdbc",
+ "connectorConfig": {
+ "createTables": true,
+ "connectURI": "jdbc:mysql:\/\/localhost:3306\/druid",
+ "user": "druid",
+ "password": "diurd"
+ },
+ "table": "lookupTable",
+ "keyColumn": "country_id",
+ "valueColumn": "country_name",
+ "tsColumn": "timeColumn"
+ },
+ "firstCacheTimeout": 120000,
+ "injective": true
+ }
+ },
+ "site_id_customer1": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "847632": "Internal Use Only"
+ }
+ }
+ },
+ "site_id_customer2": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "AHF77": "Home"
+ }
+ }
+ }
+ },
+ "realtime_customer1": {
+ "country_code": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "77483": "United States"
+ }
+ }
+ },
+ "site_id_customer1": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "847632": "Internal Use Only"
+ }
+ }
+ }
+ },
+ "realtime_customer2": {
+ "country_code": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "77483": "United States"
+ }
+ }
+ },
+ "site_id_customer2": {
+ "version": "v0",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "AHF77": "Home"
+ }
+ }
+ }
+ }
+}
+```
+
+All entries in the map will UPDATE existing entries. No entries will be deleted.
+
+### Update lookup
+
+A `POST` to a particular lookup extractor factory via `/druid/coordinator/v1/lookups/config/{tier}/{id}` creates or updates that specific extractor factory.
+
+For example, a post to `/druid/coordinator/v1/lookups/config/realtime_customer1/site_id_customer1` might contain the following:
+
+```json
+{
+ "version": "v1",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "847632": "Internal Use Only"
+ }
+ }
+}
+```
+
+This will replace the `site_id_customer1` lookup in the `realtime_customer1` with the definition above.
+
+Assign a unique version identifier each time you update a lookup extractor factory. Otherwise the call will fail.
+
+### Get all lookups
+
+A `GET` to `/druid/coordinator/v1/lookups/config/all` will return all known lookup specs for all tiers.
+
+### Get lookup
+
+A `GET` to a particular lookup extractor factory is accomplished via `/druid/coordinator/v1/lookups/config/{tier}/{id}`
+
+Using the prior example, a `GET` to `/druid/coordinator/v1/lookups/config/realtime_customer2/site_id_customer2` should return
+
+```json
+{
+ "version": "v1",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "AHF77": "Home"
+ }
+ }
+}
+```
+
+### Delete lookup
+
+A `DELETE` to `/druid/coordinator/v1/lookups/config/{tier}/{id}` will remove that lookup from the cluster. If it was last lookup in the tier, then tier is deleted as well.
+
+### Delete tier
+
+A `DELETE` to `/druid/coordinator/v1/lookups/config/{tier}` will remove that tier from the cluster.
+
+### List tier names
+
+A `GET` to `/druid/coordinator/v1/lookups/config` will return a list of known tier names in the dynamic configuration.
+To discover a list of tiers currently active in the cluster in addition to ones known in the dynamic configuration, the parameter `discover=true` can be added as per `/druid/coordinator/v1/lookups/config?discover=true`.
+
+### List lookup names
+
+A `GET` to `/druid/coordinator/v1/lookups/config/{tier}` will return a list of known lookup names for that tier.
+
+These end points can be used to get the propagation status of configured lookups to processes using lookups such as Historicals.
+
+## Lookup status
+
+### List load status of all lookups
+
+`GET /druid/coordinator/v1/lookups/status` with optional query parameter `detailed`.
+
+### List load status of lookups in a tier
+
+`GET /druid/coordinator/v1/lookups/status/{tier}` with optional query parameter `detailed`.
+
+### List load status of single lookup
+
+`GET /druid/coordinator/v1/lookups/status/{tier}/{lookup}` with optional query parameter `detailed`.
+
+### List lookup state of all processes
+
+`GET /druid/coordinator/v1/lookups/nodeStatus` with optional query parameter `discover` to discover tiers advertised by other Druid nodes, or by default, returning all configured lookup tiers. The default response will also include the lookups which are loaded, being loaded, or being dropped on each node, for each tier, including the complete lookup spec. Add the optional query parameter `detailed=false` to only include the 'version' of the lookup instead of the complete spec.
+
+### List lookup state of processes in a tier
+
+`GET /druid/coordinator/v1/lookups/nodeStatus/{tier}`
+
+### List lookup state of single process
+
+`GET /druid/coordinator/v1/lookups/nodeStatus/{tier}/{host:port}`
+
+## Internal API
+
+The Peon, Router, Broker, and Historical processes all have the ability to consume lookup configuration.
+There is an internal API these processes use to list/load/drop their lookups starting at `/druid/listen/v1/lookups`.
+These follow the same convention for return values as the cluster wide dynamic configuration. Following endpoints
+can be used for debugging purposes but not otherwise.
+
+### Get lookups
+
+A `GET` to the process at `/druid/listen/v1/lookups` will return a json map of all the lookups currently active on the process.
+The return value will be a json map of the lookups to their extractor factories.
+
+```json
+{
+ "site_id_customer2": {
+ "version": "v1",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "AHF77": "Home"
+ }
+ }
+ }
+}
+```
+
+### Get lookup
+
+A `GET` to the process at `/druid/listen/v1/lookups/some_lookup_name` will return the LookupExtractorFactory for the lookup identified by `some_lookup_name`.
+The return value will be the json representation of the factory.
+
+```json
+{
+ "version": "v1",
+ "lookupExtractorFactory": {
+ "type": "map",
+ "map": {
+ "AHF77": "Home"
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/docs/29.0.0/api-reference/retention-rules-api.md b/docs/29.0.0/api-reference/retention-rules-api.md
new file mode 100644
index 00000000..0f41eba3
--- /dev/null
+++ b/docs/29.0.0/api-reference/retention-rules-api.md
@@ -0,0 +1,562 @@
+---
+id: retention-rules-api
+title: Retention rules API
+sidebar_label: Retention rules
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+<!--
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This topic describes the API endpoints for managing retention rules in Apache Druid. You can configure retention rules in the Druid web console or API.
+
+Druid uses retention rules to determine what data is retained in the cluster. Druid supports load, drop, and broadcast rules. For more information, see [Using rules to drop and retain data](../operations/rule-configuration.md).
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use `http://localhost:8888` for quickstart deployments.
+
+## Update retention rules for a datasource
+
+Updates one or more retention rules for a datasource. The request body takes an array of retention rule objects. For details on defining retention rules, see the following sources:
+
+* [Load rules](../operations/rule-configuration.md#load-rules)
+* [Drop rules](../operations/rule-configuration.md#drop-rules)
+* [Broadcast rules](../operations/rule-configuration.md#broadcast-rules)
+
+This request overwrites any existing rules for the datasource.
+Druid reads rules in the order in which they appear; for more information, see [rule structure](../operations/rule-configuration.md).
+
+Note that this endpoint returns an HTTP `200 OK` even if the datasource does not exist.
+
+### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/rules/:dataSource</code>
+
+### Header parameters
+
+The endpoint supports a set of optional header parameters to populate the `author` and `comment` fields in the `auditInfo` property for audit history.
+
+* `X-Druid-Author` (optional)
+ * Type: String
+ * A string representing the author making the configuration change.
+* `X-Druid-Comment` (optional)
+ * Type: String
+ * A string describing the update.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully updated retention rules for specified datasource*
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+The following example sets a set of broadcast, load, and drop retention rules for the `kttm1` datasource.
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/rules/kttm1" \
+--header 'X-Druid-Author: doc intern' \
+--header 'X-Druid-Comment: submitted via api' \
+--header 'Content-Type: application/json' \
+--data '[
+ {
+ "type": "broadcastForever"
+ },
+ {
+ "type": "loadForever",
+ "tieredReplicants": {
+ "_default_tier": 2
+ },
+ "useDefaultTierForNull": true
+ },
+ {
+ "type": "dropByPeriod",
+ "period": "P1M"
+ }
+]'
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/rules/kttm1 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+X-Druid-Author: doc intern
+X-Druid-Comment: submitted via api
+Content-Type: application/json
+Content-Length: 273
+
+[
+ {
+ "type": "broadcastForever"
+ },
+ {
+ "type": "loadForever",
+ "tieredReplicants": {
+ "_default_tier": 1
+ },
+ "useDefaultTierForNull": true
+ },
+ {
+ "type": "dropByPeriod",
+ "period": "P1M"
+ }
+]
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+## Update default retention rules for all datasources
+
+Updates one or more default retention rules for all datasources. Submit retention rules as an array of objects in the request body. For details on defining retention rules, see the following sources:
+
+* [Load rules](../operations/rule-configuration.md#load-rules)
+* [Drop rules](../operations/rule-configuration.md#drop-rules)
+* [Broadcast rules](../operations/rule-configuration.md#broadcast-rules)
+
+This request overwrites any existing rules for all datasources. To remove default retention rules for all datasources, submit an empty rule array in the request body. Rules are read in the order in which they appear; for more information, see [rule structure](../operations/rule-configuration.md).
+
+### URL
+
+<code class="postAPI">POST</code> <code>/druid/coordinator/v1/rules/_default</code>
+
+### Header parameters
+
+The endpoint supports a set of optional header parameters to populate the `author` and `comment` fields in the `auditInfo` property for audit history.
+
+* `X-Druid-Author` (optional)
+ * Type: String
+ * A string representing the author making the configuration change.
+* `X-Druid-Comment` (optional)
+ * Type: String
+ * A string describing the update.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+*Successfully updated default retention rules*
+
+</TabItem>
+<TabItem value="5" label="500 SERVER ERROR">
+
+
+*Error with request body*
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+The following example updates the default retention rule for all datasources with a `loadByInterval` rule.
+
+<Tabs>
+
+<TabItem value="6" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/rules/_default" \
+--header 'Content-Type: application/json' \
+--data '[
+ {
+ "type": "loadByInterval",
+ "tieredReplicants": {},
+ "useDefaultTierForNull": false,
+ "interval": "2010-01-01/2020-01-01"
+ }
+]'
+```
+
+</TabItem>
+<TabItem value="7" label="HTTP">
+
+
+```HTTP
+POST /druid/coordinator/v1/rules/_default HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 205
+
+[
+ {
+ "type": "loadByInterval",
+ "tieredReplicants": {},
+ "useDefaultTierForNull": false,
+ "interval": "2010-01-01/2020-01-01"
+ }
+]
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+A successful request returns an HTTP `200 OK` message code and an empty response body.
+
+## Get an array of all retention rules
+
+Retrieves all current retention rules in the cluster including the default retention rule. Returns an array of objects for each datasource and their associated retention rules.
+
+### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/rules</code>
+
+### Responses
+
+<Tabs>
+
+<TabItem value="8" label="200 SUCCESS">
+
+
+*Successfully retrieved retention rules*
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+<Tabs>
+
+<TabItem value="9" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/rules"
+```
+
+</TabItem>
+<TabItem value="10" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/rules HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+{
+ "_default": [
+ {
+ "tieredReplicants": {
+ "_default_tier": 2
+ },
+ "type": "loadForever"
+ }
+ ],
+ "social_media": [
+ {
+ "interval": "2023-01-01T00:00:00.000Z/2023-02-01T00:00:00.000Z",
+ "type": "dropByInterval"
+ }
+ ],
+ "wikipedia_api": [],
+}
+ ```
+</details>
+
+## Get an array of retention rules for a datasource
+
+Retrieves an array of rule objects for a single datasource. Returns an empty array if there are no retention rules.
+
+Note that this endpoint returns an HTTP `200 OK` message code even if the datasource does not exist.
+
+### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/rules/:dataSource</code>
+
+### Query parameters
+
+* `full` (optional)
+ * Includes the default retention rule for the datasource in the response.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="11" label="200 SUCCESS">
+
+
+*Successfully retrieved retention rules*
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+The following example retrieves the custom retention rules and default retention rules for datasource with the name `social_media`.
+
+<Tabs>
+
+<TabItem value="12" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/rules/social_media?full=null"
+```
+
+</TabItem>
+<TabItem value="13" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/rules/social_media?full=null HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+[
+ {
+ "interval": "2020-01-01T00:00:00.000Z/2022-02-01T00:00:00.000Z",
+ "type": "dropByInterval"
+ },
+ {
+ "interval": "2010-01-01T00:00:00.000Z/2020-01-01T00:00:00.000Z",
+ "tieredReplicants": {
+ "_default_tier": 2
+ },
+ "type": "loadByInterval"
+ },
+ {
+ "tieredReplicants": {
+ "_default_tier": 2
+ },
+ "type": "loadForever"
+ }
+]
+ ```
+
+</details>
+
+## Get audit history for all datasources
+
+Retrieves the audit history of rules for all datasources over an interval of time. The default interval is 1 week. You can change this period by setting `druid.audit.manager.auditHistoryMillis` in the `runtime.properties` file for the Coordinator.
+
+### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/rules/history</code>
+
+### Query parameters
+
+Note that the following query parameters cannot be chained.
+
+* `interval` (optional)
+ * Type: ISO 8601.
+ * Limits the number of results to the specified time interval. Delimit with `/`. For example, `2023-07-13/2023-07-19`.
+* `count` (optional)
+ * Type: Int
+ * Limits the number of results to the last `n` entries.
+
+### Responses
+
+<Tabs>
+
+<TabItem value="14" label="200 SUCCESS">
+
+
+*Successfully retrieved audit history*
+
+</TabItem>
+<TabItem value="15" label="400 BAD REQUEST">
+
+
+*Request in the incorrect format*
+
+</TabItem>
+<TabItem value="16" label="404 NOT FOUND">
+
+
+*`count` query parameter too large*
+
+</TabItem>
+</Tabs>
+
+---
+
+### Sample request
+
+The following example retrieves the audit history for all datasources from `2023-07-13` to `2023-07-19`.
+
+<Tabs>
+
+<TabItem value="17" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/rules/history?interval=2023-07-13%2F2023-07-19"
+```
+
+</TabItem>
+<TabItem value="18" label="HTTP">
+
+
+```HTTP
+GET /druid/coordinator/v1/rules/history?interval=2023-07-13/2023-07-19 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+[
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"interval\":\"2023-01-01T00:00:00.000Z/2023-02-01T00:00:00.000Z\",\"type\":\"dropByInterval\"}]",
+ "auditTime": "2023-07-13T18:05:33.066Z"
+ },
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[]",
+ "auditTime": "2023-07-18T18:10:21.203Z"
+ },
+ {
+ "key": "wikipedia_api",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"tieredReplicants\":{\"_default_tier\":2},\"type\":\"loadForever\"}]",
+ "auditTime": "2023-07-18T18:10:44.519Z"
+ },
+ {
+ "key": "wikipedia_api",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[]",
+ "auditTime": "2023-07-18T18:11:02.110Z"
+ },
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"interval\":\"2023-07-03T18:49:54.848Z/2023-07-03T18:49:55.861Z\",\"type\":\"dropByInterval\"}]",
+ "auditTime": "2023-07-18T18:32:50.060Z"
+ },
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"interval\":\"2020-01-01T00:00:00.000Z/2022-02-01T00:00:00.000Z\",\"type\":\"dropByInterval\"}]",
+ "auditTime": "2023-07-18T18:34:09.657Z"
+ },
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"interval\":\"2020-01-01T00:00:00.000Z/2022-02-01T00:00:00.000Z\",\"type\":\"dropByInterval\"},{\"tieredReplicants\":{\"_default_tier\":2},\"type\":\"loadForever\"}]",
+ "auditTime": "2023-07-18T18:38:37.223Z"
+ },
+ {
+ "key": "social_media",
+ "type": "rules",
+ "auditInfo": {
+ "author": "console",
+ "comment": "test",
+ "ip": "127.0.0.1"
+ },
+ "payload": "[{\"interval\":\"2020-01-01T00:00:00.000Z/2022-02-01T00:00:00.000Z\",\"type\":\"dropByInterval\"},{\"interval\":\"2010-01-01T00:00:00.000Z/2020-01-01T00:00:00.000Z\",\"tieredReplicants\":{\"_default_tier\":2},\"type\":\"loadByInterval\"}]",
+ "auditTime": "2023-07-18T18:49:43.964Z"
+ }
+]
+ ```
+</details>
diff --git a/docs/29.0.0/api-reference/service-status-api.md b/docs/29.0.0/api-reference/service-status-api.md
new file mode 100644
index 00000000..0d2da889
--- /dev/null
+++ b/docs/29.0.0/api-reference/service-status-api.md
@@ -0,0 +1,1342 @@
+---
+id: service-status-api
+title: Service status API
+sidebar_label: Service status
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+<!--
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+
+This document describes the API endpoints to retrieve service status, cluster information for Apache Druid.
+
+In this document, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`.
+
+## Common
+
+All services support the following endpoints.
+
+You can use each endpoint with the ports for each type of service. The following table contains port addresses for a local configuration:
+
+|Service|Port address|
+| ------ | ------------ |
+| Coordinator|8081|
+| Overlord|8081|
+| Router|8888|
+| Broker|8082|
+| Historical|8083|
+| MiddleManager|8091|
+
+### Get service information
+
+Retrieves the Druid version, loaded extensions, memory used, total memory, and other useful information about the individual service.
+
+Modify the host and port for the endpoint to match the service to query. Refer to the [default service ports](#common) for the port numbers.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved service information*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status"
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```http
+GET /status HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "version": "26.0.0",
+ "modules": [
+ {
+ "name": "org.apache.druid.common.aws.AWSModule",
+ "artifact": "druid-aws-common",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.common.gcp.GcpModule",
+ "artifact": "druid-gcp-common",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.storage.hdfs.HdfsStorageDruidModule",
+ "artifact": "druid-hdfs-storage",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.indexing.kafka.KafkaIndexTaskModule",
+ "artifact": "druid-kafka-indexing-service",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.theta.SketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.theta.oldapi.OldApiSketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.quantiles.DoublesSketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.tuple.ArrayOfDoublesSketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.hll.HllSketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.query.aggregation.datasketches.kll.KllSketchModule",
+ "artifact": "druid-datasketches",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.MSQExternalDataSourceModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.MSQIndexingModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.MSQDurableStorageModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.MSQServiceClientModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.MSQSqlModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ },
+ {
+ "name": "org.apache.druid.msq.guice.SqlTaskModule",
+ "artifact": "druid-multi-stage-query",
+ "version": "26.0.0"
+ }
+ ],
+ "memory": {
+ "maxMemory": 268435456,
+ "totalMemory": 268435456,
+ "freeMemory": 139060688,
+ "usedMemory": 129374768,
+ "directMemory": 134217728
+ }
+ }
+ ```
+</details>
+
+### Get service health
+
+Retrieves the online status of the individual Druid service. It is a simple health check to determine if the service is running and accessible. If online, it will always return a boolean `true` value, indicating that the service can receive API calls. This endpoint is suitable for automated health checks.
+
+Modify the host and port for the endpoint to match the service to query. Refer to the [default service ports](#common) for the port numbers.
+
+Additional checks for readiness should use the [Historical segment readiness](#get-segment-readiness) and [Broker query readiness](#get-broker-query-readiness) endpoints.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/health</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved service health*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="5" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/health"
+```
+
+</TabItem>
+<TabItem value="6" label="HTTP">
+
+
+```http
+GET /status/health HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ true
+ ```
+
+</details>
+
+
+### Get configuration properties
+
+Retrieves the current configuration properties of the individual service queried.
+
+Modify the host and port for the endpoint to match the service to query. Refer to the [default service ports](#common) for the port numbers.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/properties</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="7" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved service configuration properties*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="8" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/properties"
+```
+
+</TabItem>
+<TabItem value="9" label="HTTP">
+
+
+```http
+GET /status/properties HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+{
+ "gopherProxySet": "false",
+ "awt.toolkit": "sun.lwawt.macosx.LWCToolkit",
+ "druid.monitoring.monitors": "[\"org.apache.druid.java.util.metrics.JvmMonitor\"]",
+ "java.specification.version": "11",
+ "sun.cpu.isalist": "",
+ "druid.plaintextPort": "8888",
+ "sun.jnu.encoding": "UTF-8",
+ "druid.indexing.doubleStorage": "double",
+ "druid.metadata.storage.connector.port": "1527",
+ "java.class.path": "/Users/genericUserPath",
+ "log4j.shutdownHookEnabled": "true",
+ "java.vm.vendor": "Homebrew",
+ "sun.arch.data.model": "64",
+ "druid.extensions.loadList": "[\"druid-hdfs-storage\", \"druid-kafka-indexing-service\", \"druid-datasketches\", \"druid-multi-stage-query\"]",
+ "java.vendor.url": "https://github.com/Homebrew/homebrew-core/issues",
+ "druid.router.coordinatorServiceName": "druid/coordinator",
+ "user.timezone": "UTC",
+ "druid.global.http.eagerInitialization": "false",
+ "os.name": "Mac OS X",
+ "java.vm.specification.version": "11",
+ "sun.java.launcher": "SUN_STANDARD",
+ "user.country": "US",
+ "sun.boot.library.path": "/opt/homebrew/Cellar/openjdk@11/11.0.19/libexec/openjdk.jdk/Contents/Home/lib",
+ "sun.java.command": "org.apache.druid.cli.Main server router",
+ "http.nonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+ "jdk.debug": "release",
+ "druid.metadata.storage.connector.host": "localhost",
+ "sun.cpu.endian": "little",
+ "druid.zk.paths.base": "/druid",
+ "user.home": "/Users/genericUser",
+ "user.language": "en",
+ "java.specification.vendor": "Oracle Corporation",
+ "java.version.date": "2023-04-18",
+ "java.home": "/opt/homebrew/Cellar/openjdk@11/11.0.19/libexec/openjdk.jdk/Contents/Home",
+ "druid.service": "druid/router",
+ "druid.selectors.coordinator.serviceName": "druid/coordinator",
+ "druid.metadata.storage.connector.connectURI": "jdbc:derby://localhost:1527/var/druid/metadata.db;create=true",
+ "file.separator": "/",
+ "druid.selectors.indexing.serviceName": "druid/overlord",
+ "java.vm.compressedOopsMode": "Zero based",
+ "druid.metadata.storage.type": "derby",
+ "line.separator": "\n",
+ "druid.log.path": "/Users/genericUserPath",
+ "java.vm.specification.vendor": "Oracle Corporation",
+ "java.specification.name": "Java Platform API Specification",
+ "druid.indexer.logs.directory": "var/druid/indexing-logs",
+ "java.awt.graphicsenv": "sun.awt.CGraphicsEnvironment",
+ "druid.router.defaultBrokerServiceName": "druid/broker",
+ "druid.storage.storageDirectory": "var/druid/segments",
+ "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers",
+ "ftp.nonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+ "java.runtime.version": "11.0.19+0",
+ "user.name": "genericUser",
+ "druid.indexer.logs.type": "file",
+ "druid.host": "localhost",
+ "log4j2.is.webapp": "false",
+ "path.separator": ":",
+ "os.version": "12.6.5",
+ "druid.lookup.enableLookupSyncOnStartup": "false",
+ "java.runtime.name": "OpenJDK Runtime Environment",
+ "druid.zk.service.host": "localhost",
+ "file.encoding": "UTF-8",
+ "druid.sql.planner.useGroupingSetForExactDistinct": "true",
+ "druid.router.managementProxy.enabled": "true",
+ "java.vm.name": "OpenJDK 64-Bit Server VM",
+ "java.vendor.version": "Homebrew",
+ "druid.startup.logging.logProperties": "true",
+ "java.vendor.url.bug": "https://github.com/Homebrew/homebrew-core/issues",
+ "log4j.shutdownCallbackRegistry": "org.apache.druid.common.config.Log4jShutdown",
+ "java.io.tmpdir": "var/tmp",
+ "druid.sql.enable": "true",
+ "druid.emitter.logging.logLevel": "info",
+ "java.version": "11.0.19",
+ "user.dir": "/Users/genericUser/Downloads/apache-druid-26.0.0",
+ "os.arch": "aarch64",
+ "java.vm.specification.name": "Java Virtual Machine Specification",
+ "druid.node.type": "router",
+ "java.awt.printerjob": "sun.lwawt.macosx.CPrinterJob",
+ "sun.os.patch.level": "unknown",
+ "java.util.logging.manager": "org.apache.logging.log4j.jul.LogManager",
+ "java.library.path": "/Users/genericUserPath",
+ "java.vendor": "Homebrew",
+ "java.vm.info": "mixed mode",
+ "java.vm.version": "11.0.19+0",
+ "druid.emitter": "noop",
+ "sun.io.unicode.encoding": "UnicodeBig",
+ "druid.storage.type": "local",
+ "druid.expressions.useStrictBooleans": "true",
+ "java.class.version": "55.0",
+ "socksNonProxyHosts": "local|*.local|169.254/16|*.169.254/16",
+ "druid.server.hiddenProperties": "[\"druid.s3.accessKey\",\"druid.s3.secretKey\",\"druid.metadata.storage.connector.password\", \"password\", \"key\", \"token\", \"pwd\"]"
+}
+```
+
+</details>
+
+
+### Get node discovery status and cluster integration confirmation
+
+Retrieves a JSON map of the form `{"selfDiscovered": true/false}`, indicating whether the node has received a confirmation from the central node discovery mechanism (currently ZooKeeper) of the Druid cluster that the node has been added to the cluster.
+
+Only consider a Druid node "healthy" or "ready" in automated deployment/container management systems when this endpoint returns `{"selfDiscovered": true}`. Nodes experiencing network issues may become isolated and are not healthy.
+For nodes that use Zookeeper segment discovery, a response of `{"selfDiscovered": true}` indicates that the node's Zookeeper client has started receiving data from the Zookeeper cluster, enabling timely discovery of segments and other nodes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/selfDiscovered/status</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="10" label="200 SUCCESS">
+
+
+<br/>
+
+*Node was successfully added to the cluster*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="11" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/selfDiscovered/status"
+```
+
+</TabItem>
+<TabItem value="12" label="HTTP">
+
+
+```http
+GET /status/selfDiscovered/status HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "selfDiscovered": true
+ }
+ ```
+
+</details>
+
+
+### Get node self-discovery status
+
+Returns an HTTP status code to indicate node discovery within the Druid cluster. This endpoint is similar to the `status/selfDiscovered/status` endpoint, but relies on HTTP status codes alone.
+Use this endpoint for monitoring checks that are unable to examine the response body. For example, AWS load balancer health checks.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/status/selfDiscovered</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="13" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved node status*
+
+</TabItem>
+<TabItem value="14" label="503 SERVICE UNAVAILABLE">
+
+
+<br/>
+
+*Unsuccessful node self-discovery*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="15" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/status/selfDiscovered"
+```
+
+</TabItem>
+<TabItem value="16" label="HTTP">
+
+
+```http
+GET /status/selfDiscovered HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful response to this endpoint results in an empty response body.
+
+## Coordinator
+
+### Get Coordinator leader address
+
+Retrieves the address of the current leader Coordinator of the cluster. If any request is sent to a non-leader Coordinator, the request is automatically redirected to the leader Coordinator.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/leader</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="17" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved leader Coordinator address*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="18" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/coordinator/v1/leader"
+```
+
+</TabItem>
+<TabItem value="19" label="HTTP">
+
+
+```http
+GET /druid/coordinator/v1/leader HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ http://localhost:8081
+ ```
+
+</details>
+
+### Get Coordinator leader status
+
+Retrieves a JSON object with a `leader` key. Returns `true` if this server is the current leader Coordinator of the cluster. To get the individual address of the leader Coordinator node, see the [leader endpoint](#get-coordinator-leader-address).
+
+Use this endpoint as a load balancer status check when you only want the active leader to be considered in-service at the load balancer.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/coordinator/v1/isLeader</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="20" label="200 SUCCESS">
+
+
+<br/>
+
+*Current server is the leader*
+
+</TabItem>
+<TabItem value="21" label="404 NOT FOUND">
+
+
+<br/>
+
+*Current server is not the leader*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="22" label="cURL">
+
+
+```shell
+curl "http://COORDINATOR_IP:COORDINATOR_PORT/druid/coordinator/v1/isLeader"
+```
+
+</TabItem>
+<TabItem value="23" label="HTTP">
+
+
+```http
+GET /druid/coordinator/v1/isLeader HTTP/1.1
+Host: http://COORDINATOR_IP:COORDINATOR_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "leader": true
+ }
+ ```
+
+</details>
+
+## Overlord
+
+### Get Overlord leader address
+
+Retrieves the address of the current leader Overlord of the cluster. In a cluster of multiple Overlords, only one Overlord assumes the leading role, while the remaining Overlords remain on standby.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/leader</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="24" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved leader Overlord address*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="25" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/leader"
+```
+
+</TabItem>
+<TabItem value="26" label="HTTP">
+
+
+```http
+GET /druid/indexer/v1/leader HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ http://localhost:8081
+ ```
+
+</details>
+
+
+### Get Overlord leader status
+
+Retrieves a JSON object with a `leader` property. The value can be `true` or `false`, indicating if this server is the current leader Overlord of the cluster. To get the individual address of the leader Overlord node, see the [leader endpoint](#get-overlord-leader-address).
+
+Use this endpoint as a load balancer status check when you only want the active leader to be considered in-service at the load balancer.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/isLeader</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="27" label="200 SUCCESS">
+
+
+<br/>
+
+*Current server is the leader*
+
+</TabItem>
+<TabItem value="28" label="404 NOT FOUND">
+
+
+<br/>
+
+*Current server is not the leader*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="29" label="cURL">
+
+
+```shell
+curl "http://OVERLORD_IP:OVERLORD_PORT/druid/indexer/v1/isLeader"
+```
+
+</TabItem>
+<TabItem value="30" label="HTTP">
+
+
+```http
+GET /druid/indexer/v1/isLeader HTTP/1.1
+Host: http://OVERLORD_IP:OVERLORD_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "leader": true
+ }
+ ```
+
+</details>
+
+
+## MiddleManager
+
+### Get MiddleManager state status
+
+Retrieves the enabled state of the MiddleManager. Returns JSON object keyed by the combined `druid.host` and `druid.port` with a boolean `true` or `false` state as the value.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/enabled</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="31" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved MiddleManager state*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="32" label="cURL">
+
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/enabled"
+```
+
+</TabItem>
+<TabItem value="33" label="HTTP">
+
+
+```http
+GET /druid/worker/v1/enabled HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "localhost:8091": true
+ }
+ ```
+
+</details>
+
+### Get active tasks
+
+Retrieves a list of active tasks being run on MiddleManager. Returns JSON list of task ID strings. Note that for normal usage, you should use the `/druid/indexer/v1/tasks` [Tasks API](./tasks-api.md) endpoint or one of the task state specific variants instead.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/tasks</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="34" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved active tasks*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="35" label="cURL">
+
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/tasks"
+```
+
+</TabItem>
+<TabItem value="36" label="HTTP">
+
+
+```http
+GET /druid/worker/v1/tasks HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ [
+ "index_parallel_wikipedia_mgchefio_2023-06-13T22:18:05.360Z"
+ ]
+ ```
+
+</details>
+
+### Get task log
+
+Retrieves task log output stream by task ID. For normal usage, you should use the `/druid/indexer/v1/task/{taskId}/log`
+[Tasks API](./tasks-api.md) endpoint instead.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/worker/v1/task/:taskId/log</code>
+
+### Shut down running task
+
+Shuts down a running task by ID. For normal usage, you should use the `/druid/indexer/v1/task/:taskId/shutdown`
+[Tasks API](./tasks-api.md) endpoint instead.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/worker/v1/task/:taskId/shutdown</code>
+
+#### Responses
+<Tabs>
+
+<TabItem value="37" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully shut down a task*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example shuts down a task with specified ID `index_kafka_wikiticker_f7011f8ffba384b_fpeclode`.
+
+<Tabs>
+
+<TabItem value="38" label="cURL">
+
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/task/index_kafka_wikiticker_f7011f8ffba384b_fpeclode/shutdown"
+```
+
+</TabItem>
+<TabItem value="39" label="HTTP">
+
+
+```http
+POST /druid/worker/v1/task/index_kafka_wikiticker_f7011f8ffba384b_fpeclode/shutdown HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "task":"index_kafka_wikiticker_f7011f8ffba384b_fpeclode"
+ }
+ ```
+
+</details>
+
+### Disable MiddleManager
+
+Disables a MiddleManager, causing it to stop accepting new tasks but complete all existing tasks. Returns a JSON object
+keyed by the combined `druid.host` and `druid.port`.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/worker/v1/disable</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="40" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully disabled MiddleManager*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="41" label="cURL">
+
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/disable"
+```
+
+</TabItem>
+<TabItem value="42" label="HTTP">
+
+
+```http
+POST /druid/worker/v1/disable HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "localhost:8091":"disabled"
+ }
+ ```
+
+</details>
+
+### Enable MiddleManager
+
+Enables a MiddleManager, allowing it to accept new tasks again if it was previously disabled. Returns a JSON object
+keyed by the combined `druid.host` and `druid.port`.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/worker/v1/enable</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="43" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully enabled MiddleManager*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="44" label="cURL">
+
+
+```shell
+curl "http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT/druid/worker/v1/enable"
+```
+
+</TabItem>
+<TabItem value="45" label="HTTP">
+
+
+```http
+POST /druid/worker/v1/enable HTTP/1.1
+Host: http://MIDDLEMANAGER_IP:MIDDLEMANAGER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "localhost:8091":"enabled"
+ }
+ ```
+
+</details>
+
+## Historical
+
+### Get segment load status
+
+Retrieves a JSON object of the form `{"cacheInitialized":value}`, where value is either `true` or `false` indicating if all segments in the local cache have been loaded.
+
+Use this endpoint to know when a Broker service is ready to accept queries after a restart.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/historical/v1/loadstatus</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="46" label="200 SUCCESS">
+
+
+<br/>
+
+*Successfully retrieved status*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="47" label="cURL">
+
+
+```shell
+curl "http://HISTORICAL_IP:HISTORICAL_PORT/druid/historical/v1/loadstatus"
+```
+
+</TabItem>
+<TabItem value="48" label="HTTP">
+
+
+```http
+GET /druid/historical/v1/loadstatus HTTP/1.1
+Host: http://HISTORICAL_IP:HISTORICAL_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "cacheInitialized": true
+ }
+ ```
+
+</details>
+
+### Get segment readiness
+
+Retrieves a status code to indicate if all segments in the local cache have been loaded. Similar to `/druid/historical/v1/loadstatus`, but instead of returning JSON with a flag, it returns status codes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/historical/v1/readiness</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="49" label="200 SUCCESS">
+
+
+<br/>
+
+*Segments in local cache successfully loaded*
+
+</TabItem>
+<TabItem value="50" label="503 SERVICE UNAVAILABLE">
+
+
+<br/>
+
+*Segments in local cache have not been loaded*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="51" label="cURL">
+
+
+```shell
+curl "http://HISTORICAL_IP:HISTORICAL_PORT/druid/historical/v1/readiness"
+```
+
+</TabItem>
+<TabItem value="52" label="HTTP">
+
+
+```http
+GET /druid/historical/v1/readiness HTTP/1.1
+Host: http://HISTORICAL_IP:HISTORICAL_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful response to this endpoint results in an empty response body.
+
+## Load Status
+
+### Get Broker query load status
+
+Retrieves a flag indicating if the Broker knows about all segments in the cluster. Use this endpoint to know when a Broker service is ready to accept queries after a restart.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/broker/v1/loadstatus</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="53" label="200 SUCCESS">
+
+
+<br/>
+
+*Segments successfully loaded*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="54" label="cURL">
+
+
+```shell
+curl "http://BROKER_IP:BROKER_PORT/druid/broker/v1/loadstatus"
+```
+
+</TabItem>
+<TabItem value="55" label="HTTP">
+
+
+```http
+GET /druid/broker/v1/loadstatus HTTP/1.1
+Host: http://<BROKER_IP>:<BROKER_PORT>
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ {
+ "inventoryInitialized": true
+ }
+ ```
+
+</details>
+
+### Get Broker query readiness
+
+Retrieves a status code to indicate Broker readiness. Readiness signifies the Broker knows about all segments in the cluster and is ready to accept queries after a restart. Similar to `/druid/broker/v1/loadstatus`, but instead of returning a JSON, it returns status codes.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/broker/v1/readiness</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="56" label="200 SUCCESS">
+
+
+<br/>
+
+*Segments successfully loaded*
+
+</TabItem>
+<TabItem value="57" label="503 SERVICE UNAVAILABLE">
+
+
+<br/>
+
+*Segments have not been loaded*
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="58" label="cURL">
+
+
+```shell
+curl "http://BROKER_IP:BROKER_PORT/druid/broker/v1/readiness"
+```
+
+</TabItem>
+<TabItem value="59" label="HTTP">
+
+
+```http
+GET /druid/broker/v1/readiness HTTP/1.1
+Host: http://BROKER_IP:BROKER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful response to this endpoint results in an empty response body.
+
+
diff --git a/docs/29.0.0/api-reference/sql-api.md b/docs/29.0.0/api-reference/sql-api.md
new file mode 100644
index 00000000..e6e39ded
--- /dev/null
+++ b/docs/29.0.0/api-reference/sql-api.md
@@ -0,0 +1,1223 @@
+---
+id: sql-api
+title: Druid SQL API
+sidebar_label: Druid SQL
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+<!--
+
+
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+:::info
+ Apache Druid supports two query languages: Druid SQL and [native queries](../querying/querying.md).
+ This document describes the SQL language.
+:::
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use `http://localhost:8888` for quickstart deployments.
+
+## Query from Historicals
+
+### Submit a query
+
+Submits a SQL-based query in the JSON request body. Returns a JSON object with the query results and optional metadata for the results. You can also use this endpoint to query [metadata tables](../querying/sql-metadata-tables.md).
+
+Each query has an associated SQL query ID. You can set this ID manually using the SQL context parameter `sqlQueryId`. If not set, Druid automatically generates `sqlQueryId` and returns it in the response header for `X-Druid-SQL-Query-Id`. Note that you need the `sqlQueryId` to [cancel a query](#cancel-a-query).
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/v2/sql</code>
+
+#### Request body
+
+The request body takes the following properties:
+
+* `query`: SQL query string.
+
+* `resultFormat`: String that indicates the format to return query results. Select one of the following formats:
+ * `object`: Returns a JSON array of JSON objects with the HTTP response header `Content-Type: application/json`.
+ * `array`: Returns a JSON array of JSON arrays with the HTTP response header `Content-Type: application/json`.
+ * `objectLines`: Returns newline-delimited JSON objects with a trailing blank line. Returns the HTTP response header `Content-Type: text/plain`.
+ * `arrayLines`: Returns newline-delimited JSON arrays with a trailing blank line. Returns the HTTP response header `Content-Type: text/plain`.
+ * `csv`: Returns a comma-separated values with one row per line and a trailing blank line. Returns the HTTP response header `Content-Type: text/csv`.
+
+* `header`: Boolean value that determines whether to return information on column names. When set to `true`, Druid returns the column names as the first row of the results. To also get information on the column types, set `typesHeader` or `sqlTypesHeader` to `true`. For a comparative overview of data formats and configurations for the header, see the [Query output format](#query-output-format) table.
+
+* `typesHeader`: Adds Druid runtime type information in the header. Requires `header` to be set to `true`. Complex types, like sketches, will be reported as `COMPLEX<typeName>` if a particular complex type name is known for that field, or as `COMPLEX` if the particular type name is unknown or mixed.
+
+* `sqlTypesHeader`: Adds SQL type information in the header. Requires `header` to be set to `true`.
+
+ For compatibility, Druid returns the HTTP header `X-Druid-SQL-Header-Included: yes` when all of the following conditions are met:
+ * The `header` property is set to true.
+ * The version of Druid supports `typesHeader` and `sqlTypesHeader`, regardless of whether either property is set.
+
+* `context`: JSON object containing optional [SQL query context parameters](../querying/sql-query-context.md), such as to set the query ID, time zone, and whether to use an approximation algorithm for distinct count.
+
+* `parameters`: List of query parameters for parameterized queries. Each parameter in the array should be a JSON object containing the parameter's SQL data type and parameter value. For a list of supported SQL types, see [Data types](../querying/sql-data-types.md).
+
+ For example:
+ ```json
+ "parameters": [
+ {
+ "type": "VARCHAR",
+ "value": "bar"
+ }
+ ]
+ ```
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully submitted query*
+
+</TabItem>
+<TabItem value="2" label="400 BAD REQUEST">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "A well-defined error code.",
+ "errorMessage": "A message with additional details about the error.",
+ "errorClass": "Class of exception that caused this error.",
+ "host": "The host on which the error occurred."
+}
+```
+</TabItem>
+<TabItem value="3" label="500 INTERNAL SERVER ERROR">
+
+
+*Request not sent due to unexpected conditions. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "A well-defined error code.",
+ "errorMessage": "A message with additional details about the error.",
+ "errorClass": "Class of exception that caused this error.",
+ "host": "The host on which the error occurred."
+}
+```
+
+</TabItem>
+</Tabs>
+
+
+---
+
+
+#### Sample request
+
+The following example retrieves all rows in the `wikipedia` datasource where the `user` is `BlueMoon2662`. The query is assigned the ID `request01` using the `sqlQueryId` context parameter. The optional properties `header`, `typesHeader`, and `sqlTypesHeader` are set to `true` to include type information to the response.
+
+<Tabs>
+
+<TabItem value="4" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql" \
+--header 'Content-Type: application/json' \
+--data '{
+ "query": "SELECT * FROM wikipedia WHERE user='\''BlueMoon2662'\''",
+ "context" : {"sqlQueryId" : "request01"},
+ "header" : true,
+ "typesHeader" : true,
+ "sqlTypesHeader" : true
+}'
+```
+
+</TabItem>
+<TabItem value="5" label="HTTP">
+
+
+```HTTP
+POST /druid/v2/sql HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 192
+
+{
+ "query": "SELECT * FROM wikipedia WHERE user='BlueMoon2662'",
+ "context" : {"sqlQueryId" : "request01"},
+ "header" : true,
+ "typesHeader" : true,
+ "sqlTypesHeader" : true
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+```json
+[
+ {
+ "__time": {
+ "type": "LONG",
+ "sqlType": "TIMESTAMP"
+ },
+ "channel": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "cityName": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "comment": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "countryIsoCode": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "countryName": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "isAnonymous": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "isMinor": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "isNew": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "isRobot": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "isUnpatrolled": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "metroCode": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "namespace": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "page": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "regionIsoCode": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "regionName": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "user": {
+ "type": "STRING",
+ "sqlType": "VARCHAR"
+ },
+ "delta": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "added": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ },
+ "deleted": {
+ "type": "LONG",
+ "sqlType": "BIGINT"
+ }
+ },
+ {
+ "__time": "2015-09-12T00:47:53.259Z",
+ "channel": "#ja.wikipedia",
+ "cityName": "",
+ "comment": "/* 対戦通算成績と得失点 */",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 1,
+ "isNew": 0,
+ "isRobot": 0,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "アルビレックス新潟の年度別成績一覧",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "BlueMoon2662",
+ "delta": 14,
+ "added": 14,
+ "deleted": 0
+ }
+]
+```
+</details>
+
+### Cancel a query
+
+Cancels a query on the Router or the Broker with the associated `sqlQueryId`. The `sqlQueryId` can be manually set when the query is submitted in the query context parameter, or if not set, Druid will generate one and return it in the response header when the query is successfully submitted. Note that Druid does not enforce a unique `sqlQueryId` in the query context. If you've set the same `sqlQueryId` for multiple queries, Druid cancels all requests with that query ID.
+
+When you cancel a query, Druid handles the cancellation in a best-effort manner. Druid immediately marks the query as canceled and aborts the query execution as soon as possible. However, the query may continue running for a short time after you make the cancellation request.
+
+Cancellation requests require READ permission on all resources used in the SQL query.
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/v2/sql/:sqlQueryId</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="6" label="202 SUCCESS">
+
+
+*Successfully deleted query*
+
+</TabItem>
+<TabItem value="7" label="403 FORBIDDEN">
+
+
+*Authorization failure*
+
+</TabItem>
+<TabItem value="8" label="404 NOT FOUND">
+
+
+*Invalid `sqlQueryId` or query was completed before cancellation request*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example cancels a request with the set query ID `request01`.
+
+<Tabs>
+
+<TabItem value="9" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql/request01"
+```
+
+</TabItem>
+<TabItem value="10" label="HTTP">
+
+
+```HTTP
+DELETE /druid/v2/sql/request01 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful response results in an `HTTP 202` message code and an empty response body.
+
+### Query output format
+
+The following table shows examples of how Druid returns the column names and data types based on the result format and the type request.
+In all cases, `header` is true.
+The examples includes the first row of results, where the value of `user` is `BlueMoon2662`.
+
+```
+| Format | typesHeader | sqlTypesHeader | Example output |
+|--------|-------------|----------------|--------------------------------------------------------------------------------------------|
+| object | true | false | [ { "user" : { "type" : "STRING" } }, { "user" : "BlueMoon2662" } ] |
+| object | true | true | [ { "user" : { "type" : "STRING", "sqlType" : "VARCHAR" } }, { "user" : "BlueMoon2662" } ] |
+| object | false | true | [ { "user" : { "sqlType" : "VARCHAR" } }, { "user" : "BlueMoon2662" } ] |
+| object | false | false | [ { "user" : null }, { "user" : "BlueMoon2662" } ] |
+| array | true | false | [ [ "user" ], [ "STRING" ], [ "BlueMoon2662" ] ] |
+| array | true | true | [ [ "user" ], [ "STRING" ], [ "VARCHAR" ], [ "BlueMoon2662" ] ] |
+| array | false | true | [ [ "user" ], [ "VARCHAR" ], [ "BlueMoon2662" ] ] |
+| array | false | false | [ [ "user" ], [ "BlueMoon2662" ] ] |
+| csv | true | false | user STRING BlueMoon2662 |
+| csv | true | true | user STRING VARCHAR BlueMoon2662 |
+| csv | false | true | user VARCHAR BlueMoon2662 |
+| csv | false | false | user BlueMoon2662 |
+```
+
+## Query from deep storage
+
+You can use the `sql/statements` endpoint to query segments that exist only in deep storage and are not loaded onto your Historical processes as determined by your load rules.
+
+Note that at least one segment of a datasource must be available on a Historical process so that the Broker can plan your query. A quick way to check if this is true is whether or not a datasource is visible in the Druid console.
+
+
+For more information, see [Query from deep storage](../querying/query-from-deep-storage.md).
+
+### Submit a query
+
+Submit a query for data stored in deep storage. Any data ingested into Druid is placed into deep storage. The query is contained in the "query" field in the JSON object within the request payload.
+
+Note that at least part of a datasource must be available on a Historical process so that Druid can plan your query and only the user who submits a query can see the results.
+
+#### URL
+
+<code class="postAPI">POST</code> <code>/druid/v2/sql/statements</code>
+
+#### Request body
+
+Generally, the `sql` and `sql/statements` endpoints support the same response body fields with minor differences. For general information about the available fields, see [Submit a query to the `sql` endpoint](#submit-a-query).
+
+Keep the following in mind when submitting queries to the `sql/statements` endpoint:
+
+- Apart from the context parameters mentioned [here](../multi-stage-query/reference.md#context-parameters) there are additional context parameters for `sql/statements` specifically:
+
+ - `executionMode` determines how query results are fetched. Druid currently only supports `ASYNC`. You must manually retrieve your results after the query completes.
+ - `selectDestination` determines where final results get written. By default, results are written to task reports. Set this parameter to `durableStorage` to instruct Druid to write the results from SELECT queries to durable storage, which allows you to fetch larger result sets. For result sets with more than 3000 rows, it is highly recommended to use `durableStorage`. Note that this requires you to have [durable storage for MSQ](../operations/durable-storage.md) enabled.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully queried from deep storage*
+
+</TabItem>
+<TabItem value="2" label="400 BAD REQUEST">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "Summary of the encountered error.",
+ "errorClass": "Class of exception that caused this error.",
+ "host": "The host on which the error occurred.",
+ "errorCode": "Well-defined error code.",
+ "persona": "Role or persona associated with the error.",
+ "category": "Classification of the error.",
+ "errorMessage": "Summary of the encountered issue with expanded information.",
+ "context": "Additional context about the error."
+}
+```
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="3" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql/statements" \
+--header 'Content-Type: application/json' \
+--data '{
+ "query": "SELECT * FROM wikipedia WHERE user='\''BlueMoon2662'\''",
+ "context": {
+ "executionMode":"ASYNC"
+ }
+}'
+```
+
+</TabItem>
+<TabItem value="4" label="HTTP">
+
+
+```HTTP
+POST /druid/v2/sql/statements HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+Content-Type: application/json
+Content-Length: 134
+
+{
+ "query": "SELECT * FROM wikipedia WHERE user='BlueMoon2662'",
+ "context": {
+ "executionMode":"ASYNC"
+ }
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+{
+ "queryId": "query-b82a7049-b94f-41f2-a230-7fef94768745",
+ "state": "ACCEPTED",
+ "createdAt": "2023-07-26T21:16:25.324Z",
+ "schema": [
+ {
+ "name": "__time",
+ "type": "TIMESTAMP",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "channel",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "cityName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "comment",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "countryIsoCode",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "countryName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "isAnonymous",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isMinor",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isNew",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isRobot",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isUnpatrolled",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "metroCode",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "namespace",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "page",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "regionIsoCode",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "regionName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "user",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "delta",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "added",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "deleted",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ }
+ ],
+ "durationMs": -1
+}
+ ```
+</details>
+
+### Get query status
+
+Retrieves information about the query associated with the given query ID. The response matches the response from the POST API if the query is accepted or running and the execution mode is `ASYNC`. In addition to the fields that this endpoint shares with `POST /sql/statements`, a completed query's status includes the following:
+
+- A `result` object that summarizes information about your results, such as the total number of rows and sample records.
+- A `pages` object that includes the following information for each page of results:
+ - `numRows`: the number of rows in that page of results.
+ - `sizeInBytes`: the size of the page.
+ - `id`: the page number that you can use to reference a specific page when you get query results.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/v2/sql/statements/:queryId</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="5" label="200 SUCCESS">
+
+
+*Successfully retrieved query status*
+
+</TabItem>
+<TabItem value="6" label="400 BAD REQUEST">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "Summary of the encountered error.",
+ "errorCode": "Well-defined error code.",
+ "persona": "Role or persona associated with the error.",
+ "category": "Classification of the error.",
+ "errorMessage": "Summary of the encountered issue with expanded information.",
+ "context": "Additional context about the error."
+}
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample request
+
+The following example retrieves the status of a query with specified ID `query-9b93f6f7-ab0e-48f5-986a-3520f84f0804`.
+
+<Tabs>
+
+<TabItem value="7" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql/statements/query-9b93f6f7-ab0e-48f5-986a-3520f84f0804"
+```
+
+</TabItem>
+<TabItem value="8" label="HTTP">
+
+
+```HTTP
+GET /druid/v2/sql/statements/query-9b93f6f7-ab0e-48f5-986a-3520f84f0804 HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+{
+ "queryId": "query-9b93f6f7-ab0e-48f5-986a-3520f84f0804",
+ "state": "SUCCESS",
+ "createdAt": "2023-07-26T22:57:46.620Z",
+ "schema": [
+ {
+ "name": "__time",
+ "type": "TIMESTAMP",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "channel",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "cityName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "comment",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "countryIsoCode",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "countryName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "isAnonymous",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isMinor",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isNew",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isRobot",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "isUnpatrolled",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "metroCode",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "namespace",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "page",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "regionIsoCode",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "regionName",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "user",
+ "type": "VARCHAR",
+ "nativeType": "STRING"
+ },
+ {
+ "name": "delta",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "added",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ },
+ {
+ "name": "deleted",
+ "type": "BIGINT",
+ "nativeType": "LONG"
+ }
+ ],
+ "durationMs": 25591,
+ "result": {
+ "numTotalRows": 1,
+ "totalSizeInBytes": 375,
+ "dataSource": "__query_select",
+ "sampleRecords": [
+ [
+ 1442018873259,
+ "#ja.wikipedia",
+ "",
+ "/* 対戦通算成績と得失点 */",
+ "",
+ "",
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ "Main",
+ "アルビレックス新潟の年度別成績一覧",
+ "",
+ "",
+ "BlueMoon2662",
+ 14,
+ 14,
+ 0
+ ]
+ ],
+ "pages": [
+ {
+ "id": 0,
+ "numRows": 1,
+ "sizeInBytes": 375
+ }
+ ]
+ }
+}
+ ```
+</details>
+
+
+### Get query results
+
+Retrieves results for completed queries. Results are separated into pages, so you can use the optional `page` parameter to refine the results you get. Druid returns information about the composition of each page and its page number (`id`). For information about pages, see [Get query status](#get-query-status).
+
+
+If a page number isn't passed, all results are returned sequentially in the same response. If you have large result sets, you may encounter timeouts based on the value configured for `druid.router.http.readTimeout`.
+
+Getting the query results for an ingestion query returns an empty response.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/v2/sql/statements/:queryId/results</code>
+
+#### Query parameters
+* `page` (optional)
+ * Type: Int
+ * Fetch results based on page numbers. If not specified, all results are returned sequentially starting from page 0 to N in the same response.
+* `resultFormat` (optional)
+ * Type: String
+ * Defines the format in which the results are presented. The following options are supported `arrayLines`,`objectLines`,`array`,`object`, and `csv`. The default is `object`.
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="9" label="200 SUCCESS">
+
+
+*Successfully retrieved query results*
+
+</TabItem>
+<TabItem value="10" label="400 BAD REQUEST">
+
+
+*Query in progress. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "Summary of the encountered error.",
+ "errorCode": "Well-defined error code.",
+ "persona": "Role or persona associated with the error.",
+ "category": "Classification of the error.",
+ "errorMessage": "Summary of the encountered issue with expanded information.",
+ "context": "Additional context about the error."
+}
+```
+
+</TabItem>
+<TabItem value="11" label="404 NOT FOUND">
+
+
+*Query not found, failed or canceled*
+
+</TabItem>
+<TabItem value="12" label="500 SERVER ERROR">
+
+
+*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "Summary of the encountered error.",
+ "errorCode": "Well-defined error code.",
+ "persona": "Role or persona associated with the error.",
+ "category": "Classification of the error.",
+ "errorMessage": "Summary of the encountered issue with expanded information.",
+ "context": "Additional context about the error."
+}
+```
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example retrieves the status of a query with specified ID `query-f3bca219-173d-44d4-bdc7-5002e910352f`.
+
+<Tabs>
+
+<TabItem value="13" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql/statements/query-f3bca219-173d-44d4-bdc7-5002e910352f/results"
+```
+
+</TabItem>
+<TabItem value="14" label="HTTP">
+
+
+```HTTP
+GET /druid/v2/sql/statements/query-f3bca219-173d-44d4-bdc7-5002e910352f/results HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+[
+ {
+ "__time": 1442018818771,
+ "channel": "#en.wikipedia",
+ "cityName": "",
+ "comment": "added project",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 0,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Talk",
+ "page": "Talk:Oswald Tilghman",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "GELongstreet",
+ "delta": 36,
+ "added": 36,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018820496,
+ "channel": "#ca.wikipedia",
+ "cityName": "",
+ "comment": "Robot inserta {{Commonscat}} que enllaça amb [[commons:category:Rallicula]]",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 1,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Rallicula",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "PereBot",
+ "delta": 17,
+ "added": 17,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018825474,
+ "channel": "#en.wikipedia",
+ "cityName": "Auburn",
+ "comment": "/* Status of peremptory norms under international law */ fixed spelling of 'Wimbledon'",
+ "countryIsoCode": "AU",
+ "countryName": "Australia",
+ "isAnonymous": 1,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 0,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Peremptory norm",
+ "regionIsoCode": "NSW",
+ "regionName": "New South Wales",
+ "user": "60.225.66.142",
+ "delta": 0,
+ "added": 0,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018828770,
+ "channel": "#vi.wikipedia",
+ "cityName": "",
+ "comment": "fix Lỗi CS1: ngày tháng",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 1,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Apamea abruzzorum",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "Cheers!-bot",
+ "delta": 18,
+ "added": 18,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018831862,
+ "channel": "#vi.wikipedia",
+ "cityName": "",
+ "comment": "clean up using [[Project:AWB|AWB]]",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Atractus flammigerus",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "ThitxongkhoiAWB",
+ "delta": 18,
+ "added": 18,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018833987,
+ "channel": "#vi.wikipedia",
+ "cityName": "",
+ "comment": "clean up using [[Project:AWB|AWB]]",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Agama mossambica",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "ThitxongkhoiAWB",
+ "delta": 18,
+ "added": 18,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018837009,
+ "channel": "#ca.wikipedia",
+ "cityName": "",
+ "comment": "/* Imperi Austrohongarès */",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 0,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Campanya dels Balcans (1914-1918)",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "Jaumellecha",
+ "delta": -20,
+ "added": 0,
+ "deleted": 20
+ },
+ {
+ "__time": 1442018839591,
+ "channel": "#en.wikipedia",
+ "cityName": "",
+ "comment": "adding comment on notability and possible COI",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 1,
+ "isRobot": 0,
+ "isUnpatrolled": 1,
+ "metroCode": 0,
+ "namespace": "Talk",
+ "page": "Talk:Dani Ploeger",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "New Media Theorist",
+ "delta": 345,
+ "added": 345,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018841578,
+ "channel": "#en.wikipedia",
+ "cityName": "",
+ "comment": "Copying assessment table to wiki",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "User",
+ "page": "User:WP 1.0 bot/Tables/Project/Pubs",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "WP 1.0 bot",
+ "delta": 121,
+ "added": 121,
+ "deleted": 0
+ },
+ {
+ "__time": 1442018845821,
+ "channel": "#vi.wikipedia",
+ "cityName": "",
+ "comment": "clean up using [[Project:AWB|AWB]]",
+ "countryIsoCode": "",
+ "countryName": "",
+ "isAnonymous": 0,
+ "isMinor": 0,
+ "isNew": 0,
+ "isRobot": 1,
+ "isUnpatrolled": 0,
+ "metroCode": 0,
+ "namespace": "Main",
+ "page": "Agama persimilis",
+ "regionIsoCode": "",
+ "regionName": "",
+ "user": "ThitxongkhoiAWB",
+ "delta": 18,
+ "added": 18,
+ "deleted": 0
+ }
+]
+ ```
+</details>
+
+### Cancel a query
+
+Cancels a running or accepted query.
+
+#### URL
+
+<code class="deleteAPI">DELETE</code> <code>/druid/v2/sql/statements/:queryId</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="15" label="200 OK">
+
+
+*A no op operation since the query is not in a state to be cancelled*
+
+</TabItem>
+<TabItem value="16" label="202 ACCEPTED">
+
+
+*Successfully accepted query for cancellation*
+
+</TabItem>
+<TabItem value="17" label="404 SERVER ERROR">
+
+
+*Invalid query ID. Returns a JSON object detailing the error with the following format:*
+
+```json
+{
+ "error": "Summary of the encountered error.",
+ "errorCode": "Well-defined error code.",
+ "persona": "Role or persona associated with the error.",
+ "category": "Classification of the error.",
+ "errorMessage": "Summary of the encountered issue with expanded information.",
+ "context": "Additional context about the error."
+}
+```
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+The following example cancels a query with specified ID `query-945c9633-2fa2-49ab-80ae-8221c38c024da`.
+
+<Tabs>
+
+<TabItem value="18" label="cURL">
+
+
+```shell
+curl --request DELETE "http://ROUTER_IP:ROUTER_PORT/druid/v2/sql/statements/query-945c9633-2fa2-49ab-80ae-8221c38c024da"
+```
+
+</TabItem>
+<TabItem value="19" label="HTTP">
+
+
+```HTTP
+DELETE /druid/v2/sql/statements/query-945c9633-2fa2-49ab-80ae-8221c38c024da HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+A successful request returns an HTTP `202 ACCEPTED` message code and an empty response body.
diff --git a/docs/29.0.0/api-reference/sql-ingestion-api.md b/docs/29.0.0/api-reference/sql-ingestion-api.md
new file mode 100644
index 00000000..5492c3ea
--- /dev/null
+++ b/docs/29.0.0/api-reference/sql-ingestion-api.md
@@ -0,0 +1,698 @@
+---
+id: sql-ingestion-api
+title: SQL-based ingestion API
+sidebar_label: SQL-based ingestion
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+:::info
+ This page describes SQL-based batch ingestion using the [`druid-multi-stage-query`](../multi-stage-query/index.md)
+ extension, new in Druid 24.0. Refer to the [ingestion methods](../ingestion/index.md#batch) table to determine which
+ ingestion method is right for you.
+:::
+
+The **Query** view in the web console provides a friendly experience for the multi-stage query task engine (MSQ task
+engine) and multi-stage query architecture. We recommend using the web console if you do not need a programmatic
+interface.
+
+When using the API for the MSQ task engine, the action you want to take determines the endpoint you use:
+
+- `/druid/v2/sql/task` endpoint: Submit a query for ingestion.
+- `/druid/indexer/v1/task` endpoint: Interact with a query, including getting its status, getting its details, or canceling it. This page describes a few of the Overlord Task APIs that you can use with the MSQ task engine. For information about Druid APIs, see the [API reference for Druid](../ingestion/tasks.md).
+
+## Submit a query
+
+You submit queries to the MSQ task engine using the `POST /druid/v2/sql/task/` endpoint.
+
+#### Request
+
+The SQL task endpoint accepts [SQL requests in the JSON-over-HTTP form](sql-api.md#request-body) using the
+`query`, `context`, and `parameters` fields, but ignoring the `resultFormat`, `header`, `typesHeader`, and
+`sqlTypesHeader` fields.
+
+This endpoint accepts [INSERT](../multi-stage-query/reference.md#insert) and [REPLACE](../multi-stage-query/reference.md#replace) statements.
+
+As an experimental feature, this endpoint also accepts SELECT queries. SELECT query results are collected from workers
+by the controller, and written into the [task report](#get-the-report-for-a-query-task) as an array of arrays. The
+behavior and result format of plain SELECT queries (without INSERT or REPLACE) is subject to change.
+
+<Tabs>
+
+<TabItem value="1" label="HTTP">
+
+
+```
+POST /druid/v2/sql/task
+```
+
+```json
+{
+ "query": "INSERT INTO wikipedia\nSELECT\n TIME_PARSE(\"timestamp\") AS __time,\n *\nFROM TABLE(\n EXTERN(\n '{\"type\": \"http\", \"uris\": [\"https://druid.apache.org/data/wikipedia.json.gz\"]}',\n '{\"type\": \"json\"}',\n '[{\"name\": \"added\", \"type\": \"long\"}, {\"name\": \"channel\", \"type\": \"string\"}, {\"name\": \"cityName\", \"type\": \"string\"}, {\"name\": \"comment\", \"type\": \"string\"}, {\"name\": \"commentLength\", \"type\": \"long\"}, {\"name\": \"co [...]
+ "context": {
+ "maxNumTasks": 3
+ }
+}
+```
+
+</TabItem>
+
+<TabItem value="2" label="curl">
+
+
+```bash
+# Make sure you replace `username`, `password`, `your-instance`, and `port` with the values for your deployment.
+curl --location --request POST 'https://<username>:<password>@<your-instance>:<port>/druid/v2/sql/task/' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "query": "INSERT INTO wikipedia\nSELECT\n TIME_PARSE(\"timestamp\") AS __time,\n *\nFROM TABLE(\n EXTERN(\n '\''{\"type\": \"http\", \"uris\": [\"https://druid.apache.org/data/wikipedia.json.gz\"]}'\'',\n '\''{\"type\": \"json\"}'\'',\n '\''[{\"name\": \"added\", \"type\": \"long\"}, {\"name\": \"channel\", \"type\": \"string\"}, {\"name\": \"cityName\", \"type\": \"string\"}, {\"name\": \"comment\", \"type\": \"string\"}, {\"name\": \"commentLength\", \"type\": \"long\"} [...]
+ "context": {
+ "maxNumTasks": 3
+ }
+ }'
+```
+
+</TabItem>
+
+<TabItem value="3" label="Python">
+
+
+```python
+import json
+import requests
+
+# Make sure you replace `your-instance`, and `port` with the values for your deployment.
+url = "https://<your-instance>:<port>/druid/v2/sql/task/"
+
+payload = json.dumps({
+ "query": "INSERT INTO wikipedia\nSELECT\n TIME_PARSE(\"timestamp\") AS __time,\n *\nFROM TABLE(\n EXTERN(\n '{\"type\": \"http\", \"uris\": [\"https://druid.apache.org/data/wikipedia.json.gz\"]}',\n '{\"type\": \"json\"}',\n '[{\"name\": \"added\", \"type\": \"long\"}, {\"name\": \"channel\", \"type\": \"string\"}, {\"name\": \"cityName\", \"type\": \"string\"}, {\"name\": \"comment\", \"type\": \"string\"}, {\"name\": \"commentLength\", \"type\": \"long\"}, {\"name\": \"co [...]
+ "context": {
+ "maxNumTasks": 3
+ }
+})
+headers = {
+ 'Content-Type': 'application/json'
+}
+
+response = requests.post(url, headers=headers, data=payload, auth=('USER', 'PASSWORD'))
+
+print(response.text)
+
+```
+
+</TabItem>
+
+</Tabs>
+
+#### Response
+
+```json
+{
+ "taskId": "query-f795a235-4dc7-4fef-abac-3ae3f9686b79",
+ "state": "RUNNING",
+}
+```
+
+**Response fields**
+
+| Field | Description |
+|---|---|
+| `taskId` | Controller task ID. You can use Druid's standard [Tasks API](./tasks-api.md) to interact with this controller task. |
+| `state` | Initial state for the query, which is "RUNNING". |
+
+## Get the status for a query task
+
+You can retrieve status of a query to see if it is still running, completed successfully, failed, or got canceled.
+
+#### Request
+
+<Tabs>
+
+<TabItem value="4" label="HTTP">
+
+
+```
+GET /druid/indexer/v1/task/<taskId>/status
+```
+
+</TabItem>
+
+<TabItem value="5" label="curl">
+
+
+```bash
+# Make sure you replace `username`, `password`, `your-instance`, `port`, and `taskId` with the values for your deployment.
+curl --location --request GET 'https://<username>:<password>@<your-instance>:<port>/druid/indexer/v1/task/<taskId>/status'
+```
+
+</TabItem>
+
+<TabItem value="6" label="Python">
+
+
+```python
+import requests
+
+# Make sure you replace `your-instance`, `port`, and `taskId` with the values for your deployment.
+url = "https://<your-instance>:<port>/druid/indexer/v1/task/<taskId>/status"
+
+payload={}
+headers = {}
+
+response = requests.get(url, headers=headers, data=payload, auth=('USER', 'PASSWORD'))
+
+print(response.text)
+```
+
+</TabItem>
+
+</Tabs>
+
+#### Response
+
+```
+{
+ "task": "query-3dc0c45d-34d7-4b15-86c9-cdb2d3ebfc4e",
+ "status": {
+ "id": "query-3dc0c45d-34d7-4b15-86c9-cdb2d3ebfc4e",
+ "groupId": "query-3dc0c45d-34d7-4b15-86c9-cdb2d3ebfc4e",
+ "type": "query_controller",
+ "createdTime": "2022-09-14T22:12:00.183Z",
+ "queueInsertionTime": "1970-01-01T00:00:00.000Z",
+ "statusCode": "RUNNING",
+ "status": "RUNNING",
+ "runnerStatusCode": "RUNNING",
+ "duration": -1,
+ "location": {
+ "host": "localhost",
+ "port": 8100,
+ "tlsPort": -1
+ },
+ "dataSource": "kttm_simple",
+ "errorMsg": null
+ }
+}
+```
+
+## Get the report for a query task
+
+A report provides detailed information about a query task, including things like the stages, warnings, and errors.
+
+Keep the following in mind when using the task API to view reports:
+
+- The task report for an entire job is associated with the `query_controller` task. The `query_worker` tasks do not have
+ their own reports; their information is incorporated into the controller report.
+- The task report API may report `404 Not Found` temporarily while the task is in the process of starting up.
+- As an experimental feature, the MSQ task engine supports running SELECT queries. SELECT query results are written into
+the `multiStageQuery.payload.results.results` task report key as an array of arrays. The behavior and result format of plain
+SELECT queries (without INSERT or REPLACE) is subject to change.
+- `multiStageQuery.payload.results.resultsTruncated` denote whether the results of the report have been truncated to prevent
+the reports from blowing up
+
+For an explanation of the fields in a report, see [Report response fields](#report-response-fields).
+
+#### Request
+
+<Tabs>
+
+<TabItem value="7" label="HTTP">
+
+
+```
+GET /druid/indexer/v1/task/<taskId>/reports
+```
+
+</TabItem>
+
+<TabItem value="8" label="curl">
+
+
+```bash
+# Make sure you replace `username`, `password`, `your-instance`, `port`, and `taskId` with the values for your deployment.
+curl --location --request GET 'https://<username>:<password>@<your-instance>:<port>/druid/indexer/v1/task/<taskId>/reports'
+```
+
+</TabItem>
+
+<TabItem value="9" label="Python">
+
+
+```python
+import requests
+
+# Make sure you replace `your-instance`, `port`, and `taskId` with the values for your deployment.
+url = "https://<your-instance>:<port>/druid/indexer/v1/task/<taskId>/reports"
+
+headers = {}
+response = requests.get(url, headers=headers, auth=('USER', 'PASSWORD'))
+print(response.text)
+```
+
+</TabItem>
+
+</Tabs>
+
+#### Response
+
+The response shows an example report for a query.
+
+<details><summary>Show the response</summary>
+
+```json
+{
+ "multiStageQuery": {
+ "type": "multiStageQuery",
+ "taskId": "query-3dc0c45d-34d7-4b15-86c9-cdb2d3ebfc4e",
+ "payload": {
+ "status": {
+ "status": "SUCCESS",
+ "startTime": "2022-09-14T22:12:09.266Z",
+ "durationMs": 28227,
+ "pendingTasks": 0,
+ "runningTasks": 2,
+ "segmentLoadStatus": {
+ "state": "SUCCESS",
+ "dataSource": "kttm_simple",
+ "startTime": "2022-09-14T23:12:09.266Z",
+ "duration": 15,
+ "totalSegments": 1,
+ "usedSegments": 1,
+ "precachedSegments": 0,
+ "onDemandSegments": 0,
+ "pendingSegments": 0,
+ "unknownSegments": 0
+ }
+ },
+ "stages": [
+ {
+ "stageNumber": 0,
+ "definition": {
+ "id": "71ecb11e-09d7-42f8-9225-1662c8e7e121_0",
+ "input": [
+ {
+ "type": "external",
+ "inputSource": {
+ "type": "http",
+ "uris": [
+ "https://static.imply.io/example-data/kttm-v2/kttm-v2-2019-08-25.json.gz"
+ ],
+ "httpAuthenticationUsername": null,
+ "httpAuthenticationPassword": null
+ },
+ "inputFormat": {
+ "type": "json",
+ "flattenSpec": null,
+ "featureSpec": {},
+ "keepNullColumns": false
+ },
+ "signature": [
+ {
+ "name": "timestamp",
+ "type": "STRING"
+ },
+ {
+ "name": "agent_category",
+ "type": "STRING"
+ },
+ {
+ "name": "agent_type",
+ "type": "STRING"
+ }
+ ]
+ }
+ ],
+ "processor": {
+ "type": "scan",
+ "query": {
+ "queryType": "scan",
+ "dataSource": {
+ "type": "inputNumber",
+ "inputNumber": 0
+ },
+ "intervals": {
+ "type": "intervals",
+ "intervals": [
+ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"
+ ]
+ },
+ "resultFormat": "compactedList",
+ "columns": [
+ "agent_category",
+ "agent_type",
+ "timestamp"
+ ],
+ "legacy": false,
+ "context": {
+ "finalize": false,
+ "finalizeAggregations": false,
+ "groupByEnableMultiValueUnnesting": false,
+ "scanSignature": "[{\"name\":\"agent_category\",\"type\":\"STRING\"},{\"name\":\"agent_type\",\"type\":\"STRING\"},{\"name\":\"timestamp\",\"type\":\"STRING\"}]",
+ "sqlInsertSegmentGranularity": "{\"type\":\"all\"}",
+ "sqlQueryId": "3dc0c45d-34d7-4b15-86c9-cdb2d3ebfc4e",
+ "sqlReplaceTimeChunks": "all"
+ },
+ "granularity": {
+ "type": "all"
+ }
+ }
+ },
+ "signature": [
+ {
+ "name": "__boost",
+ "type": "LONG"
+ },
+ {
+ "name": "agent_category",
+ "type": "STRING"
+ },
+ {
+ "name": "agent_type",
+ "type": "STRING"
+ },
+ {
+ "name": "timestamp",
+ "type": "STRING"
+ }
+ ],
+ "shuffleSpec": {
+ "type": "targetSize",
+ "clusterBy": {
+ "columns": [
+ {
+ "columnName": "__boost"
+ }
+ ]
+ },
+ "targetSize": 3000000
+ },
+ "maxWorkerCount": 1,
+ "shuffleCheckHasMultipleValues": true
+ },
+ "phase": "FINISHED",
+ "workerCount": 1,
+ "partitionCount": 1,
+ "startTime": "2022-09-14T22:12:11.663Z",
+ "duration": 19965,
+ "sort": true
+ },
+ {
+ "stageNumber": 1,
+ "definition": {
+ "id": "71ecb11e-09d7-42f8-9225-1662c8e7e121_1",
+ "input": [
+ {
+ "type": "stage",
+ "stage": 0
+ }
+ ],
+ "processor": {
+ "type": "segmentGenerator",
+ "dataSchema": {
+ "dataSource": "kttm_simple",
+ "timestampSpec": {
+ "column": "__time",
+ "format": "millis",
+ "missingValue": null
+ },
+ "dimensionsSpec": {
+ "dimensions": [
+ {
+ "type": "string",
+ "name": "timestamp",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "string",
+ "name": "agent_category",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "string",
+ "name": "agent_type",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ }
+ ],
+ "dimensionExclusions": [
+ "__time"
+ ],
+ "includeAllDimensions": false
+ },
+ "metricsSpec": [],
+ "granularitySpec": {
+ "type": "arbitrary",
+ "queryGranularity": {
+ "type": "none"
+ },
+ "rollup": false,
+ "intervals": [
+ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"
+ ]
+ },
+ "transformSpec": {
+ "filter": null,
+ "transforms": []
+ }
+ },
+ "columnMappings": [
+ {
+ "queryColumn": "timestamp",
+ "outputColumn": "timestamp"
+ },
+ {
+ "queryColumn": "agent_category",
+ "outputColumn": "agent_category"
+ },
+ {
+ "queryColumn": "agent_type",
+ "outputColumn": "agent_type"
+ }
+ ],
+ "tuningConfig": {
+ "maxNumWorkers": 1,
+ "maxRowsInMemory": 100000,
+ "rowsPerSegment": 3000000
+ }
+ },
+ "signature": [],
+ "maxWorkerCount": 1
+ },
+ "phase": "FINISHED",
+ "workerCount": 1,
+ "partitionCount": 1,
+ "startTime": "2022-09-14T22:12:31.602Z",
+ "duration": 5891
+ }
+ ],
+ "counters": {
+ "0": {
+ "0": {
+ "input0": {
+ "type": "channel",
+ "rows": [
+ 465346
+ ],
+ "files": [
+ 1
+ ],
+ "totalFiles": [
+ 1
+ ]
+ },
+ "output": {
+ "type": "channel",
+ "rows": [
+ 465346
+ ],
+ "bytes": [
+ 43694447
+ ],
+ "frames": [
+ 7
+ ]
+ },
+ "shuffle": {
+ "type": "channel",
+ "rows": [
+ 465346
+ ],
+ "bytes": [
+ 41835307
+ ],
+ "frames": [
+ 73
+ ]
+ },
+ "sortProgress": {
+ "type": "sortProgress",
+ "totalMergingLevels": 3,
+ "levelToTotalBatches": {
+ "0": 1,
+ "1": 1,
+ "2": 1
+ },
+ "levelToMergedBatches": {
+ "0": 1,
+ "1": 1,
+ "2": 1
+ },
+ "totalMergersForUltimateLevel": 1,
+ "progressDigest": 1
+ }
+ }
+ },
+ "1": {
+ "0": {
+ "input0": {
+ "type": "channel",
+ "rows": [
+ 465346
+ ],
+ "bytes": [
+ 41835307
+ ],
+ "frames": [
+ 73
+ ]
+ },
+ "segmentGenerationProgress": {
+ "type": "segmentGenerationProgress",
+ "rowsProcessed": 465346,
+ "rowsPersisted": 465346,
+ "rowsMerged": 465346
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+</details>
+
+<a name="report-response-fields"></a>
+
+The following table describes the response fields when you retrieve a report for a MSQ task engine using the `/druid/indexer/v1/task/<taskId>/reports` endpoint:
+
+| Field | Description |
+|---|---|
+| `multiStageQuery.taskId` | Controller task ID. |
+| `multiStageQuery.payload.status` | Query status container. |
+| `multiStageQuery.payload.status.status` | RUNNING, SUCCESS, or FAILED. |
+| `multiStageQuery.payload.status.startTime` | Start time of the query in ISO format. Only present if the query has started running. |
+| `multiStageQuery.payload.status.durationMs` | Milliseconds elapsed after the query has started running. -1 denotes that the query hasn't started running yet. |
+| `multiStageQuery.payload.status.workers` | Workers for the controller task.|
+| `multiStageQuery.payload.status.workers.<workerNumber>` | Array of worker tasks including retries. |
+| `multiStageQuery.payload.status.workers.<workerNumber>[].workerId` | Id of the worker task.| |
+| `multiStageQuery.payload.status.workers.<workerNumber>[].status` | RUNNING, SUCCESS, or FAILED.|
+| `multiStageQuery.payload.status.workers.<workerNumber>[].durationMs` | Milliseconds elapsed after the worker task started running. It is -1 for worker tasks with status RUNNING.|
+| `multiStageQuery.payload.status.pendingTasks` | Number of tasks that are not fully started. -1 denotes that the number is currently unknown. |
+| `multiStageQuery.payload.status.runningTasks` | Number of currently running tasks. Should be at least 1 since the controller is included. |
+| `multiStageQuery.payload.status.segmentLoadStatus` | Segment loading container. Only present after the segments have been published. |
+| `multiStageQuery.payload.status.segmentLoadStatus.state` | Either INIT, WAITING, SUCCESS, FAILED or TIMED_OUT. |
+| `multiStageQuery.payload.status.segmentLoadStatus.startTime` | Time since which the controller has been waiting for the segments to finish loading. |
+| `multiStageQuery.payload.status.segmentLoadStatus.duration` | The duration in milliseconds that the controller has been waiting for the segments to load. |
+| `multiStageQuery.payload.status.segmentLoadStatus.totalSegments` | The total number of segments generated by the job. This includes tombstone segments (if any). |
+| `multiStageQuery.payload.status.segmentLoadStatus.usedSegments` | The number of segments which are marked as used based on the load rules. Unused segments can be cleaned up at any time. |
+| `multiStageQuery.payload.status.segmentLoadStatus.precachedSegments` | The number of segments which are marked as precached and served by historicals, as per the load rules. |
+| `multiStageQuery.payload.status.segmentLoadStatus.onDemandSegments` | The number of segments which are not loaded on any historical, as per the load rules. |
+| `multiStageQuery.payload.status.segmentLoadStatus.pendingSegments` | The number of segments remaining to be loaded. |
+| `multiStageQuery.payload.status.segmentLoadStatus.unknownSegments` | The number of segments whose status is unknown. |
+| `multiStageQuery.payload.status.errorReport` | Error object. Only present if there was an error. |
+| `multiStageQuery.payload.status.errorReport.taskId` | The task that reported the error, if known. May be a controller task or a worker task. |
+| `multiStageQuery.payload.status.errorReport.host` | The hostname and port of the task that reported the error, if known. |
+| `multiStageQuery.payload.status.errorReport.stageNumber` | The stage number that reported the error, if it happened during execution of a specific stage. |
+| `multiStageQuery.payload.status.errorReport.error` | Error object. Contains `errorCode` at a minimum, and may contain other fields as described in the [error code table](../multi-stage-query/reference.md#error-codes). Always present if there is an error. |
+| `multiStageQuery.payload.status.errorReport.error.errorCode` | One of the error codes from the [error code table](../multi-stage-query/reference.md#error-codes). Always present if there is an error. |
+| `multiStageQuery.payload.status.errorReport.error.errorMessage` | User-friendly error message. Not always present, even if there is an error. |
+| `multiStageQuery.payload.status.errorReport.exceptionStackTrace` | Java stack trace in string form, if the error was due to a server-side exception. |
+| `multiStageQuery.payload.stages` | Array of query stages. |
+| `multiStageQuery.payload.stages[].stageNumber` | Each stage has a number that differentiates it from other stages. |
+| `multiStageQuery.payload.stages[].phase` | Either NEW, READING_INPUT, POST_READING, RESULTS_COMPLETE, or FAILED. Only present if the stage has started. |
+| `multiStageQuery.payload.stages[].workerCount` | Number of parallel tasks that this stage is running on. Only present if the stage has started. |
+| `multiStageQuery.payload.stages[].partitionCount` | Number of output partitions generated by this stage. Only present if the stage has started and has computed its number of output partitions. |
+| `multiStageQuery.payload.stages[].startTime` | Start time of this stage. Only present if the stage has started. |
+| `multiStageQuery.payload.stages[].duration` | The number of milliseconds that the stage has been running. Only present if the stage has started. |
+| `multiStageQuery.payload.stages[].sort` | A boolean that is set to `true` if the stage does a sort as part of its execution. |
+| `multiStageQuery.payload.stages[].definition` | The object defining what the stage does. |
+| `multiStageQuery.payload.stages[].definition.id` | The unique identifier of the stage. |
+| `multiStageQuery.payload.stages[].definition.input` | Array of inputs that the stage has. |
+| `multiStageQuery.payload.stages[].definition.broadcast` | Array of input indexes that get broadcasted. Only present if there are inputs that get broadcasted. |
+| `multiStageQuery.payload.stages[].definition.processor` | An object defining the processor logic. |
+| `multiStageQuery.payload.stages[].definition.signature` | The output signature of the stage. |
+
+## Cancel a query task
+
+#### Request
+
+<Tabs>
+
+<TabItem value="10" label="HTTP">
+
+
+```
+POST /druid/indexer/v1/task/<taskId>/shutdown
+```
+
+</TabItem>
+
+<TabItem value="11" label="curl">
+
+
+```bash
+# Make sure you replace `username`, `password`, `your-instance`, `port`, and `taskId` with the values for your deployment.
+curl --location --request POST 'https://<username>:<password>@<your-instance>:<port>/druid/indexer/v1/task/<taskId>/shutdown'
+```
+
+</TabItem>
+
+<TabItem value="12" label="Python">
+
+
+```python
+import requests
+
+# Make sure you replace `your-instance`, `port`, and `taskId` with the values for your deployment.
+url = "https://<your-instance>:<port>/druid/indexer/v1/task/<taskId>/shutdown"
+
+payload={}
+headers = {}
+
+response = requests.post(url, headers=headers, data=payload, auth=('USER', 'PASSWORD'))
+
+print(response.text)
+```
+
+</TabItem>
+
+</Tabs>
+
+#### Response
+
+```
+{
+ "task": "query-655efe33-781a-4c50-ae84-c2911b42d63c"
+}
+```
\ No newline at end of file
diff --git a/docs/29.0.0/api-reference/sql-jdbc.md b/docs/29.0.0/api-reference/sql-jdbc.md
new file mode 100644
index 00000000..0d8d85c5
--- /dev/null
+++ b/docs/29.0.0/api-reference/sql-jdbc.md
@@ -0,0 +1,231 @@
+---
+id: sql-jdbc
+title: SQL JDBC driver API
+sidebar_label: SQL JDBC driver
+---
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+:::info
+ Apache Druid supports two query languages: Druid SQL and [native queries](../querying/querying.md).
+ This document describes the SQL language.
+:::
+
+
+You can make [Druid SQL](../querying/sql.md) queries using the [Avatica JDBC driver](https://calcite.apache.org/avatica/downloads/).
+We recommend using Avatica JDBC driver version 1.23.0 or later. Note that starting with Avatica 1.21.0, you may need to set the [`transparent_reconnection`](https://calcite.apache.org/avatica/docs/client_reference.html#transparent_reconnection) property to `true` if you notice intermittent query failures.
+
+Once you've downloaded the Avatica client jar, add it to your classpath.
+
+Example connection string:
+
+```
+jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica/;transparent_reconnection=true
+```
+
+Or, to use the protobuf protocol instead of JSON:
+
+```
+jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica-protobuf/;transparent_reconnection=true;serialization=protobuf
+```
+
+The `url` is the `/druid/v2/sql/avatica/` endpoint on the Router, which routes JDBC connections to a consistent Broker.
+For more information, see [Connection stickiness](#connection-stickiness).
+
+Set `transparent_reconnection` to `true` so your connection is not interrupted if the pool of Brokers changes membership,
+or if a Broker is restarted.
+
+Set `serialization` to `protobuf` if using the protobuf endpoint.
+
+Note that as of the time of this writing, Avatica 1.23.0, the latest version, does not support passing
+[connection context parameters](../querying/sql-query-context.md) from the JDBC connection string to Druid. These context parameters
+must be passed using a `Properties` object instead. Refer to the Java code below for an example.
+
+Example Java code:
+
+```java
+// Connect to /druid/v2/sql/avatica/ on your Broker.
+String url = "jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica/;transparent_reconnection=true";
+
+// Set any connection context parameters you need here.
+// Any property from https://druid.apache.org/docs/latest/querying/sql-query-context.html can go here.
+Properties connectionProperties = new Properties();
+connectionProperties.setProperty("sqlTimeZone", "Etc/UTC");
+//To connect to a Druid deployment protected by basic authentication,
+//you can incorporate authentication details from https://druid.apache.org/docs/latest/operations/security-overview
+connectionProperties.setProperty("user", "admin");
+connectionProperties.setProperty("password", "password1");
+
+try (Connection connection = DriverManager.getConnection(url, connectionProperties)) {
+ try (
+ final Statement statement = connection.createStatement();
+ final ResultSet resultSet = statement.executeQuery(query)
+ ) {
+ while (resultSet.next()) {
+ // process result set
+ }
+ }
+}
+```
+
+For a runnable example that includes a query that you might run, see [Examples](#examples).
+
+It is also possible to use a protocol buffers JDBC connection with Druid, this offer reduced bloat and potential performance
+improvements for larger result sets. To use it apply the following connection URL instead, everything else remains the same
+```
+String url = "jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica-protobuf/;transparent_reconnection=true;serialization=protobuf";
+```
+
+:::info
+ The protobuf endpoint is also known to work with the official [Golang Avatica driver](https://github.com/apache/calcite-avatica-go)
+:::
+
+Table metadata is available over JDBC using `connection.getMetaData()` or by querying the
+[INFORMATION_SCHEMA tables](../querying/sql-metadata-tables.md). For an example of this, see [Get the metadata for a datasource](#get-the-metadata-for-a-datasource).
+
+## Connection stickiness
+
+Druid's JDBC server does not share connection state between Brokers. This means that if you're using JDBC and have
+multiple Druid Brokers, you should either connect to a specific Broker or use a load balancer with sticky sessions
+enabled. The Druid Router process provides connection stickiness when balancing JDBC requests, and can be used to achieve
+the necessary stickiness even with a normal non-sticky load balancer. Please see the
+[Router](../design/router.md) documentation for more details.
+
+Note that the non-JDBC [JSON over HTTP](sql-api.md#submit-a-query) API is stateless and does not require stickiness.
+
+## Dynamic parameters
+
+You can use [parameterized queries](../querying/sql.md#dynamic-parameters) in JDBC code, as in this example:
+
+```java
+PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) AS cnt FROM druid.foo WHERE dim1 = ? OR dim1 = ?");
+statement.setString(1, "abc");
+statement.setString(2, "def");
+final ResultSet resultSet = statement.executeQuery();
+```
+
+## Examples
+
+<!-- docs/tutorial-jdbc.md redirects here -->
+
+The following section contains two complete samples that use the JDBC connector:
+
+- [Get the metadata for a datasource](#get-the-metadata-for-a-datasource) shows you how to query the `INFORMATION_SCHEMA` to get metadata like column names.
+- [Query data](#query-data) runs a select query against the datasource.
+
+You can try out these examples after verifying that you meet the [prerequisites](#prerequisites).
+
+For more information about the connection options, see [Client Reference](https://calcite.apache.org/avatica/docs/client_reference.html).
+
+### Prerequisites
+
+Make sure you meet the following requirements before trying these examples:
+
+- A supported [Java version](../operations/java.md)
+
+- [Avatica JDBC driver](https://calcite.apache.org/avatica/downloads/). You can add the JAR to your `CLASSPATH` directly or manage it externally, such as through Maven and a `pom.xml` file.
+
+- An available Druid instance. You can use the `micro-quickstart` configuration described in [Quickstart (local)](../tutorials/index.md). The examples assume that you are using the quickstart, so no authentication or authorization is expected unless explicitly mentioned.
+
+- The example `wikipedia` datasource from the quickstart is loaded on your Druid instance. If you have a different datasource loaded, you can still try these examples. You'll have to update the table name and column names to match your datasource.
+
+### Get the metadata for a datasource
+
+Metadata, such as column names, is available either through the [`INFORMATION_SCHEMA`](../querying/sql-metadata-tables.md) table or through `connection.getMetaData()`. The following example uses the `INFORMATION_SCHEMA` table to retrieve and print the list of column names for the `wikipedia` datasource that you loaded during a previous tutorial.
+
+```java
+import java.sql.*;
+import java.util.Properties;
+
+public class JdbcListColumns {
+
+ public static void main(String[] args)
+ {
+ // Connect to /druid/v2/sql/avatica/ on your Router.
+ // You can connect to a Broker but must configure connection stickiness if you do.
+ String url = "jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica/;transparent_reconnection=true";
+
+ String query = "SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'wikipedia' and TABLE_SCHEMA='druid'";
+
+ // Set any connection context parameters you need here.
+ // Any property from https://druid.apache.org/docs/latest/querying/sql-query-context.html can go here.
+ Properties connectionProperties = new Properties();
+
+ try (Connection connection = DriverManager.getConnection(url, connectionProperties)) {
+ try (
+ final Statement statement = connection.createStatement();
+ final ResultSet rs = statement.executeQuery(query)
+ ) {
+ while (rs.next()) {
+ String columnName = rs.getString("COLUMN_NAME");
+ System.out.println(columnName);
+ }
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+}
+```
+
+### Query data
+
+Now that you know what columns are available, you can start querying the data. The following example queries the datasource named `wikipedia` for the timestamps and comments from Japan. It also sets the [query context parameter](../querying/sql-query-context.md) `sqlTimeZone`. Optionally, you can also parameterize queries by using [dynamic parameters](#dynamic-parameters).
+
+```java
+import java.sql.*;
+import java.util.Properties;
+
+public class JdbcCountryAndTime {
+
+ public static void main(String[] args)
+ {
+ // Connect to /druid/v2/sql/avatica/ on your Router.
+ // You can connect to a Broker but must configure connection stickiness if you do.
+ String url = "jdbc:avatica:remote:url=http://localhost:8888/druid/v2/sql/avatica/;transparent_reconnection=true";
+
+ //The query you want to run.
+ String query = "SELECT __time, isRobot, countryName, comment FROM wikipedia WHERE countryName='Japan'";
+
+ // Set any connection context parameters you need here.
+ // Any property from https://druid.apache.org/docs/latest/querying/sql-query-context.html can go here.
+ Properties connectionProperties = new Properties();
+ connectionProperties.setProperty("sqlTimeZone", "America/Los_Angeles");
+
+ try (Connection connection = DriverManager.getConnection(url, connectionProperties)) {
+ try (
+ final Statement statement = connection.createStatement();
+ final ResultSet rs = statement.executeQuery(query)
+ ) {
+ while (rs.next()) {
+ Timestamp timeStamp = rs.getTimestamp("__time");
+ String comment = rs.getString("comment");
+ System.out.println(timeStamp);
+ System.out.println(comment);
+ }
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+}
+```
diff --git a/docs/29.0.0/api-reference/supervisor-api.md b/docs/29.0.0/api-reference/supervisor-api.md
new file mode 100644
index 00000000..2e63b69c
--- /dev/null
+++ b/docs/29.0.0/api-reference/supervisor-api.md
@@ -0,0 +1,3556 @@
+---
+id: supervisor-api
+title: Supervisor API
+sidebar_label: Supervisors
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+This topic describes the API endpoints to manage and monitor supervisors for Apache Druid.
+
+In this topic, `http://ROUTER_IP:ROUTER_PORT` is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use `http://localhost:8888` for quickstart deployments.
+
+## Supervisor information
+
+The following table lists the properties of a supervisor object:
+
+|Property|Type|Description|
+|---|---|---|
+|`id`|String|Unique identifier.|
+|`state`|String|Generic state of the supervisor. Available states:`UNHEALTHY_SUPERVISOR`, `UNHEALTHY_TASKS`, `PENDING`, `RUNNING`, `SUSPENDED`, `STOPPING`. See [Supervisor reference](../ingestion/supervisor.md#status-report) for more information.|
+|`detailedState`|String|Detailed state of the supervisor. This property contains a more descriptive, implementation-specific state that may provide more insight into the supervisor's activities than the `state` property. See [Apache Kafka ingestion](../ingestion/kafka-ingestion.md) and [Amazon Kinesis ingestion](../ingestion/kinesis-ingestion.md) for supervisor-specific states.|
+|`healthy`|Boolean|Supervisor health indicator.|
+|`spec`|Object|Container object for the supervisor configuration.|
+|`suspended`|Boolean|Indicates whether the supervisor is in a suspended state.|
+
+### Get an array of active supervisor IDs
+
+Returns an array of strings representing the names of active supervisors. If there are no active supervisors, it returns an empty array.
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/supervisor</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="1" label="200 SUCCESS">
+
+
+*Successfully retrieved array of active supervisor IDs*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="2" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor"
+```
+
+</TabItem>
+<TabItem value="3" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/supervisor HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ [
+ "wikipedia_stream",
+ "social_media"
+ ]
+ ```
+</details>
+
+### Get an array of active supervisor objects
+
+Retrieves an array of active supervisor objects. If there are no active supervisors, it returns an empty array. For reference on the supervisor object properties, see the preceding [table](#supervisor-information).
+
+#### URL
+
+<code class="getAPI">GET</code> <code>/druid/indexer/v1/supervisor?full</code>
+
+#### Responses
+
+<Tabs>
+
+<TabItem value="4" label="200 SUCCESS">
+
+
+*Successfully retrieved supervisor objects*
+
+</TabItem>
+</Tabs>
+
+---
+
+#### Sample request
+
+<Tabs>
+
+<TabItem value="5" label="cURL">
+
+
+```shell
+curl "http://ROUTER_IP:ROUTER_PORT/druid/indexer/v1/supervisor?full=null"
+```
+
+</TabItem>
+<TabItem value="6" label="HTTP">
+
+
+```HTTP
+GET /druid/indexer/v1/supervisor?full=null HTTP/1.1
+Host: http://ROUTER_IP:ROUTER_PORT
+```
+
+</TabItem>
+</Tabs>
+
+#### Sample response
+
+<details>
+ <summary>Click to show sample response</summary>
+
+ ```json
+ [
+ {
+ "id": "wikipedia_stream",
+ "state": "RUNNING",
+ "detailedState": "CONNECTING_TO_STREAM",
+ "healthy": true,
+ "spec": {
+ "type": "kafka",
+ "spec": {
+ "dataSchema": {
+ "dataSource": "wikipedia_stream",
+ "timestampSpec": {
+ "column": "__time",
+ "format": "iso",
+ "missingValue": null
+ },
+ "dimensionsSpec": {
+ "dimensions": [
+ {
+ "type": "string",
+ "name": "username",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "string",
+ "name": "post_title",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "long",
+ "name": "views",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": false
+ },
+ {
+ "type": "long",
+ "name": "upvotes",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": false
+ },
+ {
+ "type": "long",
+ "name": "comments",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": false
+ },
+ {
+ "type": "string",
+ "name": "edited",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ }
+ ],
+ "dimensionExclusions": [
+ "__time"
+ ],
+ "includeAllDimensions": false,
+ "useSchemaDiscovery": false
+ },
+ "metricsSpec": [],
+ "granularitySpec": {
+ "type": "uniform",
+ "segmentGranularity": "HOUR",
+ "queryGranularity": {
+ "type": "none"
+ },
+ "rollup": false,
+ "intervals": []
+ },
+ "transformSpec": {
+ "filter": null,
+ "transforms": []
+ }
+ },
+ "ioConfig": {
+ "topic": "social_media",
+ "inputFormat": {
+ "type": "json",
+ "keepNullColumns": false,
+ "assumeNewlineDelimited": false,
+ "useJsonNodeReader": false
+ },
+ "replicas": 1,
+ "taskCount": 1,
+ "taskDuration": "PT3600S",
+ "consumerProperties": {
+ "bootstrap.servers": "localhost:9042"
+ },
+ "autoScalerConfig": null,
+ "pollTimeout": 100,
+ "startDelay": "PT5S",
+ "period": "PT30S",
+ "useEarliestOffset": true,
+ "completionTimeout": "PT1800S",
+ "lateMessageRejectionPeriod": null,
+ "earlyMessageRejectionPeriod": null,
+ "lateMessageRejectionStartDateTime": null,
+ "configOverrides": null,
+ "idleConfig": null,
+ "stream": "social_media",
+ "useEarliestSequenceNumber": true
+ },
+ "tuningConfig": {
+ "type": "kafka",
+ "appendableIndexSpec": {
+ "type": "onheap",
+ "preserveExistingMetrics": false
+ },
+ "maxRowsInMemory": 150000,
+ "maxBytesInMemory": 0,
+ "skipBytesInMemoryOverheadCheck": false,
+ "maxRowsPerSegment": 5000000,
+ "maxTotalRows": null,
+ "intermediatePersistPeriod": "PT10M",
+ "maxPendingPersists": 0,
+ "indexSpec": {
+ "bitmap": {
+ "type": "roaring"
+ },
+ "dimensionCompression": "lz4",
+ "stringDictionaryEncoding": {
+ "type": "utf8"
+ },
+ "metricCompression": "lz4",
+ "longEncoding": "longs"
+ },
+ "indexSpecForIntermediatePersists": {
+ "bitmap": {
+ "type": "roaring"
+ },
+ "dimensionCompression": "lz4",
+ "stringDictionaryEncoding": {
+ "type": "utf8"
+ },
+ "metricCompression": "lz4",
+ "longEncoding": "longs"
+ },
+ "reportParseExceptions": false,
+ "handoffConditionTimeout": 0,
+ "resetOffsetAutomatically": false,
+ "segmentWriteOutMediumFactory": null,
+ "workerThreads": null,
+ "chatRetries": 8,
+ "httpTimeout": "PT10S",
+ "shutdownTimeout": "PT80S",
+ "offsetFetchPeriod": "PT30S",
+ "intermediateHandoffPeriod": "P2147483647D",
+ "logParseExceptions": false,
+ "maxParseExceptions": 2147483647,
+ "maxSavedParseExceptions": 0,
+ "skipSequenceNumberAvailabilityCheck": false,
+ "repartitionTransitionDuration": "PT120S"
+ }
+ },
+ "dataSchema": {
+ "dataSource": "wikipedia_stream",
+ "timestampSpec": {
+ "column": "__time",
+ "format": "iso",
+ "missingValue": null
+ },
+ "dimensionsSpec": {
+ "dimensions": [
+ {
+ "type": "string",
+ "name": "username",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "string",
+ "name": "post_title",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": true
+ },
+ {
+ "type": "long",
+ "name": "views",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": false
+ },
+ {
+ "type": "long",
+ "name": "upvotes",
+ "multiValueHandling": "SORTED_ARRAY",
+ "createBitmapIndex": false
+ },
+ {
+ "type": "long",
+ "name": "comments",
... 178238 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org