You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by cw...@apache.org on 2024/12/04 06:32:12 UTC

(druid-website) branch asf-staging updated: 31.0.1 staging docs (#306)

This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/druid-website.git


The following commit(s) were added to refs/heads/asf-staging by this push:
     new 1b6fcd2fb 31.0.1 staging docs (#306)
1b6fcd2fb is described below

commit 1b6fcd2fb19ccae3af164f53e859e8fd34c4a811
Author: Clint Wylie <cw...@apache.org>
AuthorDate: Tue Dec 3 22:32:06 2024 -0800

    31.0.1 staging docs (#306)
---
 404.html                                           |   8 +-
 blog/index.html                                    |   8 +-
 community/cla/index.html                           |   8 +-
 community/index.html                               |   8 +-
 community/join-slack/index.html                    |   8 +-
 docs/31.0.1/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   |  45 ++++++
 .../dynamic-configuration-api.html/index.html      |  11 ++
 .../dynamic-configuration-api/index.html           |  35 +++++
 docs/31.0.1/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 ++
 docs/31.0.1/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    |  31 ++++
 docs/31.0.1/api-reference/sql-api.html/index.html  |  11 ++
 docs/31.0.1/api-reference/sql-api/index.html       |  42 ++++++
 .../sql-ingestion-api.html/index.html              |  11 ++
 .../api-reference/sql-ingestion-api/index.html     |  33 +++++
 docs/31.0.1/api-reference/sql-jdbc.html/index.html |  11 ++
 docs/31.0.1/api-reference/sql-jdbc/index.html      |  38 +++++
 .../api-reference/supervisor-api.html/index.html   |  11 ++
 .../31.0.1/api-reference/supervisor-api/index.html |  34 +++++
 .../31.0.1/api-reference/tasks-api.html/index.html |  11 ++
 docs/31.0.1/api-reference/tasks-api/index.html     |  30 ++++
 .../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 ++
 docs/31.0.1/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 ++
 docs/31.0.1/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/31.0.1/configuration.html/index.html          |  11 ++
 docs/31.0.1/configuration/auth.html/index.html     |  11 ++
 docs/31.0.1/configuration/broker.html/index.html   |  11 ++
 docs/31.0.1/configuration/caching.html/index.html  |  11 ++
 .../configuration/coordinator.html/index.html      |  11 ++
 .../configuration/extensions.html/index.html       |  11 ++
 docs/31.0.1/configuration/extensions/index.html    |  46 ++++++
 docs/31.0.1/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/31.0.1/configuration/index.html               | 134 ++++++++++++++++++
 .../configuration/indexing-service.html/index.html |  11 ++
 docs/31.0.1/configuration/logging.html/index.html  |  11 ++
 docs/31.0.1/configuration/logging/index.html       |  45 ++++++
 .../production-cluster.html/index.html             |  11 ++
 docs/31.0.1/configuration/realtime.html/index.html |  11 ++
 .../configuration/simple-cluster.html/index.html   |  11 ++
 .../31.0.1/configuration/zookeeper.html/index.html |  11 ++
 docs/31.0.1/data-management.html/index.html        |  11 ++
 .../automatic-compaction.html/index.html           |  11 ++
 .../automatic-compaction/index.html                |  46 ++++++
 .../data-management/compaction.html/index.html     |  11 ++
 docs/31.0.1/data-management/compaction/index.html  |  30 ++++
 docs/31.0.1/data-management/delete.html/index.html |  11 ++
 docs/31.0.1/data-management/delete/index.html      |  51 +++++++
 docs/31.0.1/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 +++++
 docs/31.0.1/data-management/update.html/index.html |  11 ++
 docs/31.0.1/data-management/update/index.html      |  46 ++++++
 .../cassandra-deep-storage.html/index.html         |  11 ++
 docs/31.0.1/dependencies/zookeeper.html/index.html |  11 ++
 docs/31.0.1/design.html/index.html                 |  11 ++
 docs/31.0.1/design/architecture.html/index.html    |  11 ++
 docs/31.0.1/design/architecture/index.html         |  38 +++++
 docs/31.0.1/design/auth.html/index.html            |  11 ++
 docs/31.0.1/design/broker.html/index.html          |  11 ++
 docs/31.0.1/design/broker/index.html               |  27 ++++
 .../concepts-and-terminology.html/index.html       |  11 ++
 docs/31.0.1/design/coordinator.html/index.html     |  11 ++
 docs/31.0.1/design/coordinator/index.html          |  59 ++++++++
 docs/31.0.1/design/deep-storage.html/index.html    |  11 ++
 docs/31.0.1/design/deep-storage/index.html         |  30 ++++
 docs/31.0.1/design/design.html/index.html          |  11 ++
 .../extensions-contrib/dropwizard.html/index.html  |  11 ++
 .../extensions-contrib/dropwizard/index.html       |  33 +++++
 docs/31.0.1/design/historical.html/index.html      |  11 ++
 docs/31.0.1/design/historical/index.html           |  29 ++++
 docs/31.0.1/design/index.html                      |  44 ++++++
 docs/31.0.1/design/indexer.html/index.html         |  11 ++
 docs/31.0.1/design/indexer/index.html              |  28 ++++
 .../31.0.1/design/indexing-service.html/index.html |  11 ++
 docs/31.0.1/design/indexing-service/index.html     |  27 ++++
 .../31.0.1/design/metadata-storage.html/index.html |  11 ++
 docs/31.0.1/design/metadata-storage/index.html     |  50 +++++++
 docs/31.0.1/design/middlemanager.html/index.html   |  11 ++
 docs/31.0.1/design/middlemanager/index.html        |  27 ++++
 docs/31.0.1/design/overlord.html/index.html        |  11 ++
 docs/31.0.1/design/overlord/index.html             |  29 ++++
 docs/31.0.1/design/peons.html/index.html           |  11 ++
 docs/31.0.1/design/peons/index.html                |  28 ++++
 docs/31.0.1/design/plumber.html/index.html         |  11 ++
 docs/31.0.1/design/processes.html/index.html       |  11 ++
 docs/31.0.1/design/realtime.html/index.html        |  11 ++
 docs/31.0.1/design/router.html/index.html          |  11 ++
 docs/31.0.1/design/router/index.html               |  43 ++++++
 docs/31.0.1/design/segments.html/index.html        |  11 ++
 docs/31.0.1/design/segments/index.html             |  42 ++++++
 docs/31.0.1/design/storage.html/index.html         |  11 ++
 docs/31.0.1/design/storage/index.html              |  36 +++++
 docs/31.0.1/design/zookeeper.html/index.html       |  11 ++
 docs/31.0.1/design/zookeeper/index.html            |  27 ++++
 .../approximate-histograms.html/index.html         |  11 ++
 docs/31.0.1/development/build.html/index.html      |  11 ++
 docs/31.0.1/development/build/index.html           |  30 ++++
 .../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 ++
 docs/31.0.1/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       |  26 ++++
 .../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          |  36 +++++
 .../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         |  52 +++++++
 .../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 +++++
 .../rabbit-super-stream-injestion.html/index.html  |  11 ++
 .../rabbit-super-stream-injestion/index.html       |  30 ++++
 .../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/index.html          |  11 ++
 .../kafka-ingestion.html/index.html                |  11 ++
 .../extensions-core/kafka-ingestion/index.html     |  11 ++
 .../kafka-supervisor-operations.html/index.html    |  11 ++
 .../kafka-supervisor-operations/index.html         |  11 ++
 .../kafka-supervisor-reference.html/index.html     |  11 ++
 .../kafka-supervisor-reference/index.html          |  11 ++
 .../kinesis-ingestion.html/index.html              |  11 ++
 .../extensions-core/kinesis-ingestion/index.html   |  11 ++
 .../extensions-core/kubernetes.html/index.html     |  11 ++
 .../extensions-core/kubernetes/index.html          |  29 ++++
 .../lookups-cached-global/index.html               |  11 ++
 .../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/31.0.1/development/extensions/index.html      |  11 ++
 docs/31.0.1/development/indexer.html/index.html    |  11 ++
 .../index.html                                     |  11 ++
 docs/31.0.1/development/javascript.html/index.html |  11 ++
 docs/31.0.1/development/javascript/index.html      |  38 +++++
 .../kafka-simple-consumer-firehose.html/index.html |  11 ++
 docs/31.0.1/development/modules.html/index.html    |  11 ++
 docs/31.0.1/development/modules/index.html         |  52 +++++++
 docs/31.0.1/development/overview.html/index.html   |  11 ++
 docs/31.0.1/development/overview/index.html        |  40 ++++++
 docs/31.0.1/development/router.html/index.html     |  11 ++
 .../development/select-query.html/index.html       |  11 ++
 docs/31.0.1/development/versioning.html/index.html |  11 ++
 docs/31.0.1/development/versioning/index.html      |  26 ++++
 docs/31.0.1/index.html                             |  11 ++
 docs/31.0.1/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 ++
 docs/31.0.1/ingestion/compaction.html/index.html   |  11 ++
 .../concurrent-append-replace.html/index.html      |  11 ++
 .../ingestion/concurrent-append-replace/index.html |  27 ++++
 docs/31.0.1/ingestion/data-formats.html/index.html |  11 ++
 docs/31.0.1/ingestion/data-formats/index.html      | 115 +++++++++++++++
 .../ingestion/data-management.html/index.html      |  11 ++
 docs/31.0.1/ingestion/delete-data.html/index.html  |  11 ++
 docs/31.0.1/ingestion/faq.html/index.html          |  11 ++
 docs/31.0.1/ingestion/faq/index.html               |  32 +++++
 docs/31.0.1/ingestion/firehose.html/index.html     |  11 ++
 docs/31.0.1/ingestion/flatten-json.html/index.html |  11 ++
 .../hadoop-vs-native-batch.html/index.html         |  11 ++
 docs/31.0.1/ingestion/hadoop.html/index.html       |  11 ++
 docs/31.0.1/ingestion/hadoop/index.html            |  73 ++++++++++
 docs/31.0.1/ingestion/index.html                   |  35 +++++
 .../ingestion/ingestion-spec.html/index.html       |  11 ++
 docs/31.0.1/ingestion/ingestion-spec/index.html    |  85 +++++++++++
 docs/31.0.1/ingestion/ingestion.html/index.html    |  11 ++
 .../31.0.1/ingestion/input-sources.html/index.html |  11 ++
 docs/31.0.1/ingestion/input-sources/index.html     |  75 ++++++++++
 .../ingestion/kafka-ingestion.html/index.html      |  11 ++
 docs/31.0.1/ingestion/kafka-ingestion/index.html   |  39 ++++++
 .../ingestion/kinesis-ingestion.html/index.html    |  11 ++
 docs/31.0.1/ingestion/kinesis-ingestion/index.html |  48 +++++++
 .../ingestion/locking-and-priority.html/index.html |  11 ++
 .../ingestion/migrate-from-firehose/index.html     |  11 ++
 docs/31.0.1/ingestion/misc-tasks.html/index.html   |  11 ++
 .../native-batch-firehose.html/index.html          |  11 ++
 .../ingestion/native-batch-firehose/index.html     |  26 ++++
 .../native-batch-input-sources.html/index.html     |  11 ++
 .../native-batch-simple-task.html/index.html       |  11 ++
 .../ingestion/native-batch-simple-task/index.html  |  35 +++++
 docs/31.0.1/ingestion/native-batch.html/index.html |  11 ++
 docs/31.0.1/ingestion/native-batch/index.html      | 101 +++++++++++++
 docs/31.0.1/ingestion/native_tasks.html/index.html |  11 ++
 docs/31.0.1/ingestion/overview.html/index.html     |  11 ++
 docs/31.0.1/ingestion/partitioning.html/index.html |  11 ++
 docs/31.0.1/ingestion/partitioning/index.html      |  37 +++++
 .../ingestion/realtime-ingestion.html/index.html   |  11 ++
 docs/31.0.1/ingestion/reports.html/index.html      |  11 ++
 docs/31.0.1/ingestion/rollup.html/index.html       |  11 ++
 docs/31.0.1/ingestion/rollup/index.html            |  28 ++++
 .../ingestion/schema-changes.html/index.html       |  11 ++
 .../31.0.1/ingestion/schema-design.html/index.html |  11 ++
 docs/31.0.1/ingestion/schema-design/index.html     | 110 +++++++++++++++
 docs/31.0.1/ingestion/schema-model.html/index.html |  11 ++
 docs/31.0.1/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 ++
 docs/31.0.1/ingestion/stream-pull.html/index.html  |  11 ++
 docs/31.0.1/ingestion/stream-push.html/index.html  |  11 ++
 docs/31.0.1/ingestion/streaming.html/index.html    |  11 ++
 docs/31.0.1/ingestion/streaming/index.html         |  29 ++++
 docs/31.0.1/ingestion/supervisor.html/index.html   |  11 ++
 docs/31.0.1/ingestion/supervisor/index.html        |  52 +++++++
 docs/31.0.1/ingestion/tasks.html/index.html        |  11 ++
 docs/31.0.1/ingestion/tasks/index.html             |  78 +++++++++++
 docs/31.0.1/ingestion/tranquility.html/index.html  |  11 ++
 docs/31.0.1/ingestion/tranquility/index.html       |  29 ++++
 .../ingestion/transform-spec.html/index.html       |  11 ++
 .../ingestion/update-existing-data.html/index.html |  11 ++
 docs/31.0.1/misc/cluster-setup.html/index.html     |  11 ++
 docs/31.0.1/misc/evaluate.html/index.html          |  11 ++
 docs/31.0.1/misc/math-expr.html/index.html         |  11 ++
 docs/31.0.1/misc/papers-and-talks.html/index.html  |  11 ++
 docs/31.0.1/misc/papers-and-talks/index.html       |  26 ++++
 docs/31.0.1/misc/tasks.html/index.html             |  11 ++
 docs/31.0.1/multi-stage-query.html/index.html      |  11 ++
 docs/31.0.1/multi-stage-query/api.html/index.html  |  11 ++
 .../multi-stage-query/concepts.html/index.html     |  11 ++
 docs/31.0.1/multi-stage-query/concepts/index.html  | 122 ++++++++++++++++
 .../multi-stage-query/examples.html/index.html     |  11 ++
 docs/31.0.1/multi-stage-query/examples/index.html  |  28 ++++
 docs/31.0.1/multi-stage-query/index.html           |  44 ++++++
 .../multi-stage-query/known-issues.html/index.html |  11 ++
 .../multi-stage-query/known-issues/index.html      |  37 +++++
 .../multi-stage-query/reference.html/index.html    |  11 ++
 docs/31.0.1/multi-stage-query/reference/index.html |  87 ++++++++++++
 .../multi-stage-query/security.html/index.html     |  11 ++
 docs/31.0.1/multi-stage-query/security/index.html  |  37 +++++
 docs/31.0.1/operations/alerts.html/index.html      |  11 ++
 docs/31.0.1/operations/alerts/index.html           |  26 ++++
 .../operations/api-reference.html/index.html       |  11 ++
 docs/31.0.1/operations/api-reference/index.html    |  11 ++
 docs/31.0.1/operations/auth-ldap.html/index.html   |  11 ++
 docs/31.0.1/operations/auth-ldap/index.html        |  27 ++++
 docs/31.0.1/operations/auth.html/index.html        |  11 ++
 docs/31.0.1/operations/auth/index.html             |  27 ++++
 .../basic-cluster-tuning.html/index.html           |  11 ++
 .../operations/basic-cluster-tuning/index.html     |  29 ++++
 .../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 ++
 .../31.0.1/operations/dump-segment.html/index.html |  11 ++
 docs/31.0.1/operations/dump-segment/index.html     |  41 ++++++
 .../operations/durable-storage.html/index.html     |  11 ++
 docs/31.0.1/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 ++
 docs/31.0.1/operations/export-metadata/index.html  |  27 ++++
 docs/31.0.1/operations/getting-started/index.html  |  11 ++
 .../operations/high-availability.html/index.html   |  11 ++
 .../31.0.1/operations/high-availability/index.html |  33 +++++
 .../operations/http-compression.html/index.html    |  11 ++
 docs/31.0.1/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/31.0.1/operations/java.html/index.html        |  11 ++
 docs/31.0.1/operations/java/index.html             |  46 ++++++
 docs/31.0.1/operations/kubernetes.html/index.html  |  11 ++
 docs/31.0.1/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/31.0.1/operations/metrics.html/index.html     |  11 ++
 docs/31.0.1/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 ++
 docs/31.0.1/operations/mixed-workloads/index.html  |  51 +++++++
 .../31.0.1/operations/multitenancy.html/index.html |  11 ++
 .../31.0.1/operations/other-hadoop.html/index.html |  11 ++
 docs/31.0.1/operations/other-hadoop/index.html     |  53 +++++++
 .../operations/password-provider.html/index.html   |  11 ++
 .../31.0.1/operations/password-provider/index.html |  26 ++++
 .../operations/performance-faq.html/index.html     |  11 ++
 docs/31.0.1/operations/pull-deps.html/index.html   |  11 ++
 docs/31.0.1/operations/pull-deps/index.html        |  26 ++++
 .../operations/recommendations.html/index.html     |  11 ++
 .../operations/request-logging.html/index.html     |  11 ++
 docs/31.0.1/operations/request-logging/index.html  |  36 +++++
 .../operations/reset-cluster.html/index.html       |  11 ++
 docs/31.0.1/operations/reset-cluster/index.html    |  30 ++++
 .../operations/rolling-updates.html/index.html     |  11 ++
 docs/31.0.1/operations/rolling-updates/index.html  |  48 +++++++
 .../operations/rule-configuration.html/index.html  |  11 ++
 .../operations/rule-configuration/index.html       |  28 ++++
 .../operations/security-overview.html/index.html   |  11 ++
 .../31.0.1/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     |  59 ++++++++
 .../operations/single-server.html/index.html       |  11 ++
 docs/31.0.1/operations/single-server/index.html    |  29 ++++
 docs/31.0.1/operations/tls-support.html/index.html |  11 ++
 docs/31.0.1/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 ++++
 docs/31.0.1/operations/web-console.html/index.html |  11 ++
 docs/31.0.1/operations/web-console/index.html      |  52 +++++++
 docs/31.0.1/querying.html/index.html               |  11 ++
 docs/31.0.1/querying/aggregations.html/index.html  |  11 ++
 docs/31.0.1/querying/aggregations/index.html       |  43 ++++++
 docs/31.0.1/querying/arrays.html/index.html        |  11 ++
 docs/31.0.1/querying/arrays/index.html             |  38 +++++
 docs/31.0.1/querying/caching.html/index.html       |  11 ++
 docs/31.0.1/querying/caching/index.html            |  26 ++++
 docs/31.0.1/querying/datasource.html/index.html    |  11 ++
 docs/31.0.1/querying/datasource/index.html         |  92 ++++++++++++
 .../datasourcemetadataquery.html/index.html        |  11 ++
 .../querying/datasourcemetadataquery/index.html    |  28 ++++
 .../31.0.1/querying/dimensionspecs.html/index.html |  11 ++
 docs/31.0.1/querying/dimensionspecs/index.html     |  78 +++++++++++
 docs/31.0.1/querying/filters.html/index.html       |  11 ++
 docs/31.0.1/querying/filters/index.html            |  47 +++++++
 docs/31.0.1/querying/geo.html/index.html           |  11 ++
 docs/31.0.1/querying/geo/index.html                |  33 +++++
 docs/31.0.1/querying/granularities.html/index.html |  11 ++
 docs/31.0.1/querying/granularities/index.html      |  37 +++++
 docs/31.0.1/querying/groupbyquery.html/index.html  |  11 ++
 docs/31.0.1/querying/groupbyquery/index.html       |  80 +++++++++++
 docs/31.0.1/querying/having.html/index.html        |  11 ++
 docs/31.0.1/querying/having/index.html             |  35 +++++
 docs/31.0.1/querying/hll-old.html/index.html       |  11 ++
 docs/31.0.1/querying/hll-old/index.html            |  35 +++++
 docs/31.0.1/querying/index.html                    |  40 ++++++
 docs/31.0.1/querying/joins.html/index.html         |  11 ++
 docs/31.0.1/querying/joins/index.html              |  35 +++++
 .../kafka-extraction-namespace.html/index.html     |  11 ++
 .../querying/kafka-extraction-namespace/index.html |  26 ++++
 docs/31.0.1/querying/limitspec.html/index.html     |  11 ++
 docs/31.0.1/querying/limitspec/index.html          |  34 +++++
 .../querying/lookups-cached-global.html/index.html |  11 ++
 .../querying/lookups-cached-global/index.html      |  44 ++++++
 docs/31.0.1/querying/lookups.html/index.html       |  11 ++
 docs/31.0.1/querying/lookups/index.html            |  75 ++++++++++
 docs/31.0.1/querying/math-expr.html/index.html     |  11 ++
 docs/31.0.1/querying/math-expr/index.html          |  33 +++++
 .../multi-value-dimensions.html/index.html         |  11 ++
 .../querying/multi-value-dimensions/index.html     |  47 +++++++
 docs/31.0.1/querying/multitenancy.html/index.html  |  11 ++
 docs/31.0.1/querying/multitenancy/index.html       |  49 +++++++
 .../31.0.1/querying/nested-columns.html/index.html |  11 ++
 docs/31.0.1/querying/nested-columns/index.html     |  26 ++++
 docs/31.0.1/querying/optimizations.html/index.html |  11 ++
 .../querying/post-aggregations.html/index.html     |  11 ++
 docs/31.0.1/querying/post-aggregations/index.html  |  35 +++++
 docs/31.0.1/querying/query-context.html/index.html |  11 ++
 docs/31.0.1/querying/query-context/index.html      |  37 +++++
 .../querying/query-deep-storage.html/index.html    |  11 ++
 docs/31.0.1/querying/query-deep-storage/index.html |  26 ++++
 .../querying/query-execution.html/index.html       |  11 ++
 docs/31.0.1/querying/query-execution/index.html    |  66 +++++++++
 .../querying/query-processing.html/index.html      |  11 ++
 docs/31.0.1/querying/query-processing/index.html   |  26 ++++
 docs/31.0.1/querying/scan-query.html/index.html    |  11 ++
 docs/31.0.1/querying/scan-query/index.html         |  51 +++++++
 docs/31.0.1/querying/searchquery.html/index.html   |  11 ++
 docs/31.0.1/querying/searchquery/index.html        |  38 +++++
 .../querying/searchqueryspec.html/index.html       |  11 ++
 .../querying/segmentmetadataquery.html/index.html  |  11 ++
 .../querying/segmentmetadataquery/index.html       |  46 ++++++
 docs/31.0.1/querying/select-query.html/index.html  |  11 ++
 docs/31.0.1/querying/select-query/index.html       |  26 ++++
 .../31.0.1/querying/sorting-orders.html/index.html |  11 ++
 docs/31.0.1/querying/sorting-orders/index.html     |  29 ++++
 .../querying/sql-aggregations.html/index.html      |  11 ++
 docs/31.0.1/querying/sql-aggregations/index.html   |  35 +++++
 docs/31.0.1/querying/sql-api.html/index.html       |  11 ++
 .../querying/sql-array-functions.html/index.html   |  11 ++
 .../31.0.1/querying/sql-array-functions/index.html |  31 ++++
 .../31.0.1/querying/sql-data-types.html/index.html |  11 ++
 docs/31.0.1/querying/sql-data-types/index.html     |  57 ++++++++
 docs/31.0.1/querying/sql-functions.html/index.html |  11 ++
 docs/31.0.1/querying/sql-functions/index.html      |  30 ++++
 docs/31.0.1/querying/sql-jdbc.html/index.html      |  11 ++
 .../querying/sql-json-functions.html/index.html    |  11 ++
 docs/31.0.1/querying/sql-json-functions/index.html |  26 ++++
 .../querying/sql-metadata-tables.html/index.html   |  11 ++
 .../31.0.1/querying/sql-metadata-tables/index.html |  37 +++++
 .../index.html                                     |  11 ++
 .../sql-multivalue-string-functions/index.html     |  33 +++++
 docs/31.0.1/querying/sql-operators.html/index.html |  11 ++
 docs/31.0.1/querying/sql-operators/index.html      |  30 ++++
 .../querying/sql-query-context.html/index.html     |  11 ++
 docs/31.0.1/querying/sql-query-context/index.html  |  29 ++++
 docs/31.0.1/querying/sql-scalar.html/index.html    |  11 ++
 docs/31.0.1/querying/sql-scalar/index.html         |  53 +++++++
 .../querying/sql-translation.html/index.html       |  11 ++
 docs/31.0.1/querying/sql-translation/index.html    |  88 ++++++++++++
 .../querying/sql-window-functions.html/index.html  |  11 ++
 .../querying/sql-window-functions/index.html       |  28 ++++
 docs/31.0.1/querying/sql.html/index.html           |  11 ++
 docs/31.0.1/querying/sql/index.html                |  81 +++++++++++
 .../querying/timeboundaryquery.html/index.html     |  11 ++
 docs/31.0.1/querying/timeboundaryquery/index.html  |  28 ++++
 .../querying/timeseriesquery.html/index.html       |  11 ++
 docs/31.0.1/querying/timeseriesquery/index.html    |  36 +++++
 .../querying/tips-good-queries.html/index.html     |  11 ++
 docs/31.0.1/querying/tips-good-queries/index.html  |  28 ++++
 .../31.0.1/querying/topnmetricspec.html/index.html |  11 ++
 docs/31.0.1/querying/topnmetricspec/index.html     |  28 ++++
 docs/31.0.1/querying/topnquery.html/index.html     |  11 ++
 docs/31.0.1/querying/topnquery/index.html          |  35 +++++
 .../querying/troubleshooting.html/index.html       |  11 ++
 docs/31.0.1/querying/troubleshooting/index.html    |  34 +++++
 docs/31.0.1/querying/using-caching.html/index.html |  11 ++
 docs/31.0.1/querying/using-caching/index.html      |  26 ++++
 .../querying/virtual-columns.html/index.html       |  11 ++
 docs/31.0.1/querying/virtual-columns/index.html    |  37 +++++
 .../migr-ansi-sql-null.html/index.html             |  11 ++
 .../release-info/migr-ansi-sql-null/index.html     |  46 ++++++
 .../migr-front-coded-dict.html/index.html          |  11 ++
 .../release-info/migr-front-coded-dict/index.html  |  35 +++++
 .../release-info/migr-mvd-array.html/index.html    |  11 ++
 docs/31.0.1/release-info/migr-mvd-array/index.html |  47 +++++++
 .../migr-subquery-limit.html/index.html            |  11 ++
 .../release-info/migr-subquery-limit/index.html    |  33 +++++
 .../release-info/migration-guide.html/index.html   |  11 ++
 .../31.0.1/release-info/migration-guide/index.html |  27 ++++
 .../release-info/release-notes.html/index.html     |  11 ++
 docs/31.0.1/release-info/release-notes/index.html  |  26 ++++
 .../release-info/upgrade-notes.html/index.html     |  11 ++
 docs/31.0.1/release-info/upgrade-notes/index.html  |  56 ++++++++
 docs/31.0.1/tutorials.html/index.html              |  11 ++
 .../booting-a-production-cluster.html/index.html   |  11 ++
 docs/31.0.1/tutorials/cluster.html/index.html      |  11 ++
 docs/31.0.1/tutorials/cluster/index.html           |  56 ++++++++
 docs/31.0.1/tutorials/docker.html/index.html       |  11 ++
 docs/31.0.1/tutorials/docker/index.html            |  28 ++++
 docs/31.0.1/tutorials/examples.html/index.html     |  11 ++
 docs/31.0.1/tutorials/firewall.html/index.html     |  11 ++
 docs/31.0.1/tutorials/index.html                   |  38 +++++
 .../tutorials/ingestion-streams.html/index.html    |  11 ++
 docs/31.0.1/tutorials/ingestion.html/index.html    |  11 ++
 docs/31.0.1/tutorials/quickstart.html/index.html   |  11 ++
 .../tutorial-a-first-look-at-druid.html/index.html |  11 ++
 .../tutorial-all-about-queries.html/index.html     |  11 ++
 .../tutorials/tutorial-append-data.html/index.html |  11 ++
 .../tutorials/tutorial-append-data/index.html      |  30 ++++
 .../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 ++
 docs/31.0.1/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 ++++
 .../31.0.1/tutorials/tutorial-jdbc.html/index.html |  11 ++
 docs/31.0.1/tutorials/tutorial-jdbc/index.html     |  26 ++++
 .../tutorials/tutorial-kafka.html/index.html       |  11 ++
 docs/31.0.1/tutorials/tutorial-kafka/index.html    |  27 ++++
 .../tutorial-kerberos-hadoop.html/index.html       |  11 ++
 .../tutorials/tutorial-kerberos-hadoop/index.html  |  30 ++++
 .../tutorials/tutorial-latest-by.html/index.html   |  11 ++
 .../31.0.1/tutorials/tutorial-latest-by/index.html |  26 ++++
 .../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 ++
 docs/31.0.1/tutorials/tutorial-query/index.html    |  47 +++++++
 .../tutorials/tutorial-retention.html/index.html   |  11 ++
 .../31.0.1/tutorials/tutorial-retention/index.html |  28 ++++
 .../tutorials/tutorial-rollup.html/index.html      |  11 ++
 docs/31.0.1/tutorials/tutorial-rollup/index.html   |  27 ++++
 .../tutorial-sketches-theta.html/index.html        |  11 ++
 .../tutorials/tutorial-sketches-theta/index.html   |  34 +++++
 .../tutorials/tutorial-sql-null.html/index.html    |  11 ++
 docs/31.0.1/tutorials/tutorial-sql-null/index.html |  30 ++++
 .../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 ++
 .../tutorials/tutorial-transform-spec/index.html   |  11 ++
 .../tutorials/tutorial-transform.html/index.html   |  11 ++
 .../31.0.1/tutorials/tutorial-transform/index.html |  26 ++++
 .../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      |  34 +++++
 .../automatic-compaction-api/index.html            |   8 +-
 .../api-reference/data-management-api/index.html   |   8 +-
 .../dynamic-configuration-api/index.html           |   8 +-
 docs/latest/api-reference/index.html               |   8 +-
 .../api-reference/json-querying-api/index.html     |   8 +-
 .../api-reference/legacy-metadata-api/index.html   |   8 +-
 docs/latest/api-reference/lookups-api/index.html   |   8 +-
 .../api-reference/retention-rules-api/index.html   |   8 +-
 .../api-reference/service-status-api/index.html    |   8 +-
 docs/latest/api-reference/sql-api/index.html       |   8 +-
 .../api-reference/sql-ingestion-api/index.html     |   8 +-
 docs/latest/api-reference/sql-jdbc/index.html      |   8 +-
 .../latest/api-reference/supervisor-api/index.html |   8 +-
 docs/latest/api-reference/tasks-api/index.html     |   8 +-
 .../comparisons/druid-vs-elasticsearch/index.html  |   8 +-
 .../comparisons/druid-vs-key-value/index.html      |   8 +-
 docs/latest/comparisons/druid-vs-kudu/index.html   |   8 +-
 .../comparisons/druid-vs-redshift/index.html       |   8 +-
 docs/latest/comparisons/druid-vs-spark/index.html  |   8 +-
 .../comparisons/druid-vs-sql-on-hadoop/index.html  |   8 +-
 docs/latest/configuration/extensions/index.html    |   8 +-
 .../configuration/human-readable-byte/index.html   |   8 +-
 docs/latest/configuration/index.html               |   8 +-
 docs/latest/configuration/logging/index.html       |   8 +-
 .../automatic-compaction/index.html                |   8 +-
 docs/latest/data-management/compaction/index.html  |   8 +-
 docs/latest/data-management/delete/index.html      |   8 +-
 docs/latest/data-management/index.html             |   8 +-
 .../data-management/manual-compaction/index.html   |   8 +-
 .../data-management/schema-changes/index.html      |   8 +-
 docs/latest/data-management/update/index.html      |   8 +-
 docs/latest/design/architecture/index.html         |   8 +-
 docs/latest/design/broker/index.html               |   8 +-
 docs/latest/design/coordinator/index.html          |   8 +-
 docs/latest/design/deep-storage/index.html         |   8 +-
 .../extensions-contrib/dropwizard/index.html       |   8 +-
 docs/latest/design/historical/index.html           |   8 +-
 docs/latest/design/index.html                      |   8 +-
 docs/latest/design/indexer/index.html              |   8 +-
 docs/latest/design/indexing-service/index.html     |   8 +-
 docs/latest/design/metadata-storage/index.html     |   8 +-
 docs/latest/design/middlemanager/index.html        |   8 +-
 docs/latest/design/overlord/index.html             |   8 +-
 docs/latest/design/peons/index.html                |   8 +-
 docs/latest/design/router/index.html               |   8 +-
 docs/latest/design/segments/index.html             |   8 +-
 docs/latest/design/storage/index.html              |   8 +-
 docs/latest/design/zookeeper/index.html            |   8 +-
 docs/latest/development/build/index.html           |   8 +-
 .../development/contribute-to-docs/index.html      |   8 +-
 docs/latest/development/experimental/index.html    |   8 +-
 .../extensions-contrib/aliyun-oss/index.html       |   8 +-
 .../ambari-metrics-emitter/index.html              |   8 +-
 .../extensions-contrib/cassandra/index.html        |   8 +-
 .../extensions-contrib/cloudfiles/index.html       |   8 +-
 .../compressed-big-decimal/index.html              |   8 +-
 .../ddsketch-quantiles/index.html                  |   8 +-
 .../extensions-contrib/delta-lake/index.html       |   8 +-
 .../extensions-contrib/distinctcount/index.html    |   8 +-
 .../extensions-contrib/gce-extensions/index.html   |   8 +-
 .../extensions-contrib/graphite/index.html         |   8 +-
 .../extensions-contrib/iceberg/index.html          |   8 +-
 .../extensions-contrib/influx/index.html           |   8 +-
 .../extensions-contrib/influxdb-emitter/index.html |   8 +-
 .../extensions-contrib/k8s-jobs/index.html         |  10 +-
 .../extensions-contrib/kafka-emitter/index.html    |   8 +-
 .../materialized-view/index.html                   |   8 +-
 .../momentsketch-quantiles/index.html              |   8 +-
 .../moving-average-query/index.html                |   8 +-
 .../extensions-contrib/opentsdb-emitter/index.html |   8 +-
 .../extensions-contrib/prometheus/index.html       |   8 +-
 .../rabbit-super-stream-injestion/index.html       |   8 +-
 .../extensions-contrib/redis-cache/index.html      |   8 +-
 .../spectator-histogram/index.html                 |   8 +-
 .../extensions-contrib/sqlserver/index.html        |   8 +-
 .../extensions-contrib/statsd/index.html           |   8 +-
 .../tdigestsketch-quantiles/index.html             |   8 +-
 .../extensions-contrib/thrift/index.html           |   8 +-
 .../extensions-contrib/time-min-max/index.html     |   8 +-
 .../approximate-histograms/index.html              |   8 +-
 .../development/extensions-core/avro/index.html    |   8 +-
 .../development/extensions-core/azure/index.html   |   8 +-
 .../extensions-core/bloom-filter/index.html        |   8 +-
 .../datasketches-extension/index.html              |   8 +-
 .../extensions-core/datasketches-hll/index.html    |   8 +-
 .../extensions-core/datasketches-kll/index.html    |   8 +-
 .../datasketches-quantiles/index.html              |   8 +-
 .../extensions-core/datasketches-theta/index.html  |   8 +-
 .../extensions-core/datasketches-tuple/index.html  |   8 +-
 .../extensions-core/druid-aws-rds/index.html       |   8 +-
 .../druid-basic-security/index.html                |   8 +-
 .../extensions-core/druid-kerberos/index.html      |   8 +-
 .../extensions-core/druid-lookups/index.html       |   8 +-
 .../extensions-core/druid-pac4j/index.html         |   8 +-
 .../druid-ranger-security/index.html               |   8 +-
 .../extensions-core/examples/index.html            |   8 +-
 .../development/extensions-core/google/index.html  |   8 +-
 .../development/extensions-core/hdfs/index.html    |   8 +-
 .../extensions-core/kubernetes/index.html          |   8 +-
 .../development/extensions-core/mysql/index.html   |   8 +-
 .../development/extensions-core/orc/index.html     |   8 +-
 .../development/extensions-core/parquet/index.html |   8 +-
 .../extensions-core/postgresql/index.html          |   8 +-
 .../extensions-core/protobuf/index.html            |   8 +-
 .../development/extensions-core/s3/index.html      |   8 +-
 .../simple-client-sslcontext/index.html            |   8 +-
 .../development/extensions-core/stats/index.html   |   8 +-
 .../extensions-core/test-stats/index.html          |   8 +-
 docs/latest/development/javascript/index.html      |   8 +-
 docs/latest/development/modules/index.html         |   8 +-
 docs/latest/development/overview/index.html        |   8 +-
 docs/latest/development/versioning/index.html      |   8 +-
 .../ingestion/concurrent-append-replace/index.html |   8 +-
 docs/latest/ingestion/data-formats/index.html      |   8 +-
 docs/latest/ingestion/faq/index.html               |   8 +-
 docs/latest/ingestion/hadoop/index.html            |   8 +-
 docs/latest/ingestion/index.html                   |   8 +-
 docs/latest/ingestion/ingestion-spec/index.html    |   8 +-
 docs/latest/ingestion/input-sources/index.html     |   8 +-
 docs/latest/ingestion/kafka-ingestion/index.html   |   8 +-
 docs/latest/ingestion/kinesis-ingestion/index.html |   8 +-
 .../ingestion/native-batch-firehose/index.html     |   8 +-
 .../ingestion/native-batch-simple-task/index.html  |   8 +-
 docs/latest/ingestion/native-batch/index.html      |   8 +-
 docs/latest/ingestion/partitioning/index.html      |   8 +-
 docs/latest/ingestion/rollup/index.html            |   8 +-
 docs/latest/ingestion/schema-design/index.html     |   8 +-
 docs/latest/ingestion/schema-model/index.html      |   8 +-
 .../ingestion/standalone-realtime/index.html       |   8 +-
 docs/latest/ingestion/streaming/index.html         |   8 +-
 docs/latest/ingestion/supervisor/index.html        |   8 +-
 docs/latest/ingestion/tasks/index.html             |   8 +-
 docs/latest/ingestion/tranquility/index.html       |   8 +-
 docs/latest/misc/papers-and-talks/index.html       |   8 +-
 docs/latest/multi-stage-query/concepts/index.html  |   8 +-
 docs/latest/multi-stage-query/examples/index.html  |   8 +-
 docs/latest/multi-stage-query/index.html           |   8 +-
 .../multi-stage-query/known-issues/index.html      |   8 +-
 docs/latest/multi-stage-query/reference/index.html |   8 +-
 docs/latest/multi-stage-query/security/index.html  |   8 +-
 docs/latest/operations/alerts/index.html           |   8 +-
 docs/latest/operations/auth-ldap/index.html        |   8 +-
 docs/latest/operations/auth/index.html             |   8 +-
 .../operations/basic-cluster-tuning/index.html     |   8 +-
 .../operations/clean-metadata-store/index.html     |   8 +-
 .../operations/deep-storage-migration/index.html   |   8 +-
 docs/latest/operations/dump-segment/index.html     |   8 +-
 docs/latest/operations/durable-storage/index.html  |   8 +-
 .../operations/dynamic-config-provider/index.html  |   8 +-
 docs/latest/operations/export-metadata/index.html  |   8 +-
 .../latest/operations/high-availability/index.html |   8 +-
 docs/latest/operations/http-compression/index.html |   8 +-
 .../operations/insert-segment-to-db/index.html     |   8 +-
 docs/latest/operations/java/index.html             |   8 +-
 docs/latest/operations/kubernetes/index.html       |   8 +-
 .../operations/metadata-migration/index.html       |   8 +-
 docs/latest/operations/metrics/index.html          |   8 +-
 .../operations/migrate-from-firehose/index.html    |   8 +-
 docs/latest/operations/mixed-workloads/index.html  |   8 +-
 docs/latest/operations/other-hadoop/index.html     |   8 +-
 .../latest/operations/password-provider/index.html |   8 +-
 docs/latest/operations/pull-deps/index.html        |  10 +-
 docs/latest/operations/request-logging/index.html  |   8 +-
 docs/latest/operations/reset-cluster/index.html    |   8 +-
 docs/latest/operations/rolling-updates/index.html  |   8 +-
 .../operations/rule-configuration/index.html       |   8 +-
 .../latest/operations/security-overview/index.html |   8 +-
 .../operations/security-user-auth/index.html       |   8 +-
 .../operations/segment-optimization/index.html     |   8 +-
 docs/latest/operations/single-server/index.html    |   8 +-
 docs/latest/operations/tls-support/index.html      |   8 +-
 .../operations/use_sbt_to_build_fat_jar/index.html |   8 +-
 docs/latest/operations/web-console/index.html      |   8 +-
 docs/latest/querying/aggregations/index.html       |   8 +-
 docs/latest/querying/arrays/index.html             |   8 +-
 docs/latest/querying/caching/index.html            |   8 +-
 docs/latest/querying/datasource/index.html         |   8 +-
 .../querying/datasourcemetadataquery/index.html    |   8 +-
 docs/latest/querying/dimensionspecs/index.html     |   8 +-
 docs/latest/querying/filters/index.html            |   8 +-
 docs/latest/querying/geo/index.html                |   8 +-
 docs/latest/querying/granularities/index.html      |   8 +-
 docs/latest/querying/groupbyquery/index.html       |   8 +-
 docs/latest/querying/having/index.html             |   8 +-
 docs/latest/querying/hll-old/index.html            |   8 +-
 docs/latest/querying/index.html                    |   8 +-
 docs/latest/querying/joins/index.html              |   8 +-
 .../querying/kafka-extraction-namespace/index.html |   8 +-
 docs/latest/querying/limitspec/index.html          |   8 +-
 .../querying/lookups-cached-global/index.html      |   8 +-
 docs/latest/querying/lookups/index.html            |   8 +-
 docs/latest/querying/math-expr/index.html          |   8 +-
 .../querying/multi-value-dimensions/index.html     |   8 +-
 docs/latest/querying/multitenancy/index.html       |   8 +-
 docs/latest/querying/nested-columns/index.html     |   8 +-
 docs/latest/querying/post-aggregations/index.html  |   8 +-
 docs/latest/querying/query-context/index.html      |   8 +-
 docs/latest/querying/query-deep-storage/index.html |   8 +-
 docs/latest/querying/query-execution/index.html    |   8 +-
 docs/latest/querying/query-processing/index.html   |   8 +-
 docs/latest/querying/scan-query/index.html         |   8 +-
 docs/latest/querying/searchquery/index.html        |   8 +-
 .../querying/segmentmetadataquery/index.html       |   8 +-
 docs/latest/querying/select-query/index.html       |   8 +-
 docs/latest/querying/sorting-orders/index.html     |   8 +-
 docs/latest/querying/sql-aggregations/index.html   |   8 +-
 .../latest/querying/sql-array-functions/index.html |   8 +-
 docs/latest/querying/sql-data-types/index.html     |   8 +-
 docs/latest/querying/sql-functions/index.html      |   8 +-
 docs/latest/querying/sql-json-functions/index.html |   8 +-
 .../latest/querying/sql-metadata-tables/index.html |   8 +-
 .../sql-multivalue-string-functions/index.html     |   8 +-
 docs/latest/querying/sql-operators/index.html      |   8 +-
 docs/latest/querying/sql-query-context/index.html  |   8 +-
 docs/latest/querying/sql-scalar/index.html         |   8 +-
 docs/latest/querying/sql-translation/index.html    |   8 +-
 .../querying/sql-window-functions/index.html       |   8 +-
 docs/latest/querying/sql/index.html                |   8 +-
 docs/latest/querying/timeboundaryquery/index.html  |   8 +-
 docs/latest/querying/timeseriesquery/index.html    |   8 +-
 docs/latest/querying/tips-good-queries/index.html  |   8 +-
 docs/latest/querying/topnmetricspec/index.html     |   8 +-
 docs/latest/querying/topnquery/index.html          |   8 +-
 docs/latest/querying/troubleshooting/index.html    |   8 +-
 docs/latest/querying/using-caching/index.html      |   8 +-
 docs/latest/querying/virtual-columns/index.html    |   8 +-
 .../release-info/migr-ansi-sql-null/index.html     |   8 +-
 .../release-info/migr-front-coded-dict/index.html  |   8 +-
 docs/latest/release-info/migr-mvd-array/index.html |   8 +-
 .../release-info/migr-subquery-limit/index.html    |   8 +-
 .../latest/release-info/migration-guide/index.html |   8 +-
 docs/latest/release-info/release-notes/index.html  |  29 +---
 docs/latest/release-info/upgrade-notes/index.html  |   8 +-
 docs/latest/tutorials/cluster/index.html           |  14 +-
 docs/latest/tutorials/docker/index.html            |  10 +-
 docs/latest/tutorials/index.html                   |  20 +--
 .../tutorials/tutorial-append-data/index.html      |   8 +-
 .../tutorials/tutorial-batch-hadoop/index.html     |  10 +-
 .../tutorials/tutorial-batch-native/index.html     |   8 +-
 docs/latest/tutorials/tutorial-batch/index.html    |  10 +-
 .../tutorials/tutorial-compaction/index.html       |   8 +-
 .../tutorials/tutorial-delete-data/index.html      |   8 +-
 .../tutorials/tutorial-ingestion-spec/index.html   |  10 +-
 docs/latest/tutorials/tutorial-jdbc/index.html     |   8 +-
 docs/latest/tutorials/tutorial-kafka/index.html    |   8 +-
 .../tutorials/tutorial-kerberos-hadoop/index.html  |   8 +-
 .../latest/tutorials/tutorial-latest-by/index.html |   8 +-
 .../tutorials/tutorial-msq-convert-spec/index.html |   8 +-
 .../tutorials/tutorial-msq-extern/index.html       |   8 +-
 .../tutorial-query-deep-storage/index.html         |   8 +-
 docs/latest/tutorials/tutorial-query/index.html    |   8 +-
 .../latest/tutorials/tutorial-retention/index.html |   8 +-
 docs/latest/tutorials/tutorial-rollup/index.html   |   8 +-
 .../tutorials/tutorial-sketches-theta/index.html   |   8 +-
 docs/latest/tutorials/tutorial-sql-null/index.html |   8 +-
 .../tutorials/tutorial-sql-query-view/index.html   |   8 +-
 .../latest/tutorials/tutorial-transform/index.html |   8 +-
 .../tutorials/tutorial-unnest-arrays/index.html    |   8 +-
 .../tutorials/tutorial-update-data/index.html      |   8 +-
 downloads/index.html                               |  10 +-
 druid-powered/index.html                           |   8 +-
 faq/index.html                                     |   8 +-
 index.html                                         |  10 +-
 js/version.js                                      |   4 +-
 libraries/index.html                               |   8 +-
 licensing/index.html                               |   8 +-
 lunr-index.json                                    |   2 +-
 search-doc.json                                    |   2 +-
 technology/index.html                              |   8 +-
 use-cases/index.html                               |   8 +-
 901 files changed, 15048 insertions(+), 1129 deletions(-)

diff --git a/404.html b/404.html
index a62cdb580..bd3b1d1e1 100644
--- a/404.html
+++ b/404.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.0fe0edab.js" as="script">
-<link rel="preload" href="/assets/js/main.9b5bbe9a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0af847c9.js" as="script">
+<link rel="preload" href="/assets/js/main.d0f3a16d.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.0fe0edab.js"></script>
-<script src="/assets/js/main.9b5bbe9a.js"></script>
+<script src="/assets/js/runtime~main.0af847c9.js"></script>
+<script src="/assets/js/main.d0f3a16d.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 395c30821..b3343ce3e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.0fe0edab.js" as="script">
-<link rel="preload" href="/assets/js/main.9b5bbe9a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0af847c9.js" as="script">
+<link rel="preload" href="/assets/js/main.d0f3a16d.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.0fe0edab.js"></script>
-<script src="/assets/js/main.9b5bbe9a.js"></script>
+<script src="/assets/js/runtime~main.0af847c9.js"></script>
+<script src="/assets/js/main.d0f3a16d.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/cla/index.html b/community/cla/index.html
index 22e161652..8030e1db0 100644
--- a/community/cla/index.html
+++ b/community/cla/index.html
@@ -14,15 +14,15 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.0fe0edab.js" as="script">
-<link rel="preload" href="/assets/js/main.9b5bbe9a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0af847c9.js" as="script">
+<link rel="preload" href="/assets/js/main.d0f3a16d.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
 the Apache Software Foundation.</p><p>Other contributors are free to submit patches without having a CLA on file. You should only submit patches to the
 project when you intend to license your contribution under the Apache 2.0 license, and have the legal right to do so.</p></article></div></div></main></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="foote [...]
-<script src="/assets/js/runtime~main.0fe0edab.js"></script>
-<script src="/assets/js/main.9b5bbe9a.js"></script>
+<script src="/assets/js/runtime~main.0af847c9.js"></script>
+<script src="/assets/js/main.d0f3a16d.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 5df8d8910..63f16a692 100644
--- a/community/index.html
+++ b/community/index.html
@@ -14,8 +14,8 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.0fe0edab.js" as="script">
-<link rel="preload" href="/assets/js/main.9b5bbe9a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0af847c9.js" as="script">
+<link rel="preload" href="/assets/js/main.d0f3a16d.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -50,7 +50,7 @@ existing committers for a walk through the process. Basically, what we&#x27;re
 looking for is an interest in ongoing contributions to Druid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="general-committer-guidelines">General committer guidelines<a href="#general-committer-guidelines" class="hash-link" aria-label="Direct link to General committer guidelines" title="Direct link to General committer guidelines">​</a></h3><p>If you are an official Druid committer then congratulations! You are part of a fantastic group of people. Here are some guidelines to foll [...]
 aspects of the Druid project. The responsibilities of the PMC include:</p><ul><li>Approving releases</li><li>Nominating new committers</li><li>Maintaining the project&#x27;s shared resources, including the github account,
 mailing lists, websites, social media channels, etc.</li><li>Maintaining guidelines for the project</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#community" class="table-of-contents__link toc-highlight">Community</a></li><li><a href="#getting-help" class="table-of-contents__link toc-highlight">Getting help</a></li><li><a href="#contributing" class="table-of-conte [...]
-<script src="/assets/js/runtime~main.0fe0edab.js"></script>
-<script src="/assets/js/main.9b5bbe9a.js"></script>
+<script src="/assets/js/runtime~main.0af847c9.js"></script>
+<script src="/assets/js/main.d0f3a16d.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/join-slack/index.html b/community/join-slack/index.html
index cab5ab320..b8f3a1ff4 100644
--- a/community/join-slack/index.html
+++ b/community/join-slack/index.html
@@ -14,13 +14,13 @@
 
 <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
-<link rel="preload" href="/assets/js/runtime~main.0fe0edab.js" as="script">
-<link rel="preload" href="/assets/js/main.9b5bbe9a.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0af847c9.js" as="script">
+<link rel="preload" href="/assets/js/main.d0f3a16d.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
-<script src="/assets/js/runtime~main.0fe0edab.js"></script>
-<script src="/assets/js/main.9b5bbe9a.js"></script>
+<script src="/assets/js/runtime~main.0af847c9.js"></script>
+<script src="/assets/js/main.d0f3a16d.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference.html/index.html b/docs/31.0.1/api-reference.html/index.html
new file mode 100644
index 000000000..fb8e66c94
--- /dev/null
+++ b/docs/31.0.1/api-reference.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/automatic-compaction-api.html/index.html b/docs/31.0.1/api-reference/automatic-compaction-api.html/index.html
new file mode 100644
index 000000000..f6ea32b38
--- /dev/null
+++ b/docs/31.0.1/api-reference/automatic-compaction-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/automatic-compaction-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/automatic-compaction-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/automatic-compaction-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/automatic-compaction-api/index.html b/docs/31.0.1/api-reference/automatic-compaction-api/index.html
new file mode 100644
index 000000000..c2fac6bd0
--- /dev/null
+++ b/docs/31.0.1/api-reference/automatic-compaction-api/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/automatic-compaction-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Automatic compaction API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/data-management-api.html/index.html b/docs/31.0.1/api-reference/data-management-api.html/index.html
new file mode 100644
index 000000000..895313320
--- /dev/null
+++ b/docs/31.0.1/api-reference/data-management-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/data-management-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/data-management-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/data-management-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/data-management-api/index.html b/docs/31.0.1/api-reference/data-management-api/index.html
new file mode 100644
index 000000000..4e64dd9c3
--- /dev/null
+++ b/docs/31.0.1/api-reference/data-management-api/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/data-management-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data management API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This includes information on how to mark segments as used or unused and delete them from Druid.</p><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port.
+Replace it with the information for your deployment.
+For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span [...]
+Even if these API requests update segments to used, you still need to configure a <a href="/docs/31.0.1/operations/rule-configuration#load-rules">load rule</a> to load them onto Historical processes.</p><p>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.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="segment-ids">Segment IDs<a href="#segment-ids" class="hash-link" aria-label="Direct link to Segment IDs" title="Direct link to Segment IDs">​</a></h3><p>You must provide segment IDs when using many of the endpoints described in this topic.
+For information on segment IDs, see <a href="/docs/31.0.1/design/segments#segment-identification">Segment identification</a>.
+For information on finding segment IDs in the web console, see <a href="/docs/31.0.1/operations/web-console#segments">Segments</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mark-a-single-segment-unused">Mark a single segment unused<a href="#mark-a-single-segment-unused" class="hash-link" aria-label="Direct link to Mark a single segment unused" title="Direct link to Mark a single segment unused">​</a></h3><p>Marks the state of a segment as unused, using the segment ID.
+This is a &quot;soft delete&quot; of the segment from Historicals.
+To undo this action, <a href="#mark-a-single-segment-as-used">mark the segment used</a>.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the segment ID or datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/coordinator/v1/datasources/{datasource}/segments/{segmentId}</code [...]
+Pass the array of segment IDs or interval as a JSON object in the request body.</p><p>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.
+Optionally, specify an array of segment versions with interval. Druid updates only the segments completely contained
+within the specified interval that match the optional list of versions; partially overlapping segments are not affected.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}/markUnused</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="request-body">Request body<a href="#request-body" class=" [...]
+Pass the array of segment IDs or interval as a JSON object in the request body.</p><p>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.
+Optionally, specify an array of segment versions with interval. Druid updates only the segments completely contained
+within the specified interval that match the optional list of versions; partially overlapping segments are not affected.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}/markUsed</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="request-body-1">Request body<a href="#request-body-1" class [...]
+This action performs a &quot;soft delete&quot; of the segments from Historicals.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/coordinator/v1/datasources/{datasource}</code></p><h4 class="anchor anchorWithSticky [...]
+The endpoint returns the number of changed segments.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> response code even if the datasource doesn&#x27;t exist.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-5">URL<a href="#url-5" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/datasources/{datasource}</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-2">Hea [...]
+<code>wikipedia_hour</code> contains one unused segment eligible to be marked as used.</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">cURL</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">HTTP</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-sh [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/dynamic-configuration-api.html/index.html b/docs/31.0.1/api-reference/dynamic-configuration-api.html/index.html
new file mode 100644
index 000000000..d94ba898d
--- /dev/null
+++ b/docs/31.0.1/api-reference/dynamic-configuration-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/dynamic-configuration-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/dynamic-configuration-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/dynamic-configuration-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/dynamic-configuration-api/index.html b/docs/31.0.1/api-reference/dynamic-configuration-api/index.html
new file mode 100644
index 000000000..69303e155
--- /dev/null
+++ b/docs/31.0.1/api-reference/dynamic-configuration-api/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/dynamic-configuration-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Dynamic configuration API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/3 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Replace it with the information for your deployment.
+For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="coordinator-dynamic-configuration">Coordinator dynamic configuration<a href="#coordinator-dynamic-configuration" class="hash-link" aria-label="Direct link to Coordinator dynamic configuration" title="Direct link to Coordinator dynamic configuration">​</a></h2><p>The Coordinator has dynamic configurations to tune certain behavior on the fly, without requiri [...]
+For information on the supported properties, see <a href="/docs/31.0.1/configuration/#dynamic-configuration">Coordinator dynamic configuration</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration">Get dynamic configuration<a href="#get-dynamic-configuration" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h3><p>Retrieves the current Coordinator dynamic configuration. Returns a  [...]
+For information on the supported properties, see <a href="/docs/31.0.1/configuration/#dynamic-configuration">Dynamic configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-1">URL<a href="#url-1" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/coordinator/v1/config</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-parameters">Header parameters<a href="#header-parameters" class= [...]
+For information on the supported properties, see <a href="/docs/31.0.1/configuration/#overlord-dynamic-configuration">Overlord dynamic configuration</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration-1">Get dynamic configuration<a href="#get-dynamic-configuration-1" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h3><p>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.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/worker</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-3">Responses<a href="#responses-3" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Res [...]
+For information on the supported properties, see <a href="/docs/31.0.1/configuration/#overlord-dynamic-configuration">Overlord dynamic configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/worker</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="header-parameters-1">Header parameters<a href="#header-pa [...]
+Returns an empty response body if there are no Overlord scaling events.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-6">URL<a href="#url-6" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/scaling</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-7">Responses<a href="#responses-7" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Responses">​</a> [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/index.html b/docs/31.0.1/api-reference/index.html
new file mode 100644
index 000000000..6aa272155
--- /dev/null
+++ b/docs/31.0.1/api-reference/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/api-reference" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">API reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/api-re [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/json-querying-api.html/index.html b/docs/31.0.1/api-reference/json-querying-api.html/index.html
new file mode 100644
index 000000000..5eb994bdc
--- /dev/null
+++ b/docs/31.0.1/api-reference/json-querying-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/json-querying-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/json-querying-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/json-querying-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/json-querying-api/index.html b/docs/31.0.1/api-reference/json-querying-api/index.html
new file mode 100644
index 000000000..ea09cacc6
--- /dev/null
+++ b/docs/31.0.1/api-reference/json-querying-api/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/json-querying-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JSON querying API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ap [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/legacy-metadata-api.html/index.html b/docs/31.0.1/api-reference/legacy-metadata-api.html/index.html
new file mode 100644
index 000000000..dbbfd7f06
--- /dev/null
+++ b/docs/31.0.1/api-reference/legacy-metadata-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/legacy-metadata-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/legacy-metadata-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/legacy-metadata-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/legacy-metadata-api/index.html b/docs/31.0.1/api-reference/legacy-metadata-api/index.html
new file mode 100644
index 000000000..e4725910b
--- /dev/null
+++ b/docs/31.0.1/api-reference/legacy-metadata-api/index.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/legacy-metadata-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Legacy metadata API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+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:</p><ul><li>Druid has replicated it the number of times configured in the corresponding load rule.</li><li>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.</li></ul><p><code>GET /druid/coordinator/v1/loadqueue</code></p><p>Returns the ids of segments to load and drop for each Historical process.</p [...]
+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.</p><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>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). <code>forceMetadataRefresh</code> is required to be set. </p><ul><li>Setting <code>forceMetadataRefresh</code> to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;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&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> 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 <code>204 No Content</code></li></ul><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?simple&amp;forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>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. <code>forceMetadataRefresh</code> is required to be set. </p><ul><li>Setting <code>forceMetadataRefresh</code> to true will force the coordinator to poll latest segment metadata from the metadata store
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;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&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> 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 <code>204 No Content</code></li></ul><p><code>GET /druid/coordinator/v1/datasources/{dataSourceName}/loadstatus?full&amp;forceMetadataRefresh={boolean}&amp;interval={myInterval}</code></p><p>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 includ [...]
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;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&#x27; load status)</li><li>Setting <code>forceMetadataRefresh</code> to false will use the metadata cached on the coordinator from the last force/periodic refresh. </li></ul><p>You can pass the optional query parameter <code>computeUsingClusterView</code> to factor in the available cluster services when calculating
+the segments left to load. See <a href="#segment-loading">Coordinator Segment Loading</a> for details.
+If no used segments are found for the given inputs, this API returns <code>204 No Content</code></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-store-information">Metadata store information<a href="#metadata-store-information" class="hash-link" aria-label="Direct link to Metadata store information" title="Direct link to Metadata store information">​</a></h2><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_ [...]
+<a href="/docs/31.0.1/querying/sql-metadata-tables#segments-table"><code>sys.segments</code></a> table.</p></div></div><p><code>GET /druid/coordinator/v1/metadata/segments</code></p><p>Returns a list of all segments for each datasource enabled in the cluster.</p><p><code>GET /druid/coordinator/v1/metadata/segments?datasources={dataSourceName1}&amp;datasources={dataSourceName2}</code></p><p>Returns a list of all segments for one or more specific datasources enabled in the cluster.</p><p>< [...]
+segment is unused, or is unknown, a 404 response is returned.</p><p><code>GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments/{segmentId}?includeUnused=true</code></p><p>Returns full segment metadata for a specific segment as stored in the metadata store. If it is unknown, a 404 response
+is returned.</p><p><code>GET /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments</code></p><p>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 <code>[interval1, interval2,...]</code>—<!-- -->for example, <code>[&quot;2012-01-01T00:00:00.000/2012-01-03T00:00:00.000&quot;, &quot;2012-01-05T00:00:00.000/2012-01-07T00:00:00.000&quot;]</code>.</p> [...]
+processes that run with different types will appear multiple times with different
+ports.</p><p><code>GET /druid/coordinator/v1/servers?simple</code></p><p>Returns a list of server data objects in which each object has the following keys:</p><ul><li><code>host</code>: host URL include (<code>{hostname}:{port}</code>)</li><li><code>type</code>: process type (<code>indexer-executor</code>, <code>historical</code>)</li><li><code>currSize</code>: storage size currently used</li><li><code>maxSize</code>: maximum storage size</li><li><code>priority</code></li><li><code>tier< [...]
+as in <code>2016-06-27_2016-06-28</code>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionConte [...]
+<a href="/docs/31.0.1/querying/sql-metadata-tables#tables-table"><code>INFORMATION_SCHEMA.TABLES</code></a>,
+<a href="/docs/31.0.1/querying/sql-metadata-tables#columns-table"><code>INFORMATION_SCHEMA.COLUMNS</code></a>, and
+<a href="/docs/31.0.1/querying/sql-metadata-tables#segments-table"><code>sys.segments</code></a> tables.</p></div></div><p><code>GET /druid/v2/datasources</code></p><p>Returns a list of queryable datasources.</p><p><code>GET /druid/v2/datasources/{dataSourceName}</code></p><p>Returns the dimensions and metrics of the datasource. Optionally, you can provide request parameter &quot;full&quot; to get list of served intervals with dimensions and metrics being served for those intervals. You  [...]
+which provides more comprehensive information and supports all dataSource types including streaming dataSources. It&#x27;s also encouraged to use <a href="/docs/31.0.1/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>
+if you&#x27;re using SQL.</p></div></div><p>Returns the dimensions of the datasource.</p><p><code>GET /druid/v2/datasources/{dataSourceName}/metrics</code></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14  [...]
+which provides more comprehensive information and supports all dataSource types including streaming dataSources. It&#x27;s also encouraged to use <a href="/docs/31.0.1/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>
+if you&#x27;re using SQL.</p></div></div><p>Returns the metrics of the datasource.</p><p><code>GET /druid/v2/datasources/{dataSourceName}/candidates?intervals={comma-separated-intervals}&amp;numCandidates={numCandidates}</code></p><p>Returns segment information lists including server locations for the given datasource and intervals. If &quot;numCandidates&quot; is not specified, it will return all servers for each interval.</p></div></article><nav class="pagination-nav docusaurus-mt-lg"  [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/lookups-api.html/index.html b/docs/31.0.1/api-reference/lookups-api.html/index.html
new file mode 100644
index 000000000..0bcc6eda8
--- /dev/null
+++ b/docs/31.0.1/api-reference/lookups-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/lookups-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/lookups-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/lookups-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/lookups-api/index.html b/docs/31.0.1/api-reference/lookups-api/index.html
new file mode 100644
index 000000000..2a687d4b0
--- /dev/null
+++ b/docs/31.0.1/api-reference/lookups-api/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/lookups-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Lookups API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/api-refe [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+To discover a list of tiers currently active in the cluster in addition to ones known in the dynamic configuration, the parameter <code>discover=true</code> can be added as per <code>/druid/coordinator/v1/lookups/config?discover=true</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="list-lookup-names">List lookup names<a href="#list-lookup-names" class="hash-link" aria-label="Direct link to List lookup names" title="Direct link to List lookup names">​</a></h3><p>A <code>GET</ [...]
+There is an internal API these processes use to list/load/drop their lookups starting at <code>/druid/listen/v1/lookups</code>.
+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.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-lookups">Get lookups<a href="#get-lookups" class="hash-link" aria-label="Direct link to Get lookups" title="Direct link to Get lookups">​</a></h3><p>A <code>GET</code> to the process at <code>/druid/listen/v1/lookups</code> 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.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span c [...]
+The return value will be the json representation of the factory.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plai [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/retention-rules-api.html/index.html b/docs/31.0.1/api-reference/retention-rules-api.html/index.html
new file mode 100644
index 000000000..0e58665c5
--- /dev/null
+++ b/docs/31.0.1/api-reference/retention-rules-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/retention-rules-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/retention-rules-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/retention-rules-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/retention-rules-api/index.html b/docs/31.0.1/api-reference/retention-rules-api/index.html
new file mode 100644
index 000000000..929703b17
--- /dev/null
+++ b/docs/31.0.1/api-reference/retention-rules-api/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/retention-rules-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Retention rules API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid reads rules in the order in which they appear; for more information, see <a href="/docs/31.0.1/operations/rule-configuration">rule structure</a>.</p><p>Note that this endpoint returns an HTTP <code>200 OK</code> even if the datasource does not exist.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h3><p><code>POST</code> <code>/druid/coordinator/v1/rules/{dataSource}</co [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/service-status-api.html/index.html b/docs/31.0.1/api-reference/service-status-api.html/index.html
new file mode 100644
index 000000000..0554a7c26
--- /dev/null
+++ b/docs/31.0.1/api-reference/service-status-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/service-status-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/service-status-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/service-status-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/service-status-api/index.html b/docs/31.0.1/api-reference/service-status-api/index.html
new file mode 100644
index 000000000..2b0a43416
--- /dev/null
+++ b/docs/31.0.1/api-reference/service-status-api/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/service-status-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Service status API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/a [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+For nodes that use Zookeeper segment discovery, a response of <code>{&quot;selfDiscovered&quot;: true}</code> indicates that the node&#x27;s Zookeeper client has started receiving data from the Zookeeper cluster, enabling timely discovery of segments and other nodes.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/status/selfDiscovered/status< [...]
+Use this endpoint for monitoring checks that are unable to examine the response body. For example, AWS load balancer health checks.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-4">URL<a href="#url-4" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/status/selfDiscovered</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-4">Responses<a href="#responses-4" class="hash-link" aria-label="Direct  [...]
+<a href="/docs/31.0.1/api-reference/tasks-api">Tasks API</a> endpoint instead.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-11">URL<a href="#url-11" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/worker/v1/task/{taskId}/log</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="shut-down-running-task">Shut down running task<a href="#shut-down-running-task" class="hash-link" aria-label="Direct link [...]
+<a href="/docs/31.0.1/api-reference/tasks-api">Tasks API</a> endpoint instead.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-12">URL<a href="#url-12" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/worker/v1/task/{taskId}/shutdown</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-11">Responses<a href="#responses-11" class="hash-link" aria-label="Direct link to Responses" title="Direc [...]
+keyed by the combined <code>druid.host</code> and <code>druid.port</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-13">URL<a href="#url-13" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/worker/v1/disable</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-12">Responses<a href="#responses-12" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Responses [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-api.html/index.html b/docs/31.0.1/api-reference/sql-api.html/index.html
new file mode 100644
index 000000000..4556910f7
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/sql-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/sql-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/sql-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-api/index.html b/docs/31.0.1/api-reference/sql-api/index.html
new file mode 100644
index 000000000..041948a71
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-api/index.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid SQL API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/api-re [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes the SQL language.</p></div></div><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="query-from-historicals">Query from Historicals<a href="#query-from-historicals" class="hash-link" aria-label="Direct link to Quer [...]
+<!-- -->Object field names match the columns returned by the SQL query in the same order as the SQL query.</p></li><li><p><code>array</code>: Returns a JSON array of JSON arrays with the HTTP response header <code>Content-Type: application/json</code>.<br>
+<!-- -->Each inner array has elements matching the columns returned by the SQL query, in order.</p></li><li><p><code>objectLines</code>: Returns newline-delimited JSON objects with the HTTP response header <code>Content-Type: text/plain</code>.<br>
+<!-- -->Newline separation facilitates parsing the entire response set as a stream if you don&#x27;t have a streaming JSON parser.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li><li><p><code>arrayLines</code>: Returns newline-delimited JSON arrays with the HTTP response header <code>Content-Type: text/plain</code>.<br>
+<!-- -->Newline separation facilitates parsing the entire response set as a stream if you don&#x27;t have a streaming JSON parser.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li><li><p><code>csv</code>: Returns comma-separated values with one row per line. Sent with the HTTP response header <code>Content-Type: text/csv</code>.<br>
+<!-- -->Druid uses double quotes to escape individual field values. For example, a value with a comma returns <code>&quot;A,B&quot;</code>.
+If the field value contains a double quote character, Druid escapes it with a second double quote character.
+For example, <code>foo&quot;bar</code> becomes <code>foo&quot;&quot;bar</code>.
+This format includes a single trailing newline character so you can detect a truncated response.</p></li></ul></li><li><p><code>header</code>: Boolean value that determines whether to return information on column names. When set to <code>true</code>, Druid returns the column names as the first row of the results. To also get information on the column types, set <code>typesHeader</code> or <code>sqlTypesHeader</code> to <code>true</code>. For a comparative overview of data formats and con [...]
+If an error occurs while Druid is sending the response body, the server handling the request stops the response midstream and logs an error.</p><p>This means that when you call the SQL API, you must properly handle response truncation.
+For  <code>object</code> and <code>array</code> formats, truncated responses are invalid JSON.
+For line-oriented formats, Druid includes a newline character as the final character of every complete response. Absence of a final newline character indicates a truncated response.</p><p>If you detect a truncated response, treat it as an error.</p><hr><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sample-request">Sample request<a href="#sample-request" class="hash-link" aria-label="Direct link to Sample request" title="Direct link to Sample request">​</a></h4><p>The following exampl [...]
+In all cases, <code>header</code> is true.
+The examples includes the first row of results, where the value of <code>user</code> is <code>BlueMoon2662</code>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">| Format | typesHeader | sqlTypesH [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-ingestion-api.html/index.html b/docs/31.0.1/api-reference/sql-ingestion-api.html/index.html
new file mode 100644
index 000000000..b219ed078
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-ingestion-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/sql-ingestion-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/sql-ingestion-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/sql-ingestion-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-ingestion-api/index.html b/docs/31.0.1/api-reference/sql-ingestion-api/index.html
new file mode 100644
index 000000000..08aac944b
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-ingestion-api/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-ingestion-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">SQL-based ingestion API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+extension, new in Druid 24.0. Refer to the <a href="/docs/31.0.1/ingestion/#batch">ingestion methods</a> table to determine which
+ingestion method is right for you.</p></div></div><p>The <strong>Query</strong> 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 don&#x27;t need a programmatic interface.</p><p>When using the API for the MSQ task engine, the action you want to take determines the endpoint you use:</p><ul><li><code>/druid/v2/sql/task</code>: Submit a query for ingesti [...]
+<code>query</code>, <code>context</code>, and <code>parameters</code> fields. The endpoint ignores the <code>resultFormat</code>, <code>header</code>, <code>typesHeader</code>, and <code>sqlTypesHeader</code> fields.</li><li><a href="/docs/31.0.1/multi-stage-query/reference#insert">INSERT</a> and <a href="/docs/31.0.1/multi-stage-query/reference#replace">REPLACE</a> statements.</li><li>SELECT queries (experimental feature). SELECT query results are collected from workers by the controlle [...]
+The report provides detailed information about the query task, including things like the stages, warnings, and errors.</p><p>Keep the following in mind when using the task API to view reports:</p><ul><li>The task report for an entire job is associated with the <code>query_controller</code> task. The <code>query_worker</code> tasks don&#x27;t have their own reports; their information is incorporated into the controller report.</li><li>The task report API may report <code>404 Not Found</co [...]
+the <code>multiStageQuery.payload.results.results</code> 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.</li><li><code>multiStageQuery.payload.results.resultsTruncated</code> denotes whether the results of the report have been truncated to prevent the reports from blowing up.</li></ul><p>For an explanation of the fields in a report, see <a href="#report-response-fields">Report response fields</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL"  [...]
+Returns a JSON object with the ID of the task that was canceled successfully.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="url-3">URL<a href="#url-3" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h3><p><code>POST</code> <code>/druid/indexer/v1/task/{taskId}/shutdown</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="responses-3">Responses<a href="#responses-3" class="hash-link" aria-label="Direct link to Responses" title="Direct li [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-jdbc.html/index.html b/docs/31.0.1/api-reference/sql-jdbc.html/index.html
new file mode 100644
index 000000000..b3b83dffe
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-jdbc.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/sql-jdbc">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/sql-jdbc" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/sql-jdbc' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/sql-jdbc/index.html b/docs/31.0.1/api-reference/sql-jdbc/index.html
new file mode 100644
index 000000000..ecd0b8dd1
--- /dev/null
+++ b/docs/31.0.1/api-reference/sql-jdbc/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/sql-jdbc" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">SQL JDBC driver API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes the SQL language.</p></div></div><p>You can make <a href="/docs/31.0.1/querying/sql">Druid SQL</a> queries using the <a href="https://calcite.apache.org/avatica/downloads/" target="_blank" rel="noopener noreferrer">Avatica JDBC driver</a>.
+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 <a href="https://calcite.apache.org/avatica/docs/client_reference.html#transparent_reconnection" target="_blank" rel="noopener noreferrer"><code>transparent_reconnection</code></a> property to <code>true</code> if you notice intermittent query failures.</p><p>Once you&#x27;ve downloaded the Avatica client jar, add it to your classpath.</p><p>Example connection s [...]
+For more information, see <a href="#connection-stickiness">Connection stickiness</a>.</p><p>Set <code>transparent_reconnection</code> to <code>true</code> so your connection is not interrupted if the pool of Brokers changes membership,
+or if a Broker is restarted.</p><p>Set <code>serialization</code> to <code>protobuf</code> if using the protobuf endpoint.</p><p>Note that as of the time of this writing, Avatica 1.23.0, the latest version, does not support passing
+<a href="/docs/31.0.1/querying/sql-query-context">connection context parameters</a> from the JDBC connection string to Druid. These context parameters
+must be passed using a <code>Properties</code> object instead. Refer to the Java code below for an example.</p><p>Example Java code:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">// [...]
+improvements for larger result sets. To use it apply the following connection URL instead, everything else remains the same</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">String url = &quot;jdbc:a [...]
+<a href="/docs/31.0.1/querying/sql-metadata-tables">INFORMATION_SCHEMA tables</a>. For an example of this, see <a href="#get-the-metadata-for-a-datasource">Get the metadata for a datasource</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="connection-stickiness">Connection stickiness<a href="#connection-stickiness" class="hash-link" aria-label="Direct link to Connection stickiness" title="Direct link to Connection stickiness">​</a></h2><p>Druid&#x27;s JDBC server does not share  [...]
+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
+<a href="/docs/31.0.1/design/router">Router</a> documentation for more details.</p><p>Note that the non-JDBC <a href="/docs/31.0.1/api-reference/sql-api#submit-a-query">JSON over HTTP</a> API is stateless and does not require stickiness.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="dynamic-parameters">Dynamic parameters<a href="#dynamic-parameters" class="hash-link" aria-label="Direct link to Dynamic parameters" title="Direct link to Dynamic parameters">​</a></h2><p>You can use  [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/supervisor-api.html/index.html b/docs/31.0.1/api-reference/supervisor-api.html/index.html
new file mode 100644
index 000000000..4ab41bb81
--- /dev/null
+++ b/docs/31.0.1/api-reference/supervisor-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/supervisor-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/supervisor-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/supervisor-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/supervisor-api/index.html b/docs/31.0.1/api-reference/supervisor-api/index.html
new file mode 100644
index 000000000..2c64ce709
--- /dev/null
+++ b/docs/31.0.1/api-reference/supervisor-api/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/supervisor-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Supervisor API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/api-r [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The topic uses the Apache Kafka term offset to refer to the identifier for records in a partition. If you are using Amazon Kinesis, the equivalent is sequence number.</p><p>In this topic, <code>http://ROUTER_IP:ROUTER_PORT</code> is a placeholder for your Router service address and port. Replace it with the information for your deployment. For example, use <code>http://localhost:8888</code> for quickstart deployments.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="supervisor-infor [...]
+This way, you can apply configuration changes without a pause in ingestion.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-9">URL<a href="#url-9" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-9">Responses<a href="#responses-9" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Response [...]
+Indexing tasks remain suspended until you <a href="#resume-a-supervisor">resume the supervisor</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-10">URL<a href="#url-10" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor/{supervisorId}/suspend</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-10">Responses<a href="#responses-10" class="hash-link" aria-label="Direc [...]
+After clearing all stored offsets, the supervisor kills and recreates active tasks,
+so that tasks begin reading from valid positions.</p><p>Use this endpoint to recover from a stopped state due to missing offsets. Use this endpoint with caution as it may result in skipped messages and lead to data loss or duplicate data.</p><p>The indexing service keeps track of the latest persisted offsets to provide exactly-once ingestion guarantees across tasks. Subsequent tasks must start reading from where the previous task completed for Druid to accept the generated segments. If t [...]
+If there are no stored offsets, the specified offsets are set in the metadata store.</p><p>After resetting stored offsets, the supervisor kills and recreates any active tasks pertaining to the specified partitions,
+so that tasks begin reading specified offsets. For partitions that are not specified in this operation, the supervisor resumes from the last stored offset.</p><p>Use this endpoint with caution. It can cause skipped messages, leading to data loss or duplicate data.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-15">URL<a href="#url-15" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>POST</code> <code>/druid/indexer/v1/supervisor/{ [...]
+when the supervisor&#x27;s tasks restart, they resume reading from <code>{&quot;0&quot;: 100, &quot;1&quot;: 10, &quot;2&quot;: 650, &quot;3&quot;: 40}</code>.</p></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sample-response-15">Sample response<a href="#sample-response-15" class="hash-link" aria-label="Direct link to Sample response" title="Direct link to Sample response">​</a></h4><details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true">< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/tasks-api.html/index.html b/docs/31.0.1/api-reference/tasks-api.html/index.html
new file mode 100644
index 000000000..708942110
--- /dev/null
+++ b/docs/31.0.1/api-reference/tasks-api.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/api-reference/tasks-api">
+    <link rel="canonical" href="/docs/31.0.1/api-reference/tasks-api" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/api-reference/tasks-api' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/api-reference/tasks-api/index.html b/docs/31.0.1/api-reference/tasks-api/index.html
new file mode 100644
index 000000000..119335d45
--- /dev/null
+++ b/docs/31.0.1/api-reference/tasks-api/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-api-reference/tasks-api" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Tasks API | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/api-refere [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Use the metric <code>segment/added/bytes</code> instead to identify the segment IDs committed by a task.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-7">URL<a href="#url-7" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>GET</code> <code>/druid/indexer/v1/task/{taskId}/segments</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-7">Responses<a href="#responses-7" class="hash-link" aria-label="Dire [...]
+<code>numDeleted</code> for the number of rows deleted from the pending segments table. This API is used by the
+<code>druid.coordinator.kill.pendingSegments.on</code> <a href="/docs/31.0.1/configuration/#coordinator-operation">Coordinator setting</a>
+which automates this operation to perform periodically.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="url-14">URL<a href="#url-14" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h4><p><code>DELETE</code> <code>/druid/indexer/v1/pendingSegments/{datasource}</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="responses-14">Responses<a href="#responses-14" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Resp [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-elasticsearch.html/index.html b/docs/31.0.1/comparisons/druid-vs-elasticsearch.html/index.html
new file mode 100644
index 000000000..1538d81f7
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-elasticsearch.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-elasticsearch">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-elasticsearch" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-elasticsearch' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-elasticsearch/index.html b/docs/31.0.1/comparisons/druid-vs-elasticsearch/index.html
new file mode 100644
index 000000000..58a1e8850
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-elasticsearch/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-elasticsearch" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs Elasticsearch | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+and provides access to raw event level data. Elasticsearch is increasingly adding more support for analytics and aggregations.
+<a href="https://groups.google.com/forum/#!msg/druid-development/nlpwTHNclj8/sOuWlKOzPpYJ" target="_blank" rel="noopener noreferrer">Some members of the community</a> have pointed out
+the resource requirements for data ingestion and aggregation in Elasticsearch is much higher than those of Druid.</p><p>Elasticsearch also does not support data summarization/roll-up at ingestion time, which can compact the data that needs to be
+stored up to 100x with real-world data sets. This leads to Elasticsearch having greater storage requirements.</p><p>Druid focuses on OLAP work flows. Druid is optimized for high performance (fast aggregation and ingestion) at low cost,
+and supports a wide range of analytic operations. Druid has some basic search support for structured event data, but does not support
+full text search. Druid also does not support completely unstructured data. Measures must be defined in a Druid schema such that
+summarization/roll-up can be done.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div>< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-key-value.html/index.html b/docs/31.0.1/comparisons/druid-vs-key-value.html/index.html
new file mode 100644
index 000000000..0583585e4
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-key-value.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-key-value">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-key-value" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-key-value' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-key-value/index.html b/docs/31.0.1/comparisons/druid-vs-key-value/index.html
new file mode 100644
index 000000000..6d6f21ada
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-key-value/index.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-key-value" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs. Key/Value Stores (HBase/Cassandra/OpenTSDB) | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" conte [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+is supported in key/value stores in 2 ways:</p><ol><li>Pre-compute all permutations of possible user queries</li><li>Range scans on event data</li></ol><p>When pre-computing results, the key is the exact parameters of the query, and the value is the result of the query.
+The queries return extremely quickly, but at the cost of flexibility, as ad-hoc exploratory queries are not possible with
+pre-computing every possible query permutation. Pre-computing all permutations of all ad-hoc queries leads to result sets
+that grow exponentially with the number of columns of a data set, and pre-computing queries for complex real-world data sets
+can require hours of pre-processing time.</p><p>The other approach to using key/value stores for aggregations to use the dimensions of an event as the key and the event measures as the value.
+Aggregations are done by issuing range scans on this data. Timeseries specific databases such as OpenTSDB use this approach.
+One of the limitations here is that the key/value storage model does not have indexes for any kind of filtering other than prefix ranges,
+which can be used to filter a query down to a metric and time range, but cannot resolve complex predicates to narrow the exact data to scan.
+When the number of rows to scan gets large, this limitation can greatly reduce performance. It is also harder to achieve good
+locality with key/value stores because most don’t support pushing down aggregates to the storage layer.</p><p>For arbitrary exploration of data (flexible data filtering), Druid&#x27;s custom column format enables ad-hoc queries without pre-computation. The format
+also enables fast scans on columns, which is important for good aggregation performance.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedI [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-kudu.html/index.html b/docs/31.0.1/comparisons/druid-vs-kudu.html/index.html
new file mode 100644
index 000000000..552b01499
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-kudu.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-kudu">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-kudu" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-kudu' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-kudu/index.html b/docs/31.0.1/comparisons/druid-vs-kudu/index.html
new file mode 100644
index 000000000..5dab6395a
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-kudu/index.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-kudu" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs Kudu | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+the process for updating old values should be higher latency in Druid. However, the requirements in Kudu for maintaining extra head space to store
+updates as well as organizing data by id instead of time has the potential to introduce some extra latency and accessing
+of data that is not needed to answer a query at query time.</p><p>Druid summarizes/rollups up data at ingestion time, which in practice reduces the raw data that needs to be
+stored significantly (up to 40 times on average), and increases performance of scanning raw data significantly.
+Druid segments also contain bitmap indexes for fast filtering, which Kudu does not currently support.
+Druid&#x27;s segment architecture is heavily geared towards fast aggregates and filters, and for OLAP workflows. Appends are very
+fast in Druid, whereas updates of older data are higher latency. This is by design as the data Druid is good for is typically event data,
+and does not need to be updated too frequently. Kudu supports arbitrary primary keys with uniqueness constraints, and
+efficient lookup by ranges of those keys. Kudu chooses not to include the execution engine, but supports sufficient
+operations so as to allow node-local processing from the execution engines. This means that Kudu can support multiple frameworks on the same data (e.g., MR, Spark, and SQL).
+Druid includes its own query layer that allows it to push down aggregations and computations directly to data processes for faster query processing.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_H [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-redshift.html/index.html b/docs/31.0.1/comparisons/druid-vs-redshift.html/index.html
new file mode 100644
index 000000000..44e2d190d
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-redshift.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-redshift">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-redshift" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-redshift' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-redshift/index.html b/docs/31.0.1/comparisons/druid-vs-redshift/index.html
new file mode 100644
index 000000000..f9fb701f9
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-redshift/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-redshift" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs Redshift | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-spark.html/index.html b/docs/31.0.1/comparisons/druid-vs-spark.html/index.html
new file mode 100644
index 000000000..399265a50
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-spark.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-spark">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-spark" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-spark' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-spark/index.html b/docs/31.0.1/comparisons/druid-vs-spark/index.html
new file mode 100644
index 000000000..97712bae0
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-spark/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-spark" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs Spark | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+RDDs enable data reuse by persisting intermediate results
+in memory and enable Spark to provide fast computations for iterative algorithms.
+This is especially beneficial for certain work flows such as machine
+learning, where the same operation may be applied over and over
+again until some result is converged upon. The generality of Spark makes it very suitable as an engine to process (clean or transform) data.
+Although Spark provides the ability to query data through Spark SQL, much like Hadoop, the query latencies are not specifically targeted to be interactive (sub-second).</p><p>Druid&#x27;s focus is on extremely low latency queries, and is ideal for powering applications used by thousands of users, and where each query must
+return fast enough such that users can interactively explore through data. Druid fully indexes all data, and can act as a middle layer between Spark and your application.
+One typical setup seen in production is to process data in Spark, and load the processed data into Druid for faster access.</p><p>For more information about using Druid and Spark together, including benchmarks of the two systems, please see:</p><p><a href="https://www.linkedin.com/pulse/combining-druid-spark-interactive-flexible-analytics-scale-butani" target="_blank" rel="noopener noreferrer">https://www.linkedin.com/pulse/combining-druid-spark-interactive-flexible-analytics-scale-butan [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop.html/index.html b/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop.html/index.html
new file mode 100644
index 000000000..0c4aa57cf
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop">
+    <link rel="canonical" href="/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop/index.html b/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop/index.html
new file mode 100644
index 000000000..6227de850
--- /dev/null
+++ b/docs/31.0.1/comparisons/druid-vs-sql-on-hadoop/index.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-comparisons/druid-vs-sql-on-hadoop" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Druid vs SQL-on-Hadoop | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+execution engine for various data formats and data stores, and
+many can be made to push down computations down to Druid, while providing a SQL interface to Druid.</p><p>For a direct comparison between the technologies and when to only use one or the other, things basically comes down to your
+product requirements and what the systems were designed to do.</p><p>Druid was designed to</p><ol><li>be an always on service</li><li>ingest data in real-time</li><li>handle slice-n-dice style ad-hoc queries</li></ol><p>SQL-on-Hadoop engines generally sidestep Map/Reduce, instead querying data directly from HDFS or, in some cases, other storage systems.
+Some of these engines (including Impala and Presto) can be co-located with HDFS data nodes and coordinate with them to achieve data locality for queries.
+What does this mean?  We can talk about it in terms of three general areas</p><ol><li>Queries</li><li>Data Ingestion</li><li>Query Flexibility</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="queries">Queries<a href="#queries" class="hash-link" aria-label="Direct link to Queries" title="Direct link to Queries">​</a></h3><p>Druid segments stores data in a custom column format. Segments are scanned directly as part of queries and each Druid server
+calculates a set of results that are eventually merged at the Broker level. This means the data that is transferred between servers
+are queries and results, and all computation is done internally as part of the Druid servers.</p><p>Most SQL-on-Hadoop engines are responsible for query planning and execution for underlying storage layers and storage formats.
+They are processes that stay on even if there is no query running (eliminating the JVM startup costs from Hadoop MapReduce).
+Some (Impala/Presto) SQL-on-Hadoop engines have daemon processes that can be run where the data is stored, virtually eliminating network transfer costs. There is still
+some latency overhead (e.g. serialization/deserialization time) associated with pulling data from the underlying storage layer into the computation layer. We are unaware of exactly
+how much of a performance impact this makes.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-ingestion">Data Ingestion<a href="#data-ingestion" class="hash-link" aria-label="Direct link to Data Ingestion" title="Direct link to Data Ingestion">​</a></h3><p>Druid is built to allow for real-time ingestion of data.  You can ingest data and query it immediately upon ingestion,
+the latency between how quickly the event is reflected in the data is dominated by how long it takes to deliver the event to Druid.</p><p>SQL-on-Hadoop, being based on data in HDFS or some other backing store, are limited in their data ingestion rates by the
+rate at which that backing store can make data available.  Generally, the backing store is the biggest bottleneck for
+how quickly data can become available.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="query-flexibility">Query Flexibility<a href="#query-flexibility" class="hash-link" aria-label="Direct link to Query Flexibility" title="Direct link to Query Flexibility">​</a></h3><p>Druid&#x27;s query language is fairly low level and maps to how Druid operates internally. Although Druid can be combined with a high level query
+planner to support most SQL queries and analytic SQL queries (minus joins among large tables),
+base Druid is less flexible than SQL-on-Hadoop solutions for generic processing.</p><p>SQL-on-Hadoop support SQL style queries with full joins.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="druid-vs-parquet">Druid vs Parquet<a href="#druid-vs-parquet" class="hash-link" aria-label="Direct link to Druid vs Parquet" title="Direct link to Druid vs Parquet">​</a></h2><p>Parquet is a column storage format that is designed to work with SQL-on-Hadoop engines. Parquet doesn&#x27;t have a  [...]
+relies on external sources to pull data out of it.</p><p>Druid&#x27;s storage format is highly optimized for linear scans. Although Druid has support for nested data, Parquet&#x27;s storage format is much
+more hierarchical, and is more designed for binary chunking. In theory, this should lead to faster scans in Druid.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#queries" class="table-of-contents__link toc-highlight">Queries</a></li><li><a href="#data-ingestion"  [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration.html/index.html b/docs/31.0.1/configuration.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/auth.html/index.html b/docs/31.0.1/configuration/auth.html/index.html
new file mode 100644
index 000000000..525b14532
--- /dev/null
+++ b/docs/31.0.1/configuration/auth.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/operations/auth">
+    <link rel="canonical" href="/docs/31.0.1/operations/auth" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/operations/auth' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/broker.html/index.html b/docs/31.0.1/configuration/broker.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration/broker.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/caching.html/index.html b/docs/31.0.1/configuration/caching.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration/caching.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/coordinator.html/index.html b/docs/31.0.1/configuration/coordinator.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration/coordinator.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/extensions.html/index.html b/docs/31.0.1/configuration/extensions.html/index.html
new file mode 100644
index 000000000..e3ef51f44
--- /dev/null
+++ b/docs/31.0.1/configuration/extensions.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/extensions">
+    <link rel="canonical" href="/docs/31.0.1/configuration/extensions" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/extensions' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/extensions/index.html b/docs/31.0.1/configuration/extensions/index.html
new file mode 100644
index 000000000..dcf961c9d
--- /dev/null
+++ b/docs/31.0.1/configuration/extensions/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/extensions" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Extensions | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/configura [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+are commonly used to add support for deep storages (like HDFS and S3), metadata stores (like MySQL
+and PostgreSQL), new aggregators, new input formats, and so on.</p><p>Production clusters will generally use at least two extensions; one for deep storage and one for a
+metadata store. Many clusters will also use additional extensions.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="core-extensions">Core extensions<a href="#core-extensions" class="hash-link" aria-label="Direct link to Core extensions" title="Direct link to Core extensions">​</a></h2><p>Core extensions are maintained by Druid committers.</p><table><thead><tr><th>Name</th><th>Description</th><th>Docs</th></tr></thead><tbody><tr><td>druid-avro-extensions</td><td>Support for data in A [...]
+If you&#x27;d like to take on maintenance for a community extension, please post on <a href="https://lists.apache.org/list.html?dev@druid.apache.org" target="_blank" rel="noopener noreferrer">dev@druid.apache.org</a> to let us know!</p><p>All of these community extensions can be downloaded using <a href="/docs/31.0.1/operations/pull-deps">pull-deps</a> while specifying a <code>-c</code> coordinate option to pull <code>org.apache.druid.extensions.contrib:{EXTENSION_NAME}:{DRUID_VERSION}</ [...]
+If we see a community extension actively supported by the community, we can promote it to core based on community feedback.</p><p>For information how to create your own extension, please see <a href="/docs/31.0.1/development/modules">here</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="loading-extensions">Loading extensions<a href="#loading-extensions" class="hash-link" aria-label="Direct link to Loading extensions" title="Direct link to Loading extensions">​</a></h2><h3 class [...]
+See the <a href="/docs/31.0.1/configuration/extensions#core-extensions">list of extensions</a> for your options. You
+can load bundled extensions by adding their names to your common.runtime.properties
+<code>druid.extensions.loadList</code> property. For example, to load the postgresql-metadata-storage and
+druid-hdfs-storage extensions, use the configuration:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.extensions.loadList=[&quot;postgresql-metadata-storage&quot;, & [...]
+one for a <a href="/docs/31.0.1/tutorials/cluster">clustered configuration</a>. Make sure you are updating the correct
+<code>common.runtime.properties</code> for your setup.</p></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><d [...]
+on how to install this library, see the <a href="/docs/31.0.1/development/extensions-core/mysql">MySQL extension page</a>.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-community-extensions">Loading community extensions<a href="#loading-community-extensions" class="hash-link" aria-label="Direct link to Loading community extensions" title="Direct link to Loading community extensions">​</a></h3><p>You can also load community and third-party extensions not alread [...]
+then install it into your <code>extensions</code> directory. You can download extensions from their distributors directly, or
+if they are available from Maven, the included <a href="/docs/31.0.1/operations/pull-deps">pull-deps</a> can download them for you. To use <em>pull-deps</em>,
+specify the full Maven coordinate of the extension in the form <code>groupId:artifactId:version</code>. For example,
+for the (hypothetical) extension <em>com.example:druid-example-extension:1.0.0</em>, run:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" [...]
+<code>druid.extensions.loadList</code> in common.runtime.properties to instruct Druid to load the extension.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6 [...]
+of the extension, and the version is the latest Druid stable version.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-extensions-from-the-classpath">Loading extensions from the classpath<a href="#loading-extensions-from-the-classpath" class="hash-link" aria-label="Direct link to Loading extensions from the classpath" title="Direct link to Loading extensions from the classpath">​</a></h3><p>If you add your extension jar to the classpath at runtime, Druid will als [...]
+but it also means that you have to ensure that all dependency jars on the classpath are compatible. That is, Druid makes no provisions while using
+this method to maintain class loader isolation so you must make sure that the jars on your classpath are mutually compatible.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/configuration/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Configuration reference</div></a><a class="pagination-nav__link pagination-nav__link--next" href= [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/hadoop.html/index.html b/docs/31.0.1/configuration/hadoop.html/index.html
new file mode 100644
index 000000000..75ad4f32c
--- /dev/null
+++ b/docs/31.0.1/configuration/hadoop.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/hadoop">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/historical.html/index.html b/docs/31.0.1/configuration/historical.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration/historical.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/human-readable-byte.html/index.html b/docs/31.0.1/configuration/human-readable-byte.html/index.html
new file mode 100644
index 000000000..d815675f7
--- /dev/null
+++ b/docs/31.0.1/configuration/human-readable-byte.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/human-readable-byte">
+    <link rel="canonical" href="/docs/31.0.1/configuration/human-readable-byte" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/human-readable-byte' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/human-readable-byte/index.html b/docs/31.0.1/configuration/human-readable-byte/index.html
new file mode 100644
index 000000000..972085ff7
--- /dev/null
+++ b/docs/31.0.1/configuration/human-readable-byte/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/human-readable-byte" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Human-readable Byte Configuration Reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Also, only integers are valid as the number part. For example, you can&#x27;t replace <code>1200g</code> with <code>1.2t</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="supported-units">Supported Units<a href="#supported-units" class="hash-link" aria-label="Direct link to Supported Units" title="Direct link to Supported Units">​</a></h3><p>In the world of computer, a unit like <code>K</code> is ambiguous. It means 1000 or 1024 in different contexts, for more information ple [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/index.html b/docs/31.0.1/configuration/index.html
new file mode 100644
index 000000000..f3ea1fed0
--- /dev/null
+++ b/docs/31.0.1/configuration/index.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Configuration reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+For example, if <code>druid.zk.paths.base</code> is set to <code>/druid1</code> and <code>druid.zk.paths.indexer.base</code> is set to <code>/druid2</code> then <code>druid.zk.paths.announcementsPath</code> will default to <code>/druid1/announcements</code> while <code>druid.zk.paths.indexer.announcementsPath</code> will default to <code>/druid2/announcements</code>.</p><p>The following path is used for service discovery. It is <strong>not</strong> affected by <code>druid.zk.paths.base</ [...]
+and <code>druid.tlsPort</code> properties on each service. Please see <code>Configuration</code> section of individual services to check the valid and default values for these ports.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="jetty-server-tls-configuration">Jetty server TLS configuration<a href="#jetty-server-tls-configuration" class="hash-link" aria-label="Direct link to Jetty server TLS configuration" title="Direct link to Jetty server TLS configuration">​</a></h4><p>Druid u [...]
+The <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html" target="_blank" rel="noopener noreferrer">Java Cryptography Architecture
+Standard Algorithm Name Documentation for JDK 8</a> lists all possible
+values for the following properties, among others provided by the Java implementation.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.server.https.keyStorePath</code></td><td>The file path or URL of the TLS/SSL KeyStore.</td><td>none</td><td>yes</td></tr><tr><td><code>druid.server.https.keyStoreType</code></td><td>The type of the KeyStore.</td><td>none</td><td>yes</td></tr><tr><td><code>druid.server.https [...]
+values for the above mentioned configs among others provided by Java implementation.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authentication-and-authorization">Authentication and authorization<a href="#authentication-and-authorization" class="hash-link" aria-label="Direct link to Authentication and authorization" title="Direct link to Authentication and authorization">​</a></h3><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Default</th><th>Required</ [...]
+For an example of setting up request logging, see <a href="/docs/31.0.1/operations/request-logging">Request logging</a>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.request.logging.type</code></td><td>How to log every query request. Choices: <code>noop</code>, <a href="#file-request-logging"><code>file</code></a>, <a href="#emitter-request-logging"><code>emitter</code></a>, <a href="#slf4j-request-logging"><code>slf4j< [...]
+For native queries, the logger only logs requests when the <code>query/time</code> metric exceeds the threshold provided in <code>queryTimeThresholdMs</code>.
+For SQL queries, it only logs requests when the <code>sqlQuery/time</code> metric exceeds threshold provided in <code>sqlQueryTimeThresholdMs</code>.
+See <a href="/docs/31.0.1/operations/metrics">Metrics</a> for more details on query metrics.</p><p>Requests that meet the threshold are logged using the request logger type set in <code>druid.request.logging.delegate.type</code>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.request.logging.queryTimeThresholdMs</code></td><td>Threshold value for the <code>query/time</code> metric in milliseconds.</td><td>0, i.e., no filt [...]
+<code>druid.emitter.logging.loggerClass</code> to emit events. Each event is logged as a single <code>json</code> object with a
+<a href="https://logging.apache.org/log4j/2.x/manual/markers.html" target="_blank" rel="noopener noreferrer">Marker</a> as the feed of the event. Users may wish to edit the
+log4j config to route these logs to different sources based on the feed of the event.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.emitter.logging.loggerClass</code></td><td>The class used for logging.</td><td><code>org.apache.druid.java.util.emitter.core.LoggingEmitter</code></td></tr><tr><td><code>druid.emitter.logging.logLevel</code></td><td>Choices: debug, info, warn, error. The log level at which message are logged [...]
+For example:</p><ul><li><code>druid.emitter.parametrized.httpEmitting.flushMillis</code></li><li><code>druid.emitter.parametrized.httpEmitting.flushCount</code></li><li><code>druid.emitter.parametrized.httpEmitting.ssl.trustStorePath</code></li></ul><p>Do not specify <code>recipientBaseUrl</code> with the parametrized emitter.
+Instead use <code>recipientBaseUrlPattern</code> described in the table below.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.emitter.parametrized.recipientBaseUrlPattern</code></td><td>The URL pattern to send an event to, based on the event&#x27;s feed. For example, <code>http://foo.bar/{feed}</code>, that will send event to <code>http://foo.bar/metrics</code> if the event&#x27;s feed is &quot;metrics&quot;.</td><td>none [...]
+The below table shows some important configurations for S3. See <a href="/docs/31.0.1/development/extensions-core/s3">S3 Deep Storage</a> for full configurations.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.storage.bucket</code></td><td>S3 bucket name.</td><td>none</td></tr><tr><td><code>druid.storage.baseKey</code></td><td>S3 object key prefix for storage.</td><td>none</td></tr><tr><td><code>druid.storage.disableAcl</ [...]
+Traditionally, the datasource schema is built in the Brokers by combining schema for all the available segments of a datasource.
+Brokers issue segment metadata query to data nodes and tasks to fetch segment schema.
+In the new arrangement, tasks publish segment schema along with segment metadata to the database and schema for realtime segments is periodically pushed to the Coordinator in the segment announcement flow.
+This enables Coordinator to cache segment schemas and build datasource schema by combining segment schema.
+Brokers query the datasource schema from the Coordinator, while retaining the ability to build table schema if the
+need arises.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.centralizedDatasourceSchema.enabled</code></td><td>Boolean flag for enabling datasource schema building in the Coordinator, this should be specified in the common runtime properties.</td><td>false</td><td>No.</td></tr><tr><td><code>druid.indexer.fork.property.druid.centralizedDatasourceSchema.enabled</code></td><td>This config should be set when  [...]
+the <a href="/docs/31.0.1/ingestion/input-sources#hdfs-input-source">HDFS input source</a>.</p><table><thead><tr><th>Property</th><th>Possible values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.ingestion.hdfs.allowedProtocols</code></td><td>List of protocols</td><td>Allowed protocols for the HDFS input source.</td><td><code>[&quot;hdfs&quot;]</code></td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="http-input-source">HTTP inpu [...]
+the <a href="/docs/31.0.1/ingestion/input-sources#http-input-source">HTTP input source</a>.</p><table><thead><tr><th>Property</th><th>Possible values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.ingestion.http.allowedProtocols</code></td><td>List of protocols</td><td>Allowed protocols for the HTTP input source.</td><td><code>[&quot;http&quot;, &quot;https&quot;]</code></td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="external- [...]
+When you specify an error response transform strategy other than <code>none</code>, Druid transforms the error responses from Druid services as follows:</p><ul><li>For any query API that fails in the Router service, Druid sets the fields <code>errorClass</code> and <code>host</code> to null. Druid applies the transformation strategy to the <code>errorMessage</code> field.</li><li>For any SQL query API that fails, for example <code>POST /druid/v2/sql/...</code>, Druid sets the fields <cod [...]
+This is the default Druid error response mode. To explicitly enable this strategy, set <code>druid.server.http.errorResponseTransform.strategy</code> to <code>none</code>.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="allowed-regular-expression-error-response-transform-strategy">Allowed regular expression error response transform strategy<a href="#allowed-regular-expression-error-response-transform-strategy" class="hash-link" aria-label="Direct link to Allowed regular expression  [...]
+the following properties.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.javascript.enabled</code></td><td>Set to &quot;true&quot; to enable JavaScript functionality. This affects the JavaScript parser, filter, extractionFn, aggregator, post-aggregator, router strategy, and worker selection strategy.</td><td>false</td></tr></tbody></table><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9 [...]
+doubleSum, doubleMin, and doubleMax aggregators at indexing time.
+Starting from version 0.13.0 the default will be 64-bit floats for Double columns.
+Using 64-bit representation for double column will lead to avoid precision loss at the cost of doubling the storage size of such columns.
+To keep the old format set the system-wide property <code>druid.indexing.doubleStorage=float</code>.
+You can also use <code>floatSum</code>, <code>floatMin</code>, and <code>floatMax</code> to use 32-bit float representation.
+Support for 64-bit floating point columns was released in Druid 0.11.0, so if you use this feature then older versions of Druid will not be able to read your data segments.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.indexing.doubleStorage</code></td><td>Set to &quot;float&quot; to use 32-bit double representation for double columns.</td><td>double</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" [...]
+You can configure these parameters using the <a href="/docs/31.0.1/operations/web-console">web console</a>(recommended) or through the <a href="/docs/31.0.1/api-reference/dynamic-configuration-api#coordinator-dynamic-configuration">Coordinator dynamic configuration API</a>.</p><p>The following table shows the dynamic configuration properties for the Coordinator.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>millisToWaitBeforeD [...]
+If you enable this mode, do not provide values for the properties in the table below as the Coordinator computes them automatically.
+Druid computes the values to optimize Coordinator performance, based on the current state of the cluster.</p><p>If you enable <code>smartSegmentLoading</code> mode, Druid ignores any value you provide for the following properties.</p><table><thead><tr><th>Property</th><th>Computed value</th><th>Description</th></tr></thead><tbody><tr><td><code>useRoundRobinSegmentAssignment</code></td><td>true</td><td>Speeds up segment assignment.</td></tr><tr><td><code>maxSegmentsInNodeLoadingQueue</cod [...]
+Disable <code>smartSegmentLoading</code> only if you want to explicitly set the values of any of the above properties.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="lookups-dynamic-configuration">Lookups dynamic configuration<a href="#lookups-dynamic-configuration" class="hash-link" aria-label="Direct link to Lookups dynamic configuration" title="Direct link to Lookups dynamic configuration">​</a></h5><p>These configuration options control Coordinator lookup management. For confi [...]
+<a href="/docs/31.0.1/api-reference/automatic-compaction-api">Automatic compaction API</a> without restarting Coordinators.</p><p>For details about segment compaction, see <a href="/docs/31.0.1/operations/segment-optimization">Segment size optimization</a>.</p><p>You can configure automatic compaction through the following properties:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td><code>dataSource</code></td><td>The datasource name  [...]
+You may see this issue with streaming ingestion from Kafka and Kinesis, which ingest late-arriving data.</p><p>To mitigate this problem, set <code>skipOffsetFromLatest</code> to a value large enough so that arriving data tends to fall outside the offset value from the current time. This way you can avoid conflicts between compaction tasks and realtime ingestion tasks.
+For example, if you want to skip over segments from thirty days prior to the end time of the most recent segment, assign <code>&quot;skipOffsetFromLatest&quot;: &quot;P30D&quot;</code>.
+For more information, see <a href="/docs/31.0.1/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="automatic-compaction-tuningconfig">Automatic compaction tuningConfig<a href="#automatic-compaction-tuningconfig" class="hash-link" aria-label="Direct link to Automatic compaction tuningConfig" title="Direct link to Automatic compaction tuningConfig">​</a></h6><p>Auto-compaction suppor [...]
+The below is a list of the supported configurations for auto-compaction.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>dropExisting</code></td><td>If <code>true</code> the compaction task replaces all existing segments fully contained by the umbrella interval of the compacted segments when the task publishes new segments and tombstones. If compaction fails, Druid does not publish any segments or tombstones. WA [...]
+You can configure these parameters using the <a href="/docs/31.0.1/operations/web-console">web console</a> or through the <a href="/docs/31.0.1/api-reference/dynamic-configuration-api#overlord-dynamic-configuration">Overlord dynamic configuration API</a>.</p><p>The following table shows the dynamic configuration properties for the Overlord.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>selectStrategy</code></td><td>Describes h [...]
+At a high level, the select strategy determines the list of eligible workers for a given task using
+either an <code>affinityConfig</code> or a <code>categorySpec</code>. Then, Druid assigns the task by either trying to distribute load equally
+(<code>equalDistribution</code>) or to fill as many workers as possible to capacity (<code>fillCapacity</code>).
+There are 4 options for select strategies:</p><ul><li><a href="#equaldistribution"><code>equalDistribution</code></a></li><li><a href="#equaldistributionwithcategoryspec"><code>equalDistributionWithCategorySpec</code></a></li><li><a href="#fillcapacity"><code>fillCapacity</code></a></li><li><a href="#fillcapacitywithcategoryspec"><code>fillCapacityWithCategorySpec</code></a></li></ul><p>A <code>javascript</code> option is also available but should only be used for prototyping new strateg [...]
+not be assigned a category, and you want the work to be concentrated on the fewest number of workers to allow the empty ones to scale down.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="equaldistribution"><code>equalDistribution</code><a href="#equaldistribution" class="hash-link" aria-label="Direct link to equaldistribution" title="Direct link to equaldistribution">​</a></h6><p>Tasks are assigned to the Middle Manager with the most free slots at the time the task begins running.
+This evenly distributes work across your Middle Managers.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>equalDistribution</code></td><td>required; must be <code>equalDistribution</code></td></tr><tr><td><code>affinityConfig</code></td><td><a href="#affinityconfig"><code>AffinityConfig</code></a> object</td><td>null (no affinity)</td></tr></tbody></table><h6 class="anchor anchorWithStickyNavbar_LWe7" i [...]
+By specifying <code>workerCategorySpec</code>, you can assign tasks to run on different categories of Middle Managers based on the <strong>type</strong> and <strong>dataSource</strong> of the task.
+This strategy doesn&#x27;t work with <code>AutoScaler</code> since the behavior is undefined.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>equalDistributionWithCategorySpec</code></td><td>required; must be <code>equalDistributionWithCategorySpec</code></td></tr><tr><td><code>workerCategorySpec</code></td><td><a href="#workercategoryspec"><code>WorkerCategorySpec</code></a> object</td><td>null (no wor [...]
+useful when you are auto-scaling Middle Managers since it tends to pack some full and
+leave others empty. The empty ones can be safely terminated.</p><p>Note that if <code>druid.indexer.runner.pendingTasksRunnerNumThreads</code> is set to <em>N</em> &gt; 1, then this strategy will fill <em>N</em>
+Middle Managers up to capacity simultaneously, rather than a single Middle Manager.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>fillCapacity</code></td><td>required; must be <code>fillCapacity</code></td></tr><tr><td><code>affinityConfig</code></td><td><a href="#affinityconfig"><code>AffinityConfig</code></a> object</td><td>null (no affinity)</td></tr></tbody></table><h6 class="anchor anchorWithStic [...]
+The usage is the same as <code>equalDistributionWithCategorySpec</code> strategy.
+This strategy doesn&#x27;t work with <code>AutoScaler</code> since the behavior is undefined.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>fillCapacityWithCategorySpec</code>.</td><td>required; must be <code>fillCapacityWithCategorySpec</code></td></tr><tr><td><code>workerCategorySpec</code></td><td><a href="#workercategoryspec"><code>WorkerCategorySpec</code></a> object</td><td>null (no worker categ [...]
+The function is passed remoteTaskRunnerConfig, map of workerId to available workers and task to be executed and returns the workerId on which the task should be run or null if the task cannot be run.
+It can be used for rapid development of missing features where the worker selection logic is to be changed or tuned often.
+If the selection logic is quite complex and cannot be easily tested in JavaScript environment,
+its better to write a druid extension module with extending current worker selection strategies written in java.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td><code>javascript</code></td><td>required; must be <code>javascript</code></td></tr><tr><td><code>function</code></td><td>String representing JavaScript function</td><td></td></tr></tbody></table><p>The following example shows a function that sends <co [...]
+If not provided, the default is to have no affinity.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>affinity</code></td><td>JSON object mapping a datasource String name to a list of indexing service Middle Manager <code>host:port</code> values. Druid doesn&#x27;t perform DNS resolution, so the &#x27;host&#x27; value must match what is configured on the Middle Manager and what the Middle Manager announces itself as (examine the  [...]
+field. If not provided, the default is to not use it at all.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>categoryMap</code></td><td>A JSON map object mapping a task type String name to a <a href="#categoryconfig">CategoryConfig</a> object, by which you can specify category config for different task type.</td><td><code>{}</code></td></tr><tr><td><code>strong</code></td><td>With weak workerCategorySpec (the default), tasks for [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> in
+<code>druid.indexer.runner.javaOptsArray</code> as documented above.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="peon-query-configuration">Peon query configuration<a href="#peon-query-configuration" class="hash-link" aria-label="Direct link to Peon query configuration" title="Direct link to Peon query configuration">​</a></h4><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="peon-caching">Peon ca [...]
+The following types of medium exist for the buffers:</p><ul><li><p><strong>Temporary files</strong> (<code>tmpFile</code>) are stored under the task working directory (see <code>druid.worker.baseTaskDirs</code> configuration above) and thus share it&#x27;s mounting properties. For example, they could be backed by HDD, SSD or memory (tmpfs).
+This type of medium may do unnecessary disk I/O and requires some disk space to be available.</p></li><li><p><strong>Off-heap memory</strong> (<code>offHeapMemory</code>) creates buffers in off-heap memory of a JVM process that is running a task.
+This type of medium is preferred, but it may require you to allow the JVM to have more off-heap memory by changing the <code>-XX:MaxDirectMemorySize</code> configuration. It&#x27;s not understood yet how the required off-heap memory size relates to the size of the segments being created. But you shouldn&#x27;t add more extra off-heap memory than the configured maximum <em>heap</em> size (<code>-Xmx</code>) for the same JVM.</p></li><li><p><strong>On-heap memory</strong> (<code>onHeapMemo [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="query-configurations">Query configurations<a href="#query-configurations" class="hash-link" aria-label="Direct link to Query configurations" title="Direct link to Query configurations">​</a></h4><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="indexer-caching">Indexer caching<a href="#indexer-caching" class="hash-link" aria-label="Direct link to  [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="historical-query-configuration">Historical query configuration<a href="#historical-query-configuration" class="hash-link" aria-label="Direct link to Historical query configuration" title="Direct link to Historical query configuration">​</a></h5><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="historical-caching">Historical caching<a href="#histor [...]
+Therefore, there are guardrails that are built in Druid to prevent the queries from generating subquery results which can exhaust the heap
+space. They can be set on a cluster level or modified per query level as desired.
+Note the following guardrails that can be set by the cluster admin to limit the subquery results:</p><ol><li><code>druid.server.http.maxSubqueryRows</code> in broker&#x27;s config to set a default for the entire cluster or <code>maxSubqueryRows</code> in the query context to set an upper limit on the number of rows a subquery can generate</li><li><code>druid.server.http.maxSubqueryBytes</code> in broker&#x27;s config to set a default for the entire cluster or <code>maxSubqueryBytes</code [...]
+rows in the order of magnitude of around 10 million and above. In those scenarios, disable the <code>maxSubqueryBytes</code> settings for such queries, assess the number of rows that the subqueries generate and override the <code>maxSubqueryRows</code> to appropriate value.</p><p>If you choose to modify or set any of the above limits, you must also think about the heap size of all Brokers, Historicals, and task Peons that process data for the subqueries to accommodate the subquery results.
+There is no formula to calculate the correct value. Trial and error is the best approach.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="manual-laning-strategy">Manual laning strategy<a href="#manual-laning-strategy" class="hash-link" aria-label="Direct link to Manual laning strategy" title="Direct link to Manual laning strategy">​</a></h6><p>This laning strategy is best suited for cases where one or more external applications which query Druid are capable of manually deciding wha [...]
+client has the following configuration options.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.broker.http.numConnections</code></td><td>Size of connection pool for the Broker to connect to Historical and real-time processes. If there are more queries than this number that all need to speak to the same process, then they will queue up.</td><td>20</td></tr><tr><td><code>druid.broker.http.eagerInitialization</code></td><td> [...]
+<code>druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + 1)</code>. You can
+ensure at least this amount of direct memory is available by providing <code>-XX:MaxDirectMemorySize=&lt;VALUE&gt;</code> at the command
+line.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="broker-query-configuration">Broker query configuration<a href="#broker-query-configuration" class="hash-link" aria-label="Direct link to Broker query configuration" title="Direct link to Broker query configuration">​</a></h5><p>See <a href="#general-query-configuration">general query configuration</a>.</p><h6 class="anchor anchorWithStickyNavbar_LWe7" id="broker-generated-query-configuration-supplementation">Broker generated que [...]
+of these queries.</p><p>As of now the only supported augmentation is overriding the default query context. This allows an operator the flexibility
+to adjust it as they see fit. A common use of this configuration is to override the query priority of the cluster generated
+queries in order to avoid running as a default priority of 0.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.broker.internal.query.config.context</code></td><td>A string formatted <code>key:value</code> map of a query context to add to internally generated broker queries.</td><td>null</td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sql">SQL<a href="#sql" class="hash-link" aria-label="Direct lin [...]
+These properties are no longer available. Since Druid 0.18.0, you can use <code>druid.server.http.maxSubqueryRows</code> to control the maximum
+number of rows permitted across all subqueries.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="broker-caching">Broker caching<a href="#broker-caching" class="hash-link" aria-label="Direct link to Broker caching" title="Direct link to Broker caching">​</a></h4><p>You can optionally only configure caching to be enabled on the Broker by setting caching configs here.</p><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></th [...]
+See <a href="/docs/31.0.1/querying/caching">Query caching</a> for more information.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="segment-discovery">Segment discovery<a href="#segment-discovery" class="hash-link" aria-label="Direct link to Segment discovery" title="Direct link to Segment discovery">​</a></h4><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.serverview.type</code></td> [...]
+<a href="#broker-caching">Broker</a>, <a href="#historical-caching">Historical</a>, and <a href="#peon-caching">Peon</a> configuration options for how to
+enable it for different processes.</p><p>Druid uses a local in-memory cache by default, unless a different type of cache is specified.
+Use the <code>druid.cache.type</code> configuration to set a different kind of cache.</p><p>Cache settings are set globally, so the same configuration can be re-used
+for both Broker and Historical processes, when defined in the common properties file.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="cache-type">Cache type<a href="#cache-type" class="hash-link" aria-label="Direct link to Cache type" title="Direct link to Cache type">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.cache.type</code></td><td><code>local</code>, <code>memcached</code>, <c [...]
+This may be used to combine a local in-memory cache with a remote memcached cache.</p><p>Cache requests will first check L1 cache before checking L2.
+If there is an L1 miss and L2 hit, it will also populate L1.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.cache.l1.type</code></td><td>The type of cache to use for L1 cache. See <code>druid.cache.type</code> configuration for valid types.</td><td><code>caffeine</code></td></tr><tr><td><code>druid.cache.l2.type</code></td><td>The type of cache to use for L2 cache. See <code>druid.cache.type</code> configuration for valid [...]
+The <code>druid.query.default.context.{query_context_key}</code> runtime property prefix applies to all current and future query context keys, the same as how query context parameter passed with the query works. You can override the runtime property value if the value for the same key is specified in the query contexts.</p><p>The precedence chain for query context values is as follows:</p><p>hard-coded default value in Druid code &lt;- runtime property not prefixed with <code>druid.query [...]
+&lt;- runtime property prefixed with <code>druid.query.default.context</code> &lt;- context parameter in the query</p><p>Note that not all query context key has a runtime property not prefixed with <code>druid.query.default.context</code> that can
+override the hard-coded default value. For example, <code>maxQueuedBytes</code> has <code>druid.broker.http.maxQueuedBytes</code>
+but <code>joinFilterRewriteMaxSize</code> does not. Hence, the only way of overriding <code>joinFilterRewriteMaxSize</code> hard-coded default
+value is with runtime property <code>druid.query.default.context.joinFilterRewriteMaxSize</code>.</p><p>To further elaborate on the previous example:</p><p>If neither <code>druid.broker.http.maxQueuedBytes</code> or <code>druid.query.default.context.maxQueuedBytes</code> is set and
+the query does not have <code>maxQueuedBytes</code> in the context, then the hard-coded value in Druid code is use.
+If runtime property only contains <code>druid.broker.http.maxQueuedBytes=x</code> and query does not have <code>maxQueuedBytes</code> in the
+context, then the value of the property, <code>x</code>, is use. However, if query does have <code>maxQueuedBytes</code> in the context,
+then that value is use instead.
+If runtime property only contains <code>druid.query.default.context.maxQueuedBytes=y</code> OR runtime property contains both
+<code>druid.broker.http.maxQueuedBytes=x</code> and <code>druid.query.default.context.maxQueuedBytes=y</code>, then the value of
+<code>druid.query.default.context.maxQueuedBytes</code>, <code>y</code>, is use (given that query does not have <code>maxQueuedBytes</code> in the
+context). If query does have <code>maxQueuedBytes</code> in the context, then that value is use instead.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="topn-query-config">TopN query config<a href="#topn-query-config" class="hash-link" aria-label="Direct link to TopN query config" title="Direct link to TopN query config">​</a></h3><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.query.topN.minTopNThreshold</code></td><td [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/indexing-service.html/index.html b/docs/31.0.1/configuration/indexing-service.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/configuration/indexing-service.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/logging.html/index.html b/docs/31.0.1/configuration/logging.html/index.html
new file mode 100644
index 000000000..5a26d62a7
--- /dev/null
+++ b/docs/31.0.1/configuration/logging.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/logging">
+    <link rel="canonical" href="/docs/31.0.1/configuration/logging" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/logging' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/logging/index.html b/docs/31.0.1/configuration/logging/index.html
new file mode 100644
index 000000000..edae6b5fe
--- /dev/null
+++ b/docs/31.0.1/configuration/logging/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-configuration/logging" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Logging | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/configuratio [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The same services also emit periodic <a href="/docs/31.0.1/configuration/#enabling-metrics">metrics</a> about their state.
+To disable metric info logs set the following runtime property: <code>-Ddruid.emitter.logging.logLevel=debug</code>.</p><p>Druid uses <a href="http://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer">log4j2</a> for logging.
+The default configuration file log4j2.xml ships with Druid at the following path: <code>conf/druid/{config}/_common/log4j2.xml</code>.</p><p>By default, Druid uses <code>RollingRandomAccessFile</code> for rollover daily, and keeps log files up to 7 days.
+If that&#x27;s not suitable in your case, modify the <code>log4j2.xml</code> accordingly.</p><p>The following example log4j2.xml is based upon the micro quickstart:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span clas [...]
+<a href="/docs/31.0.1/configuration/#log-long-term-storage">long-term storage</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></s [...]
+Druid shares the log4j configuration file among all services, including task peon processes.
+However, you must define a console appender in the logger for your peon processes.
+If you don&#x27;t define a console appender, Druid creates and configures a new console appender
+that retains the log level, such as <code>info</code> or <code>warn</code>, but does not retain any other appender
+configuration, including non-console ones.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="log-directory">Log directory<a href="#log-directory" class="hash-link" aria-label="Direct link to Log directory" title="Direct link to Log directory">​</a></h2><p>The included log4j2.xml configuration for Druid and ZooKeeper writes logs to the <code>log</code> directory at the root of the distribution.</p><p>If you want to change the log directory, set the environment variable <co [...]
+Log4j2 writes the main log file and rotates it periodically.
+For example, <code>log/historical.log</code>.</p><p>The secondary log file contains anything that is written by the component
+directly to standard output or standard error without going through log4j2.
+For example, <code>log/historical.stdout.log</code>.
+This consists mainly of messages from the
+Java runtime itself.
+This file is not rotated, but it is generally small due to the low volume of messages.
+If necessary, you can truncate it using the Linux command <code>truncate --size 0 log/historical.stdout.log</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-the-logs-to-asynchronously-write">Set the logs to asynchronously write<a href="#set-the-logs-to-asynchronously-write" class="hash-link" aria-label="Direct link to Set the logs to asynchronously write" title="Direct link to Set the logs to asynchronously write">​</a></h2><p>If your logs are really chatty, you can set  [...]
+The following example shows a <code>log4j2.xml</code> that configures some of the more chatty classes to write asynchronously:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&lt;?xml version=&quot [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/production-cluster.html/index.html b/docs/31.0.1/configuration/production-cluster.html/index.html
new file mode 100644
index 000000000..b3b30c368
--- /dev/null
+++ b/docs/31.0.1/configuration/production-cluster.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/tutorials/cluster">
+    <link rel="canonical" href="/docs/31.0.1/tutorials/cluster" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/tutorials/cluster' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/realtime.html/index.html b/docs/31.0.1/configuration/realtime.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/configuration/realtime.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/simple-cluster.html/index.html b/docs/31.0.1/configuration/simple-cluster.html/index.html
new file mode 100644
index 000000000..b3b30c368
--- /dev/null
+++ b/docs/31.0.1/configuration/simple-cluster.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/tutorials/cluster">
+    <link rel="canonical" href="/docs/31.0.1/tutorials/cluster" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/tutorials/cluster' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/configuration/zookeeper.html/index.html b/docs/31.0.1/configuration/zookeeper.html/index.html
new file mode 100644
index 000000000..e6998e95c
--- /dev/null
+++ b/docs/31.0.1/configuration/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.1/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management.html/index.html b/docs/31.0.1/data-management.html/index.html
new file mode 100644
index 000000000..28a852a53
--- /dev/null
+++ b/docs/31.0.1/data-management.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/">
+    <link rel="canonical" href="/docs/31.0.1/data-management/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/automatic-compaction.html/index.html b/docs/31.0.1/data-management/automatic-compaction.html/index.html
new file mode 100644
index 000000000..a6636ae2d
--- /dev/null
+++ b/docs/31.0.1/data-management/automatic-compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/automatic-compaction">
+    <link rel="canonical" href="/docs/31.0.1/data-management/automatic-compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/automatic-compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/automatic-compaction/index.html b/docs/31.0.1/data-management/automatic-compaction/index.html
new file mode 100644
index 000000000..331830405
--- /dev/null
+++ b/docs/31.0.1/data-management/automatic-compaction/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/automatic-compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Automatic compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The automatic compaction system uses the following syntax:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></s [...]
+The following properties only apply to auto-compaction:</p><ul><li><code>skipOffsetFromLatest</code></li><li><code>taskPriority</code></li><li><code>taskContext</code></li></ul><p>Since the automatic compaction system provides a management layer on top of manual compaction tasks,
+the auto-compaction configuration does not include task-specific properties found in a typical Druid ingestion spec.
+The following properties are automatically set by the Coordinator:</p><ul><li><code>type</code>: Set to <code>compact</code>.</li><li><code>id</code>: Generated using the task type, datasource name, interval, and timestamp. The task ID is prefixed with <code>coordinator-issued</code>.</li><li><code>context</code>: Set according to the user-provided <code>taskContext</code>.</li></ul><p>Compaction tasks typically fetch all <a href="/docs/31.0.1/data-management/manual-compaction#compaction [...]
+<em>unless</em> the following properties are all set to non-null values. It is strongly recommended to set them to non-null values to
+maximize performance and minimize disk usage of the <code>compact</code> tasks launched by auto-compaction:</p><ul><li><a href="/docs/31.0.1/data-management/manual-compaction#compaction-granularity-spec"><code>granularitySpec</code></a>, with non-null values for each of <code>segmentGranularity</code>, <code>queryGranularity</code>, and <code>rollup</code></li><li><a href="/docs/31.0.1/data-management/manual-compaction#compaction-dimensions-spec"><code>dimensionsSpec</code></a></li><li>< [...]
+The default indexing period is 30 minutes, meaning that the Coordinator first checks for segments to compact at most 30 minutes from when auto-compaction is enabled.
+This time period also affects other Coordinator duties such as cleanup of unused segments and stale pending segments.
+To configure the auto-compaction time period without interfering with <code>indexingPeriod</code>, see <a href="#change-compaction-frequency">Set frequency of compaction runs</a>.</p><p>At every invocation of auto-compaction, the Coordinator initiates a <a href="/docs/31.0.1/design/coordinator#segment-search-policy-in-automatic-compaction">segment search</a> to determine eligible segments to compact.
+When there are eligible segments to compact, the Coordinator issues compaction tasks based on available worker capacity.
+If a compaction task takes longer than the indexing period, the Coordinator waits for it to finish before resuming the period for segment search.</p><p>No additional configuration is needed to run automatic compaction tasks using the Coordinator and native engine. This is the default behavior for Druid.
+You can configure it for a datasource through the web console or programmatically via an API.
+This process differs for manual compaction tasks, which can be submitted from the <a href="/docs/31.0.1/operations/web-console">Tasks view of the web console</a> or the <a href="/docs/31.0.1/api-reference/tasks-api">Tasks API</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="manage-auto-compaction-using-the-web-console">Manage auto-compaction using the web console<a href="#manage-auto-compaction-using-the-web-console" class="hash-link" aria-label="Direct link to Manage auto-comp [...]
+<img loading="lazy" alt="Compaction config in web console" src="/assets/images/compaction-config-2d5e391fe681a9c978060c383357b531.png" width="1250" height="640" class="img_ev3q"></p><p>To disable auto-compaction for a datasource, click <strong>Delete</strong> from the <strong>Compaction config</strong> dialog. Druid does not retain your auto-compaction configuration.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="manage-auto-compaction-using-coordinator-apis">Manage auto-compactio [...]
+To enable auto-compaction for a datasource, create a JSON object with the desired auto-compaction settings.
+See <a href="#auto-compaction-syntax">Configure automatic compaction</a> for the syntax of an auto-compaction spec.
+Send the JSON object as a payload in a <a href="/docs/31.0.1/api-reference/automatic-compaction-api#create-or-update-automatic-compaction-configuration"><code>POST</code> request</a> to <code>/druid/coordinator/v1/config/compaction</code>.
+The following example configures auto-compaction for the <code>wikipedia</code> datasource:</p><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">curl --location --request POST &#x27;http://loc [...]
+Set the time period of the duty group in the <code>coordinator/runtime.properties</code> file.
+The following example shows how to create a duty group named <code>compaction</code> and set the auto-compaction period to 1 minute:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.coordinato [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/compaction.html/index.html b/docs/31.0.1/data-management/compaction.html/index.html
new file mode 100644
index 000000000..b1f6c01d4
--- /dev/null
+++ b/docs/31.0.1/data-management/compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/compaction">
+    <link rel="canonical" href="/docs/31.0.1/data-management/compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/compaction/index.html b/docs/31.0.1/data-management/compaction/index.html
new file mode 100644
index 000000000..cd58e5e3d
--- /dev/null
+++ b/docs/31.0.1/data-management/compaction/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/data-mana [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Another option is to set the compaction task to higher priority than the ingestion task.
+For more information, see <a href="/docs/31.0.1/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="segment-granularity-handling">Segment granularity handling<a href="#segment-granularity-handling" class="hash-link" aria-label="Direct link to Segment granularity handling" title="Direct link to Segment granularity handling">​</a></h3><p>Unless you modify the segment granularity in <a [...]
+See <a href="/docs/31.0.1/ingestion/rollup">Roll-up</a> for more details.
+You can check that your segments are rolled up or not by using <a href="/docs/31.0.1/querying/segmentmetadataquery#analysistypes">Segment Metadata Queries</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="learn-more">Learn more<a href="#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more">​</a></h2><p>See the following topics for more information:</p><ul><li><a href="/docs/31.0.1/operations/segment-optimization">Segment optimizat [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/delete.html/index.html b/docs/31.0.1/data-management/delete.html/index.html
new file mode 100644
index 000000000..540fab0ca
--- /dev/null
+++ b/docs/31.0.1/data-management/delete.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/delete">
+    <link rel="canonical" href="/docs/31.0.1/data-management/delete" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/delete' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/delete/index.html b/docs/31.0.1/data-management/delete/index.html
new file mode 100644
index 000000000..29eab2d62
--- /dev/null
+++ b/docs/31.0.1/data-management/delete/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/delete" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data deletion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/data-m [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+deleting data for time chunks by dropping segments. This is a fast, metadata-only operation.</p><p>Deletion by time range happens in two steps:</p><ol><li>Segments to be deleted must first be marked as <a href="/docs/31.0.1/design/storage#segment-lifecycle">&quot;unused&quot;</a>. This can
+happen when a segment is dropped by a <a href="/docs/31.0.1/operations/rule-configuration">drop rule</a> or when you manually mark a
+segment unused through the Coordinator API or web console. This is a soft delete: the data is not available for
+querying, but the segment files remains in deep storage, and the segment records remains in the metadata store.</li><li>Once a segment is marked &quot;unused&quot;, you can use a <a href="#kill-task"><code>kill</code> task</a> to permanently delete the segment file from
+deep storage and remove its record from the metadata store. This is a hard delete: the data is unrecoverable unless
+you have a backup.</li></ol><p>For documentation on disabling segments using the Coordinator API, see the
+<a href="/docs/31.0.1/api-reference/legacy-metadata-api#datasources">Legacy metadata API reference</a>.</p><p>A data deletion tutorial is available at <a href="/docs/31.0.1/tutorials/tutorial-delete-data">Tutorial: Deleting data</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="by-time-range-automatically">By time range, automatically<a href="#by-time-range-automatically" class="hash-link" aria-label="Direct link to By time range, automatically" title="Direct link to By time ran [...]
+where data should be preserved, and intervals where data should be discarded. Data that falls under a drop rule is
+marked unused, in the same manner as if you <a href="#by-time-range-manually">manually mark that time range unused</a>. This is a
+fast, metadata-only operation.</p><p>Data that is dropped in this way is marked unused, but remains in deep storage. To permanently delete it, use a
+<a href="#kill-task"><code>kill</code> task</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="specific-records">Specific records<a href="#specific-records" class="hash-link" aria-label="Direct link to Specific records" title="Direct link to Specific records">​</a></h2><p>Druid supports deleting specific records using <a href="/docs/31.0.1/data-management/update#reindex">reindexing</a> with a filter. The filter specifies which
+data remains after reindexing, so it must be the inverse of the data you want to delete. Because segments must be
+rewritten to delete data in this way, it can be a time-consuming operation.</p><p>For example, to delete records where <code>userName</code> is <code>&#x27;bob&#x27;</code> with native batch indexing, use a
+<a href="/docs/31.0.1/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> with filter <code>{&quot;type&quot;: &quot;not&quot;, &quot;field&quot;: {&quot;type&quot;:
+&quot;selector&quot;, &quot;dimension&quot;: &quot;userName&quot;, &quot;value&quot;: &quot;bob&quot;}}</code>.</p><p>To delete the same records using SQL, use <a href="/docs/31.0.1/multi-stage-query/concepts#replace">REPLACE</a> with <code>WHERE userName &lt;&gt; &#x27;bob&#x27;</code>.</p><p>To reindex using <a href="/docs/31.0.1/ingestion/native-batch">native batch</a>, use the <a href="/docs/31.0.1/ingestion/input-sources#druid-input-source"><code>druid</code> input
+source</a>. If needed,
+<a href="/docs/31.0.1/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> can be used to filter or modify data during the
+reindexing job. To reindex with SQL, use <a href="/docs/31.0.1/multi-stage-query/reference#replace"><code>REPLACE &lt;table&gt; OVERWRITE</code></a>
+with <code>SELECT ... FROM &lt;table&gt;</code>. (Druid does not have <code>UPDATE</code> or <code>ALTER TABLE</code> statements.) Any SQL SELECT query can be
+used to filter, modify, or enrich the data during the reindexing job.</p><p>Data that is deleted in this way is marked unused, but remains in deep storage. To permanently delete it, use a <a href="#kill-task"><code>kill</code>
+task</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entire-table">Entire table<a href="#entire-table" class="hash-link" aria-label="Direct link to Entire table" title="Direct link to Entire table">​</a></h2><p>Deleting an entire table works the same way as <a href="#by-time-range-manually">deleting part of a table by time range</a>. First,
+mark all segments unused using the Coordinator API or web console. Then, optionally, delete it permanently using a
+<a href="#kill-task"><code>kill</code> task</a>.</p><a name="kill-task"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="permanently-kill-task">Permanently (<code>kill</code> task)<a href="#permanently-kill-task" class="hash-link" aria-label="Direct link to permanently-kill-task" title="Direct link to permanently-kill-task">​</a></h2><p>Data that has been overwritten or soft-deleted still remains as segments that have been marked unused. You can use a
+<code>kill</code> task to permanently delete this data.</p><p>The available grammar is:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span> [...]
+deep storage. This operation cannot be undone.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/data-management/update"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Data updates</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/data-management/schema-changes"><div class="pagination-nav__sublabel [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/index.html b/docs/31.0.1/data-management/index.html
new file mode 100644
index 000000000..c326a9598
--- /dev/null
+++ b/docs/31.0.1/data-management/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data management | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/data [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+files called <a href="/docs/31.0.1/design/segments">segments</a>. Data management operations involving replacing, or deleting,
+these segments include:</p><ul><li><a href="/docs/31.0.1/data-management/update">Updates</a> to existing data.</li><li><a href="/docs/31.0.1/data-management/delete">Deletion</a> of existing data.</li><li><a href="/docs/31.0.1/data-management/schema-changes">Schema changes</a> for new and existing data.</li><li><a href="/docs/31.0.1/data-management/compaction">Compaction</a> and <a href="/docs/31.0.1/data-management/automatic-compaction">automatic compaction</a>, which reindex existing data to
+optimize storage footprint and performance.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/ingestion/faq"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Troubleshooting FAQ</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/data-management/update"><div class="pagination-nav__sublabel">Next< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/manual-compaction.html/index.html b/docs/31.0.1/data-management/manual-compaction.html/index.html
new file mode 100644
index 000000000..d92c3062f
--- /dev/null
+++ b/docs/31.0.1/data-management/manual-compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/manual-compaction">
+    <link rel="canonical" href="/docs/31.0.1/data-management/manual-compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/manual-compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/manual-compaction/index.html b/docs/31.0.1/data-management/manual-compaction/index.html
new file mode 100644
index 000000000..3a8f9b5c1
--- /dev/null
+++ b/docs/31.0.1/data-management/manual-compaction/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/manual-compaction" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Manual compaction | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/da [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+If you don&#x27;t specify <code>granularitySpec</code>, Druid retains the original segment and query granularities when compaction is complete.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="compaction-io-configuration">Compaction I/O configuration<a href="#compaction-io-configuration" class="hash-link" aria-label="Direct link to Compaction I/O configuration" title="Direct link to Compaction I/O configuration">​</a></h2><p>The compaction <code>ioConfig</code> requires specifying < [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/schema-changes.html/index.html b/docs/31.0.1/data-management/schema-changes.html/index.html
new file mode 100644
index 000000000..29f6c51df
--- /dev/null
+++ b/docs/31.0.1/data-management/schema-changes.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/schema-changes">
+    <link rel="canonical" href="/docs/31.0.1/data-management/schema-changes" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/schema-changes' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/schema-changes/index.html b/docs/31.0.1/data-management/schema-changes/index.html
new file mode 100644
index 000000000..b05d49e00
--- /dev/null
+++ b/docs/31.0.1/data-management/schema-changes/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/schema-changes" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Schema changes | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/data- [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+It is sufficient to update your supervisor spec, if using <a href="/docs/31.0.1/ingestion/#streaming">streaming ingestion</a>, or to
+provide the new schema the next time you do a <a href="/docs/31.0.1/ingestion/#batch">batch ingestion</a>. This is made possible by
+the fact that each <a href="/docs/31.0.1/design/segments">segment</a>, at the time it is created, stores a
+copy of its own schema. Druid reconciles all of these individual segment schemas automatically at query time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="for-existing-data">For existing data<a href="#for-existing-data" class="hash-link" aria-label="Direct link to For existing data" title="Direct link to For existing data">​</a></h2><p>Schema changes are sometimes necessary for existing data. For example, you may want to change the type of a column in
+previously-ingested data, or drop a column entirely. Druid handles this using <a href="/docs/31.0.1/data-management/update">reindexing</a>, the same method
+it uses to handle updates of existing data. Reindexing involves rewriting all affected segments and can be a
+time-consuming operation.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/data-management/delete"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Data deletion</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/data-management/compaction"><div class="pagination-nav__sublabel">Next</div><div class=" [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/update.html/index.html b/docs/31.0.1/data-management/update.html/index.html
new file mode 100644
index 000000000..8688510bc
--- /dev/null
+++ b/docs/31.0.1/data-management/update.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/update">
+    <link rel="canonical" href="/docs/31.0.1/data-management/update" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/update' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/data-management/update/index.html b/docs/31.0.1/data-management/update/index.html
new file mode 100644
index 000000000..4f46e1b0d
--- /dev/null
+++ b/docs/31.0.1/data-management/update/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-data-management/update" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Data updates | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/data-ma [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+overwriting existing data using time ranges. Data outside the replacement time range is not touched. Overwriting of
+existing data is done using the same mechanisms as <a href="/docs/31.0.1/ingestion/#batch">batch ingestion</a>.</p><p>For example:</p><ul><li><a href="/docs/31.0.1/ingestion/native-batch">Native batch</a> with <code>appendToExisting: false</code>, and <code>intervals</code> set to a specific
+time range, overwrites data for that time range.</li><li><a href="/docs/31.0.1/multi-stage-query/reference#replace">SQL <code>REPLACE &lt;table&gt; OVERWRITE [ALL | WHERE ...]</code></a> overwrites data for
+the entire table or for a specified time range.</li></ul><p>In both cases, Druid&#x27;s atomic update mechanism ensures that queries will flip seamlessly from the old data to the new
+data on a time-chunk-by-time-chunk basis.</p><p>Ingestion and overwriting cannot run concurrently for the same time range of the same datasource. While an overwrite job
+is ongoing for a particular time range of a datasource, new ingestions for that time range are queued up. Ingestions for
+other time ranges proceed as normal. Read-only queries also proceed as normal, using the pre-existing version of the
+data.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p> Druid does not support  [...]
+is used to perform schema changes, repartition data, filter out unwanted data, enrich existing data, and so on. This
+behaves just like any other <a href="#overwrite">overwrite</a> with regard to atomic updates and locking.</p><p>With <a href="/docs/31.0.1/ingestion/native-batch">native batch</a>, use the <a href="/docs/31.0.1/ingestion/input-sources#druid-input-source"><code>druid</code> input
+source</a>. If needed,
+<a href="/docs/31.0.1/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> can be used to filter or modify data during the
+reindexing job.</p><p>With SQL, use <a href="/docs/31.0.1/multi-stage-query/reference#replace"><code>REPLACE &lt;table&gt; OVERWRITE</code></a> with <code>SELECT ... FROM &lt;table&gt;</code>.
+(Druid does not have <code>UPDATE</code> or <code>ALTER TABLE</code> statements.) Any SQL SELECT query can be used to filter,
+modify, or enrich the data during the reindexing job.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rolled-up-datasources">Rolled-up datasources<a href="#rolled-up-datasources" class="hash-link" aria-label="Direct link to Rolled-up datasources" title="Direct link to Rolled-up datasources">​</a></h2><p>Rolled-up datasources can be effectively updated using appends, without rewrites. When you append a row that has an
+identical set of dimensions to an existing row, queries that use aggregation operators automatically combine those two
+rows together at query time.</p><p><a href="/docs/31.0.1/data-management/compaction">Compaction</a> or <a href="/docs/31.0.1/data-management/automatic-compaction">automatic compaction</a> can be used to physically combine these
+matching rows together later on, by rewriting segments in the background.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="lookups">Lookups<a href="#lookups" class="hash-link" aria-label="Direct link to Lookups" title="Direct link to Lookups">​</a></h2><p>If you have a dimension where values need to be updated frequently, try first using <a href="/docs/31.0.1/querying/lookups">lookups</a>. A
+classic use case of lookups is when you have an ID dimension stored in a Druid segment, and want to map the ID dimension to a
+human-readable string that may need to be updated periodically.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/data-management/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/data-management/delete"><div class="pagination-nav__sublabel" [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/dependencies/cassandra-deep-storage.html/index.html b/docs/31.0.1/dependencies/cassandra-deep-storage.html/index.html
new file mode 100644
index 000000000..d9ffe39e5
--- /dev/null
+++ b/docs/31.0.1/dependencies/cassandra-deep-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/dependencies/zookeeper.html/index.html b/docs/31.0.1/dependencies/zookeeper.html/index.html
new file mode 100644
index 000000000..e6998e95c
--- /dev/null
+++ b/docs/31.0.1/dependencies/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.1/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design.html/index.html b/docs/31.0.1/design.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/design.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/architecture.html/index.html b/docs/31.0.1/design/architecture.html/index.html
new file mode 100644
index 000000000..594c12bb2
--- /dev/null
+++ b/docs/31.0.1/design/architecture.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/architecture">
+    <link rel="canonical" href="/docs/31.0.1/design/architecture" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/architecture' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/architecture/index.html b/docs/31.0.1/design/architecture/index.html
new file mode 100644
index 000000000..cefda675f
--- /dev/null
+++ b/docs/31.0.1/design/architecture/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/architecture" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Architecture | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+for reading from external data sources and publishing new Druid segments.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="peon-service">Peon service<a href="#peon-service" class="hash-link" aria-label="Direct link to Peon service" title="Direct link to Peon service">​</a></h5><p><a href="/docs/31.0.1/design/peons"><strong>Peon</strong></a> services are task execution engines spawned by Middle Managers. Each Peon runs a separate JVM and is responsible for executing a single task. Pe [...]
+forking separate JVM processes per-task, the Indexer runs tasks as individual threads within a single JVM process.</p><p>The Indexer is designed to be easier to configure and deploy compared to the Middle Manager + Peon system and to better enable resource sharing across tasks. The Indexer is a newer feature and is currently designated <a href="/docs/31.0.1/development/experimental">experimental</a> due to the fact that its memory management system is still under
+development. It will continue to mature in future versions of Druid.</p><p>Typically, you would deploy either Middle Managers or Indexers, but not both.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="colocation-of-services">Colocation of services<a href="#colocation-of-services" class="hash-link" aria-label="Direct link to Colocation of services" title="Direct link to Colocation of services">​</a></h2><p>Colocating Druid services by server type generally results in better utilizat [...]
+For very large scale clusters, it can be desirable to split the Druid services such that they run on individual servers to avoid resource contention.</p><p>This section describes guidelines and configuration parameters related to service colocation.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="coordinators-and-overlords">Coordinators and Overlords<a href="#coordinators-and-overlords" class="hash-link" aria-label="Direct link to Coordinators and Overlords" title="Direct link to C [...]
+For more information, see <a href="/docs/31.0.1/configuration/#coordinator-operation">Coordinator Operation</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="historicals-and-middle-managers">Historicals and Middle Managers<a href="#historicals-and-middle-managers" class="hash-link" aria-label="Direct link to Historicals and Middle Managers" title="Direct link to Historicals and Middle Managers">​</a></h3><p>With higher levels of ingestion or query load, it can make sense to depl [...]
+leverage existing infrastructure, where present.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deep-storage">Deep storage<a href="#deep-storage" class="hash-link" aria-label="Direct link to Deep storage" title="Direct link to Deep storage">​</a></h3><p>Druid uses deep storage to store any data that has been ingested into the system. Deep storage is shared file
+storage accessible by every Druid server. In a clustered deployment, this is typically a distributed object store like S3 or
+HDFS, or a network mounted filesystem. In a single-server deployment, this is typically local disk.</p><p>Druid uses deep storage for the following purposes:</p><ul><li>To store all the data you ingest. Segments that get loaded onto Historical services for low latency queries are also kept in deep storage for backup purposes. Additionally, segments that are only in deep storage can be used for <a href="/docs/31.0.1/querying/query-deep-storage">queries from deep storage</a>.</li><li>As a  [...]
+Segments on disk for Historical services provide the low latency querying performance Druid is known for.</p><p>You can also query directly from deep storage. When you query segments that exist only in deep storage, you trade some performance  for the ability to query more of your data without necessarily having to scale your Historical services.</p><p>When determining sizing for your storage, keep the following in mind:</p><ul><li>Deep storage needs to be able to hold all the data that  [...]
+if every single data server is lost and re-provisioned.</p><p>For more details, please see the <a href="/docs/31.0.1/design/deep-storage">Deep storage</a> page.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage">Metadata storage<a href="#metadata-storage" class="hash-link" aria-label="Direct link to Metadata storage" title="Direct link to Metadata storage">​</a></h3><p>The metadata storage holds various shared system metadata such as segment usage information and tas [...]
+clustered deployment, this is typically a traditional RDBMS like PostgreSQL or MySQL. In a single-server
+deployment, it is typically a locally-stored Apache Derby database.</p><p>For more details, please see the <a href="/docs/31.0.1/design/metadata-storage">Metadata storage</a> page.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>Used for internal service discovery, coordination, and leader election.</p><p>For more details, please see the <a  [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/auth.html/index.html b/docs/31.0.1/design/auth.html/index.html
new file mode 100644
index 000000000..525b14532
--- /dev/null
+++ b/docs/31.0.1/design/auth.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/operations/auth">
+    <link rel="canonical" href="/docs/31.0.1/operations/auth" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/operations/auth' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/broker.html/index.html b/docs/31.0.1/design/broker.html/index.html
new file mode 100644
index 000000000..a48ca3cbc
--- /dev/null
+++ b/docs/31.0.1/design/broker.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/broker">
+    <link rel="canonical" href="/docs/31.0.1/design/broker" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/broker' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/broker/index.html b/docs/31.0.1/design/broker/index.html
new file mode 100644
index 000000000..4b52f3da6
--- /dev/null
+++ b/docs/31.0.1/design/broker/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/broker" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Broker service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/desig [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Historical services. Once the Historical services return their results, the Broker will store those results in the cache. Real-time segments are never cached and hence requests for real-time data will always be forwarded to real-time services. Real-time data is perpetually changing and caching the results would be unreliable.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0. [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/concepts-and-terminology.html/index.html b/docs/31.0.1/design/concepts-and-terminology.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/design/concepts-and-terminology.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/coordinator.html/index.html b/docs/31.0.1/design/coordinator.html/index.html
new file mode 100644
index 000000000..947a54c2a
--- /dev/null
+++ b/docs/31.0.1/design/coordinator.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/coordinator">
+    <link rel="canonical" href="/docs/31.0.1/design/coordinator" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/coordinator' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/coordinator/index.html b/docs/31.0.1/design/coordinator/index.html
new file mode 100644
index 000000000..c57b0593c
--- /dev/null
+++ b/docs/31.0.1/design/coordinator/index.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/coordinator" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Coordinator service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Coordinator service communicates to Historical services to load or drop segments based on configurations. The Coordinator is responsible for loading new segments, dropping outdated segments, ensuring that segments are &quot;replicated&quot; (that is, loaded on multiple different Historical nodes) proper (configured) number of times, and moving
+(&quot;balancing&quot;) segments between Historical nodes to keep the latter evenly loaded.</p><p>The Coordinator runs its duties periodically and the time between each run is a configurable parameter. On each
+run, the Coordinator assesses the current state of the cluster before deciding on the appropriate actions to take.
+Similar to the Broker and Historical services, the Coordinator maintains a connection to a ZooKeeper cluster for
+current cluster information. The Coordinator also maintains a connection to a database containing information about
+&quot;used&quot; segments (that is, the segments that <em>should</em> be loaded in the cluster) and the loading rules.</p><p>Before any unassigned segments are serviced by Historical services, the Historical services for each tier are first
+sorted in terms of capacity, with least capacity servers having the highest priority. Unassigned segments are always
+assigned to the services with least capacity to maintain a level of balance between services. The Coordinator does not
+directly communicate with a Historical service when assigning it a new segment; instead the Coordinator creates some
+temporary information about the new segment under load queue path of the Historical service. Once this request is seen,
+the Historical service loads the segment and begins servicing it.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Coordinator service configuration, see <a href="/docs/31.0.1/configuration/#coordinator">Coordinator configuration</a>.</p><p>For basic tuning guidance for the Coordinator service, see <a href [...]
+Historical nodes in the cluster. The Coordinator sends requests to Historical nodes to unload unused segments or segments
+that are removed from the database.</p><p>Segments that are overshadowed (their versions are too old and their data has been replaced by newer segments) are
+marked as unused. During the next Coordinator&#x27;s run, they will be unloaded from Historical nodes in the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="clean-up-non-overshadowed-eternity-tombstone-segments">Clean up non-overshadowed eternity tombstone segments<a href="#clean-up-non-overshadowed-eternity-tombstone-segments" class="hash-link" aria-label="Direct link to Clean up non-overshadowed eternity tombstone segments" title="Direct link to Clean up non-overshadowed [...]
+Each run, the Coordinator compacts segments by merging small segments or splitting a large one. This is useful when the size of your segments is not optimized which may degrade query performance.
+See <a href="/docs/31.0.1/operations/segment-optimization">Segment size optimization</a> for details.</p><p>The Coordinator first finds the segments to compact based on the <a href="#segment-search-policy-in-automatic-compaction">segment search policy</a>.
+Once some segments are found, it issues a <a href="/docs/31.0.1/ingestion/tasks#compact">compaction task</a> to compact those segments.
+The maximum number of running compaction tasks is <code>min(sum of worker capacity * slotRatio, maxSlots)</code>.
+Note that even if <code>min(sum of worker capacity * slotRatio, maxSlots) = 0</code>, at least one compaction task is always submitted
+if the compaction is enabled for a dataSource.
+See <a href="/docs/31.0.1/api-reference/automatic-compaction-api#manage-automatic-compaction">Automatic compaction configuration API</a> and <a href="/docs/31.0.1/configuration/#automatic-compaction-dynamic-configuration">Automatic compaction configuration</a> to enable and configure automatic compaction.</p><p>Compaction tasks might fail due to the following reasons:</p><ul><li>If the input segments of a compaction task are removed or overshadowed before it starts, that compaction task  [...]
+need compaction.
+A set of segments needs compaction if all conditions below are satisfied:</p><ul><li>Total size of segments in the time chunk is smaller than or equal to the configured <code>inputSegmentSizeBytes</code>.</li><li>Segments have never been compacted yet or compaction spec has been updated since the last compaction: <code>maxTotalRows</code> or <code>indexSpec</code>.</li></ul><p>Here are some details with an example. Suppose we have two dataSources (<code>foo</code>, <code>bar</code>) as s [...]
+<code>foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION</code> and <code>foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION_1</code> to compact together because
+<code>2017-11-01T00:00:00.000Z/2017-12-01T00:00:00.000Z</code> is the most recent time chunk.</p><p>If the Coordinator has enough task slots for compaction, this policy will continue searching for the next segments and return
+<code>bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION</code> and <code>bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION_1</code>.
+Finally, <code>foo_2017-09-01T00:00:00.000Z_2017-10-01T00:00:00.000Z_VERSION</code> will be picked up even though there is only one segment in the time chunk of <code>2017-09-01T00:00:00.000Z/2017-10-01T00:00:00.000Z</code>.</p><p>The search start point can be changed by setting <code>skipOffsetFromLatest</code>.
+If this is set, this policy will ignore the segments falling into the time chunk of (the end time of the most recent segment - <code>skipOffsetFromLatest</code>).
+This is to avoid conflicts between compaction tasks and realtime tasks.
+Note that realtime tasks have a higher priority than compaction tasks by default. Realtime tasks will revoke the locks of compaction tasks if their intervals overlap, resulting in the termination of the compaction task.
+For more information, see <a href="/docs/31.0.1/data-management/automatic-compaction#avoid-conflicts-with-ingestion">Avoid conflicts with ingestion</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 [...]
+and their total size exceeds <a href="/docs/31.0.1/configuration/#automatic-compaction-dynamic-configuration"><code>inputSegmentSizeBytes</code></a>.
+If it finds such segments, it simply skips them.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a href="#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ">​</a></h2><ol><li><p><strong>Do clients ever contact the Coordinator service?</strong></p><p>The Coordinator is not involved in a query.</p><p>Historical services never directly contact the Coordinator service. The Coordinator tells the Historical services to load/drop data vi [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/deep-storage.html/index.html b/docs/31.0.1/design/deep-storage.html/index.html
new file mode 100644
index 000000000..308f1e3e0
--- /dev/null
+++ b/docs/31.0.1/design/deep-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/deep-storage">
+    <link rel="canonical" href="/docs/31.0.1/design/deep-storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/deep-storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/deep-storage/index.html b/docs/31.0.1/design/deep-storage/index.html
new file mode 100644
index 000000000..cdfbaad78
--- /dev/null
+++ b/docs/31.0.1/design/deep-storage/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/deep-storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Deep storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+use cloud-based deep storage (<a href="#amazon-s3-or-s3-compatible">Amazon S3</a>, <a href="#google-cloud-storage">Google Cloud Storage</a>,
+or <a href="#azure-blob-storage">Azure Blob Storage</a>), S3-compatible storage (like Minio), or <a href="#hdfs">HDFS</a>. These options are
+generally more convenient, more scalable, and more robust than setting up a shared filesystem.</p><p>The following configurations in <code>common.runtime.properties</code> apply to local storage:</p><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.storage.type</code></td><td><code>local</code></td><td></td><td>Must be set.</td></tr><tr><td><code>druid.storage.storageDirectory</code></td><td>any local di [...]
+<code>druid.segmentCache.infoDir</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="amazon-s3-or-s3-compatible">Amazon S3 or S3-compatible<a href="#amazon-s3-or-s3-compatible" class="hash-link" aria-label="Direct link to Amazon S3 or S3-compatible" title="Direct link to Amazon S3 or S3-compatible">​</a></h3><p>See <a href="/docs/31.0.1/development/extensions-core/s3"><code>druid-s3-extensions</code></a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="google-cloud-storag [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/design.html/index.html b/docs/31.0.1/design/design.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/design/design.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/extensions-contrib/dropwizard.html/index.html b/docs/31.0.1/design/extensions-contrib/dropwizard.html/index.html
new file mode 100644
index 000000000..6622eb862
--- /dev/null
+++ b/docs/31.0.1/design/extensions-contrib/dropwizard.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/extensions-contrib/dropwizard">
+    <link rel="canonical" href="/docs/31.0.1/design/extensions-contrib/dropwizard" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/extensions-contrib/dropwizard' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/extensions-contrib/dropwizard/index.html b/docs/31.0.1/design/extensions-contrib/dropwizard/index.html
new file mode 100644
index 000000000..3471426dc
--- /dev/null
+++ b/docs/31.0.1/design/extensions-contrib/dropwizard/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/extensions-contrib/dropwizard" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Dropwizard metrics emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+It accumulates druid metrics as dropwizard metrics, and emits them to various sinks via dropwizard supported reporters.
+Currently supported dropwizard metrics types counter, gauge, meter, timer and histogram.
+These metrics can be emitted using either Console or JMX reporter. </p><p>To use this emitter, set</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.emitter=dropwizard</span><br></span></code>< [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.
+If the user does not specify their own JSON file, a <a href="#default-metrics-mapping">default mapping</a> is used.
+All metrics are expected to be mapped. Metrics which are not mapped will be ignored.
+Dropwizard metric path is organized using the following schema:</p><p><code>&lt;druid metric name&gt; : { &quot;dimensions&quot; : &lt;dimension list&gt;, &quot;type&quot; : &lt;Dropwizard metric type&gt;, &quot;timeUnit&quot; : &lt;For timers, timeunit in which metric is emitted&gt;}</code></p><p>e.g.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" c [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/historical.html/index.html b/docs/31.0.1/design/historical.html/index.html
new file mode 100644
index 000000000..664e6bac1
--- /dev/null
+++ b/docs/31.0.1/design/historical.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/historical">
+    <link rel="canonical" href="/docs/31.0.1/design/historical" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/historical' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/historical/index.html b/docs/31.0.1/design/historical/index.html
new file mode 100644
index 000000000..3194df9a9
--- /dev/null
+++ b/docs/31.0.1/design/historical/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/historical" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Historical service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Historical services cache data segments on local disk and serve queries from that cache as well as from an in-memory cache.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Historical service configuration, see <a href="/docs/31.0.1/configuration/#historical">Historical configuration</a>.</p><p>For basic t [...]
+For more information, see <a href="/docs/31.0.1/operations/basic-cluster-tuning#segment-cache-size">Segment cache size</a>.</p><p>The <a href="/docs/31.0.1/design/coordinator">Coordinator</a> controls the assignment of segments to Historicals and the balance of segments between Historicals. Historical services do not communicate directly with each other, nor do they communicate directly with the Coordinator. Instead, the Coordinator creates ephemeral entries in ZooKeeper in a <a href="/d [...]
+For information on querying Historical services, see <a href="/docs/31.0.1/querying/">Querying</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/design/router"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Router</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/design/middlemanager"><div cla [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/index.html b/docs/31.0.1/design/index.html
new file mode 100644
index 000000000..169ebe600
--- /dev/null
+++ b/docs/31.0.1/design/index.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Introduction to Apache Druid | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/doc [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid&#x27;s key features are:</p><ol><li><strong>Columnar storage format.</strong> Druid uses column-oriented storage. This means it only loads the exact columns
+needed for a particular query.  This greatly improves speed for queries that retrieve only a few columns. Additionally, to support fast scans and aggregations, Druid optimizes column storage for each column according to its data type.</li><li><strong>Scalable distributed system.</strong> Typical Druid deployments span clusters ranging from tens to hundreds of servers. Druid can ingest data at the rate of millions of records per second while retaining trillions of records and maintaining  [...]
+querying.</li><li><strong>Self-healing, self-balancing, easy to operate.</strong> As an operator, you add servers to scale out or
+remove servers to scale down. The Druid cluster re-balances itself automatically in the background without any downtime. If a
+Druid server fails, the system automatically routes data around the damage until the server can be replaced. Druid
+is designed to run continuously without planned downtime for any reason. This is true for configuration changes and software
+updates.</li><li><strong>Cloud-native, fault-tolerant architecture that won&#x27;t lose data.</strong> After ingestion, Druid safely stores a copy of your data in <a href="/docs/31.0.1/design/architecture#deep-storage">deep storage</a>. Deep storage is typically cloud storage, HDFS, or a shared filesystem. You can recover your data from deep storage even in the unlikely case that all Druid servers fail. For a limited failure that affects only a few Druid servers, replication ensures that [...]
+<a href="https://arxiv.org/pdf/1004.0403" target="_blank" rel="noopener noreferrer">CONCISE</a> compressed bitmap indexes to create indexes to enable fast filtering and searching across multiple columns.</li><li><strong>Time-based partitioning.</strong> Druid first partitions data by time. You can optionally implement additional partitioning based upon other fields.
+Time-based queries only access the partitions that match the time range of the query which leads to significant performance improvements.</li><li><strong>Approximate algorithms.</strong> Druid includes algorithms for approximate count-distinct, approximate ranking, and
+computation of approximate histograms and quantiles. These algorithms offer bounded memory usage and are often
+substantially faster than exact computations. For situations where accuracy is more important than speed, Druid also
+offers exact count-distinct and exact ranking.</li><li><strong>Automatic summarization at ingest time.</strong> Druid optionally supports data summarization at ingestion time. This
+summarization partially pre-aggregates your data, potentially leading to significant cost savings and performance boosts.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="when-to-use-druid">When to use Druid<a href="#when-to-use-druid" class="hash-link" aria-label="Direct link to When to use Druid" title="Direct link to When to use Druid">​</a></h2><p>Druid is used by many companies of various sizes for many different use cases. For more information see
+<a href="/druid-powered">Powered by Apache Druid</a>.</p><p>Druid is likely a good choice if your use case matches a few of the following:</p><ul><li>Insert rates are very high, but updates are less common.</li><li>Most of your queries are aggregation and reporting queries. For example &quot;group by&quot; queries. You may also have searching and
+scanning queries.</li><li>You are targeting query latencies of 100ms to a few seconds.</li><li>Your data has a time component. Druid includes optimizations and design choices specifically related to time.</li><li>You may have more than one table, but each query hits just one big distributed table. Queries may potentially hit more
+than one smaller &quot;lookup&quot; table.</li><li>You have high cardinality data columns, e.g. URLs, user IDs, and need fast counting and ranking over them.</li><li>You want to load data from Kafka, HDFS, flat files, or object storage like Amazon S3.</li></ul><p>Situations where you would likely <em>not</em> want to use Druid include:</p><ul><li>You need low-latency updates of <em>existing</em> records using a primary key. Druid supports streaming inserts, but not streaming updates. You [...]
+background batch jobs.</li><li>You are building an offline reporting system where query latency is not very important.</li><li>You want to do &quot;big&quot; joins, meaning joining one big fact table to another big fact table, and you are okay with these queries
+taking a long time to complete.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="learn-more">Learn more<a href="#learn-more" class="hash-link" aria-label="Direct link to Learn more" title="Direct link to Learn more">​</a></h2><ul><li>Try the Druid <a href="/docs/31.0.1/tutorials/">Quickstart</a>.</li><li>Learn more about Druid components in <a href="/docs/31.0.1/design/architecture">Design</a>.</li><li>Read about new features and improvements in <a href="https://github.com/apa [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/indexer.html/index.html b/docs/31.0.1/design/indexer.html/index.html
new file mode 100644
index 000000000..15c8d00e2
--- /dev/null
+++ b/docs/31.0.1/design/indexer.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/indexer">
+    <link rel="canonical" href="/docs/31.0.1/design/indexer" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/indexer' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/indexer/index.html b/docs/31.0.1/design/indexer/index.html
new file mode 100644
index 000000000..da09e8667
--- /dev/null
+++ b/docs/31.0.1/design/indexer/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/indexer" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Indexer service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/desi [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Its memory management system is still under development and will be significantly enhanced in later releases.</p></div></div><p>The Apache Druid Indexer service is an alternative to the Middle Manager + Peon task execution system. Instead of forking a separate JVM process per-task, the Indexer runs tasks as separate threads within a single JVM process.</p><p>The Indexer is designed to be easier to configure and deploy compared to the Middle Manager + Peon system and to better enable reso [...]
+One pool is exclusively used for task control messages between the Overlord and the Indexer (&quot;chat handler threads&quot;). The other pool is used for handling all other HTTP requests.</p><p>To configure the number of threads, use the <code>druid.server.http.numThreads</code> property. For example, if <code>druid.server.http.numThreads</code> is set to 10, there will be 10 chat handler threads and 10 non-chat handler threads.</p><p>In addition to these two pools, the Indexer allocate [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/indexing-service.html/index.html b/docs/31.0.1/design/indexing-service.html/index.html
new file mode 100644
index 000000000..d25d485a1
--- /dev/null
+++ b/docs/31.0.1/design/indexing-service.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/indexing-service">
+    <link rel="canonical" href="/docs/31.0.1/design/indexing-service" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/indexing-service' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/indexing-service/index.html b/docs/31.0.1/design/indexing-service/index.html
new file mode 100644
index 000000000..ce506d4f5
--- /dev/null
+++ b/docs/31.0.1/design/indexing-service/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/indexing-service" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Indexing Service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Overlords and Middle Managers may run on the same process or across multiple processes, while Middle Managers and Peons always run on the same process.</p><p>Tasks are managed using API endpoints on the Overlord service. Please see <a href="/docs/31.0.1/api-reference/tasks-api">Tasks API</a> for more information.</p><p><img loading="lazy" alt="Indexing Service" src="/assets/images/indexing_service-e985270b9e0e342af71c0673407e5673.png" title="Indexing Service" width="532" height="621" cla [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/metadata-storage.html/index.html b/docs/31.0.1/design/metadata-storage.html/index.html
new file mode 100644
index 000000000..05e94cf44
--- /dev/null
+++ b/docs/31.0.1/design/metadata-storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/metadata-storage">
+    <link rel="canonical" href="/docs/31.0.1/design/metadata-storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/metadata-storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/metadata-storage/index.html b/docs/31.0.1/design/metadata-storage/index.html
new file mode 100644
index 000000000..f5d1f1620
--- /dev/null
+++ b/docs/31.0.1/design/metadata-storage/index.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/metadata-storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Metadata storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid uses the metadata store to house various metadata about the system, but not to store the actual data.
+The metadata store retains all metadata essential for a Druid cluster to work.</p><p>The metadata store includes the following:</p><ul><li>Segments records</li><li>Rule records</li><li>Configuration records</li><li>Task-related tables</li><li>Audit records</li></ul><p>Derby is the default metadata store for Druid, however, it is not suitable for production.
+<a href="/docs/31.0.1/development/extensions-core/mysql">MySQL</a> and <a href="/docs/31.0.1/development/extensions-core/postgresql">PostgreSQL</a> are more production suitable metadata stores.
+See <a href="/docs/31.0.1/configuration/#metadata-storage">Metadata storage configuration</a> for the default configuration settings.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14- [...]
+See the database-specific docs for guidance on versions.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mysql">MySQL<a href="#mysql" class="hash-link" aria-label="Direct link to MySQL" title="Direct link to MySQL">​</a></h3><p>See <a href="/docs/31.0.1/development/extensions-core/mysql">mysql-metadata-storage extension documentation</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="postgresql">PostgreSQL<a href="#postgresql" class="hash-link" aria-label="Direct link to Po [...]
+Define these properties with a <code>druid.metadata.storage.connector.dbcp.</code> prefix.
+For example:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.metadata.storage.connector.dbcp.maxConnLifetimeMillis=1200000</span><br></span><span class="token-line"  [...]
+&quot;used segments&quot; elsewhere in the documentation and throughout the project.) The table is polled by the
+<a href="/docs/31.0.1/design/coordinator">Coordinator</a> to determine the set of segments that should be available for querying in the
+system. The table has two main functional columns, the other columns are for indexing purposes.</p><p>Value 1 in the <code>used</code> column means that the segment should be &quot;used&quot; by the cluster (i.e., it should be loaded and
+available for requests). Value 0 means that the segment should not be loaded into the cluster. We do this as a means of
+unloading segments from the cluster without actually removing their metadata (which allows for simpler rolling back if
+that is ever an issue). The <code>used</code> column has a corresponding <code>used_status_last_updated</code> column which denotes the time
+when the <code>used</code> status of the segment was last updated. This information can be used by the Coordinator to determine if
+a segment is a candidate for deletion (if automated segment killing is enabled).</p><p>The <code>payload</code> column stores a JSON blob that has all of the metadata for the segment.
+Some of the data in the <code>payload</code> column intentionally duplicates data from other columns in the segments table.
+As an example, the <code>payload</code> column may take the following form:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class= [...]
+land. These rules are used by the <a href="/docs/31.0.1/design/coordinator">Coordinator</a>
+when making segment (re-)allocation decisions about the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="config-table">Config table<a href="#config-table" class="hash-link" aria-label="Direct link to Config table" title="Direct link to Config table">​</a></h3><p>The config table stores runtime configuration objects. We do not have
+many of these yet and we are not sure if we will keep this mechanism going
+forward, but it is the beginnings of a method of changing some configuration
+parameters across the cluster at runtime.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="task-related-tables">Task-related tables<a href="#task-related-tables" class="hash-link" aria-label="Direct link to Task-related tables" title="Direct link to Task-related tables">​</a></h3><p>Task-related tables are created and used by the <a href="/docs/31.0.1/design/overlord">Overlord</a> and <a href="/docs/31.0.1/design/middlemanager">Middle Manager</a> when managing tasks.</p><h3 class="a [...]
+such as rule changes done by <a href="/docs/31.0.1/design/coordinator">Coordinator</a> and other
+config changes.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage-access">Metadata storage access<a href="#metadata-storage-access" class="hash-link" aria-label="Direct link to Metadata storage access" title="Direct link to Metadata storage access">​</a></h2><p>Only the following processes access the metadata storage:</p><ol><li>Indexing service processes (if any)</li><li>Realtime processes (if any)</li><li>Coordinator processes</li></ol><p>Thus you need to give perm [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/middlemanager.html/index.html b/docs/31.0.1/design/middlemanager.html/index.html
new file mode 100644
index 000000000..2a99f743e
--- /dev/null
+++ b/docs/31.0.1/design/middlemanager.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/middlemanager">
+    <link rel="canonical" href="/docs/31.0.1/design/middlemanager" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/middlemanager' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/middlemanager/index.html b/docs/31.0.1/design/middlemanager/index.html
new file mode 100644
index 000000000..7bf83061f
--- /dev/null
+++ b/docs/31.0.1/design/middlemanager/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/middlemanager" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Middle Manager service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Druid uses separate JVMs for tasks to isolate resources and logs. Each Peon is capable of running only one task at a time, whereas a Middle Manager may have multiple Peons.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Middle Manager service configuration, see <a href="/docs/31.0.1/configuration/#middle [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/overlord.html/index.html b/docs/31.0.1/design/overlord.html/index.html
new file mode 100644
index 000000000..3f7045cbe
--- /dev/null
+++ b/docs/31.0.1/design/overlord.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/overlord">
+    <link rel="canonical" href="/docs/31.0.1/design/overlord" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/overlord' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/overlord/index.html b/docs/31.0.1/design/overlord/index.html
new file mode 100644
index 000000000..ee90391e7
--- /dev/null
+++ b/docs/31.0.1/design/overlord/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/overlord" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Overlord service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+In local mode, the Overlord is also responsible for creating Peons for executing tasks. When running the Overlord in local mode, all Middle Manager and Peon configurations must be provided as well.
+Local mode is typically used for simple workflows. In remote mode, the Overlord and Middle Manager are run in separate services and you can run each on a different server.
+This mode is recommended if you intend to use the indexing service as the single endpoint for all Druid indexing.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>For Apache Druid Overlord service configuration, see <a href="/docs/31.0.1/configuration/#overlord">Overlord Configuration</a>.</p><p>For basic tuning guidance f [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/peons.html/index.html b/docs/31.0.1/design/peons.html/index.html
new file mode 100644
index 000000000..0e9f5c308
--- /dev/null
+++ b/docs/31.0.1/design/peons.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/peons">
+    <link rel="canonical" href="/docs/31.0.1/design/peons" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/peons' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/peons/index.html b/docs/31.0.1/design/peons/index.html
new file mode 100644
index 000000000..2b9542ebe
--- /dev/null
+++ b/docs/31.0.1/design/peons/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/peons" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Peon service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/design/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Peons should rarely run on their own.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="running">Running<a href="#running" class="hash-link" aria-label="Direct link to Running" title="Direct link to Running">​</a></h2><p>The Peon should seldom run separately from the Middle Manager, except for development purposes.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0 [...]
+The status file indicates where the task status will be output.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/design/middlemanager"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Middle Manager</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/design/indexer"><div class="pagination-nav__sublabe [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/plumber.html/index.html b/docs/31.0.1/design/plumber.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/design/plumber.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/processes.html/index.html b/docs/31.0.1/design/processes.html/index.html
new file mode 100644
index 000000000..594c12bb2
--- /dev/null
+++ b/docs/31.0.1/design/processes.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/architecture">
+    <link rel="canonical" href="/docs/31.0.1/design/architecture" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/architecture' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/realtime.html/index.html b/docs/31.0.1/design/realtime.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/design/realtime.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/router.html/index.html b/docs/31.0.1/design/router.html/index.html
new file mode 100644
index 000000000..2854cf7be
--- /dev/null
+++ b/docs/31.0.1/design/router.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/router">
+    <link rel="canonical" href="/docs/31.0.1/design/router" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/router' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/router/index.html b/docs/31.0.1/design/router/index.html
new file mode 100644
index 000000000..2b0ba5740
--- /dev/null
+++ b/docs/31.0.1/design/router/index.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/router" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Router service | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/desig [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+setting up a highly available cluster in situations where the HTTP redirect mechanism of the inactive to active
+Coordinator or Overlord service does not function correctly, such as when servers are behind a load balancer or the hostname used in the redirect is only resolvable internally.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="enable-the-management-proxy">Enable the management proxy<a href="#enable-the-management-proxy" class="hash-link" aria-label="Direct link to Enable the management proxy" title="Direct link to Enable the management proxy">​</a></h3><p>To enable the management pro [...]
+determined from the original request path based on Druid API path conventions. For the Coordinator the convention is
+<code>/druid/coordinator/*</code> and for the Overlord the convention is <code>/druid/indexer/*</code>. These are convenient because they mean
+that using the management proxy does not require modifying the API request other than issuing the request to the Router
+instead of the Coordinator or Overlord. Most Druid API requests can be routed implicitly.</p><p>Explicit routes are those where the request to the Router contains a path prefix indicating which service the request
+should be routed to. For the Coordinator this prefix is <code>/proxy/coordinator</code> and for the Overlord it is <code>/proxy/overlord</code>.
+This is required for API calls with an ambiguous destination. For example, the <code>/status</code> API is present on all Druid
+services, so explicit routing needs to be used to indicate the proxy destination.</p><p>This is summarized in the table below:</p><table><thead><tr><th>Request Route</th><th>Destination</th><th>Rewritten Route</th><th>Example</th></tr></thead><tbody><tr><td><code>/druid/coordinator/*</code></td><td>Coordinator</td><td><code>/druid/coordinator/*</code></td><td><code>router:8888/druid/coordinator/v1/datasources</code> -&gt; <code>coordinator:8081/druid/coordinator/v1/datasources</code></td [...]
+This strategy can route both native and SQL queries.</p><p>The following example strategy routes queries to the Broker <code>druid:broker-hot</code> if no valid <code>brokerService</code> is found in the query context.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockL [...]
+given SQL query is resolved using only the provided Router strategies. If not resolved using any of the strategies, the
+Router uses the <code>defaultBrokerServiceName</code>. This behavior is slightly different from native queries where the Router
+first tries to resolve the Broker service using strategies, then load rules and finally using the <code>defaultBrokerServiceName</code>
+if still not resolved. When <code>druid.router.sql.enable</code> is set to <code>false</code> (default value), the Router uses the
+<code>defaultBrokerServiceName</code>.</p><p>Setting <code>druid.router.sql.enable</code> does not affect either Avatica JDBC requests or native queries.
+Druid always routes native queries using the strategies and load rules as documented.
+Druid always routes Avatica JDBC requests based on connection ID.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="avatica-query-balancing">Avatica query balancing<a href="#avatica-query-balancing" class="hash-link" aria-label="Direct link to Avatica query balancing" title="Direct link to Avatica query balancing">​</a></h2><p>All Avatica JDBC requests with a given connection ID must be routed to the same Broker, since Druid Brokers do not share connection state with each other.</p>< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/segments.html/index.html b/docs/31.0.1/design/segments.html/index.html
new file mode 100644
index 000000000..a27dc5bd0
--- /dev/null
+++ b/docs/31.0.1/design/segments.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/segments">
+    <link rel="canonical" href="/docs/31.0.1/design/segments" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/segments' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/segments/index.html b/docs/31.0.1/design/segments/index.html
new file mode 100644
index 000000000..6999c84eb
--- /dev/null
+++ b/docs/31.0.1/design/segments/index.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/segments" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Segments | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/design/segm [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+file size to be within the recommended range of 300-700 MB. If your
+segment files are larger than this range, then consider either
+changing the granularity of the segment time interval or partitioning your
+data and/or adjusting the <code>targetRowsPerSegment</code> in your <code>partitionsSpec</code>.
+A good starting point for this parameter is 5 million rows.
+See the Sharding section below and the &quot;Partitioning specification&quot; section of
+the <a href="/docs/31.0.1/ingestion/hadoop#partitionsspec">Batch ingestion</a> documentation
+for more guidance.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="segment-file-structure">Segment file structure<a href="#segment-file-structure" class="hash-link" aria-label="Direct link to Segment file structure" title="Direct link to Segment file structure">​</a></h2><p>Segment files are <em>columnar</em>: the data for each column is laid out in
+separate data structures. By storing each column separately, Druid decreases query latency by scanning only those columns actually needed for a query. There are three basic column types: timestamp, dimensions, and metrics:</p><p><img loading="lazy" alt="Druid column types" src="/assets/images/druid-column-types-0cd9a011b4cc2b4d05f93b3b31a7e735.png" title="Druid Column Types" width="1936" height="400" class="img_ev3q"></p><p>Timestamp and metrics type columns are arrays of integer or floa [...]
+<a href="https://github.com/lz4/lz4-java" target="_blank" rel="noopener noreferrer">LZ4</a>. Once a query identifies which rows to select, it decompresses them, pulls out the relevant rows, and applies the
+desired aggregation operator. If a query doesn’t require a column, Druid skips over that column&#x27;s data.</p><p>Dimension columns are different because they support filter and
+group-by operations, so each dimension requires the following
+three data structures:</p><ul><li><strong>Dictionary</strong>: Maps values (which are always treated as strings) to integer IDs, allowing compact representation of the list and bitmap values.</li><li><strong>List</strong>: The column’s values, encoded using the dictionary. Required for GroupBy and TopN queries. These operators allow queries that solely aggregate metrics based on filters to run without accessing the list of values.</li><li><strong>Bitmap</strong>: One bitmap for each dist [...]
+bitmap. If a row has more than one value for a column, its entry in
+the list is an array of values. Additionally, a row with <em>n</em> values in the list has <em>n</em> non-zero valued entries in bitmaps.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="compression">Compression<a href="#compression" class="hash-link" aria-label="Direct link to Compression" title="Direct link to Compression">​</a></h2><p>Druid uses LZ4 by default to compress blocks of values for string, long, float, and double columns. Druid uses Roaring to compress bitmaps for stri [...]
+Smoosh files contain the following: </p><ul><li>Individual files for each column in the data, including one for the <code>__time</code> column that refers to the timestamp of the segment. </li><li>An <code>index.drd</code> file that contains additional segment metadata.</li></ul></li></ul><p>In the codebase, segments have an internal format version. The current segment format version is <code>v9</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="implications-of-updating-segmen [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/storage.html/index.html b/docs/31.0.1/design/storage.html/index.html
new file mode 100644
index 000000000..2120e41d3
--- /dev/null
+++ b/docs/31.0.1/design/storage.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/storage">
+    <link rel="canonical" href="/docs/31.0.1/design/storage" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/storage' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/storage/index.html b/docs/31.0.1/design/storage/index.html
new file mode 100644
index 000000000..87c4cc818
--- /dev/null
+++ b/docs/31.0.1/design/storage/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/storage" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Storage overview | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/des [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+a task that is overwriting (like a Hadoop task, or an index task not in append mode) this is done by locking an interval and creating a new version number and new set of segments.</li><li>If the indexing task is a realtime task (like a Kafka task) then the segment is immediately queryable at this point. It&#x27;s available, but unpublished.</li><li>When the indexing task has finished reading data for the segment, it pushes it to deep storage and then publishes it by writing a record into [...]
+<code>2018-05-21T16:00:00.000Z/2018-05-21T17:00:00.000Z</code>, version <code>2018-05-21T15:56:09.909Z</code>, and partition number 1:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">clarity-cloud0 [...]
+available before they are published, since they are only published when the segment is complete and will not accept any additional rows of data.</li><li><strong>Deep storage:</strong> Segment data files are pushed to deep storage once a segment is done being constructed. This happens immediately before publishing metadata to the metadata store.</li><li><strong>Availability for querying:</strong> Segments are available for querying on some Druid data server, like a realtime task, directly [...]
+<a href="/docs/31.0.1/querying/sql-metadata-tables#segments-table"><code>sys.segments</code> table</a>. It includes the following flags:</p><ul><li><code>is_published</code>: True if segment metadata has been published to the metadata store and <code>used</code> is true.</li><li><code>is_available</code>: True if the segment is currently available for querying, either on a realtime task or Historical service.</li><li><code>is_realtime</code>: True if the segment is only available on real [...]
+<a href="#indexing-and-handoff">Indexing and handoff</a>. This means that when understanding Druid&#x27;s availability and consistency properties, we must look at each function separately.</p><p>On the ingestion side, Druid&#x27;s primary <a href="/docs/31.0.1/ingestion/#ingestion-methods">ingestion methods</a> are all pull-based and offer transactional guarantees. This means that you are guaranteed that ingestion using these methods will publish in an all-or-nothing manner:</p><ul><li>S [...]
+discarded, and Druid will resume ingestion from the last committed set of stream offsets. This ensures exactly-once publishing behavior.</li><li><a href="/docs/31.0.1/ingestion/hadoop">Hadoop-based batch ingestion</a>. Each task publishes all segment metadata in a single transaction.</li><li><a href="/docs/31.0.1/ingestion/native-batch">Native batch ingestion</a>. In parallel mode, the supervisor task publishes all segment metadata in a single transaction after the subtasks are finished. [...]
+<a href="/docs/31.0.1/ingestion/native-batch"><code>appendToExisting</code></a> is true, or one of your input sources is the same Druid datasource that you are ingesting into. In either of these two cases, running the same task twice is non-idempotent, because you are adding to existing data instead of overwriting it.</li></ul><p>On the query side, the Druid Broker is responsible for ensuring that a consistent set of segments is involved in a given query. It selects the appropriate set o [...]
+This is used for Hadoop-based batch ingestion, native batch ingestion when <code>appendToExisting</code> is false, and compaction.</p><p>Note that atomic replacement happens for each time chunk individually. If a batch ingestion task or compaction involves multiple time chunks, then each time chunk will undergo atomic replacement soon after the task finishes, but the replacements will not all happen simultaneously.</p><p>Typically, atomic replacement in Druid is based on a core set conce [...]
+When a time chunk is overwritten, a new core set of segments is created with a higher version number. The core set must all be available before the Broker will use them instead of the older set. There can also only be one core set per version per time chunk. Druid will also only use a single version at a time per time chunk. Together, these properties provide Druid&#x27;s atomic replacement guarantees.</p><p>Druid also supports an experimental segment locking mode that is activated by setting
+<a href="/docs/31.0.1/ingestion/tasks#context"><code>forceTimeChunkLock</code></a> to false in the context of an ingestion task. In this case, Druid creates an atomic update group using the existing version for the time chunk, instead of creating a new core set with a new version number. There can be multiple atomic update groups with the same version number per time chunk. Each one replaces a specific set of earlier segments in the same time chunk and with the same version number. Druid [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/zookeeper.html/index.html b/docs/31.0.1/design/zookeeper.html/index.html
new file mode 100644
index 000000000..e6998e95c
--- /dev/null
+++ b/docs/31.0.1/design/zookeeper.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/zookeeper">
+    <link rel="canonical" href="/docs/31.0.1/design/zookeeper" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/zookeeper' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/design/zookeeper/index.html b/docs/31.0.1/design/zookeeper/index.html
new file mode 100644
index 000000000..34ae51666
--- /dev/null
+++ b/docs/31.0.1/design/zookeeper/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-design/zookeeper" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">ZooKeeper | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/design/zoo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Starting with Apache Druid 31.0.0, support for Zookeeper-based segment loading has been removed.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-operations">ZooKeeper Operations<a href="#zookeeper-operations" class="hash-link" aria-label="Direct link to ZooKeeper Operations" title="Direct link to ZooKeeper Operations">​</a></h2><p>The operations that happen over ZK are</p><ol><li><a href="/docs/31.0.1/design/coordinator">Coordinator</a> leader election</li><li [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/approximate-histograms.html/index.html b/docs/31.0.1/development/approximate-histograms.html/index.html
new file mode 100644
index 000000000..84d16785e
--- /dev/null
+++ b/docs/31.0.1/development/approximate-histograms.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/approximate-histograms">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/approximate-histograms" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/approximate-histograms' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/build.html/index.html b/docs/31.0.1/development/build.html/index.html
new file mode 100644
index 000000000..3e5da6842
--- /dev/null
+++ b/docs/31.0.1/development/build.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/build">
+    <link rel="canonical" href="/docs/31.0.1/development/build" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/build' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/build/index.html b/docs/31.0.1/development/build/index.html
new file mode 100644
index 000000000..ac745fa27
--- /dev/null
+++ b/docs/31.0.1/development/build/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/build" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Build from source | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+that matches the version you want to build.
+For building the latest code in master, follow the latest version of this page
+<a href="https://github.com/apache/druid/blob/master/docs/development/build.md" target="_blank" rel="noopener noreferrer">here</a>:
+make sure it has <code>/master/</code> in the URL.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="installing-java-and-maven">Installing Java and Maven<a href="#installing-java-and-maven" class="hash-link" aria-label="Direct link to Installing Java and Maven" title="Direct l [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/azure.html/index.html b/docs/31.0.1/development/community-extensions/azure.html/index.html
new file mode 100644
index 000000000..679b6e6ac
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/azure.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/azure">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/azure" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/azure' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/cassandra.html/index.html b/docs/31.0.1/development/community-extensions/cassandra.html/index.html
new file mode 100644
index 000000000..d9ffe39e5
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/cassandra.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/cloudfiles.html/index.html b/docs/31.0.1/development/community-extensions/cloudfiles.html/index.html
new file mode 100644
index 000000000..e49d049f6
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/cloudfiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/cloudfiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/cloudfiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/cloudfiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/graphite.html/index.html b/docs/31.0.1/development/community-extensions/graphite.html/index.html
new file mode 100644
index 000000000..d663ce946
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/graphite.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/graphite">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/graphite" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/graphite' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/kafka-simple.html/index.html b/docs/31.0.1/development/community-extensions/kafka-simple.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/kafka-simple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/community-extensions/rabbitmq.html/index.html b/docs/31.0.1/development/community-extensions/rabbitmq.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/community-extensions/rabbitmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/contribute-to-docs.html/index.html b/docs/31.0.1/development/contribute-to-docs.html/index.html
new file mode 100644
index 000000000..47e93e1d7
--- /dev/null
+++ b/docs/31.0.1/development/contribute-to-docs.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/contribute-to-docs">
+    <link rel="canonical" href="/docs/31.0.1/development/contribute-to-docs" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/contribute-to-docs' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/contribute-to-docs/index.html b/docs/31.0.1/development/contribute-to-docs/index.html
new file mode 100644
index 000000000..632456e10
--- /dev/null
+++ b/docs/31.0.1/development/contribute-to-docs/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/contribute-to-docs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Contribute to Druid docs | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<a href="https://druid.apache.org/docs/latest/design/index.html" target="_blank" rel="noopener noreferrer">https://druid.apache.org/docs/latest/design/index.html</a></p><p>If you need to update a Druid doc, locate and update the doc in the Druid repo following the instructions below.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="druid-repo-branches">Druid repo branches<a href="#druid-repo-branches" class="hash-link" aria-label="Direct link to Druid repo branches" title="Direct li [...]
+For the majority of style considerations, the Apache Druid documentation follows the <a href="https://developers.google.com/style" target="_blank" rel="noopener noreferrer">Google Developer Documentation Style Guide</a>.
+The style guide should serve as a point of reference to enable contributors and reviewers to maintain documentation quality.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="notable-style-exceptions">Notable style exceptions<a href="#notable-style-exceptions" class="hash-link" aria-label="Direct link to Notable style exceptions" title="Direct link to Notable style exceptions">​</a></h3><p>In some cases, Google Style might make the Druid docs more difficult to read and understand. Th [...]
+Some code editors may format tables by default.
+See the developer <a href="https://github.com/apache/druid/blob/master/dev/style-conventions.md" target="_blank" rel="noopener noreferrer">style guide</a> for more information.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-. [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/experimental.html/index.html b/docs/31.0.1/development/experimental.html/index.html
new file mode 100644
index 000000000..46966277b
--- /dev/null
+++ b/docs/31.0.1/development/experimental.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/experimental">
+    <link rel="canonical" href="/docs/31.0.1/development/experimental" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/experimental' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/experimental/index.html b/docs/31.0.1/development/experimental/index.html
new file mode 100644
index 000000000..102ae3c57
--- /dev/null
+++ b/docs/31.0.1/development/experimental/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/experimental" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Experimental features | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This can mean any of the following things:</p><ol><li>The feature&#x27;s API may change even in minor releases or patch releases.</li><li>The feature may have known &quot;missing&quot; pieces that will be added later.</li><li>The feature may or may not have received full battle-testing in production environments.</li></ol><p>All experimental features are optional.</p><p>Note that not all of these points apply to every experimental feature. Some have been battle-tested in terms of
+implementation, but are still marked experimental due to an evolving API. Please check the documentation for each
+feature for full details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/development/contribute-to-docs"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Contribute to Druid docs</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/release-info/release-notes"><div class="pagination-nav__sublabel">Nex [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/aliyun-oss.html/index.html b/docs/31.0.1/development/extensions-contrib/aliyun-oss.html/index.html
new file mode 100644
index 000000000..755b46e03
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/aliyun-oss.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/aliyun-oss">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/aliyun-oss" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/aliyun-oss' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/aliyun-oss/index.html b/docs/31.0.1/development/extensions-contrib/aliyun-oss/index.html
new file mode 100644
index 000000000..f5f0525f3
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/aliyun-oss/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/aliyun-oss" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Aliyun OSS | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/developme [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This document describes how to use OSS as Druid deep storage.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2><p>Use the <a href="/docs/31.0.1/operations/pull-deps">pull-deps</a> tool shipped with Druid to install the <code>aliyun-oss-extensions</code> extension, as described <a href="/docs/31.0.1/configuration/extensions#communi [...]
+To do this, add following configurations:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.indexer.logs.type</code></td><td>Global deep storage provider. Must be set to <code>oss</code> to make use of this extension.</td><td>yes</td></tr><tr><td><code>druid.indexer.logs.oss.bucket</code></td><td>The bucket used to keep logs. It could be the same as <code>druid.storage.oss.bucket</code></td><td>yes</td></tr><tr><td><code>dr [...]
+In this case, the <code>uris</code> property of the OSS&#x27;s input source can be used for reading, as shown:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(1 [...]
+Please refer to the official <a href="https://www.alibabacloud.com/help/doc-detail/42777.htm" target="_blank" rel="noopener noreferrer">OSS permission troubleshooting document</a> to find a solution.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#installation" cl [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter.html/index.html b/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter.html/index.html
new file mode 100644
index 000000000..5e0bd91a2
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter/index.html b/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter/index.html
new file mode 100644
index 000000000..ea603ba0e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/ambari-metrics-emitter/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/ambari-metrics-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Ambari Metrics Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+ambari-metrics metric path is organized using the following schema:
+<code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;druid metrics dimensions&gt;.&lt;druid metrics name&gt;</code>
+Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on.</p><p>Example <code>druid.historical.hist-host1:8080.MyDataSourceName.GroupBy.query/time</code>:</p><ul><li><code>druid</code> -&gt; namespace prefix</li><li><code>historical</code> -&gt; service name</li><li><code>hist-host1:8080</code> -&gt; druid hostname</li><li><code>MyDataSourceName</code> -&gt; dimension value</li><li><code>GroupBy</code> -&gt; dimension value< [...]
+The path will be in the form <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;dimensions values ordered by dimension&#x27;s name&gt;.&lt;metric&gt;</code>
+User has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code></p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-b [...]
+Same as for the <code>all</code> converter user has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code>
+White-list based converter comes with the following  default white list map located under resources in <code>./src/main/resources/defaultWhiteListMap.json</code></p><p>Although user can override the default white list map by supplying a property called <code>mapPath</code>.
+This property is a String containing  the path for the file containing <strong>white list map JSON object</strong>.
+For example the following converter will read the map from the file <code>/pathPrefix/fileName.json</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/cassandra.html/index.html b/docs/31.0.1/development/extensions-contrib/cassandra.html/index.html
new file mode 100644
index 000000000..d9ffe39e5
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/cassandra.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/cassandra">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/cassandra" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/cassandra' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/cassandra/index.html b/docs/31.0.1/development/extensions-contrib/cassandra/index.html
new file mode 100644
index 000000000..4b838f466
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/cassandra/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/cassandra" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Cassandra | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+be leveraged for deep storage.  This requires some additional Druid configuration as well as setting up the necessary
+schema within a Cassandra keystore.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div> [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/cloudfiles.html/index.html b/docs/31.0.1/development/extensions-contrib/cloudfiles.html/index.html
new file mode 100644
index 000000000..e49d049f6
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/cloudfiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/cloudfiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/cloudfiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/cloudfiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/cloudfiles/index.html b/docs/31.0.1/development/extensions-contrib/cloudfiles/index.html
new file mode 100644
index 000000000..494c2a5ba
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/cloudfiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/cloudfiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Rackspace Cloud Files | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0. [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/compressed-big-decimal.html/index.html b/docs/31.0.1/development/extensions-contrib/compressed-big-decimal.html/index.html
new file mode 100644
index 000000000..c8caad54a
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/compressed-big-decimal.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/compressed-big-decimal">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/compressed-big-decimal" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/compressed-big-decimal' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/compressed-big-decimal/index.html b/docs/31.0.1/development/extensions-contrib/compressed-big-decimal/index.html
new file mode 100644
index 000000000..9960d8e29
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/compressed-big-decimal/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/compressed-big-decimal" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Compressed Big Decimal | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles.html/index.html b/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles.html/index.html
new file mode 100644
index 000000000..2aec030e7
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles/index.html b/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles/index.html
new file mode 100644
index 000000000..75003511f
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/ddsketch-quantiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/ddsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DDSketches for Approximate Quantiles module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/delta-lake.html/index.html b/docs/31.0.1/development/extensions-contrib/delta-lake.html/index.html
new file mode 100644
index 000000000..f90f76403
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/delta-lake.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/delta-lake">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/delta-lake" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/delta-lake' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/delta-lake/index.html b/docs/31.0.1/development/extensions-contrib/delta-lake/index.html
new file mode 100644
index 000000000..20e914c3e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/delta-lake/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/delta-lake" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Delta Lake extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Lakehouse architecture with various compute engines. <a href="/docs/31.0.1/ingestion/input-sources#delta-lake-input-source">DeltaLakeInputSource</a> lets
+you ingest data stored in a Delta Lake table into Apache Druid. To use the Delta Lake extension, add the <code>druid-deltalake-extensions</code> to the list of loaded extensions.
+See <a href="/docs/31.0.1/configuration/extensions#loading-extensions">Loading extensions</a> for more information.</p><p>The Delta input source reads the configured Delta Lake table and extracts the underlying Delta files in the table&#x27;s latest snapshot
+based on an optional Delta filter. These Delta Lake files are versioned Parquet files.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="version-support">Version support<a href="#version-support" class="hash-link" aria-label="Direct link to Version support" title="Direct link to Version support">​</a></h2><p>The Delta Lake extension uses the Delta Kernel introduced in Delta Lake 3.0.0, which is compatible with Apache Spark 3.5.x.
+Older versions are unsupported, so consider upgrading to Delta Lake 3.0.x or higher to use this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="downloading-delta-lake-extension">Downloading Delta Lake extension<a href="#downloading-delta-lake-extension" class="hash-link" aria-label="Direct link to Downloading Delta Lake extension" title="Direct link to Downloading Delta Lake extension">​</a></h2><p>To download <code>druid-deltalake-extensions</code>, run the following co [...]
+Druid version:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span> [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/distinctcount.html/index.html b/docs/31.0.1/development/extensions-contrib/distinctcount.html/index.html
new file mode 100644
index 000000000..9bf91e170
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/distinctcount.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/distinctcount">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/distinctcount" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/distinctcount' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/distinctcount/index.html b/docs/31.0.1/development/extensions-contrib/distinctcount/index.html
new file mode 100644
index 000000000..7ad89d545
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/distinctcount/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/distinctcount" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DistinctCount Aggregator | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/gce-extensions.html/index.html b/docs/31.0.1/development/extensions-contrib/gce-extensions.html/index.html
new file mode 100644
index 000000000..c33a73668
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/gce-extensions.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/gce-extensions">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/gce-extensions" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/gce-extensions' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/gce-extensions/index.html b/docs/31.0.1/development/extensions-contrib/gce-extensions/index.html
new file mode 100644
index 000000000..fa0b06d14
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/gce-extensions/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/gce-extensions" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">GCE Extensions | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+of GCE (MIG from now on). This choice has been made to ease the configuration of the machines and simplify their
+management.</p><p>For this reason, in order to use this extension, the user must have created</p><ol><li>An instance template with the right machine type and image to bu used to run the Middle Manager</li><li>A MIG that has been configured to use the instance template created in the point above</li></ol><p>Moreover, in order to be able to rescale the machines in the MIG, the Overlord must run with a service account
+guaranteeing the following two scopes from the <a href="https://developers.google.com/identity/protocols/googlescopes#computev1" target="_blank" rel="noopener noreferrer">Compute Engine API</a></p><ul><li><code>https://www.googleapis.com/auth/cloud-platform</code></li><li><code>https://www.googleapis.com/auth/compute</code></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overlord-dynamic-configuration">Overlord Dynamic Configuration<a href="#overlord-dynamic-configuration" cl [...]
+the <code>maxNumWorkers</code> and <code>minNumWorkers</code> used to define the boundaries in between which the
+number of instances must be at any time.</p><p>The internal level is the <code>envConfig</code> and it is used to specify</p><ul><li>The <code>numInstances</code> used to specify how many workers will be spawned at each
+request to provision more workers.  This is safe to be left to <code>1</code></li><li>The <code>projectId</code> used to specify the name of the project in which the MIG resides</li><li>The <code>zoneName</code> used to identify in which zone of the worlds the MIG is</li><li>The <code>managedInstanceGroupName</code> used to specify the MIG containing the instances created or
+removed</li></ul><p>Please refer to the Overlord Dynamic Configuration section in the main <a href="/docs/31.0.1/configuration/">documentation</a>
+for parameters other than the ones specified here, such as <code>selectStrategy</code> etc.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="known-limitations">Known limitations<a href="#known-limitations" class="hash-link" aria-label="Direct link to Known limitations" title="Direct link to Known limitations">​</a></h2><ul><li>The module internally uses the <a href="https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers/listManagedInstances" target="_blank" re [...]
+call from the API and, while the documentation of the API states that the call can be paged through using the
+<code>pageToken</code> argument, the responses to such call do not provide any <code>nextPageToken</code> to set such parameter. This means
+that the extension can operate safely with a maximum of 500 Middle Managers instances at any time (the maximum number
+of instances to be returned for each call).</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overlord-dynamic-configuration" class="table-of-contents__link toc-highlight">Overlord Dynamic Configuration</a></li><li><a href="#known-limitations" class="table-of- [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/google.html/index.html b/docs/31.0.1/development/extensions-contrib/google.html/index.html
new file mode 100644
index 000000000..c8f948f65
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/google.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/google">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/google" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/google' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/graphite.html/index.html b/docs/31.0.1/development/extensions-contrib/graphite.html/index.html
new file mode 100644
index 000000000..d663ce946
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/graphite.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/graphite">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/graphite" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/graphite' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/graphite/index.html b/docs/31.0.1/development/extensions-contrib/graphite/index.html
new file mode 100644
index 000000000..eab8caf02
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/graphite/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/graphite" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Graphite Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Metrics can be sent by using <a href="http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol" target="_blank" rel="noopener noreferrer">plaintext</a> or <a href="http://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-pickle-protocol" target="_blank" rel="noopener noreferrer">pickle</a> protocol.
+The pickle protocol is more efficient and supports sending batches of metrics (plaintext protocol send only one metric) in one request; batch size is configurable.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for graphite emitter are under <code>druid.emitter.graphite</code>.</p><table> [...]
+Graphite metric path is organized using the following schema:
+<code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;druid metrics dimensions&gt;.&lt;druid metrics name&gt;</code>
+Properly naming the metrics is critical to avoid conflicts, confusing data and potentially wrong interpretation later on.</p><p>Example <code>druid.historical.hist-host1_yahoo_com:8080.MyDataSourceName.GroupBy.query/time</code>:</p><ul><li><code>druid</code> -&gt; namespace prefix</li><li><code>historical</code> -&gt; service name</li><li><code>hist-host1.yahoo.com:8080</code> -&gt; druid hostname</li><li><code>MyDataSourceName</code> -&gt; dimension value</li><li><code>GroupBy</code> -& [...]
+The path will be in the form <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].&lt;dimensions values ordered by dimension&#x27;s name&gt;.&lt;metric&gt;</code>
+User has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code></p><p>You can omit the hostname by setting <code>ignoreHostname=true</code>
+<code>druid.SERVICE_NAME.dataSourceName.queryType.query/time</code></p><p>You can omit the service name by setting <code>ignoreServiceName=true</code>
+<code>druid.HOSTNAME.dataSourceName.queryType.query/time</code></p><p>Elements in metric name by default are separated by &quot;/&quot;, so graphite will create all metrics on one level. If you want to have metrics in the tree structure, you have to set <code>replaceSlashWithDot=true</code>
+Original: <code>druid.HOSTNAME.dataSourceName.queryType.query/time</code>
+Changed: <code>druid.HOSTNAME.dataSourceName.queryType.query.time</code></p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="to [...]
+Same as for the <code>all</code> converter user has control of <code>&lt;namespacePrefix&gt;.[&lt;druid service name&gt;].[&lt;druid hostname&gt;].</code>
+White-list based converter comes with the following  default white list map located under resources in <code>./src/main/resources/defaultWhiteListMap.json</code></p><p>Although user can override the default white list map by supplying a property called <code>mapPath</code>.
+This property is a String containing the path for the file containing <strong>white list map JSON object</strong>.
+For example the following converter will read the map from the file <code>/pathPrefix/fileName.json</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/iceberg.html/index.html b/docs/31.0.1/development/extensions-contrib/iceberg.html/index.html
new file mode 100644
index 000000000..55bbf7284
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/iceberg.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/iceberg">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/iceberg" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/iceberg' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/iceberg/index.html b/docs/31.0.1/development/extensions-contrib/iceberg/index.html
new file mode 100644
index 000000000..071db331f
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/iceberg/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/iceberg" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Iceberg extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Iceberg refers to these metastores as catalogs. The Iceberg extension lets you connect to the following Iceberg catalog types:</p><ul><li>REST-based catalog</li><li>Hive metastore catalog</li><li>Local catalog</li></ul><p>Druid does not support AWS Glue catalog yet.</p><p>For a given catalog, Iceberg input source reads the table name from the catalog, applies the filters, and extracts all the underlying live data files up to the latest snapshot.
+The data files can be in Parquet, ORC, or Avro formats. The data files typically reside in a warehouse location, which can be in HDFS, S3, or the local filesystem.
+The <code>druid-iceberg-extensions</code> extension relies on the existing input source connectors in Druid to read the data files from the warehouse. Therefore, the Iceberg input source can be considered as an intermediate input source, which provides the file paths for other input source implementations.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hive-metastore-catalog">Hive metastore catalog<a href="#hive-metastore-catalog" class="hash-link" aria-label="Direct link to Hive  [...]
+<!-- -->You can also specify Hive properties under the <code>catalogProperties</code> object in the ingestion spec. </p><p>The <code>druid-iceberg-extensions</code> extension presently only supports HDFS, S3 and local warehouse directories.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-from-hdfs-warehouse">Read from HDFS warehouse<a href="#read-from-hdfs-warehouse" class="hash-link" aria-label="Direct link to Read from HDFS warehouse" title="Direct link to Read from HDFS war [...]
+The <code>warehouseSource</code> type in the ingestion spec should be <code>hdfs</code>.</p><p>For authenticating with Kerberized clusters, include <code>principal</code> and <code>keytab</code> properties in the <code>catalogProperties</code> object:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-s [...]
+Set the <code>type</code> property of the <code>warehouseSource</code> object to <code>s3</code> in the ingestion spec. If the S3 endpoint for the warehouse is different from the endpoint configured as the deep storage, include the following properties in the <code>warehouseSource</code> object to define the S3 endpoint settings:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockConte [...]
+The following properties are required in the <code>catalogProperties</code>:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;catalogProperties&quot;</span><span class="token  [...]
+The <code>warehouseSource</code> is set to <code>local</code> because this catalog only supports reading from a local filesystem.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rest-catalog">REST catalog<a href="#rest-catalog" class="hash-link" aria-label="Direct link to REST catalog" title="Direct link to REST catalog">​</a></h2><p>To connect to an Iceberg REST Catalog server, configure the <code>icebergCatalog</code> type as <code>rest</code>. The Iceberg REST Open API spec give [...]
+Security credentials may be provided in the <code>catalogProperties</code> object.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="downloading-iceberg-extension">Downloading Iceberg extension<a href="#downloading-iceberg-extension" class="hash-link" aria-label="Direct link to Downloading Iceberg extension" title="Direct link to Downloading Iceberg extension">​</a></h2><p>To download <code>druid-iceberg-extensions</code>, run the following command after replacing <code>&lt;VERSION&g [...]
+Druid version:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">java </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span> [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/influx.html/index.html b/docs/31.0.1/development/extensions-contrib/influx.html/index.html
new file mode 100644
index 000000000..efeb710bc
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/influx.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/influx">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/influx" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/influx' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/influx/index.html b/docs/31.0.1/development/extensions-contrib/influx/index.html
new file mode 100644
index 000000000..e47d1ec58
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/influx/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/influx" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">InfluxDB Line Protocol Parser | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/influxdb-emitter.html/index.html b/docs/31.0.1/development/extensions-contrib/influxdb-emitter.html/index.html
new file mode 100644
index 000000000..f37d6fa7e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/influxdb-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/influxdb-emitter">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/influxdb-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/influxdb-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/influxdb-emitter/index.html b/docs/31.0.1/development/extensions-contrib/influxdb-emitter/index.html
new file mode 100644
index 000000000..b8550f9b7
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/influxdb-emitter/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/influxdb-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">InfluxDB Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+When a metric event is fired it is added to a queue of events. After a configurable amount of time, the events on the queue are transformed to InfluxDB&#x27;s line protocol
+and POSTed to the InfluxDB HTTP API. The entire queue is flushed at this point. The queue is also flushed as the emitter is shutdown.</p><p>Note that authentication and authorization must be <a href="https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization/" target="_blank" rel="noopener noreferrer">enabled</a> on the InfluxDB server.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-lin [...]
+which will be added as a tag to the line protocol string if the metric has a dimension from the white list.
+The value of the dimension is sanitized such that every occurrence of a dot or whitespace is replaced with a <code>_</code> .</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#introduction" class="table-of-contents__link toc-highlight">Introduction</a></li><li><a hr [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/k8s-jobs.html/index.html b/docs/31.0.1/development/extensions-contrib/k8s-jobs.html/index.html
new file mode 100644
index 000000000..1f0e779e6
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/k8s-jobs.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/k8s-jobs">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/k8s-jobs" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/k8s-jobs' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/k8s-jobs/index.html b/docs/31.0.1/development/extensions-contrib/k8s-jobs/index.html
new file mode 100644
index 000000000..1f1066c36
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/k8s-jobs/index.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/k8s-jobs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">MM-less Druid in K8s | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<code>druid.indexer.runner.type: k8s</code> and <code>druid.indexer.task.encapsulatedTask: true</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dynamic-config">Dynamic config<a href="#dynamic-config" class="hash-link" aria-label="Direct link to Dynamic config" title="Direct link to Dynamic config">​</a></h3><p>Druid operators can dynamically tune certain features within this extension. You don&#x27;t need to restart the Overlord
+service for these changes to take effect.</p><p>Druid can dynamically tune <a href="#pod-template-selection">pod template selection</a>, which allows you to configure the pod
+template based on the task to be run. To enable dynamic pod template selection, first configure the
+<a href="#custom-template-pod-adapter">custom template pod adapter</a>.</p><p>Use the following APIs to view and update the dynamic configuration for the Kubernetes task runner.</p><p>To use these APIs, ensure you have read and write permissions for the CONFIG resource type with the resource name
+&quot;CONFIG&quot;. For more information on permissions, see
+<a href="/docs/31.0.1/operations/security-user-auth#config">User authentication and authorization</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="get-dynamic-configuration">Get dynamic configuration<a href="#get-dynamic-configuration" class="hash-link" aria-label="Direct link to Get dynamic configuration" title="Direct link to Get dynamic configuration">​</a></h4><p>Retrieves the current dynamic execution config for the Kubernetes task runner.
+Returns a JSON object with the dynamic configuration properties.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="url">URL<a href="#url" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h5><p><code>GET</code> <code>/druid/indexer/v1/k8s/taskrunner/executionconfig</code></p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="responses">Responses<a href="#responses" class="hash-link" aria-label="Direct link to Responses" title="Direct link to Response [...]
+an empty array if there are no history records available.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="url-2">URL<a href="#url-2" class="hash-link" aria-label="Direct link to URL" title="Direct link to URL">​</a></h5><p><code>GET</code> <code>/druid/indexer/v1/k8s/taskrunner/executionconfig/history</code></p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="query-parameters">Query parameters<a href="#query-parameters" class="hash-link" aria-label="Direct link to Query parameter [...]
+Dockerfile:
+<code>ENTRYPOINT: [&quot;foo.sh&quot;]</code></p><p>and in your sidecar specs:</p><div class="language-container: codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-container: codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">        name: foo</span><br></span><span cla [...]
+*<em>Even for sidecars like Istio which are dynamically created by the service mesh, this needs to happen.</em></p><p>Instead, do the following:
+You can keep your Dockerfile the same but you must have a sidecar spec like so:</p><div class="language-container: codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-container: codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">        name: foo</span><br></span><span cl [...]
+<code>druid.indexer.runner.labels: &#x27;{&quot;key&quot;:&quot;value&quot;}&#x27;</code>
+Annotations are the same with:
+<code>druid.indexer.runner.annotations: &#x27;{&quot;key&quot;:&quot;value&quot;}&#x27;</code></p><p>All other configurations you had for the middle manager tasks must be moved under the overlord with one caveat, you must specify javaOpts as an array:
+<code>druid.indexer.runner.javaOptsArray</code>, <code>druid.indexer.runner.javaOpts</code> is no longer supported.</p><p>If you are running without a middle manager you need to also use <code>druid.processing.intermediaryData.storage.type=deepstore</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="custom-template-pod-adapter">Custom Template Pod Adapter<a href="#custom-template-pod-adapter" class="hash-link" aria-label="Direct link to Custom Template Pod Adapter" title="Direc [...]
+implementing the behavior that maps templates to specific task types. This is the default pod template selection
+strategy. To explicitly select this strategy, set the <code>podTemplateSelectStrategy</code> in the dynamic execution config to</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" s [...]
+<code>druid.indexer.runner.k8s.podTemplate.{taskType}: /path/to/taskSpecificPodSpec.yaml</code> where {taskType} is the name of the
+task type. For example, <code>index_parallel</code>.</p><p>If you are trying to use the default image&#x27;s environment variable parsing feature to set runtime properties, you need to add a extra escape underscore when specifying pod templates.
+For example, set the environment variable <code>druid_indexer_runner_k8s_podTemplate_index__kafka</code> when you set the runtime property <code>druid.indexer.runner.k8s.podTemplate.index_kafka</code></p><p>The following example shows a configuration for task-based pod template selection:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="pr [...]
+which pod template to use to run the task. Pod  templates are configured in the runtime properties like
+<code>druid.indexer.runner.k8s.podTemplate.&lt;selectionKey&gt;=...</code>.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class= [...]
+match any selector in the list, it will use the <code>base</code> pod template.</p><p>For a task to match a selector, all the conditions within the selector must match. A selector can match on</p><ul><li><code>type</code>: Type of the task</li><li><code>dataSource</code>: Destination datasource of the task.</li><li><code>context.tags</code>: Tags passed in the task&#x27;s context.</li></ul><h5 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-l [...]
+Druid selects the pod template <code>podSpecWithHighMemRequests.yaml</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="properties">Properties<a href="#properties" class="hash-link" aria-label="Direct link to Properties" title="Direct link to Properties">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th><th>required</th></tr></thead><tbody><tr><td><code>druid.indexer.runner.debugJobs</code></td><td><code>boolean</code></td [...]
+<code>druid.indexer.runner.type: k8sAndWorker</code> (instead of <code>druid.indexer.runner.type: k8s</code>)</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-configurations">Additional Configurations<a href="#additional-configurations" class="hash-link" aria-label="Direct link to Additional Configurations" title="Direct link to Additional Configurations">​</a></h3><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th><th>required< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/kafka-emitter.html/index.html b/docs/31.0.1/development/extensions-contrib/kafka-emitter.html/index.html
new file mode 100644
index 000000000..e61cf77bf
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/kafka-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/kafka-emitter">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/kafka-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/kafka-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/kafka-emitter/index.html b/docs/31.0.1/development/extensions-contrib/kafka-emitter/index.html
new file mode 100644
index 000000000..ef7ac8e37
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/kafka-emitter/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/kafka-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Kafka Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/develo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Currently, Kafka has not only their nice ecosystem but also consumer API readily available.
+So, If you currently use Kafka, It&#x27;s easy to integrate various tool or UI
+to monitor the status of your Druid cluster with this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for the Kafka emitter are under <code>druid.emitter.kafka</code>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody> [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/kafka-simple.html/index.html b/docs/31.0.1/development/extensions-contrib/kafka-simple.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/kafka-simple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/materialized-view.html/index.html b/docs/31.0.1/development/extensions-contrib/materialized-view.html/index.html
new file mode 100644
index 000000000..1b7423ba1
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/materialized-view.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/materialized-view">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/materialized-view" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/materialized-view' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/materialized-view/index.html b/docs/31.0.1/development/extensions-contrib/materialized-view/index.html
new file mode 100644
index 000000000..462de7e1c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/materialized-view/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/materialized-view" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Materialized View | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The <code>derivativeDataSource</code> supervisor is used to keep the timeline of derived-dataSource consistent with base-dataSource. Each <code>derivativeDataSource</code> supervisor  is responsible for one derived-dataSource.</p><p>A sample derivativeDataSource supervisor spec is shown below:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="pri [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles.html/index.html b/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles.html/index.html
new file mode 100644
index 000000000..e1e68fc12
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles/index.html b/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles/index.html
new file mode 100644
index 000000000..94056fb36
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/momentsketch-quantiles/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/momentsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Moment Sketches for Approximate Quantiles module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https:// [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The momentsketch provides coarse quantile estimates with less space and aggregation time overheads than traditional sketches, approaching the performance of counts and sums by reconstructing distributions from computed statistics.</p><p>To use this Apache Druid extension, <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> in the extensions load list.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aggregator">Aggregator<a href="#aggregator" class="hash-l [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/moving-average-query.html/index.html b/docs/31.0.1/development/extensions-contrib/moving-average-query.html/index.html
new file mode 100644
index 000000000..b3dd5cd6d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/moving-average-query.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/moving-average-query">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/moving-average-query" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/moving-average-query' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/moving-average-query/index.html b/docs/31.0.1/development/extensions-contrib/moving-average-query/index.html
new file mode 100644
index 000000000..acfe1c9aa
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/moving-average-query/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/moving-average-query" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Moving Average Query | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Using a MeanNoNulls averager is useful when the interval starts at the dataset beginning time.
+In that case, the first records will ignore missing buckets and average won&#x27;t be artificially low.
+However, this also means that empty days in a sparse dataset will also be ignored.</p><p>Example of usage:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199,  [...]
+A prime example would be weekly buckets, resulting in a Day of Week calculation. (Other examples: Month of year, Hour of day).</p><p>I.e. when using these parameters:</p><ul><li><em>granularity</em>: period=P1D (daily)</li><li><em>buckets</em>: 28</li><li><em>cycleSize</em>: 7</li></ul><p>Within each output record, the averager will compute the result over the following buckets: current (#0), #7, #14, #21.
+Whereas without specifying cycleSize it would have computed over all 28 buckets.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h2><p>All examples are based on the Wikipedia dataset provided in the Druid <a href="/docs/31.0.1/tutorials/">tutorials</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="basic-example">Basic example<a href="#basic-ex [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/opentsdb-emitter.html/index.html b/docs/31.0.1/development/extensions-contrib/opentsdb-emitter.html/index.html
new file mode 100644
index 000000000..1cef87a88
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/opentsdb-emitter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/opentsdb-emitter">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/opentsdb-emitter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/opentsdb-emitter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/opentsdb-emitter/index.html b/docs/31.0.1/development/extensions-contrib/opentsdb-emitter/index.html
new file mode 100644
index 000000000..3a8dc9f85
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/opentsdb-emitter/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/opentsdb-emitter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">OpenTSDB Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+If the user does not specify their own JSON file, a default file is used.  All metrics are expected to be configured in the JSON file. Metrics which are not configured will be logged.
+Desired metrics and dimensions is organized using the following schema:<code>&lt;druid metric name&gt; : [ &lt;dimension list&gt; ]</code><br>
+e.g.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;query/time&quot;</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> < [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/orc.html/index.html b/docs/31.0.1/development/extensions-contrib/orc.html/index.html
new file mode 100644
index 000000000..b069cf828
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/orc.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/orc">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/orc" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/orc' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/parquet.html/index.html b/docs/31.0.1/development/extensions-contrib/parquet.html/index.html
new file mode 100644
index 000000000..357c29991
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/parquet.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/parquet">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/parquet" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/parquet' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/prometheus.html/index.html b/docs/31.0.1/development/extensions-contrib/prometheus.html/index.html
new file mode 100644
index 000000000..0431a93bb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/prometheus.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/prometheus">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/prometheus" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/prometheus' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/prometheus/index.html b/docs/31.0.1/development/extensions-contrib/prometheus/index.html
new file mode 100644
index 000000000..033975a7c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/prometheus/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/prometheus" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Prometheus Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+So, these tasks need to be configured to use <code>pushgateway</code> strategy to push metrics from Druid to prometheus gateway.</p><p>If this emitter is configured to use <code>exporter</code> strategy globally, some of the above configurations need to be overridden in the middle manager so that spawned peon tasks can still use the <code>pushgateway</code> strategy.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><d [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.  Prometheus expects
+histogram timers to use Seconds as the base unit.  Timers which do not use seconds as a base unit can use the <code>conversionFactor</code> to set
+the base time unit. If the user does not specify their own JSON file, a default mapping is used.  All
+metrics are expected to be mapped. Metrics which are not mapped will not be tracked.</p><p>Prometheus metric path is organized using the following schema:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span  [...]
+the service name. For example:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;druid/coordinator-segment/count&quot;</span><span class="token plain"> </span><span class="toke [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html b/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html
new file mode 100644
index 000000000..7df9ba368
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion/index.html b/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion/index.html
new file mode 100644
index 000000000..a8e2395ea
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/rabbit-super-stream-injestion/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/rabbit-super-stream-injestion" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">RabbitMQ superstream ingestion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+These indexing tasks read events from a rabbit super-stream. The supervisor oversees the state of the indexing tasks to:</p><ul><li><p>coordinate handoffs</p></li><li><p>manage failures</p></li><li><p>ensure that Druid maintains scalability and replication requirements</p><p>To use the rabbit stream indexing service, load the <code>druid-rabbit-indexing-service</code> community druid extension.
+See <a href="/docs/31.0.1/configuration/extensions#loading-community-extensions">Loading community extensions</a> for more information.</p></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="submitting-a-supervisor-spec">Submitting a supervisor spec<a href="#submitting-a-supervisor-spec" class="hash-link" aria-label="Direct link to Submitting a supervisor spec" title="Direct link to Submitting a supervisor spec">​</a></h2><p>To use the rabbit stream indexing service, load the <c [...]
+For all supervisor APIs, check <a href="/docs/31.0.1/api-reference/supervisor-api">Supervisor APIs</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rabbitmq-authentication">RabbitMQ authentication<a href="#rabbitmq-authentication" class="hash-link" aria-label="Direct link to RabbitMQ authentication" title="Direct link to RabbitMQ authentication">​</a></h3><p>To authenticate with RabbitMQ securely, you must provide a username and password, as well as configure
+a certificate if you aren&#x27;t using a standard certificate provider.</p><p>In order to configure these, use the dynamic configuration provider of the ioConfig:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class= [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/rabbitmq.html/index.html b/docs/31.0.1/development/extensions-contrib/rabbitmq.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/rabbitmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/redis-cache.html/index.html b/docs/31.0.1/development/extensions-contrib/redis-cache.html/index.html
new file mode 100644
index 000000000..bb77ed249
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/redis-cache.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/redis-cache">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/redis-cache" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/redis-cache' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/redis-cache/index.html b/docs/31.0.1/development/extensions-contrib/redis-cache/index.html
new file mode 100644
index 000000000..8cb6aff14
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/redis-cache/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/redis-cache" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid Redis Cache | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/de [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/rocketmq.html/index.html b/docs/31.0.1/development/extensions-contrib/rocketmq.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/rocketmq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/scan-query.html/index.html b/docs/31.0.1/development/extensions-contrib/scan-query.html/index.html
new file mode 100644
index 000000000..8d98872dc
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/scan-query.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/querying/scan-query">
+    <link rel="canonical" href="/docs/31.0.1/querying/scan-query" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/querying/scan-query' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/spectator-histogram.html/index.html b/docs/31.0.1/development/extensions-contrib/spectator-histogram.html/index.html
new file mode 100644
index 000000000..e05d1ebad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/spectator-histogram.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/spectator-histogram">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/spectator-histogram" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/spectator-histogram' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/spectator-histogram/index.html b/docs/31.0.1/development/extensions-contrib/spectator-histogram/index.html
new file mode 100644
index 000000000..16659fa95
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/spectator-histogram/index.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/spectator-histogram" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Spectator Histogram module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+post-aggregators based on Spectator fixed-bucket histograms.</p><p>Consider SpectatorHistogram to compute percentile approximations. This extension has a reduced storage footprint compared to the <a href="/docs/31.0.1/development/extensions-core/datasketches-extension">DataSketches extension</a>, which results in smaller segment sizes, faster loading from deep storage, and lower memory usage. This extension provides fast and accurate queries on large datasets at low storage cost.</p><p>T [...]
+adds 48 bytes per row. This represents an eightfold reduction in additional storage size for spectator histograms.</p><p><img loading="lazy" alt="Comparison of datasource sizes in web console" src="/assets/images/spectator-histogram-size-comparison-665af4720d1b302515a31f758b824f26.png" width="689" height="225" class="img_ev3q"></p><p>As rollup improves, so does the size savings. For example, when you ingest the Wikipedia dataset
+with day-grain query granularity and remove all dimensions except <code>countryName</code>,
+this results in a segment that has just 106 rows. The base segment has 87 bytes per row.
+Compare the following bytes per row for SpectatorHistogram versus DataSketches:</p><ul><li>An additional <code>spectatorHistogram</code> column adds 27 bytes per row on average.</li><li>An additional <code>quantilesDoublesSketch</code> column adds 255 bytes per row.</li></ul><p>SpectatorHistogram reduces the additional storage size by 9.4 times in this example.
+Storage gains will differ per dataset depending on the variance and rollup of the data.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="background">Background<a href="#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background">​</a></h2><p><a href="https://netflix.github.io/atlas-docs/spectator/" target="_blank" rel="noopener noreferrer">Spectator</a> is a simple library
+for instrumenting code to record dimensional time series data.
+It was built, primarily, to work with <a href="https://netflix.github.io/atlas-docs/" target="_blank" rel="noopener noreferrer">Atlas</a>.
+Atlas was developed by Netflix to manage dimensional time series data for near
+real-time operational insight.</p><p>With the <a href="https://github.com/Netflix-Skunkworks/iep-apps/tree/main/atlas-druid" target="_blank" rel="noopener noreferrer">Atlas-Druid</a>
+service, it&#x27;s possible to use the power of Atlas queries, backed by Druid as a
+data store to benefit from high-dimensionality and high-cardinality data.</p><p>SpectatorHistogram is designed for efficient parallel aggregations while still
+allowing for filtering and grouping by dimensions.
+It provides similar functionality to the built-in DataSketches <code>quantilesDoublesSketch</code> aggregator, but is
+opinionated to maintain higher absolute accuracy at smaller values.
+Larger values have lower absolute accuracy; however, relative accuracy is maintained across the range.
+See <a href="#histogram-bucket-boundaries">Bucket boundaries</a> for more information.
+The SpectatorHistogram is optimized for typical measurements from cloud services and web apps,
+such as page load time, transferred bytes, response time, and request latency.</p><p>Through some trade-offs SpectatorHistogram provides a significantly more compact
+representation with the same aggregation performance and accuracy as
+DataSketches Quantiles Sketch. Note that results depend on the dataset.
+Also see the <!-- -->[limitations]<!-- -->(#limitations] of this extension.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="limitations">Limitations<a href="#limitations" class="hash-link" aria-label="Direct link to Limitations" title="Direct link to Limitations">​</a></h2><ul><li>Supports positive long integer values within the range of [0, 2^53). Negatives are
+coerced to 0.</li><li>Does not support decimals.</li><li>Does not support Druid SQL queries, only native queries.</li><li>Does not support vectorized queries.</li><li>Generates 276 fixed buckets with increasing bucket widths. In practice, the observed error of computed percentiles ranges from 0.1% to 3%, exclusive. See <a href="#histogram-bucket-boundaries">Bucket boundaries</a> for the full list of bucket boundaries.</li></ul><div class="theme-admonition theme-admonition-tip alert alert [...]
+values as well as aggregating or combining pre-aggregated histograms generated using
+the SpectatorHistogram aggregator itself.
+While you can generate histograms on the fly at query time, it is generally more
+performant to generate histograms during ingestion and then combine them at
+query time. This is especially true where rollup is enabled. It may be misleading or
+incorrect to generate histograms from already rolled-up summed data.</p><p>The module provides postAggregators, <code>percentileSpectatorHistogram</code> (singular) and
+<code>percentilesSpectatorHistogram</code> (plural), to compute approximate
+percentiles from histograms generated by the SpectatorHistogram aggregator.
+Again, these postAggregators can be used to compute percentiles from raw numeric
+values via the SpectatorHistogram aggregator or from pre-aggregated histograms.</p><blockquote><p>If you&#x27;re only using the aggregator to compute percentiles from raw numeric values,
+then you can use the built-in quantilesDoublesSketch aggregator instead. The performance
+and accuracy are comparable. However, the DataSketches aggregator supports negative values,
+and you don&#x27;t need to download an additional extension.</p></blockquote><p>An aggregated SpectatorHistogram can also be queried using a <code>longSum</code> or <code>doubleSum</code>
+aggregator to retrieve the population of the histogram. This is effectively the count
+of the number of values that were aggregated into the histogram. This flexibility can
+avoid the need to maintain a separate metric for the count of values.</p><p>For high-frequency measurements, you may need to pre-aggregate data at the client prior
+to sending into Druid. For example, if you&#x27;re measuring individual image render times
+on an image-heavy website, you may want to aggregate the render times for a page-view
+into a single histogram prior to sending to Druid in real-time. This can reduce the
+amount of data that&#x27;s needed to send from the client across the wire.</p><p>SpectatorHistogram supports ingesting pre-aggregated histograms in real-time and batch.
+They can be sent as a JSON map, keyed by the spectator bucket ID and the value is the
+count of values. This is the same format as the serialized JSON representation of the
+histogram. The keys need not be ordered or contiguous. For example:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token p [...]
+the raw data, or from combining pre-aggregated histograms. The result is represented in
+JSON format where the keys are the bucket index and the values are the count of entries
+in that bucket.</p><p>The buckets are defined as per the Spectator <a href="https://github.com/Netflix/spectator/blob/main/spectator-api/src/main/java/com/netflix/spectator/api/histogram/PercentileBuckets.java" target="_blank" rel="noopener noreferrer">PercentileBuckets</a> specification.
+See <a href="#histogram-bucket-boundaries">Histogram bucket boundaries</a> for the full list of bucket boundaries.</p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="to [...]
+underlying implementation. If you use the Atlas-Druid service, the different types
+signal the service on how to handle the resulting data from a query.</p><ul><li>spectatorHistogramTimer signals that the histogram is representing
+a collection of timer values. It is recommended to normalize timer values to nanoseconds
+at, or prior to, ingestion. If queried via the Atlas-Druid service, it will
+normalize timers to second resolution at query time as a more natural unit of time
+for human consumption.</li><li>spectatorHistogram and spectatorHistogramDistribution are generic histograms that
+can be used to represent any measured value without units. No normalization is
+required or performed.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="spectatorhistogram-aggregator"><code>spectatorHistogram</code> aggregator<a href="#spectatorhistogram-aggregator" class="hash-link" aria-label="Direct link to spectatorhistogram-aggregator" title="Direct link to spectatorhistogram-aggregator">​</a></h3><p>Alias: <code>spectatorHistogramDistribution</code>, <code>spectatorHistogramTimer</code></p><p>To aggregate at query time:</p><div class="codeBlockContai [...]
+than to request individual percentiles in separate queries. This array-based
+helper is provided for convenience and has a marginal performance benefit over
+using the singular percentile post-aggregator multiple times within a query.
+The more expensive part of the query is the aggregation of the histogram.
+The post-aggregation calculations all happen on the same aggregated histogram.</p></blockquote><p>The results contain arrays matching the length and order of the requested
+array of percentiles.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;percentilesAdded&quot;: [</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    0 [...]
+The first bucket index is 0 and the last bucket index is 275.
+The bucket widths increase as the bucket index increases. This leads to a greater absolute error for larger values, but maintains a relative error of rough percentage across the number range.
+For example, the maximum error at value 10 is zero since the bucket width is 1 (the difference of <code>11-10</code>). For a value of 16,000,000,000, the bucket width is 1,431,655,768 (from <code>17179869184-15748213416</code>). This gives an error of up to ~8.9%, from <code>1,431,655,768/16,000,000,000*100</code>. In practice, the observed error of computed percentiles is in the range of (0.1%, 3%).</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-co [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/sqlserver.html/index.html b/docs/31.0.1/development/extensions-contrib/sqlserver.html/index.html
new file mode 100644
index 000000000..4b87ea344
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/sqlserver.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/sqlserver">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/sqlserver" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/sqlserver' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/sqlserver/index.html b/docs/31.0.1/development/extensions-contrib/sqlserver/index.html
new file mode 100644
index 000000000..87bf42c9c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/sqlserver/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/sqlserver" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Microsoft SQLServer | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+with the location (host name and port) of the database.</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.metadata.storage.type=sqlserver</span><br></span><span class= [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/statsd.html/index.html b/docs/31.0.1/development/extensions-contrib/statsd.html/index.html
new file mode 100644
index 000000000..115273997
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/statsd.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/statsd">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/statsd" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/statsd' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/statsd/index.html b/docs/31.0.1/development/extensions-contrib/statsd/index.html
new file mode 100644
index 000000000..3161f331e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/statsd/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/statsd" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">StatsD Emitter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+(<a href="https://github.com/etsy/statsd" target="_blank" rel="noopener noreferrer">https://github.com/etsy/statsd</a>)
+(<a href="https://github.com/armon/statsite" target="_blank" rel="noopener noreferrer">https://github.com/armon/statsite</a>)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>All the configuration parameters for the StatsD emitter are under <code>druid.emitter.statsd</code>.</p><table><thead><tr><th>property</th><th>descri [...]
+be provided as a JSON file.  Additionally, this mapping specifies which dimensions should be included for each metric.
+StatsD expects that metric values be integers.  Druid emits some metrics with values between the range 0 and 1. To accommodate these metrics they are converted
+into the range 0 to 100.  This conversion can be enabled by setting the optional &quot;convertRange&quot; field true in the JSON mapping file.
+If the user does not specify their own JSON file, a default mapping is used.  All
+metrics are expected to be mapped. Metrics which are not mapped will log an error.
+StatsD metric path is organized using the following schema:
+<code>&lt;druid metric name&gt; : { &quot;dimensions&quot; : &lt;dimension list&gt;, &quot;type&quot; : &lt;StatsD type&gt;, &quot;convertRange&quot; : true/false}</code>
+e.g.
+<code>query/time&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;, &quot;type&quot;], &quot;type&quot; : &quot;timer&quot;}</code></p><p>For metrics which are emitted from multiple services with different dimensions, the metric name is prefixed with
+the service name.
+e.g.
+<code>&quot;druid/coordinator-segment/count&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;], &quot;type&quot; : &quot;gauge&quot; },
+ &quot;druid/historical-segment/count&quot; : { &quot;dimensions&quot; : [&quot;dataSource&quot;, &quot;tier&quot;, &quot;priority&quot;], &quot;type&quot; : &quot;gauge&quot; }</code></p><p>For most use-cases, the default mapping is sufficient.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-content [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles.html/index.html b/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles.html/index.html
new file mode 100644
index 000000000..9ce87f967
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles/index.html b/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles/index.html
new file mode 100644
index 000000000..9815ec308
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/tdigestsketch-quantiles/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/tdigestsketch-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">T-Digest Quantiles Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+T-Digest (<a href="https://github.com/tdunning/t-digest" target="_blank" rel="noopener noreferrer">https://github.com/tdunning/t-digest</a>) is a popular data structure for accurate on-line accumulation of
+rank-based statistics such as quantiles and trimmed means.
+The data structure is also designed for parallel programming use cases like distributed aggregations or map reduce jobs by making combining two intermediate t-digests easy and efficient.</p><p>The tDigestSketch aggregator is capable of generating sketches from raw numeric values as well as
+aggregating/combining pre-generated T-Digest sketches generated using the tDigestSketch aggregator itself.
+While one can generate sketches on the fly during the query time itself, it generally is more performant
+to generate sketches during ingestion time itself and then combining them during query time.
+The module also provides a postAggregator, quantilesFromTDigestSketch, that can be used to compute approximate
+quantiles from T-Digest sketches generated by the tDigestSketch aggregator.</p><p>To use this aggregator, make sure you <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> the extension in your config file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlock [...]
+combining pre-generated T-Digest sketches.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span>< [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/thrift.html/index.html b/docs/31.0.1/development/extensions-contrib/thrift.html/index.html
new file mode 100644
index 000000000..3b353ecb3
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/thrift.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/thrift">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/thrift" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/thrift' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/thrift/index.html b/docs/31.0.1/development/extensions-contrib/thrift/index.html
new file mode 100644
index 000000000..3db1dfb05
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/thrift/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/thrift" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Thrift | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/development/e [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/time-min-max.html/index.html b/docs/31.0.1/development/extensions-contrib/time-min-max.html/index.html
new file mode 100644
index 000000000..d0d74cbba
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/time-min-max.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-contrib/time-min-max">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-contrib/time-min-max" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-contrib/time-min-max' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-contrib/time-min-max/index.html b/docs/31.0.1/development/extensions-contrib/time-min-max/index.html
new file mode 100644
index 000000000..dc9e011b0
--- /dev/null
+++ b/docs/31.0.1/development/extensions-contrib/time-min-max/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-contrib/time-min-max" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Timestamp Min/Max aggregators | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+To use this feature, a &quot;timeMin&quot; or &quot;timeMax&quot; aggregator must be included at indexing time.
+They can apply to any columns that can be converted to timestamp, which include Long, DateTime, Timestamp, and String types.</p><p>For example, when a data set consists of timestamp, dimension, and metric value like followings.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_ [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/approximate-histograms.html/index.html b/docs/31.0.1/development/extensions-core/approximate-histograms.html/index.html
new file mode 100644
index 000000000..84d16785e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/approximate-histograms.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/approximate-histograms">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/approximate-histograms" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/approximate-histograms' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/approximate-histograms/index.html b/docs/31.0.1/development/extensions-core/approximate-histograms/index.html
new file mode 100644
index 000000000..c2d7786f5
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/approximate-histograms/index.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/approximate-histograms" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Approximate Histogram aggregators | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.or [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<a href="http://jmlr.org/papers/volume11/ben-haim10a/ben-haim10a.pdf" target="_blank" rel="noopener noreferrer">http://jmlr.org/papers/volume11/ben-haim10a/ben-haim10a.pdf</a>
+to compute approximate histograms, with the following modifications:</p><ul><li>some tradeoffs in accuracy were made in the interest of speed (see below)</li><li>the sketch maintains the exact original data as long as the number of
+distinct data points is fewer than the resolutions (number of centroids),
+increasing accuracy when there are few data points, or when dealing with
+discrete data points. You can find some of the details in <a href="https://metamarkets.com/2013/histograms/" target="_blank" rel="noopener noreferrer">this post</a>.</li></ul><p>Here are a few things to note before using approximate histograms:</p><ul><li>As indicated in the original paper, there are no formal error bounds on the
+approximation. In practice, the approximation gets worse if the distribution
+is skewed.</li><li>The algorithm is order-dependent, so results can vary for the same query, due
+to variations in the order in which results are merged.</li><li>In general, the algorithm only works well if the data that comes is randomly
+distributed (i.e. if data points end up sorted in a column, approximation
+will be horrible)</li><li>We traded accuracy for aggregation speed, taking some shortcuts when adding
+histograms together, which can lead to pathological cases if your data is
+ordered in some way, or if your distribution has long tails. It should be
+cheaper to increase the resolution of the sketch to get the accuracy you need.</li></ul><p>That being said, those sketches can be useful to get a first order approximation
+when averages are not good enough. Assuming most rows in your segment store
+fewer data points than the resolution of histogram, you should be able to use
+them for monitoring purposes and detect meaningful variations with a few
+hundred centroids. To get good accuracy readings on 95th percentiles with
+millions of rows of data, you may want to use several thousand centroids,
+especially with long tails, since that&#x27;s where the approximation will be worse.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="creating-approximate-histogram-sketches-at-ingestion-time">Creating approximate histogram sketches at ingestion time<a href="#creating-approximate-histogram-sketches-at-ingestion-time" class="hash-link" aria-label="Direct link to Creating approximate histogram sketches at ingestion time" title="Direct link to Creating approximate histogram sketches at [...]
+indexing time. The ingestion aggregator can only apply to numeric values. If you use &quot;approxHistogram&quot;
+then any input rows missing the value will be considered to have a value of 0, while with &quot;approxHistogramFold&quot;
+such rows will be ignored.</p><p>To query for results, an &quot;approxHistogramFold&quot; aggregator must be included in the
+query.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color [...]
+into bucketed histogram representations, as well as to compute various
+distribution metrics such as quantiles, min, and max.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="equal-buckets-post-aggregator">Equal buckets post-aggregator<a href="#equal-buckets-post-aggregator" class="hash-link" aria-label="Direct link to Equal buckets post-aggregator" title="Direct link to Equal buckets post-aggregator">​</a></h3><p>Computes a visual representation of the approximate histogram with a given number of equal-sized bins.
+Bucket intervals are based on the range of the underlying data. This aggregator is not supported for the fixed buckets histogram.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/avro.html/index.html b/docs/31.0.1/development/extensions-core/avro.html/index.html
new file mode 100644
index 000000000..13614788c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/avro.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/avro">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/avro" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/avro' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/avro/index.html b/docs/31.0.1/development/extensions-core/avro/index.html
new file mode 100644
index 000000000..c53692b7d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/avro/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/avro" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Avro | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/developm [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/azure.html/index.html b/docs/31.0.1/development/extensions-core/azure.html/index.html
new file mode 100644
index 000000000..679b6e6ac
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/azure.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/azure">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/azure" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/azure' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/azure/index.html b/docs/31.0.1/development/extensions-core/azure/index.html
new file mode 100644
index 000000000..b7097997f
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/azure/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/azure" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Microsoft Azure | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/deve [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/bloom-filter.html/index.html b/docs/31.0.1/development/extensions-core/bloom-filter.html/index.html
new file mode 100644
index 000000000..c6481db5c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/bloom-filter.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/bloom-filter">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/bloom-filter" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/bloom-filter' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/bloom-filter/index.html b/docs/31.0.1/development/extensions-core/bloom-filter/index.html
new file mode 100644
index 000000000..74cefbe2b
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/bloom-filter/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/bloom-filter" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Bloom Filter | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/develop [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+against a bloom filter. A Bloom filter is a probabilistic data structure for performing a set membership check. A bloom
+filter is a good candidate to use with Druid for cases where an explicit filter is impossible, e.g. filtering a query
+against a set of millions of values.</p><p>Following are some characteristics of Bloom filters:</p><ul><li>Bloom filters are highly space efficient when compared to using a HashSet.</li><li>Because of the probabilistic nature of bloom filters, false positive results are possible (element was not actually
+inserted into a bloom filter during construction, but <code>test()</code> says true)</li><li>False negatives are not possible (if element is present then <code>test()</code> will never say false).</li><li>The false positive probability of this implementation is currently fixed at 5%, but increasing the number of entries
+that the filter can hold can decrease this false positive rate in exchange for overall size.</li><li>Bloom filters are sensitive to number of elements that will be inserted in the bloom filter. During the creation of bloom filter expected number of entries must be specified. If the number of insertions exceed
+the specified initial number of entries then false positive probability will increase accordingly.</li></ul><p>This extension is currently based on <code>org.apache.hive.common.util.BloomKFilter</code> from <code>hive-storage-api</code>. Internally,
+this implementation uses Murmur3 as the hash algorithm.</p><p>To construct a BloomKFilter externally with Java to use as a filter in a Druid query:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class=" [...]
+with the SQL operator.</p><div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">bloom_filter_test</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="toke [...]
+important to set a reasonable value for the <code>maxNumEntries</code> parameter, which is the maximum number of distinct entries
+that the bloom filter can represent without increasing the false positive rate. It may be worth performing a query using
+one of the unique count sketches to calculate the value for this parameter in order to build a bloom filter appropriate
+for the query.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="json-specification-of-bloom-filter-aggregator">JSON Specification of Bloom Filter Aggregator<a href="#json-specification-of-bloom-filter-aggregator" class="hash-link" aria-label="Direct link to JSON Specification of Bloom Filter Aggregator" title="Direct link to JSON Specification of Bloom Filter Aggregator">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--pris [...]
+linear scan <em>of the filter itself</em> to count the number of set bits as a means of approximating how many items have been
+added to the set. As such, ordering by an alternate aggregation is recommended if possible.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sql-bloom-filter-aggregator">SQL Bloom Filter Aggregator<a href="#sql-bloom-filter-aggregator" class="hash-link" aria-label="Direct link to SQL Bloom Filter Aggregator" title="Direct link to SQL Bloom Filter Aggregator">​</a></h3><p>Bloom filters can be computed in SQL expressions with the <code>bloom_filter</code> aggregator:</p><div class="la [...]
+response are serialized into a base64 string, which can then be used in subsequent queries as a filter.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#filtering-queries-with-a-bloom-filter" class="table-of-contents__link toc-highlight">Filtering queries with a Bl [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/caffeine-cache.html/index.html b/docs/31.0.1/development/extensions-core/caffeine-cache.html/index.html
new file mode 100644
index 000000000..66c953fc7
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/caffeine-cache.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/">
+    <link rel="canonical" href="/docs/31.0.1/configuration/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-extension.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-extension.html/index.html
new file mode 100644
index 000000000..28bbe001c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-extension.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-extension">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-extension" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-extension' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-extension/index.html b/docs/31.0.1/development/extensions-core/datasketches-extension/index.html
new file mode 100644
index 000000000..56a73e45c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-extension/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-extension" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-hll.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-hll.html/index.html
new file mode 100644
index 000000000..d6189cbb7
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-hll.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-hll">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-hll" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-hll' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-hll/index.html b/docs/31.0.1/development/extensions-core/datasketches-hll/index.html
new file mode 100644
index 000000000..a0b13e7c2
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-hll/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-hll" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches HLL Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+the estimate of the number of distinct values presented to the sketch. You can also use post aggregators to produce a union of sketch columns in the same row.
+You can use the HLL sketch aggregator on any column to estimate its cardinality.</p><p>To use this aggregator, make sure you <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> the extension in your config file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="code [...]
+When applied at query time on an existing dimension, you can use the resulting column as an intermediate dimension by the <a href="#post-aggregators">post-aggregators</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1  [...]
+The result will be an array containing three double values: estimate, lower bound and upper bound.
+The bounds are provided at a given number of standard deviations (optional, defaults to 1).
+This must be an integer value of 1, 2 or 3 corresponding to approximately 68.3%, 95.4% and 99.7% confidence intervals.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-kll.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-kll.html/index.html
new file mode 100644
index 000000000..333dfea7c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-kll.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-kll">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-kll" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-kll' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-kll/index.html b/docs/31.0.1/development/extensions-core/datasketches-kll/index.html
new file mode 100644
index 000000000..da9c1f3e4
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-kll/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-kll" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches KLL Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-quantiles.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-quantiles.html/index.html
new file mode 100644
index 000000000..a5bdb1d8e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-quantiles.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-quantiles">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-quantiles" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-quantiles' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-quantiles/index.html b/docs/31.0.1/development/extensions-core/datasketches-quantiles/index.html
new file mode 100644
index 000000000..fe6395b88
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-quantiles/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-quantiles" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Quantiles Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-theta.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-theta.html/index.html
new file mode 100644
index 000000000..16a971d10
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-theta.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-theta">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-theta" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-theta' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-theta/index.html b/docs/31.0.1/development/extensions-core/datasketches-theta/index.html
new file mode 100644
index 000000000..4bca22db9
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-theta/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-theta" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Theta Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Sketch algorithms are approximate. For more information, see <a href="https://datasketches.apache.org/docs/Theta/ThetaAccuracy.html" target="_blank" rel="noopener noreferrer">Accuracy</a> in the DataSketches documentation.</p><p>At ingestion time, the Theta sketch aggregator creates Theta sketch objects which are stored in Druid segments. Logically speaking, a Theta sketch object can be thought of as a Set data structure. At query time, sketches are read and aggregated (set unioned) toge [...]
+How many unique users visited both product A and product B?</p><p>to answer above questions, you would index your data using following aggregator.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="t [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-tuple.html/index.html b/docs/31.0.1/development/extensions-core/datasketches-tuple.html/index.html
new file mode 100644
index 000000000..acfec5c70
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-tuple.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/datasketches-tuple">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/datasketches-tuple" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/datasketches-tuple' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/datasketches-tuple/index.html b/docs/31.0.1/development/extensions-core/datasketches-tuple/index.html
new file mode 100644
index 000000000..5ae9be17c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/datasketches-tuple/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/datasketches-tuple" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">DataSketches Tuple Sketch module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-aws-rds.html/index.html b/docs/31.0.1/development/extensions-core/druid-aws-rds.html/index.html
new file mode 100644
index 000000000..539b59832
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-aws-rds.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-aws-rds">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-aws-rds" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-aws-rds' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-aws-rds/index.html b/docs/31.0.1/development/extensions-core/druid-aws-rds/index.html
new file mode 100644
index 000000000..5b4071f4a
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-aws-rds/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-aws-rds" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid AWS RDS Module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+See <a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html" target="_blank" rel="noopener noreferrer">AWS Guide</a>.</p><p>To use this extension, make sure you <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> it in your config file along with other extensions e.g.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex" [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-basic-security.html/index.html b/docs/31.0.1/development/extensions-core/druid-basic-security.html/index.html
new file mode 100644
index 000000000..8a406c47f
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-basic-security.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-basic-security">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-basic-security" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-basic-security' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-basic-security/index.html b/docs/31.0.1/development/extensions-core/druid-basic-security/index.html
new file mode 100644
index 000000000..fbc814dc1
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-basic-security/index.html
@@ -0,0 +1,156 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-basic-security" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Basic Security | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/devel [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+See <a href="/docs/31.0.1/operations/security-overview#enable-an-authenticator">Security overview</a> for an example configuration for HTTP basic authentication.</p><p>Visit <a href="/docs/31.0.1/operations/auth">Authentication and Authorization</a> for more information on the implemented extension interfaces and for an example configuration.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct lin [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 60000</p><p><strong><code>druid.auth.basic.common.maxRandomDelay</code></strong></p><p>Defines in milliseconds the amount of random delay to add to the pollingPeriod, to spread polling requests across time.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 6000</p><p><strong><code>druid.auth.basic.common.maxSyncRetries</code></strong></p><p>Determines how many times a service will retry if the authentication/authorization Druid metadata store state sync with the Coordinator fails.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10</p><p><strong><code>druid.auth.basic.common.cacheDirectory</code></strong></p><p>If defined, snapshots of the basic Authenticator and Authorizer Druid metadata store caches will be stored on disk in this directory. If this property is defined, when a service is starting, it will attempt to initialize its caches from these on-disk snapshots, if the service is unable to initialize  [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authenticator">Authenticator<a href="#authenticator" class="hash-link" aria-label="Direct link to Authenticator" title="Direct link to Authenticator">​</a></h3><p>To use the Basic authenticator, add an authenticator with type <code>basic</code> to the authenticatorChain.
+The default credentials validator (<code>credentialsValidator</code>) is <code>metadata</code>. To use the LDAP validator, define a credentials validator with a type of &#x27;ldap&#x27;.</p><p>Use the following syntax to configure a named authenticator:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><c [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.initialInternalClientPassword</code></strong></p><p>Initial <a href="/docs/31.0.1/operations/password-provider">Password Provider</a> for the default internal system user, used for internal process communication. If no password is specified, the default internal system user will not be created. If the def [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.enableCacheNotifications</code></strong></p><p>If true, the Coordinator will notify Druid processes whenever a configuration change to this Authenticator occurs, allowing them to immediately update their state without waiting for polling.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: True</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialIterations</code></strong></p><p>Number of iterations to use for password hashing. See <a href="#credential-iterations-and-api-performance">Credential iterations and API performance</a><br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10000</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.credentialsValidator.type</code></strong></p><p>The type of credentials store (metadata) to validate requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.skipOnFailure</code></strong></p><p>If true and the request credential doesn&#x27;t exists or isn&#x27;t fully configured in the credentials store, the request will proceed to next Authenticator in the chain.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: false</p><p><strong><code>druid.auth.authenticator.MyBasicMetadataAuthenticator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="credential-iterations-and-api-performance">Credential iterations and API performance<a href="#credential-iterations-and-api-performance" class="hash-link" aria-label="Direct link to Credential iterations and API performance" title="Direct link to Credential iterations and API performance">​</a></h5><p>As noted above, the valu [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.initialInternalClientPassword</code></strong></p><p>Initial <a href="/docs/31.0.1/operations/password-provider">Password Provider</a> for the default internal system user, used for internal process communication. If no password is specified, the default internal system user will not be created. If the default [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.enableCacheNotifications</code></strong></p><p>If true, the Coordinator will notify Druid processes whenever a configuration change to this Authenticator occurs, allowing them to immediately update their state without waiting for polling.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialIterations</code></strong></p><p>Number of iterations to use for password hashing.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 10000</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.type</code></strong></p><p>The type of credentials store (ldap) to validate requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.url</code></strong></p><p>URL of the LDAP server.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindUser</code></strong></p><p>LDAP bind user username.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.bindPassword</code></strong></p><p><a href="/docs/31.0.1/operations/password-provider">Password Provider</a> LDAP bind user password.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.baseDn</code></strong></p><p>The point from where the LDAP server will search for users.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userSearch</code></strong></p><p>The filter/expression to use for the search. For example, (&amp;(sAMAccountName=%s)(objectClass=user))<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.userAttribute</code></strong></p><p>The attribute id identifying the attribute that will be returned as part of the search. For example, sAMAccountName.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialVerifyDuration</code></strong></p><p>The duration in seconds for how long valid credentials are verifiable within the cache when not requested.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 600</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialMaxDuration</code></strong></p><p>The max duration in seconds for valid credentials that can reside in cache regardless of how often they are requested.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 3600</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.credentialsValidator.credentialCacheSize</code></strong></p><p>The valid credentials cache size. The cache uses a LRU policy.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 100</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.skipOnFailure</code></strong></p><p>If true and the request credential doesn&#x27;t exists or isn&#x27;t fully configured in the credentials store, the request will proceed to next Authenticator in the chain.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: false</p><p><strong><code>druid.auth.authenticator.MyBasicLDAPAuthenticator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="escalator">Escalator<a href="#escalator" class="hash-link" aria-label="Direct link to Escalator" title="Direct link to Escalator">​</a></h3><p>The Escalator determines the authentication scheme to use for internal Druid cluster communications, for example, when a Broker service communicates with a Historical service during qu [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.escalator.internalClientPassword</code></strong></p><p>The escalator will use this <a href="/docs/31.0.1/operations/password-provider">Password Provider</a> for requests made as the internal system user.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.escalator.authorizerName</code></strong></p><p>Authorizer that requests should be directed to.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="authorizer">Authorizer<a href="#authorizer" class="hash-link" aria-label="Direct link to Authorizer" title="Direct link to Authorizer">​</a></h3><p>To use the Basic authorizer, add an authorizer with type <code>basic</code> to the authorizers list.</p><p>Use the following syntax to configure a named authorizer:</p><div class= [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminUser</code></strong></p><p>The initial admin user with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.initialAdminRole</code></strong></p><p>The initial admin role to create if it doesn&#x27;t already exists.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicMetadataAuthorizer.roleProvider.type</code></strong></p><p>The type of role provider to authorize requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="properties-for-ldap-user-authorization">Properties for LDAP user authorization<a href="#properties-for-ldap-user-authorization" class="hash-link" aria-label="Direct link to Properties for LDAP user authorization" title="Direct link to Properties for LDAP user authorization">​</a></h4><p><strong><code>druid.auth.authorize [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: true</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.cacheNotificationTimeout</code></strong></p><p>The timeout in milliseconds for the cache notifications.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: 5000</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminUser</code></strong></p><p>The initial admin user with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminRole</code></strong></p><p>The initial admin role to create if it doesn&#x27;t already exists.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: admin</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.initialAdminGroupMapping</code></strong></p><p>The initial admin group mapping with role defined in initialAdminRole property if specified, otherwise the default admin role will be assigned. The name of this initial admin group mapping will be set to adminGroupMapping<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.type</code></strong></p><p>The type of role provider (ldap) to authorize requests credentials.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: metadata</p><p><strong><code>druid.auth.authorizer.MyBasicLDAPAuthorizer.roleProvider.groupFilters</code></strong></p><p>Array of LDAP group filters used to filter out the allowed set of groups returned from LDAP search. Filters can be begin with <em>, or end with ,</em> to provide configurational flexibility to limit or filter allowed set of groups available to LDAP Authorizer.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: null</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="properties-for-ldaps">Properties for LDAPS<a href="#properties-for-ldaps" class="hash-link" aria-label="Direct link to Properties for LDAPS" title="Direct link to Properties for LDAPS">​</a></h4><p>Use the following properties to configure Druid authentication with LDAP over TLS (LDAPS). See <a href="/docs/31.0.1/operations/ [...]
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: tls</p><p><strong><code>druid.auth.basic.ssl.trustStorePath</code></strong></p><p>Path to the trust store file.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStorePassword</code></strong></p><p>Password to access the trust store file.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: Yes<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStoreType</code></strong></p><p>Format of the trust store file. For Java the format is jks.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: jks</p><p><strong><code>druid.auth.basic.ssl.trustStoreAlgorithm</code></strong></p><p>Algorithm used by the trust manager to validate certificate chains.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p><strong><code>druid.auth.basic.ssl.trustStorePassword</code></strong></p><p>Password details that enable access to the truststore.<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Required</strong>: No<br>
+<!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <strong>Default</strong>: N/A</p><p>Example LDAPS configuration:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="to [...]
+Return a list of all user names.</p><p><code>GET(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Return the name and credentials information of the user with name {userName}</p><p><code>POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Create a new user with name {userName}</p><p><code>DELETE(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName})</code><br>
+Delete the user with name {userName}</p><p><code>POST(/druid-ext/basic-security/authentication/db/{authenticatorName}/users/{userName}/credentials)</code><br>
+Assign a password used for HTTP basic authentication for {userName}
+Content: JSON password request object</p><p>Example request body:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="toke [...]
+Return the current load status of the local caches of the authentication Druid metadata store.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="authorization-api">Authorization API<a href="#authorization-api" class="hash-link" aria-label="Direct link to Authorization API" title="Direct link to Authorization API">​</a></h4><p>Root path: <code>/druid-ext/basic-security/authorization</code><br></p><p>Each API endpoint includes {authorizerName}, specifying which Authorizer instance is b [...]
+Return a list of all user names.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName})</code><br>
+Return the name and role information of the user with name {userName}</p><p>Example output:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</s [...]
+Create a new user with name {userName}</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName})</code><br>
+Delete the user with name {userName}</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="group-mapping-creationdeletion">Group mapping Creation/Deletion<a href="#group-mapping-creationdeletion" class="hash-link" aria-label="Direct link to Group mapping Creation/Deletion" title="Direct link to Group mapping Creation/Deletion">​</a></h5><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings)</code><br>
+Return a list of all group mappings.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName})</code><br>
+Return the group mapping and role information of the group mapping with name {groupMappingName}</p><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName})</code><br>
+Create a new group mapping with name {groupMappingName}
+Content: JSON group mapping object
+Example request body:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">{</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    &quot;name&quot;: &quot;user&qu [...]
+Delete the group mapping with name {groupMappingName}</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="role-creationdeletion">Role Creation/Deletion<a href="#role-creationdeletion" class="hash-link" aria-label="Direct link to Role Creation/Deletion" title="Direct link to Role Creation/Deletion">​</a></h4><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles)</code><br>
+Return a list of all role names.</p><p><code>GET(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName})</code><br>
+Return name and permissions for the role named {roleName}.</p><p>Example output:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span c [...]
+Create a new role with name {roleName}.
+Content: username string</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName})</code><br>
+Delete the role with name {roleName}.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="role-assignment">Role Assignment<a href="#role-assignment" class="hash-link" aria-label="Direct link to Role Assignment" title="Direct link to Role Assignment">​</a></h4><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName})</code><br>
+Assign role {roleName} to user {userName}.</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/users/{userName}/roles/{roleName})</code><br>
+Unassign role {roleName} from user {userName}</p><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName})</code><br>
+Assign role {roleName} to group mapping {groupMappingName}.</p><p><code>DELETE(/druid-ext/basic-security/authorization/db/{authorizerName}/groupMappings/{groupMappingName}/roles/{roleName})</code><br>
+Unassign role {roleName} from group mapping {groupMappingName}</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="permissions">Permissions<a href="#permissions" class="hash-link" aria-label="Direct link to Permissions" title="Direct link to Permissions">​</a></h4><p><code>POST(/druid-ext/basic-security/authorization/db/{authorizerName}/roles/{roleName}/permissions)</code><br>
+Set the permissions of {roleName}. This replaces the previous set of permissions on the role.</p><p>Content: List of JSON Resource-Action objects, e.g.:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token pla [...]
+Return the current load status of the local caches of the authorization Druid metadata store.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a><ul><li><a href="#general-properties" class= [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-kerberos.html/index.html b/docs/31.0.1/development/extensions-core/druid-kerberos.html/index.html
new file mode 100644
index 000000000..717bd89e7
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-kerberos.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-kerberos">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-kerberos" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-kerberos' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-kerberos/index.html b/docs/31.0.1/development/extensions-core/druid-kerberos/index.html
new file mode 100644
index 000000000..bc22487df
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-kerberos/index.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-kerberos" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Kerberos | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/development [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This extension adds an Authenticator which is used to protect HTTP Endpoints using the simple and protected GSSAPI negotiation mechanism <a href="https://en.wikipedia.org/wiki/SPNEGO" target="_blank" rel="noopener noreferrer">SPNEGO</a>.
+Make sure to <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> <code>druid-kerberos</code> in the extensions load list.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="creating-an-authenticator">Creating an Authenticator<a href="#creating-an-auth [...]
+The special string _HOST will be replaced automatically with the value of config <code>druid.host</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="druidauthauthenticatorkerberosexcludedpaths"><code>druid.auth.authenticator.kerberos.excludedPaths</code><a href="#druidauthauthenticatorkerberosexcludedpaths" class="hash-link" aria-label="Direct link to druidauthauthenticatorkerberosexcludedpaths" title="Direct link to druidauthauthenticatorkerberosexcludedpaths">​</a></h3><p>In  [...]
+The syntax for mapping rules is <code>RULE:\[n:string](regexp)s/pattern/replacement/g</code>. The integer n indicates how many components the target principal should have. If this matches, then a string will be formed from string, substituting the realm of the principal for $0 and the nth component of the principal for $n. e.g. if the principal was druid/admin then <code>\[2:$2$1suffix]</code> would result in the string <code>admindruidsuffix</code>.
+If this string matches regexp, then the s//<!-- -->[<!-- -->g] substitution command will be run over the string. The optional g will cause the substitution to be global over the string, instead of replacing only the first match in the string.
+If required, multiple rules can be joined by newline character and specified as a String.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="increasing-http-header-size-for-large-spnego-negotiate-header">Increasing HTTP Header size for large SPNEGO negotiate header<a href="#increasing-http-header-size-for-large-spnego-negotiate-header" class="hash-link" aria-label="Direct link to Increasing HTTP Header size for large SPNEGO negotiate header" title="Direct link to Increasing HTTP Heade [...]
+which includes all security groups for the user. In some cases when the user belongs to many security groups the header to grow beyond what druid can handle by default.
+In such cases, max request header size that druid can handle can be increased by setting <code>druid.server.http.maxRequestHeaderSize</code> (default 8KiB) and <code>druid.router.http.maxRequestBufferSize</code> (default 8KiB).</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-kerberos-escalated-client">Configuring Kerberos Escalated Client<a href="#configuring-kerberos-escalated-client" class="hash-link" aria-label="Direct link to Configuring Kerberos Escalated Client" t [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-lookups.html/index.html b/docs/31.0.1/development/extensions-core/druid-lookups.html/index.html
new file mode 100644
index 000000000..3f504f7d0
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-lookups.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-lookups">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-lookups" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-lookups' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-lookups/index.html b/docs/31.0.1/development/extensions-core/druid-lookups/index.html
new file mode 100644
index 000000000..40d68d1ef
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-lookups/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-lookups" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Cached Lookup Module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+The main goal of this cache is to speed up the access to a high latency lookup sources and to provide a caching isolation for every lookup source.
+Thus user can define various caching strategies or and implementation per lookup, even if the source is the same.
+This module can be used side to side with other lookup module like the global cached lookup module.</p><p>To use this Apache Druid extension, <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> <code>druid-lookups-cached-single</code> in the extensions load list.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule=" [...]
+For Postgres, the connector JAR is already included.
+See the MySQL extension documentation for instructions to obtain <a href="/docs/31.0.1/development/extensions-core/mysql#installing-the-mysql-connector-library">MySQL</a> or <a href="/docs/31.0.1/development/extensions-core/mysql#alternative-installing-the-mariadb-connector-library">MariaDB</a> connector libraries.
+Copy or symlink the downloaded file to <code>extensions/druid-lookups-cached-single</code> under the distribution root directory.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture">​</a></h2><p>Generally speaking this module can be divided into two main component, namely, the data fetcher layer and caching layer.</p><h3 class="anc [...]
+For instance <code>JdbcDataFetcher</code> provides an implementation of <code>DataFetcher</code> that can be used to fetch key/value from a RDBMS via JDBC driver.
+If you need new type of data fetcher, all you need to do, is to implement the interface <code>DataFetcher</code> and load it via another druid module.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="caching-layer">Caching layer<a href="#caching-layer" class="hash-link" aria-label="Direct link to Caching layer" title="Direct link to Caching layer">​</a></h3><p>This extension comes with two different caching strategies. First strategy is a poll based and the second is a load based.</ [...]
+Hence, user should make sure that the cache can fit all the data.
+The current implementation provides 2 type of poll cache, the first is on-heap (uses immutable map), while the second uses MapDB based off-heap map.
+User can also implement a different lookup polling cache by implementing <code>PollingCacheFactory</code> and <code>PollingCache</code> interfaces.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="loading-lookup">Loading lookup<a href="#loading-lookup" class="hash-link" aria-label="Direct link to Loading lookup" title="Direct link to Loading lookup">​</a></h4><p>Loading cache strategy will load the key/value pair upon request on the key it self, the general algorithm is load key if absent.
+Once the key/value  pair is loaded eviction will occur according to the cache eviction policy.
+This module comes with two loading lookup implementation, the first is on-heap backed by a Guava cache implementation, the second is MapDB off-heap implementation.
+Both implementations offer various eviction strategies.
+Same for Loading cache, developer can implement a new type of loading cache by implementing <code>LookupLoadingCache</code> interface.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-and-operation">Configuration and Operation:<a href="#configuration-and-operation" class="hash-link" aria-label="Direct link to Configuration and Operation:" title="Direct link to Configuration and Operation:">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="polling-lookup">Pol [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-pac4j.html/index.html b/docs/31.0.1/development/extensions-core/druid-pac4j.html/index.html
new file mode 100644
index 000000000..2550c6b3e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-pac4j.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-pac4j">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-pac4j" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-pac4j' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-pac4j/index.html b/docs/31.0.1/development/extensions-core/druid-pac4j/index.html
new file mode 100644
index 000000000..3ad342641
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-pac4j/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-pac4j" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Druid pac4j based Security extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+This can be used  with any authentication server that supports same e.g. <a href="https://developer.okta.com/" target="_blank" rel="noopener noreferrer">Okta</a>.
+The pac4j authenticator should only be used at the router node to enable a group of users in existing authentication server to interact with Druid cluster, using the <a href="/docs/31.0.1/operations/web-console">web console</a>. </p><p>This extension also provides a JWT authenticator that validates <a href="https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken" target="_blank" rel="noopener noreferrer">ID Tokens</a> associated with a request. ID Tokens are attached to the req [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-ranger-security.html/index.html b/docs/31.0.1/development/extensions-core/druid-ranger-security.html/index.html
new file mode 100644
index 000000000..36514ef1b
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-ranger-security.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/druid-ranger-security">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/druid-ranger-security" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/druid-ranger-security' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/druid-ranger-security/index.html b/docs/31.0.1/development/extensions-core/druid-ranger-security/index.html
new file mode 100644
index 000000000..f8977d18d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/druid-ranger-security/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/druid-ranger-security" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Ranger Security | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/examples.html/index.html b/docs/31.0.1/development/extensions-core/examples.html/index.html
new file mode 100644
index 000000000..7f68ebf6e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/examples.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/examples">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/examples" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/examples' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/examples/index.html b/docs/31.0.1/development/extensions-core/examples/index.html
new file mode 100644
index 000000000..f6de83d31
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/examples/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/examples" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Extension Examples | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/d [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/google.html/index.html b/docs/31.0.1/development/extensions-core/google.html/index.html
new file mode 100644
index 000000000..c8f948f65
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/google.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/google">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/google" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/google' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/google/index.html b/docs/31.0.1/development/extensions-core/google/index.html
new file mode 100644
index 000000000..43a91934a
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/google/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/google" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Google Cloud Storage | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+to read objects directly from Google Cloud Storage. If you use the <a href="/docs/31.0.1/ingestion/hadoop">Hadoop task</a>,
+you can read data from Google Cloud Storage by specifying the paths in your <a href="/docs/31.0.1/ingestion/hadoop#inputspec"><code>inputSpec</code></a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deep-storage">Deep Storage<a href="#deep-storage" class="hash-link" aria-label="Direct link to Deep Storage" title="Direct link to Deep Storage">​</a></h3><p>Deep storage can be written to Google Cloud Storage either via this extension or the <a href="/docs/31.0.1/development/extensi [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/hdfs.html/index.html b/docs/31.0.1/development/extensions-core/hdfs.html/index.html
new file mode 100644
index 000000000..29bab3429
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/hdfs.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/hdfs">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/hdfs" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/hdfs' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/hdfs/index.html b/docs/31.0.1/development/extensions-core/hdfs/index.html
new file mode 100644
index 000000000..bc8f526fe
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/hdfs/index.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/hdfs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">HDFS | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/development/ext [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+in the Druid classpath. One way to do this is copying all those files under <code>${DRUID_HOME}/conf/_common</code>.</p><p>If you are using the Hadoop ingestion, set your output directory to be a location on Hadoop and it will work.
+If you want to eagerly authenticate against a secured hadoop/hdfs cluster you must set <code>druid.hadoop.security.kerberos.principal</code> and <code>druid.hadoop.security.kerberos.keytab</code>, this is an alternative to the cron job method that runs <code>kinit</code> command periodically.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-for-cloud-storage">Configuration for Cloud Storage<a href="#configuration-for-cloud-storage" class="hash-link" aria-label="Direct  [...]
+Run the below command to install the <code>hadoop-aws.jar</code> file under <code>${DRUID_HOME}/extensions/druid-hdfs-storage</code> in all nodes.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="t [...]
+For more configurations, see the <a href="https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/" target="_blank" rel="noopener noreferrer">Hadoop AWS module</a>.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="col [...]
+Please read the <a href="https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/INSTALL.md" target="_blank" rel="noopener noreferrer">install instructions</a>
+to properly set up the necessary libraries and configurations.
+One option is to place this jar in <code>${DRUID_HOME}/lib/</code> and <code>${DRUID_HOME}/extensions/druid-hdfs-storage/</code>.</p><p>Finally, you need to configure the <code>core-site.xml</code> file with the filesystem
+and authentication properties needed for GCS. You may want to copy the below
+example properties. Please follow the instructions at
+<a href="https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/INSTALL.md" target="_blank" rel="noopener noreferrer">https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/INSTALL.md</a>
+for more details.
+For more configurations, <a href="https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/v2.0.0/gcs/conf/gcs-core-default.xml" target="_blank" rel="noopener noreferrer">GCS core default</a>
+and <a href="https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/src/test/resources/core-site.xml" target="_blank" rel="noopener noreferrer">GCS core template</a>.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line"  [...]
+to read files directly from the HDFS Storage. You may be able to read objects from cloud storage
+with the HDFS input source, but we highly recommend to use a proper
+<a href="/docs/31.0.1/ingestion/input-sources">Input Source</a> instead if possible because
+it is simple to set up. For now, only the <a href="/docs/31.0.1/ingestion/input-sources#s3-input-source">S3 input source</a>
+and the <a href="/docs/31.0.1/ingestion/input-sources#google-cloud-storage-input-source">Google Cloud Storage input source</a>
+are supported for cloud storage types, and so you may still want to use the HDFS input source
+to read from cloud storage other than those two.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hadoop-based-ingestion">Hadoop-based ingestion<a href="#hadoop-based-ingestion" class="hash-link" aria-label="Direct link to Hadoop-based ingestion" title="Direct link to Hadoop-based ingestion">​</a></h3><p>If you use the <a href="/docs/31.0.1/ingestion/hadoop">Hadoop ingestion</a>, you can read data from HDFS
+by specifying the paths in your <a href="/docs/31.0.1/ingestion/hadoop#inputspec"><code>inputSpec</code></a>.
+See the <a href="/docs/31.0.1/ingestion/hadoop#static">Static</a> inputSpec for details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#deep-storage" class="table-of-contents__link toc-highlight">Deep Storage</a><ul><li><a href="#configuration-for-hdfs" class="ta [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-eight-firehose.html/index.html b/docs/31.0.1/development/extensions-core/kafka-eight-firehose.html/index.html
new file mode 100644
index 000000000..f1d365ebb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-eight-firehose.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/standalone-realtime">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/standalone-realtime" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/standalone-realtime' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-extraction-namespace/index.html b/docs/31.0.1/development/extensions-core/kafka-extraction-namespace/index.html
new file mode 100644
index 000000000..42584c8da
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-extraction-namespace/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/querying/kafka-extraction-namespace">
+    <link rel="canonical" href="/docs/31.0.1/querying/kafka-extraction-namespace" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/querying/kafka-extraction-namespace' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-ingestion.html/index.html b/docs/31.0.1/development/extensions-core/kafka-ingestion.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-ingestion/index.html b/docs/31.0.1/development/extensions-core/kafka-ingestion/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-ingestion/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-supervisor-operations.html/index.html b/docs/31.0.1/development/extensions-core/kafka-supervisor-operations.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-supervisor-operations.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-supervisor-operations/index.html b/docs/31.0.1/development/extensions-core/kafka-supervisor-operations/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-supervisor-operations/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-supervisor-reference.html/index.html b/docs/31.0.1/development/extensions-core/kafka-supervisor-reference.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-supervisor-reference.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kafka-supervisor-reference/index.html b/docs/31.0.1/development/extensions-core/kafka-supervisor-reference/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kafka-supervisor-reference/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kinesis-ingestion.html/index.html b/docs/31.0.1/development/extensions-core/kinesis-ingestion.html/index.html
new file mode 100644
index 000000000..917292d8d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kinesis-ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kinesis-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kinesis-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kinesis-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kinesis-ingestion/index.html b/docs/31.0.1/development/extensions-core/kinesis-ingestion/index.html
new file mode 100644
index 000000000..917292d8d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kinesis-ingestion/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kinesis-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kinesis-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kinesis-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kubernetes.html/index.html b/docs/31.0.1/development/extensions-core/kubernetes.html/index.html
new file mode 100644
index 000000000..67245e5bf
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kubernetes.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/kubernetes">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/kubernetes" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/kubernetes' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/kubernetes/index.html b/docs/31.0.1/development/extensions-core/kubernetes/index.html
new file mode 100644
index 000000000..f7deba72c
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/kubernetes/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/kubernetes" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Kubernetes | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/developme [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<code>druid.serverview.type=http</code>
+<code>druid.indexer.runner.type=httpRemote</code>
+<code>druid.discovery.type=k8s</code></p><p>For Node Discovery, Each Druid process running inside a pod &quot;announces&quot; itself by adding few &quot;labels&quot; and &quot;annotations&quot; in the pod spec. Druid process needs to be aware of pod name and namespace which it reads from environment variables <code>POD_NAME</code> and <code>POD_NAMESPACE</code>. These variable names can be changed, see configuration below. But in the end, each pod needs to have self pod name and namespac [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/lookups-cached-global/index.html b/docs/31.0.1/development/extensions-core/lookups-cached-global/index.html
new file mode 100644
index 000000000..8de46c5ee
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/lookups-cached-global/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/querying/lookups-cached-global">
+    <link rel="canonical" href="/docs/31.0.1/querying/lookups-cached-global" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/querying/lookups-cached-global' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/mysql.html/index.html b/docs/31.0.1/development/extensions-core/mysql.html/index.html
new file mode 100644
index 000000000..835a76bc3
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/mysql.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/mysql">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/mysql" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/mysql' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/mysql/index.html b/docs/31.0.1/development/extensions-core/mysql/index.html
new file mode 100644
index 000000000..628080b7b
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/mysql/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/mysql" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">MySQL Metadata Store | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Refer to the following section for instructions on how to install this library.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-the-mysql-connector-library">Installing the MySQL connector library<a href="#installing-the-mysql-connector-library" class="hash-link" aria-label="Direct link to Installing the MySQL connector library" title="Direct link to Installing the MySQL connector library">​</a></h2><p>This extension can use Oracle&#x27;s MySQL JDBC driver whi [...]
+install it separately. There are a few ways to obtain this library:</p><ul><li>It can be downloaded from the MySQL site at: <a href="https://dev.mysql.com/downloads/connector/j/" target="_blank" rel="noopener noreferrer">https://dev.mysql.com/downloads/connector/j/</a></li><li>It can be fetched from Maven Central at: <a href="https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar" target="_blank" rel="noopener noreferrer">https://repo1.maven.org/mave [...]
+Community Server here:
+<a href="http://dev.mysql.com/downloads/mysql/" target="_blank" rel="noopener noreferrer">http://dev.mysql.com/downloads/mysql/</a>.</p></li></ul><p>This extension also supports using MariaDB server, <a href="https://mariadb.org/download/" target="_blank" rel="noopener noreferrer">https://mariadb.org/download/</a>, substituting for MariaDB in the following instructions where appropriate.</p><ol start="2"><li><p>Create a druid database and user</p><p>Connect to MySQL from the machine wher [...]
+with the location (host name and port) of the database.</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.extensions.loadList=[&quot;mysql-metadata-storage&quot;]</spa [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/namespaced-lookup.html/index.html b/docs/31.0.1/development/extensions-core/namespaced-lookup.html/index.html
new file mode 100644
index 000000000..8de46c5ee
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/namespaced-lookup.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/querying/lookups-cached-global">
+    <link rel="canonical" href="/docs/31.0.1/querying/lookups-cached-global" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/querying/lookups-cached-global' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/orc.html/index.html b/docs/31.0.1/development/extensions-core/orc.html/index.html
new file mode 100644
index 000000000..b069cf828
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/orc.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/orc">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/orc" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/orc' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/orc/index.html b/docs/31.0.1/development/extensions-core/orc/index.html
new file mode 100644
index 000000000..4b326c2e6
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/orc/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/orc" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">ORC Extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/develo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+for <a href="/docs/31.0.1/ingestion/native-batch">native batch ingestion</a> and <a href="/docs/31.0.1/ingestion/hadoop">Hadoop batch ingestion</a>, respectively.
+Please see corresponding docs for details.</p><p>To use this extension, make sure to <a href="/docs/31.0.1/configuration/extensions#loading-extensions">include</a> <code>druid-orc-extensions</code> in the extensions load list.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="migration-from-contrib-extension">Migration from &#x27;contrib&#x27; extension<a href="#migration-from-contrib-extension" class="hash-link" aria-label="Direct link to Migration from &#x27;contrib&#x27; extension [...]
+0.14.0-incubating. While this extension can index any data the &#x27;contrib&#x27; extension could, the JSON spec for the
+ingestion task is <em>incompatible</em>, and will need modified to work with the newer &#x27;core&#x27; extension.</p><p>To migrate to 0.15.0+:</p><ul><li>In <code>inputSpec</code> of <code>ioConfig</code>, <code>inputFormat</code> must be changed from <code>&quot;org.apache.hadoop.hive.ql.io.orc.OrcNewInputFormat&quot;</code> to
+<code>&quot;org.apache.orc.mapreduce.OrcInputFormat&quot;</code></li><li>The &#x27;contrib&#x27; extension supported a <code>typeString</code> property, which provided the schema of the
+ORC file, of which was essentially required to have the types correct, but notably <em>not</em> the column names, which
+facilitated column renaming. In the &#x27;core&#x27; extension, column renaming can be achieved with
+<a href="/docs/31.0.1/ingestion/ingestion-spec#flattenspec"><code>flattenSpec</code></a>. For example, <code>&quot;typeString&quot;:&quot;struct&lt;time:string,name:string&gt;&quot;</code>
+with the actual schema <code>struct&lt;_col0:string,_col1:string&gt;</code>, to preserve Druid schema would need replaced with:</li></ul><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property [...]
+flatten <code>OrcMap</code> columns with primitive types. This functionality has also been replaced with
+<a href="/docs/31.0.1/ingestion/ingestion-spec#flattenspec"><code>flattenSpec</code></a>. For example: <code>&quot;mapFieldNameFormat&quot;: &quot;&lt;PARENT&gt;_&lt;CHILD&gt;&quot;</code>
+for a dimension <code>nestedData_dim1</code>, to preserve Druid schema could be replaced with</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;flattenSpec&quot;</span><span cl [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/parquet.html/index.html b/docs/31.0.1/development/extensions-core/parquet.html/index.html
new file mode 100644
index 000000000..357c29991
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/parquet.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/parquet">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/parquet" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/parquet' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/parquet/index.html b/docs/31.0.1/development/extensions-core/parquet/index.html
new file mode 100644
index 000000000..71bd1dddb
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/parquet/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/parquet" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Parquet Extension | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Apache Parquet files.</p><p>Note: If using the <code>parquet-avro</code> parser for Apache Hadoop based indexing, <code>druid-parquet-extensions</code> depends on the <code>druid-avro-extensions</code> module, so be sure to
+<a href="/docs/31.0.1/configuration/extensions#loading-extensions">include  both</a>.</p><p>The <code>druid-parquet-extensions</code> provides the <a href="/docs/31.0.1/ingestion/data-formats#parquet">Parquet input format</a>, the <a href="/docs/31.0.1/ingestion/data-formats#parquet-hadoop-parser">Parquet Hadoop parser</a>,
+and the <a href="/docs/31.0.1/ingestion/data-formats#parquet-avro-hadoop-parser">Parquet Avro Hadoop Parser</a> with <code>druid-avro-extensions</code>.
+The Parquet input format is available for <a href="/docs/31.0.1/ingestion/native-batch">native batch ingestion</a>
+and the other 2 parsers are for <a href="/docs/31.0.1/ingestion/hadoop">Hadoop batch ingestion</a>.
+Please see corresponding docs for details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--dark_i4oU footer__logo" [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/postgresql.html/index.html b/docs/31.0.1/development/extensions-core/postgresql.html/index.html
new file mode 100644
index 000000000..81b3c599a
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/postgresql.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/postgresql">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/postgresql" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/postgresql' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/postgresql/index.html b/docs/31.0.1/development/extensions-core/postgresql/index.html
new file mode 100644
index 000000000..4a95e59dd
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/postgresql/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/postgresql" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">PostgreSQL Metadata Store | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/3 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+postgresql permissions:</p><p>Create a druid user, enter <code>diurd</code> when prompted for the password.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">createuser druid -P</span>< [...]
+<code>createdb</code> commands with <code>sudo -u postgres</code> in order to gain proper
+permissions.</p></li><li><p>Configure your Druid metadata storage extension:</p><p>Add the following parameters to your Druid configuration, replacing <code>&lt;host&gt;</code>
+with the location (host name and port) of the database.</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.extensions.loadList=[&quot;postgresql-metadata-storage&quot;] [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/protobuf.html/index.html b/docs/31.0.1/development/extensions-core/protobuf.html/index.html
new file mode 100644
index 000000000..29061ad42
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/protobuf.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/protobuf">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/protobuf" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/protobuf' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/protobuf/index.html b/docs/31.0.1/development/extensions-core/protobuf/index.html
new file mode 100644
index 000000000..194079b75
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/protobuf/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/protobuf" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Protobuf | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/development [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+for <a href="/docs/31.0.1/ingestion/#streaming">stream ingestion</a>. See corresponding docs for details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example-load-protobuf-messages-from-kafka">Example: Load Protobuf messages from Kafka<a href="#example-load-protobuf-messages-from-kafka" class="hash-link" aria-label="Direct link to Example: Load Protobuf messages from Kafka" title="Direct link to Example: Load Protobuf messages from Kafka">​</a></h2><p>This example demonstrates  [...]
+Make sure these keys are properly configured for successful ingestion.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="when-using-a-descriptor-file-1">When using a descriptor file<a href="#when-using-a-descriptor-file-1" class="hash-link" aria-label="Direct link to When using a descriptor file" title="Direct link to When using a descriptor file">​</a></h3><p>Important supervisor properties</p><ul><li><code>protoBytesDecoder.descriptor</code> for the descriptor file URL</li><li><cod [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/s3.html/index.html b/docs/31.0.1/development/extensions-core/s3.html/index.html
new file mode 100644
index 000000000..ee109a7e0
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/s3.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/s3">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/s3" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/s3' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/s3/index.html b/docs/31.0.1/development/extensions-core/s3/index.html
new file mode 100644
index 000000000..c139396a4
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/s3/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/s3" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">S3-compatible | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/develo [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+and specify S3 paths in your <a href="/docs/31.0.1/ingestion/hadoop#inputspec"><code>inputSpec</code></a>.</p><p>To read objects from S3, you must supply <a href="#configuration">connection information</a> in configuration.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deep-storage">Deep Storage<a href="#deep-storage" class="hash-link" aria-label="Direct link to Deep Storage" title="Direct link to Deep Storage">​</a></h3><p>S3-compatible deep storage means either Amazon S3 or a c [...]
+<code>druid.storage.sse.type</code> to a supported type of server-side encryption. The current supported types are:</p><ul><li>s3: <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption" target="_blank" rel="noopener noreferrer">Server-side encryption with S3-managed encryption keys</a></li><li>kms: <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption" target="_blank" rel="noopener noreferrer">Server-side encryption with AWS KMS–Managed  [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/simple-client-sslcontext.html/index.html b/docs/31.0.1/development/extensions-core/simple-client-sslcontext.html/index.html
new file mode 100644
index 000000000..adfe0e56d
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/simple-client-sslcontext.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/simple-client-sslcontext">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/simple-client-sslcontext" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/simple-client-sslcontext' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/simple-client-sslcontext/index.html b/docs/31.0.1/development/extensions-core/simple-client-sslcontext/index.html
new file mode 100644
index 000000000..eab80bcee
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/simple-client-sslcontext/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/simple-client-sslcontext" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Simple SSLContext Provider Module | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.or [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+that will be injected to be used with HttpClient that Druid processes use internally to communicate with each other. To learn more about
+Java&#x27;s SSL support, please refer to <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html" target="_blank" rel="noopener noreferrer">this</a> guide.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>druid.client.https.protocol</code></td><td>SSL protocol to use.</td><td><code>TLSv1.2</code></td><td>no</td></tr><tr><td><code>druid.client.https.trustStoreType</code></td> [...]
+values for the above mentioned configs among others provided by Java implementation.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/favicon.png" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/favicon.png" class="themedImage [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/stats.html/index.html b/docs/31.0.1/development/extensions-core/stats.html/index.html
new file mode 100644
index 000000000..68bddb049
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/stats.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/stats">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/stats" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/stats' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/stats/index.html b/docs/31.0.1/development/extensions-core/stats/index.html
new file mode 100644
index 000000000..4e366d412
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/stats/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/stats" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Stats aggregator | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/dev [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+&quot;Algorithms for computing the sample variance: analysis and recommendations&quot;
+The American Statistician, 37 (1983) pp. 242--247.</p><p>variance = variance1 + variance2 + n/(m<em>(m+n)) </em> pow(((m/n)*t1 - t2),2)</p><p>where: </p><ul><li>variance is sum(x-avg^2) (this is actually n times the variance)
+and is updated at every step. </li><li>n is the count of elements in chunk1 </li><li>m is the count of elements in chunk2 </li><li>t1 is the sum of elements in chunk1</li><li>t2 is the sum of elements in chunk2</li></ul><p>This algorithm was proven to be numerically stable by J.L. Barlow in
+&quot;Error analysis of a pairwise summation algorithm to compute sample variance&quot;
+Numer. Math, 58 (1991) pp. 583--590</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0Q [...]
+non-deterministic. This means that if this aggregator operates with an input type of &quot;float&quot; or &quot;double&quot;, the result
+of the aggregation may not be precisely the same across multiple runs of the query.</p><p> To produce consistent results, round the variance to a fixed number of decimal places so that the results are
+precisely the same across query runs.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="variance-and-standard-deviation-sql-aggregators">Variance and Standard Deviation SQL Aggregators<a href="#variance-and-standard-deviation-sql-aggregators" class="hash-link" aria-label="Direct link to Variance and Standard Deviation SQL Aggregators" title="Direct link to Variance and Standard Deviation SQL Aggregators">​</a></h3><p>You can use the variance and standard deviation aggrega [...]
+The ingestion aggregator can only apply to numeric values. If you use &quot;variance&quot;
+then any input rows missing the value will be considered to have a value of 0.</p><p>User can specify expected input type as one of &quot;float&quot;, &quot;double&quot;, &quot;long&quot;, &quot;variance&quot; for ingestion, which is by default &quot;float&quot;.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/test-stats.html/index.html b/docs/31.0.1/development/extensions-core/test-stats.html/index.html
new file mode 100644
index 000000000..3bc3efa6e
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/test-stats.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/extensions-core/test-stats">
+    <link rel="canonical" href="/docs/31.0.1/development/extensions-core/test-stats" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/extensions-core/test-stats' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions-core/test-stats/index.html b/docs/31.0.1/development/extensions-core/test-stats/index.html
new file mode 100644
index 000000000..e46b95cdf
--- /dev/null
+++ b/docs/31.0.1/development/extensions-core/test-stats/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/extensions-core/test-stats" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Test Stats Aggregators | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+Please note S.E. stands for standard error where</p><p>S.E. = sqrt{ p1 <em> ( 1 - p1 )/n1 + p2 </em> (1 - p2)/n2) }</p><p>(p1 – p2) is the observed difference between two sample proportions.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zscore2sample-post-aggregator">zscore2sample post aggregator<a href="#zscore2sample-post-aggregator" class="hash-link" aria-label="Direct link to zscore2sample post aggregator" title="Direct link to zscore2sample post aggregator">​</a></h3><ul><li [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/extensions/index.html b/docs/31.0.1/development/extensions/index.html
new file mode 100644
index 000000000..e3ef51f44
--- /dev/null
+++ b/docs/31.0.1/development/extensions/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/configuration/extensions">
+    <link rel="canonical" href="/docs/31.0.1/configuration/extensions" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/configuration/extensions' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/indexer.html/index.html b/docs/31.0.1/development/indexer.html/index.html
new file mode 100644
index 000000000..15c8d00e2
--- /dev/null
+++ b/docs/31.0.1/development/indexer.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/indexer">
+    <link rel="canonical" href="/docs/31.0.1/design/indexer" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/indexer' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/integrating-druid-with-other-technologies.html/index.html b/docs/31.0.1/development/integrating-druid-with-other-technologies.html/index.html
new file mode 100644
index 000000000..3368d908f
--- /dev/null
+++ b/docs/31.0.1/development/integrating-druid-with-other-technologies.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/javascript.html/index.html b/docs/31.0.1/development/javascript.html/index.html
new file mode 100644
index 000000000..2bc4dcec8
--- /dev/null
+++ b/docs/31.0.1/development/javascript.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/javascript">
+    <link rel="canonical" href="/docs/31.0.1/development/javascript" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/javascript' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/javascript/index.html b/docs/31.0.1/development/javascript/index.html
new file mode 100644
index 000000000..59e75994a
--- /dev/null
+++ b/docs/31.0.1/development/javascript/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/javascript" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JavaScript programming guide | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/doc [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+without needing to write and deploy Druid extensions.</p><p>Druid uses the Mozilla Rhino engine at optimization level 9 to compile and execute JavaScript.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="security">Security<a href="#security" class="hash-link" aria-label="Direct link to Security" title="Direct link to Security">​</a></h2><p>Druid does not execute JavaScript functions in a sandbox, so they have full access to the machine. So JavaScript
+functions allow users to execute arbitrary code inside druid process. So, by default, JavaScript is disabled.
+However, on dev/staging environments or secured production environments you can enable those by setting
+the <a href="/docs/31.0.1/configuration/#javascript">configuration property</a>
+<code>druid.javascript.enabled = true</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="global-variables">Global variables<a href="#global-variables" class="hash-link" aria-label="Direct link to Global variables" title="Direct link to Global variables">​</a></h2><p>Avoid using global variables. Druid may share the global scope between multiple threads, which can lead to
+unpredictable results if global variables are used.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="performance">Performance<a href="#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance">​</a></h2><p>Simple JavaScript functions typically have a slight performance penalty to native speed. More complex JavaScript
+functions can have steeper performance penalties. Druid compiles JavaScript functions once on each data process per query.</p><p>You may need to pay special attention to garbage collection when making heavy use of JavaScript functions, especially
+garbage collection of the compiled classes themselves. Be sure to use a garbage collector configuration that supports
+timely collection of unused classes (this is generally easier on JDK8 with the Metaspace than it is on JDK7).</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="javascript-vs-native-extensions">JavaScript vs. Native Extensions<a href="#javascript-vs-native-extensions" class="hash-link" aria-label="Direct link to JavaScript vs. Native Extensions" title="Direct link to JavaScript vs. Native Extensions">​</a></h2><p>Generally we recommend using JavaScript when security is not an issue, a [...]
+than performance or memory use. If security is an issue, or if performance and memory use are of the utmost importance,
+we recommend developing a native Druid extension.</p><p>In addition, native Druid extensions are more flexible than JavaScript functions. There are some kinds of extensions
+(like sketches) that must be written as native Druid extensions due to their need for custom data formats.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/development/modules"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Creating extensions</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/deve [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/kafka-simple-consumer-firehose.html/index.html b/docs/31.0.1/development/kafka-simple-consumer-firehose.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/development/kafka-simple-consumer-firehose.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/modules.html/index.html b/docs/31.0.1/development/modules.html/index.html
new file mode 100644
index 000000000..82dc11aa7
--- /dev/null
+++ b/docs/31.0.1/development/modules.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/modules">
+    <link rel="canonical" href="/docs/31.0.1/development/modules" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/modules' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/modules/index.html b/docs/31.0.1/development/modules/index.html
new file mode 100644
index 000000000..880f1e3ef
--- /dev/null
+++ b/docs/31.0.1/development/modules/index.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/modules" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Creating extensions | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<code>org.apache.druid.tasklogs.TaskLog*</code> classes.</li><li>Add a new input source by extending <code>org.apache.druid.data.input.InputSource</code>.</li><li>Add a new input entity by extending <code>org.apache.druid.data.input.InputEntity</code>.</li><li>Add a new input source reader if necessary by extending <code>org.apache.druid.data.input.InputSourceReader</code>. You can use <code>org.apache.druid.data.input.impl.InputEntityIteratingReader</code> in most cases.</li><li>Add a n [...]
+and <code>org.apache.druid.query.aggregation.BufferAggregator</code>.</li><li>Add PostAggregators by extending <code>org.apache.druid.query.aggregation.PostAggregator</code>.</li><li>Add ExtractionFns by extending <code>org.apache.druid.query.extraction.ExtractionFn</code>.</li><li>Add Complex metrics by extending <code>org.apache.druid.segment.serde.ComplexMetricSerde</code>.</li><li>Add new Query types by extending <code>org.apache.druid.query.QueryRunnerFactory</code>, <code>org.apach [...]
+<code>org.apache.druid.query.Query</code>.</li><li>Add new Jersey resources by calling <code>Jerseys.addResource(binder, clazz)</code>.</li><li>Add new Jetty filters by extending <code>org.apache.druid.server.initialization.jetty.ServletFilterHolder</code>.</li><li>Add new secret providers by extending <code>org.apache.druid.metadata.PasswordProvider</code>.</li><li>Add new dynamic configuration providers by extending <code>org.apache.druid.metadata.DynamicConfigProvider</code>.</li><li> [...]
+The segment will be automatically rolled up to a Historical node after ~1 minute.
+In this way, you can validate both push (at realtime process) and pull (at Historical process) segments.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="datasegmentpusher">DataSegmentPusher<a href="#datasegmentpusher" class="hash-link" aria-label="Direct link to DataSegmentPusher" title="Direct link to DataSegmentPusher">​</a></h4><p>Wherever your data storage (cloud storage service, distributed file system, etc.) is, you should be able to see one new file: <code>index.zip</code> ( [...]
+<code>InputSource</code> is to define where the input data is stored. <code>InputEntity</code> is to define how data can be read in parallel
+in <a href="/docs/31.0.1/ingestion/native-batch">native parallel indexing</a>.
+<code>InputSourceReader</code> defines how to read your new input source and you can simply use the provided <code>InputEntityIteratingReader</code> in most cases.</p><p>There is an example of this in the <code>druid-s3-extensions</code> module with the <code>S3InputSource</code> and <code>S3Entity</code>.</p><p>Adding an InputSource is done almost entirely through the Jackson Modules instead of Guice. Specifically, note the implementation</p><div class="language-java codeBlockContainer_ [...]
+<code>InputFormat</code> is to define how your data is formatted. <code>InputEntityReader</code> is to define how to parse your data and convert into Druid <code>InputRow</code>.</p><p>There is an example in the <code>druid-orc-extensions</code> module with the <code>OrcInputFormat</code> and <code>OrcReader</code>.</p><p>Adding an InputFormat is very similar to adding an InputSource. They operate purely through Jackson and thus should just be additions to the Jackson modules returned by [...]
+thus make sure all the necessary information required for fetching each password is supplied during object instantiation.
+In your implementation of <code>org.apache.druid.initialization.DruidModule</code>, <code>getJacksonModules</code> should look something like this -</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class= [...]
+thus make sure all the necessary information required for fetching all information is supplied during object instantiation.
+In your implementation of <code>org.apache.druid.initialization.DruidModule</code>, <code>getJacksonModules</code> should look something like this -</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class= [...]
+Druid users can add custom pluggable coordinator duties, which are not part of Core Druid, without modifying any Core Druid classes.
+Users can do this by writing their own custom coordinator duty implementing the interface <code>CoordinatorCustomDuty</code> and setting the <code>JsonTypeName</code>.
+Next, users will need to register their custom coordinator as subtypes in their Module&#x27;s <code>DruidModule#getJacksonModules()</code>.
+Once these steps are done, user will be able to load their custom coordinator duty using the following properties:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.co [...]
+The duties will be grouped into multiple groups as per the elements in list <code>druid.coordinator.dutyGroups</code>.
+All duties in the same group will have the same run period configured by <code>druid.coordinator.&lt;GROUP_NAME&gt;.period</code>.
+Currently, there is a single thread running the duties sequentially for each group.</p><p>For example, see <code>KillSupervisorsCustomDuty</code> for a custom coordinator duty implementation and the <code>custom-coordinator-duties</code>
+integration test group which loads <code>KillSupervisorsCustomDuty</code> using the configs set in <code>integration-tests/docker/environment-configs/test-groups/custom-coordinator-duties</code>.
+This config file adds the configs below to enable a custom coordinator duty.</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">druid.coordinator.dutyGroups=[&quot;cleanupMet [...]
+The custom coordinator duty <code>killSupervisors</code> also has a config called <code>durationToRetain</code> which is set to 0 minute.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="routing-data-through-a-http-proxy-for-your-extension">Routing data through a HTTP proxy for your extension<a href="#routing-data-through-a-http-proxy-for-your-extension" class="hash-link" aria-label="Direct link to Routing data through a HTTP proxy for your extension" title="Direct link to Routing d [...]
+For example, where <code>config</code> variable is the extension&#x27;s HTTP config from step 1:</li></ol><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">final HttpClientConfig.Builder b [...]
+<a href="https://github.com/apache/druid/blob/master/distribution/pom.xml#L95" target="_blank" rel="noopener noreferrer">distribution/pom.xml</a></p><p>During <code>mvn install</code>, maven will install your extension to the local maven repository, and then call <a href="/docs/31.0.1/operations/pull-deps">pull-deps</a> to pull your extension from
+there. In the end, you should see your extension underneath <code>distribution/target/extensions</code> and within Druid tarball.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="managing-dependencies">Managing dependencies<a href="#managing-dependencies" class="hash-link" aria-label="Direct link to Managing dependencies" title="Direct link to Managing dependencies">​</a></h3><p>Managing library collisions can be daunting for extensions which draw in commonly used libraries. Here is [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/overview.html/index.html b/docs/31.0.1/development/overview.html/index.html
new file mode 100644
index 000000000..d09affa13
--- /dev/null
+++ b/docs/31.0.1/development/overview.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/overview">
+    <link rel="canonical" href="/docs/31.0.1/development/overview" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/overview' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/overview/index.html b/docs/31.0.1/development/overview/index.html
new file mode 100644
index 000000000..c524da4c1
--- /dev/null
+++ b/docs/31.0.1/development/overview/index.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/overview" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Developing on Apache Druid | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/ [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+a high level overview of the main components that make up Druid and the relevant classes to start from to learn the code.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="storage-format">Storage format<a href="#storage-format" class="hash-link" aria-label="Direct link to Storage format" title="Direct link to Storage format">​</a></h2><p>Data in Druid is stored in a custom column format known as a <a href="/docs/31.0.1/design/segments">segment</a>. Segments are composed of
+different types of columns. <code>Column.java</code> and the classes that extend it is a great place to looking into the storage format.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="segment-creation">Segment creation<a href="#segment-creation" class="hash-link" aria-label="Direct link to Segment creation" title="Direct link to Segment creation">​</a></h2><p>Raw data is ingested in <code>IncrementalIndex.java</code>, and segments are created in <code>IndexMerger.java</code>.</p>< [...]
+Query runners often embed other query runners and each query runner adds on a layer of logic. A good starting point to trace
+the query logic is to start from <code>QueryResource.java</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="coordination">Coordination<a href="#coordination" class="hash-link" aria-label="Direct link to Coordination" title="Direct link to Coordination">​</a></h2><p>Most of the coordination logic for Historical processes is on the Druid Coordinator. The starting point here is <code>DruidCoordinator.java</code>.
+Most of the coordination logic for (real-time) ingestion is in the Druid indexing service. The starting point here is <code>OverlordResource.java</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-ingestion">Real-time Ingestion<a href="#real-time-ingestion" class="hash-link" aria-label="Direct link to Real-time Ingestion" title="Direct link to Real-time Ingestion">​</a></h2><p>Druid streaming tasks are based on the &#x27;seekable stream&#x27; classes such as <code>Se [...]
+<code>SeekableStreamIndexTask.java</code>, and <code>SeekableStreamIndexTaskRunner.java</code>. The data processing happens through
+<code>StreamAppenderator.java</code>, and the persist and hand-off logic is in <code>StreamAppenderatorDriver.java</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="native-batch-ingestion">Native Batch Ingestion<a href="#native-batch-ingestion" class="hash-link" aria-label="Direct link to Native Batch Ingestion" title="Direct link to Native Batch Ingestion">​</a></h2><p>Druid native batch ingestion main task types are based on <code>AbstractBatchTask.java</code> and <code>Abs [...]
+Parallel processing uses <code>ParallelIndexSupervisorTask.java</code>, which spawns subtasks to perform various operations such
+as data analysis and partitioning depending on the task specification. Segment generation happens in
+<code>SinglePhaseSubTask.java</code>, <code>PartialHashSegmentGenerateTask.java</code>, or <code>PartialRangeSegmentGenerateTask.java</code> through
+<code>BatchAppenderator</code>, and the persist and hand-off logic is in <code>BatchAppenderatorDriver.java</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hadoop-based-batch-ingestion">Hadoop-based Batch Ingestion<a href="#hadoop-based-batch-ingestion" class="hash-link" aria-label="Direct link to Hadoop-based Batch Ingestion" title="Direct link to Hadoop-based Batch Ingestion">​</a></h2><p>The two main Hadoop indexing classes are <code>HadoopDruidDetermineConfigurationJob. [...]
+segments to create, and <code>HadoopDruidIndexerJob.java</code>, which creates Druid segments.</p><p>At some point in the future, we may move the Hadoop ingestion code out of core Druid.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="internal-uis">Internal UIs<a href="#internal-uis" class="hash-link" aria-label="Direct link to Internal UIs" title="Direct link to Internal UIs">​</a></h2><p>Druid currently has two internal UIs. One is for the Coordinator and one is for the Overlord. [...]
+<a href="https://druid.apache.org/libraries.html" target="_blank" rel="noopener noreferrer">Community and third-party libraries</a> page for links to existing client
+libraries.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/operations/use_sbt_to_build_fat_jar"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Content for build.sbt</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/31.0.1/development/modules"><div class="pagination-nav__sublabel">Next</div><div class="p [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/router.html/index.html b/docs/31.0.1/development/router.html/index.html
new file mode 100644
index 000000000..2854cf7be
--- /dev/null
+++ b/docs/31.0.1/development/router.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/router">
+    <link rel="canonical" href="/docs/31.0.1/design/router" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/router' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/select-query.html/index.html b/docs/31.0.1/development/select-query.html/index.html
new file mode 100644
index 000000000..ac70e3250
--- /dev/null
+++ b/docs/31.0.1/development/select-query.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/querying/select-query">
+    <link rel="canonical" href="/docs/31.0.1/querying/select-query" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/querying/select-query' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/versioning.html/index.html b/docs/31.0.1/development/versioning.html/index.html
new file mode 100644
index 000000000..fe7a37f33
--- /dev/null
+++ b/docs/31.0.1/development/versioning.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/development/versioning">
+    <link rel="canonical" href="/docs/31.0.1/development/versioning" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/development/versioning' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/development/versioning/index.html b/docs/31.0.1/development/versioning/index.html
new file mode 100644
index 000000000..9ebc6d877
--- /dev/null
+++ b/docs/31.0.1/development/versioning/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-development/versioning" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Versioning | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/developme [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/index.html b/docs/31.0.1/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion.html/index.html b/docs/31.0.1/ingestion.html/index.html
new file mode 100644
index 000000000..3368d908f
--- /dev/null
+++ b/docs/31.0.1/ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/automatic-compaction.html/index.html b/docs/31.0.1/ingestion/automatic-compaction.html/index.html
new file mode 100644
index 000000000..a6636ae2d
--- /dev/null
+++ b/docs/31.0.1/ingestion/automatic-compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/automatic-compaction">
+    <link rel="canonical" href="/docs/31.0.1/data-management/automatic-compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/automatic-compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/batch-ingestion.html/index.html b/docs/31.0.1/ingestion/batch-ingestion.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/ingestion/batch-ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/command-line-hadoop-indexer.html/index.html b/docs/31.0.1/ingestion/command-line-hadoop-indexer.html/index.html
new file mode 100644
index 000000000..75ad4f32c
--- /dev/null
+++ b/docs/31.0.1/ingestion/command-line-hadoop-indexer.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/hadoop">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/compaction.html/index.html b/docs/31.0.1/ingestion/compaction.html/index.html
new file mode 100644
index 000000000..b1f6c01d4
--- /dev/null
+++ b/docs/31.0.1/ingestion/compaction.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/compaction">
+    <link rel="canonical" href="/docs/31.0.1/data-management/compaction" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/compaction' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/concurrent-append-replace.html/index.html b/docs/31.0.1/ingestion/concurrent-append-replace.html/index.html
new file mode 100644
index 000000000..1801996bf
--- /dev/null
+++ b/docs/31.0.1/ingestion/concurrent-append-replace.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/concurrent-append-replace">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/concurrent-append-replace" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/concurrent-append-replace' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/concurrent-append-replace/index.html b/docs/31.0.1/ingestion/concurrent-append-replace/index.html
new file mode 100644
index 000000000..e2a049cc9
--- /dev/null
+++ b/docs/31.0.1/ingestion/concurrent-append-replace/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/concurrent-append-replace" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Concurrent append and replace | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+There are two task lock types: <code>APPEND</code> and <code>REPLACE</code>. The type of lock you use is determined by what you&#x27;re trying to accomplish.</p><p>When setting task lock types manually, be aware of the following:</p><ul><li>The segment granularity of the append task must be equal to or finer than the segment granularity of the replace task.</li><li>Concurrent append and replace fails if the task with <code>APPEND</code> lock uses a coarser segment granularity than the ta [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/data-formats.html/index.html b/docs/31.0.1/ingestion/data-formats.html/index.html
new file mode 100644
index 000000000..a68101fbc
--- /dev/null
+++ b/docs/31.0.1/ingestion/data-formats.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/data-formats">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/data-formats" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/data-formats' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/data-formats/index.html b/docs/31.0.1/ingestion/data-formats/index.html
new file mode 100644
index 000000000..6761c95bc
--- /dev/null
+++ b/docs/31.0.1/ingestion/data-formats/index.html
@@ -0,0 +1,115 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/data-formats" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Source input formats | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+We welcome any contributions to new formats.</p><p>This page lists all default and core extension data formats supported by Druid.
+For additional data formats supported with community extensions,
+please see our <a href="/docs/31.0.1/configuration/extensions#community-extensions">community extensions list</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="formatting-data">Formatting data<a href="#formatting-data" class="hash-link" aria-label="Direct link to Formatting data" title="Direct link to Formatting data">​</a></h2><p>The following samples show data formats that are natively supported in Druid:</p><p><em>JSON</em></p><div class="language-json codeBlockContainer_Ckt0 [...]
+parsing data is less efficient than writing a native Java parser or using an external stream processor. We welcome contributions of new parsers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="input-format">Input format<a href="#input-format" class="hash-link" aria-label="Direct link to Input format" title="Direct link to Input format">​</a></h2><p>You can use the <code>inputFormat</code> field to specify the data format for your input data.</p><div class="theme-admonition theme-ad [...]
+If your data is formatted in some format not listed in this section, please consider using the Parser instead.</p><p>All forms of Druid ingestion require some form of schema object. The format of the data to be ingested is specified using the <code>inputFormat</code> entry in your <a href="/docs/31.0.1/ingestion/ingestion-spec#ioconfig"><code>ioConfig</code></a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="json">JSON<a href="#json" class="hash-link" aria-label="Direct link to J [...]
+may need to migrate schemas in the future, consider one of the other decoders, all of which use a message header that
+allows the parser to identify the proper Avro schema for reading records.</p></div></div><p>This decoder can be used if all the input events can be read using the same schema. In this case, specify the schema in the input task JSON itself, as described below.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollb [...]
+first 1 byte is version and must always be 1.
+next 4 bytes are integer schema ID serialized using big-endian byte order.
+remaining bytes contain serialized avro message.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="schemarepo-based-avro-bytes-decoder">SchemaRepo Based Avro Bytes Decoder<a href="#schemarepo-based-avro-bytes-decoder" class="hash-link" aria-label="Direct link to SchemaRepo Based Avro Bytes Decoder" title="Direct link to SchemaRepo Based Avro Bytes Decoder">​</a></h5><p>This Avro bytes decoder first extracts <code>subject</code> and <code>id</code> from the input message bytes, and th [...]
+For details, see the Schema Registry <a href="http://docs.confluent.io/current/schema-registry/docs/" target="_blank" rel="noopener noreferrer">documentation</a> and <a href="https://github.com/confluentinc/schema-registry" target="_blank" rel="noopener noreferrer">repository</a>.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>schema_registry</code>.</td><td>no</td></tr><tr><t [...]
+It should only be used when ingesting from Apache Kafka.</p><p>The <code>kafka</code> input format wraps around the payload parsing input format and augments the data it outputs with the Kafka event timestamp, topic name, event headers, and the key field that itself can be parsed using any available input format.</p><p>If there are conflicts between column names in the payload and those created from the metadata, the payload takes precedence.
+This ensures that upgrading a Kafka ingestion to use the Kafka input format (by taking its existing input format and setting it as the <code>valueFormat</code>) can be done without losing any of the payload data.  </p><p>Configure the Kafka <code>inputFormat</code> as follows:</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td>String</td><td>Set value to <code>kafka</code>.</td><td>yes [...]
+To parse the Kafka metadata in addition to the payload, use the <code>kafka</code> input format.</p><p>For example, consider the following structure for a Kafka message that represents an edit in a development environment:</p><ul><li><strong>Kafka timestamp</strong>: <code>1680795276351</code></li><li><strong>Kafka topic</strong>: <code>wiki-edits</code></li><li><strong>Kafka headers</strong>:<ul><li><code>env=development</code></li><li><code>zone=z1</code></li></ul></li><li><strong>Kafk [...]
+It should only be used when ingesting from Kinesis.</p><p>The <code>kinesis</code> input format wraps around the payload parsing input format and augments the data it outputs with the Kinesis event timestamp and partition key, the <code>ApproximateArrivalTimestamp </code> and <code>PartitionKey</code> fields in the Kinesis record.</p><p>If there are conflicts between column names in the payload and those created from the metadata, the payload takes precedence.
+This ensures that upgrading a Kinesis ingestion to use the Kinesis input format (by taking its existing input format and setting it as the <code>valueFormat</code>) can be done without losing any of the payload data.</p><p>Configure the Kinesis <code>inputFormat</code> as follows:</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>type</code></td><td>String</td><td>Set value to <code>kinesis</code>.</td>< [...]
+To parse the Kinesis metadata in addition to the payload, use the <code>kinesis</code> input format.</p><p>For example, consider the following structure for a Kinesis record that represents an edit in a development environment:</p><ul><li><strong>Kinesis timestamp</strong>: <code>1680795276351</code></li><li><strong>Kinesis partition key</strong>: <code>partition-1</code></li><li><strong>Kinesis payload value</strong>: <code>{&quot;channel&quot;:&quot;#sv.wikipedia&quot;,&quot;timestamp& [...]
+and <a href="/docs/31.0.1/ingestion/kinesis-ingestion">Kinesis indexing service</a>.
+Consider using the <a href="#input-format">input format</a> instead for these types of ingestion.</p></div></div><p>This section lists all default and core extension parsers.
+For community extension parsers, please see our <a href="/docs/31.0.1/configuration/extensions#community-extensions">community extensions list</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="string-parser">String Parser<a href="#string-parser" class="hash-link" aria-label="Direct link to String Parser" title="Direct link to String Parser">​</a></h3><p><code>string</code> typed parsers operate on text based inputs that can be split into individual records by newlines.
+Each line can be further parsed using <a href="#parsespec"><code>parseSpec</code></a>.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>string</code> for most cases. Otherwise use <code>hadoopyString</code> for Hadoop indexing.</td><td>yes</td></tr><tr><td>parseSpec</td><td>JSON Object</td><td>Specifies the format, timestamp, and dimensions of the data.</td><td>yes</td></tr></tb [...]
+The <code>inputFormat</code> of <code>inputSpec</code> in <code>ioConfig</code> must be set to <code>&quot;org.apache.druid.data.input.avro.AvroValueInputFormat&quot;</code>.
+You may want to set Avro reader&#x27;s schema in <code>jobProperties</code> in <code>tuningConfig</code>,
+e.g.: <code>&quot;avro.schema.input.value.path&quot;: &quot;/path/to/your/schema.avsc&quot;</code> or
+<code>&quot;avro.schema.input.value&quot;: &quot;your_schema_JSON_object&quot;</code>.
+If the Avro reader&#x27;s schema is not set, the schema in Avro object container file will be used.
+See <a href="http://avro.apache.org/docs/1.7.7/spec.html#Schema+Resolution" target="_blank" rel="noopener noreferrer">Avro specification</a> for more information.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>avro_hadoop</code>.</td><td>yes</td></tr><tr><td>parseSpec</td><td>JSON Object</td><td>Specifies the timestamp and dimensions of the data. Should be an &quot;avro&quot;  [...]
+field types, which can be used to read nested Avro records. The &quot;jq&quot; and &quot;tree&quot; field type is not currently supported
+for Avro.</p><p>For example, using Avro Hadoop parser with custom reader&#x27;s schema file:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</ [...]
+please read <a href="/docs/31.0.1/development/extensions-core/orc#migration-from-contrib-extension">Migration from &#x27;contrib&#x27; extension</a> carefully.</p></div></div><p>This parser is for <a href="/docs/31.0.1/ingestion/hadoop">Hadoop batch ingestion</a>.
+The <code>inputFormat</code> of <code>inputSpec</code> in <code>ioConfig</code> must be set to <code>&quot;org.apache.orc.mapreduce.OrcInputFormat&quot;</code>.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>orc</code>.</td><td>yes</td></tr><tr><td>parseSpec</td><td>JSON Object</td><td>Specifies the timestamp and dimensions of the data (<code>timeAndDims</code> and <code>orc</ [...]
+If no <code>flattenSpec</code> is specified, <code>useFieldDiscovery</code> will be enabled by default. Specifying a <code>dimensionSpec</code> is
+optional if <code>useFieldDiscovery</code> is enabled: if a <code>dimensionSpec</code> is supplied, the list of <code>dimensions</code> it defines will be
+the set of ingested dimensions, if missing the discovered fields will make up the list.</p><p><code>timeAndDims</code> parse spec must specify which fields will be extracted as dimensions through the <code>dimensionSpec</code>.</p><p><a href="https://orc.apache.org/docs/types.html" target="_blank" rel="noopener noreferrer">All column types</a> are supported, with the exception of <code>union</code> types. Columns of
+<code>list</code> type, if filled with primitives, may be used as a multi-value dimension, or specific elements can be extracted with
+<code>flattenSpec</code> expressions. Likewise, primitive fields may be extracted from <code>map</code> and <code>struct</code> types in the same manner.
+Auto field discovery will automatically create a string dimension for every (non-timestamp) primitive or <code>list</code> of
+primitives, as well as any flatten expressions defined in the <code>flattenSpec</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="hadoop-job-properties">Hadoop job properties<a href="#hadoop-job-properties" class="hash-link" aria-label="Direct link to Hadoop job properties" title="Direct link to Hadoop job properties">​</a></h4><p>Like most Hadoop jobs, the best outcomes will add <code>&quot;mapreduce.job.user.classpath.first&quot;: &quot;true&quot;</code> or
+<code>&quot;mapreduce.job.classloader&quot;: &quot;true&quot;</code> to the <code>jobProperties</code> section of <code>tuningConfig</code>. Note that it is likely if using
+<code>&quot;mapreduce.job.classloader&quot;: &quot;true&quot;</code> that you will need to set <code>mapreduce.job.classloader.system.classes</code> to include
+<code>-org.apache.hadoop.hive.</code> to instruct Hadoop to load <code>org.apache.hadoop.hive</code> classes from the application jars instead
+of system jars, e.g.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span cla [...]
+<code>orc-mapreduce</code> library, which provides some classes under the <code>org.apache.hadoop.hive</code> package. If instead using the
+setting <code>&quot;mapreduce.job.user.classpath.first&quot;: &quot;true&quot;</code>, then this will not be an issue.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="orc-parser-orc-parsespec-auto-field-discovery-flatten-expressions"><code>orc</code> parser, <code>orc</code> parseSpec, auto field di [...]
+The <code>inputFormat</code> of <code>inputSpec</code> in <code>ioConfig</code> must be set to <code>org.apache.druid.data.input.parquet.DruidParquetInputFormat</code>.</p><p>The Parquet Hadoop Parser supports auto field discovery and flattening if provided with a
+<a href="#flattenspec"><code>flattenSpec</code></a> with the <code>parquet</code> <code>parseSpec</code>. Parquet nested list and map
+<a href="https://github.com/apache/parquet-format/blob/master/LogicalTypes.md" target="_blank" rel="noopener noreferrer">logical types</a> <em>should</em> operate correctly with
+JSON path expressions for all supported types.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>parquet</code>.</td><td>yes</td></tr><tr><td>parseSpec</td><td>JSON Object</td><td>Specifies the timestamp and dimensions of the data, and optionally, a flatten spec. Valid parseSpec formats are <code>timeAndDims</code> and <code>parquet</code>.</td><td>yes</td></tr><tr><td>binaryAsSt [...]
+a format should not be supplied. When the format is UTF8 (String), either <code>auto</code> or a explicitly defined
+<a href="http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat" target="_blank" rel="noopener noreferrer">format</a> is required.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="parquet-hadoop-parser-vs-parquet-avro-hadoop-parser">Parquet Hadoop Parser vs Parquet Avro Hadoop Parser<a href="#parquet-hadoop-parser-vs-parquet-avro-hadoop-parser" class="hash-link" aria-label="Direct link to Parquet Hadoop Parser vs Parquet Avro Hadoop Parser" title="Direct link to P [...]
+differences are:</p><ul><li>The Parquet Hadoop Parser uses a simple conversion while the Parquet Avro Hadoop Parser
+converts Parquet data into avro records first with the <code>parquet-avro</code> library and then
+parses avro data using the <code>druid-avro-extensions</code> module to ingest into Druid.</li><li>The Parquet Hadoop Parser sets a hadoop job property
+<code>parquet.avro.add-list-element-records</code> to <code>false</code> (which normally defaults to <code>true</code>), in order to &#x27;unwrap&#x27; primitive
+list elements into multi-value dimensions.</li><li>The Parquet Hadoop Parser supports <code>int96</code> Parquet values, while the Parquet Avro Hadoop Parser does not.
+There may also be some subtle differences in the behavior of JSON path expression evaluation of <code>flattenSpec</code>.</li></ul><p>Based on those differences, we suggest using the Parquet Hadoop Parser over the Parquet Avro Hadoop Parser
+to allow ingesting data beyond the schema constraints of Avro conversion.
+However, the Parquet Avro Hadoop Parser was the original basis for supporting the Parquet format, and as such it is a bit more mature.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="examples-1">Examples<a href="#examples-1" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="parquet-parser-parquet-parsespec"><code>parquet</code> parser, <code>parquet</code> parseSpec<a href="#parquet-pa [...]
+Parquet files. See <a href="#parquet-hadoop-parser-vs-parquet-avro-hadoop-parser">Parquet Hadoop Parser vs Parquet Avro Hadoop Parser</a>
+for the differences between those parsers.</p></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="ad [...]
+<!-- -->[<code>druid-avro-extensions</code>]<!-- --> as extensions to use the Parquet Avro Hadoop Parser.</p></div></div><p>The Parquet Avro Hadoop Parser is for <a href="/docs/31.0.1/ingestion/hadoop">Hadoop batch ingestion</a>.
+This parser first converts the Parquet data into Avro records, and then parses them to ingest into Druid.
+The <code>inputFormat</code> of <code>inputSpec</code> in <code>ioConfig</code> must be set to <code>org.apache.druid.data.input.parquet.DruidParquetAvroInputFormat</code>.</p><p>The Parquet Avro Hadoop Parser supports auto field discovery and flattening if provided with a
+<a href="#flattenspec"><code>flattenSpec</code></a> with the <code>avro</code> <code>parseSpec</code>. Parquet nested list and map
+<a href="https://github.com/apache/parquet-format/blob/master/LogicalTypes.md" target="_blank" rel="noopener noreferrer">logical types</a> <em>should</em> operate correctly with
+JSON path expressions for all supported types. This parser sets a hadoop job property
+<code>parquet.avro.add-list-element-records</code> to <code>false</code> (which normally defaults to <code>true</code>), in order to &#x27;unwrap&#x27; primitive
+list elements into multi-value dimensions.</p><p>Note that the <code>int96</code> Parquet value type is not supported with this parser.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>parquet-avro</code>.</td><td>yes</td></tr><tr><td>parseSpec</td><td>JSON Object</td><td>Specifies the timestamp and dimensions of the data, and optionally, a flatten spec. Should be <code>avro</co [...]
+a format should not be supplied. When the format is UTF8 (String), either <code>auto</code> or
+an explicitly defined <a href="http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat" target="_blank" rel="noopener noreferrer">format</a> is required.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-2">Example<a href="#example-2" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h4><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e">< [...]
+field types, which can be used to read nested Avro records. The &quot;jq&quot; and &quot;tree&quot; field type is not currently supported for Avro.</p><p>For example, using Avro stream parser with schema repo Avro bytes decoder:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class=" [...]
+more details and examples.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="protobuf-bytes-decoder">Protobuf Bytes Decoder<a href="#protobuf-bytes-decoder" class="hash-link" aria-label="Direct link to Protobuf Bytes Decoder" title="Direct link to Protobuf Bytes Decoder">​</a></h4><p>If <code>type</code> is not included, the <code>protoBytesDecoder</code> defaults to <code>schema_registry</code>.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="file-based-protobuf-bytes-decoder" [...]
+For details, see the Schema Registry <a href="http://docs.confluent.io/current/schema-registry/docs/" target="_blank" rel="noopener noreferrer">documentation</a> and <a href="https://github.com/confluentinc/schema-registry" target="_blank" rel="noopener noreferrer">repository</a>.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>Set value to <code>schema_registry</code>.</td><td>yes</td></tr><tr>< [...]
+and <a href="/docs/31.0.1/ingestion/kinesis-ingestion">Kinesis indexing service</a>.
+Consider using the <a href="#input-format">input format</a> instead for these types of ingestion.</p></div></div><p>ParseSpecs serve two purposes:</p><ul><li>The String Parser use them to determine the format (i.e., JSON, CSV, TSV) of incoming rows.</li><li>All Parsers use them to determine the timestamp and dimensions of incoming rows.</li></ul><p>If <code>format</code> is not included, the parseSpec defaults to <code>tsv</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="jso [...]
+Instead, you can set the <code>hasHeaderRow</code> field to true, which makes Druid automatically extract the column information from the header.
+Otherwise, you must set the <code>columns</code> field and ensure that field must match the columns of your input data in the same order.</p><p>Also, you can skip some header rows by setting <code>skipHeaderRows</code> in your parseSpec. If both <code>skipHeaderRows</code> and <code>hasHeaderRow</code> options are set,
+<code>skipHeaderRows</code> is first applied. For example, if you set <code>skipHeaderRows</code> to 2 and <code>hasHeaderRow</code> to true, Druid will
+skip the first two lines and then extract column information from the third line.</p><p>Note that <code>hasHeaderRow</code> and <code>skipHeaderRows</code> are effective only for non-Hadoop batch index tasks. Other types of index
+tasks will fail with an exception.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="other-csv-ingestion-tasks">Other CSV Ingestion Tasks<a href="#other-csv-ingestion-tasks" class="hash-link" aria-label="Direct link to Other CSV Ingestion Tasks" title="Direct link to Other CSV Ingestion Tasks">​</a></h4><p>The <code>columns</code> field must be included and and ensure that the order of the fields matches the columns of your input data in the same order.</p><h3 class="anchor anchorWit [...]
+the delimiter is a tab, so this will load TSV.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>format</td><td>String</td><td><code>tsv</code></td><td>yes</td></tr><tr><td>timestampSpec</td><td>JSON Object</td><td>Specifies the column and format of the timestamp.</td><td>yes</td></tr><tr><td>dimensionsSpec</td><td>JSON Object</td><td>Specifies the dimensions of the data.</td><td>yes</td></tr><tr><td>delimiter</td><td>String< [...]
+Instead, you can set the <code>hasHeaderRow</code> field to true, which makes Druid automatically extract the column information from the header.
+Otherwise, you must set the <code>columns</code> field and ensure that field must match the columns of your input data in the same order.</p><p>Also, you can skip some header rows by setting <code>skipHeaderRows</code> in your parseSpec. If both <code>skipHeaderRows</code> and <code>hasHeaderRow</code> options are set,
+<code>skipHeaderRows</code> is first applied. For example, if you set <code>skipHeaderRows</code> to 2 and <code>hasHeaderRow</code> to true, Druid will
+skip the first two lines and then extract column information from the third line.</p><p>Note that <code>hasHeaderRow</code> and <code>skipHeaderRows</code> are effective only for non-Hadoop batch index tasks. Other types of index
+tasks will fail with an exception.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="other-tsv-delimited-ingestion-tasks">Other TSV (Delimited) Ingestion Tasks<a href="#other-tsv-delimited-ingestion-tasks" class="hash-link" aria-label="Direct link to Other TSV (Delimited) Ingestion Tasks" title="Direct link to Other TSV (Delimited) Ingestion Tasks">​</a></h4><p>The <code>columns</code> field must be included and and ensure that the order of the fields matches the columns of your inpu [...]
+columns names (&quot;column_1&quot;, &quot;column2&quot;, ... &quot;column_n&quot;) will be assigned. Ensure that your column names include all your dimensions.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="javascript-parsespec">JavaScript ParseSpec<a href="#javascript-parsespec" class="hash-link" aria-label="Direct link to JavaScript ParseSpec" title="Direct link to JavaScript ParseSpec">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism [...]
+This means any flattening or parsing multi-dimensional values must be done here.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></spa [...]
+handle all formatting decisions on their own, without using the ParseSpec.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>format</td><td>String</td><td><code>timeAndDims</code></td><td>yes</td></tr><tr><td>timestampSpec</td><td>JSON Object</td><td>Specifies the column and format of the timestamp.</td><td>yes</td></tr><tr><td>dimensionsSpec</td><td>JSON Object</td><td>Specifies the dimensions of the data.</td><td>yes</td></ [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/data-management.html/index.html b/docs/31.0.1/ingestion/data-management.html/index.html
new file mode 100644
index 000000000..28a852a53
--- /dev/null
+++ b/docs/31.0.1/ingestion/data-management.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/">
+    <link rel="canonical" href="/docs/31.0.1/data-management/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/delete-data.html/index.html b/docs/31.0.1/ingestion/delete-data.html/index.html
new file mode 100644
index 000000000..540fab0ca
--- /dev/null
+++ b/docs/31.0.1/ingestion/delete-data.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/data-management/delete">
+    <link rel="canonical" href="/docs/31.0.1/data-management/delete" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/data-management/delete' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/faq.html/index.html b/docs/31.0.1/ingestion/faq.html/index.html
new file mode 100644
index 000000000..e9c03f56b
--- /dev/null
+++ b/docs/31.0.1/ingestion/faq.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/faq">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/faq" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/faq' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/faq/index.html b/docs/31.0.1/ingestion/faq/index.html
new file mode 100644
index 000000000..c49e05193
--- /dev/null
+++ b/docs/31.0.1/ingestion/faq/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/faq" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Ingestion troubleshooting FAQ | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/do [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<code>forceMetadataRefresh=true</code> and <code>interval=&lt;INTERVAL_OF_INGESTED_DATA&gt;</code> once.
+(Note: <code>forceMetadataRefresh=true</code> refreshes Coordinator&#x27;s metadata cache of all datasources. This can be a heavy operation in terms of the load on the metadata store but is necessary to make sure that we verify all the latest segments&#x27; load status)
+If there are segments not yet loaded, continue to step 4, otherwise you can now query the data.</li><li>Repeatedly poll the <a href="/docs/31.0.1/api-reference/legacy-metadata-api#segment-loading-by-datasource">Segment Loading by Datasource API</a> (<code>/druid/coordinator/v1/datasources/{dataSourceName}/loadstatus</code>) with
+<code>forceMetadataRefresh=false</code> and <code>interval=&lt;INTERVAL_OF_INGESTED_DATA&gt;</code>.
+Continue polling until all segments are loaded. Once all segments are loaded you can now query the data.
+Note that this workflow only guarantees that the segments are available at the time of the <a href="/docs/31.0.1/api-reference/legacy-metadata-api#segment-loading-by-datasource">Segment Loading by Datasource API</a> call. Segments can still become missing because of historical process failures or any other reasons afterward.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="i-dont-see-my-druid-segments-on-my-historical-processes">I don&#x27;t see my Druid segments on my Histori [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/firehose.html/index.html b/docs/31.0.1/ingestion/firehose.html/index.html
new file mode 100644
index 000000000..37b5ac0d7
--- /dev/null
+++ b/docs/31.0.1/ingestion/firehose.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/operations/migrate-from-firehose">
+    <link rel="canonical" href="/docs/31.0.1/operations/migrate-from-firehose" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/operations/migrate-from-firehose' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/flatten-json.html/index.html b/docs/31.0.1/ingestion/flatten-json.html/index.html
new file mode 100644
index 000000000..324728482
--- /dev/null
+++ b/docs/31.0.1/ingestion/flatten-json.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/ingestion-spec">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/ingestion-spec" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/ingestion-spec' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/hadoop-vs-native-batch.html/index.html b/docs/31.0.1/ingestion/hadoop-vs-native-batch.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/ingestion/hadoop-vs-native-batch.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/hadoop.html/index.html b/docs/31.0.1/ingestion/hadoop.html/index.html
new file mode 100644
index 000000000..75ad4f32c
--- /dev/null
+++ b/docs/31.0.1/ingestion/hadoop.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/hadoop">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/hadoop" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/hadoop' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/hadoop/index.html b/docs/31.0.1/ingestion/hadoop/index.html
new file mode 100644
index 000000000..9929b2e2c
--- /dev/null
+++ b/docs/31.0.1/ingestion/hadoop/index.html
@@ -0,0 +1,73 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/hadoop" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Hadoop-based ingestion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+instance of a Druid <a href="/docs/31.0.1/design/overlord">Overlord</a>. Please refer to our <a href="/docs/31.0.1/ingestion/#batch">Hadoop-based vs. native batch comparison table</a> for
+comparisons between Hadoop-based, native batch (simple), and native batch (parallel) ingestion.</p><p>To run a Hadoop-based ingestion task, write an ingestion spec as specified below. Then POST it to the
+<a href="/docs/31.0.1/api-reference/tasks-api"><code>/druid/indexer/v1/task</code></a> endpoint on the Overlord, or use the
+<code>bin/post-index-task</code> script included with Druid.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tutorial">Tutorial<a href="#tutorial" class="hash-link" aria-label="Direct link to Tutorial" title="Direct link to Tutorial">​</a></h2><p>This page contains reference documentation for Hadoop-based ingestion.
+For a walk-through instead, check out the <a href="/docs/31.0.1/tutorials/tutorial-batch-hadoop">Loading from Apache Hadoop</a> tutorial.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="task-syntax">Task syntax<a href="#task-syntax" class="hash-link" aria-label="Direct link to Task syntax" title="Direct link to Task syntax">​</a></h2><p>A sample task is shown below:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-backgroun [...]
+what it should contain.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ioconfig"><code>ioConfig</code><a href="#ioconfig" class="hash-link" aria-label="Direct link to ioconfig" title="Direct link to ioconfig">​</a></h2><p>This field is required.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>String</td><td>This should always be &#x27;hadoop&#x27;.</td><td>yes</td></tr><tr><td>inputSpec</td><td>Object</t [...]
+To do so, you need to install the necessary library under Druid&#x27;s classpath in <em>all Middle Manager or Indexer processes</em>.
+For S3, you can run the below command to install the <a href="https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/" target="_blank" rel="noopener noreferrer">Hadoop AWS module</a>.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class=" [...]
+your S3 paths in the inputSpec with the below job properties.
+For more configurations, see the <a href="https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/" target="_blank" rel="noopener noreferrer">Hadoop AWS module</a>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"> [...]
+under <code>${DRUID_HOME}/hadoop-dependencies</code> in <em>all Middle Manager or Indexer processes</em>.
+Once you install the GCS Connector jar in all Middle Manager and Indexer processes, you can put
+your Google Cloud Storage paths in the inputSpec with the below job properties.
+For more configurations, see the <a href="https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/INSTALL.md#configure-hadoop" target="_blank" rel="noopener noreferrer">instructions to configure Hadoop</a>,
+<a href="https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/v2.0.0/gcs/conf/gcs-core-default.xml" target="_blank" rel="noopener noreferrer">GCS core default</a>
+and <a href="https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/src/test/resources/core-site.xml" target="_blank" rel="noopener noreferrer">GCS core template</a>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color [...]
+Note that, &quot;useNewAggs&quot; must be set to default value false to support delta-ingestion.</p><table><thead><tr><th>Field</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>children</td><td>Array of JSON objects</td><td>List of JSON objects containing other inputSpecs.</td><td>yes</td></tr></tbody></table><p>For example:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e [...]
+POST <code>/druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full</code>
+Request Body: <!-- -->[interval1, interval2,...]<!-- --> for example <!-- -->[&quot;2012-01-01T00:00:00.000/2012-01-03T00:00:00.000&quot;, &quot;2012-01-05T00:00:00.000/2012-01-07T00:00:00.000&quot;]</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tuningconfig"><code>tuningConfig</code><a href="#tuningconfig" class="hash-link" aria-label="Direct link to tuningconfig" title="Direct link to tuningconfig">​</a></h2><p>The tuningConfig is optional and default parameters will be used if [...]
+to avoid class loading issues. See the <a href="/docs/31.0.1/operations/other-hadoop">working with different Hadoop versions documentation</a>
+for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="partitionsspec"><code>partitionsSpec</code><a href="#partitionsspec" class="hash-link" aria-label="Direct link to partitionsspec" title="Direct link to partitionsspec">​</a></h2><p>Segments are always partitioned based on timestamp (according to the granularitySpec) and may be further partitioned in
+some other way depending on partition type. Druid supports two types of partitioning strategies: <code>hashed</code> (based on the
+hash of all dimensions in each row), and <code>single_dim</code> (based on ranges of a single dimension).</p><p>Hashed partitioning is recommended in most cases, as it will improve indexing performance and create more uniformly
+sized data segments relative to single-dimension partitioning.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash-based-partitioning">Hash-based partitioning<a href="#hash-based-partitioning" class="hash-link" aria-label="Direct link to Hash-based partitioning" title="Direct link to Hash-based partitioning">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex" [...]
+according to the hash of all dimensions in each row. The number of segments is determined automatically based on the
+cardinality of the input set and a target partition size.</p><p>The configuration options are:</p><table><thead><tr><th>Field</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Type of partitionSpec to be used.</td><td>&quot;hashed&quot;</td></tr><tr><td>targetRowsPerSegment</td><td>Target number of rows to include in a partition, should be a number that targets segments of 500MB<!-- -->~<!-- -->1GB. Defaults to 5000000 if <code>numShards</code> is not set. [...]
+values are first serialized into a byte array as a whole, and then the partition function is applied to compute hash of
+the byte array.
+Druid currently supports only one partition function.</p><table><thead><tr><th>name</th><th>description</th></tr></thead><tbody><tr><td><code>murmur3_32_abs</code></td><td>Applies an absolute value function to the result of <a href="https://guava.dev/releases/16.0/api/docs/com/google/common/hash/Hashing.html#murmur3_32()" target="_blank" rel="noopener noreferrer"><code>murmur3_32</code></a>.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="single-dimension-rang [...]
+into contiguous ranges. Each segment will contain all rows with values of that dimension in that range. For example,
+your segments may be partitioned on the dimension &quot;host&quot; using the ranges &quot;a.example.com&quot; to &quot;f.example.com&quot; and
+&quot;f.example.com&quot; to &quot;z.example.com&quot;. By default, the dimension to use is determined automatically, although you can
+override it with a specific dimension.</p><p>The configuration options are:</p><table><thead><tr><th>Field</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Type of partitionSpec to be used.</td><td>&quot;single_dim&quot;</td></tr><tr><td>targetRowsPerSegment</td><td>Target number of rows to include in a partition, should be a number that targets segments of 500MB<!-- -->~<!-- -->1GB.</td><td>yes</td></tr><tr><td>targetPartitionSize</td><td>Deprecated. Ren [...]
+from S3. To do this:</p><ul><li>Create a persistent, <a href="http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-plan-longrunning-transient" target="_blank" rel="noopener noreferrer">long-running cluster</a>.</li><li>When creating your cluster, enter the following configuration. If you&#x27;re using the wizard, this
+should be in advanced mode under &quot;Edit software settings&quot;:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">classification=yarn-site,properties=[mapreduce.reduce.memory.mb=6144,mapre [...]
+<a href="/docs/31.0.1/tutorials/cluster#hadoop">Configure for connecting to Hadoop</a> using the XML files from <code>/etc/hadoop/conf</code>
+on your EMR master.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="kerberized-hadoop-clusters">Kerberized Hadoop clusters<a href="#kerberized-hadoop-clusters" class="hash-link" aria-label="Direct link to Kerberized Hadoop clusters" title="Direct link to Kerberized Hadoop clusters">​</a></h2><p>By default druid can use the existing TGT kerberos ticket available in local kerberos key cache.
+Although TGT ticket has a limited life cycle,
+therefore you need to call <code>kinit</code> command periodically to ensure validity of TGT ticket.
+To avoid this extra external cron job script calling <code>kinit</code> periodically,
+you can provide the principal name and keytab location and druid will do the authentication transparently at startup and job launching time.</p><table><thead><tr><th>Property</th><th>Possible Values</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>druid.hadoop.security.kerberos.principal</code></td><td><code>druid@EXAMPLE.COM</code></td><td>Principal user name</td><td>empty</td></tr><tr><td><code>druid.hadoop.security.kerberos.keytab</code></td><td><code>/etc/sec [...]
+with Amazon-specific features such as S3 encryption and consistent views. If you need to use these
+features, you will need to make the Amazon EMR Hadoop JARs available to Druid through one of the
+mechanisms described in the <a href="#using-other-hadoop-distributions">Using other Hadoop distributions</a> section.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="using-other-hadoop-distributions">Using other Hadoop distributions<a href="#using-other-hadoop-distributions" class="hash-link" aria-label="Direct link to Using other Hadoop distributions" title="Direct link to Using other Hadoop distributions">​</a></h2><p>Druid works out of the box with many Hadoop distributions.</p> [...]
+searching for a solution in the <a href="https://groups.google.com/forum/#!forum/druid-user" target="_blank" rel="noopener noreferrer">Druid user groups</a>, or reading the
+Druid <a href="/docs/31.0.1/operations/other-hadoop">Different Hadoop Versions</a> documentation.</p><a name="cli"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="command-line-non-task-version">Command line (non-task) version<a href="#command-line-non-task-version" class="hash-link" aria-label="Direct link to Command line (non-task) version" title="Direct link to Command line (non-task) version">​</a></h2><p>To run:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="- [...]
+you have to take caution to not override segments created by real-time processing (if you that a real-time pipeline set up).</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/31.0.1/ingestion/native-batch"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">JSON-based batch</div></a><a class="pagination-nav__link pagination-nav__link--next" href= [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/index.html b/docs/31.0.1/ingestion/index.html
new file mode 100644
index 000000000..b41131e75
--- /dev/null
+++ b/docs/31.0.1/ingestion/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/index" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Ingestion overview | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/i [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+your source system and stores it in data files called <a href="/docs/31.0.1/design/segments"><em>segments</em></a>.
+In general, segment files contain a few million rows each.</p><p>For most ingestion methods, the Druid <a href="/docs/31.0.1/design/middlemanager">Middle Manager</a> processes or the
+<a href="/docs/31.0.1/design/indexer">Indexer</a> processes load your source data. The sole exception is Hadoop-based ingestion, which
+uses a Hadoop MapReduce job on YARN.</p><p>During ingestion, Druid creates segments and stores them in <a href="/docs/31.0.1/design/deep-storage">deep storage</a>. Historical nodes load the segments into memory to respond to queries. For streaming ingestion, the Middle Managers and indexers can respond to queries in real-time with arriving data. For more information, see <a href="/docs/31.0.1/design/storage">Storage overview</a>.</p><p>This topic introduces streaming and batch ingestion  [...]
+the best one for your situation. Each ingestion method supports its own set of source systems to pull from. For details
+about how each method works, as well as configuration properties specific to that method, check out its documentation
+page.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="streaming">Streaming<a href="#streaming" class="hash-link" aria-label="Direct link to Streaming" title="Direct link to Streaming">​</a></h3><p>There are two available options for streaming ingestion. Streaming ingestion is controlled by a continuously-running
+supervisor.</p><table><thead><tr><th><strong>Method</strong></th><th><a href="/docs/31.0.1/ingestion/kafka-ingestion">Kafka</a></th><th><a href="/docs/31.0.1/ingestion/kinesis-ingestion">Kinesis</a></th></tr></thead><tbody><tr><td><strong>Supervisor type</strong></td><td><code>kafka</code></td><td><code>kinesis</code></td></tr><tr><td><strong>How it works</strong></td><td>Druid reads directly from Apache Kafka.</td><td>Druid reads directly from Amazon Kinesis.</td></tr><tr><td><strong>Ca [...]
+runs for the duration of the job.</p><table><thead><tr><th><strong>Method</strong></th><th><a href="/docs/31.0.1/ingestion/native-batch">Native batch</a></th><th><a href="/docs/31.0.1/multi-stage-query/">SQL</a></th><th><a href="/docs/31.0.1/ingestion/hadoop">Hadoop-based</a></th></tr></thead><tbody><tr><td><strong>Controller task type</strong></td><td><code>index_parallel</code></td><td><code>query_controller</code></td><td><code>index_hadoop</code></td></tr><tr><td><strong>How you subm [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/ingestion-spec.html/index.html b/docs/31.0.1/ingestion/ingestion-spec.html/index.html
new file mode 100644
index 000000000..324728482
--- /dev/null
+++ b/docs/31.0.1/ingestion/ingestion-spec.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/ingestion-spec">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/ingestion-spec" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/ingestion-spec' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/ingestion-spec/index.html b/docs/31.0.1/ingestion/ingestion-spec/index.html
new file mode 100644
index 000000000..eb7048465
--- /dev/null
+++ b/docs/31.0.1/ingestion/ingestion-spec/index.html
@@ -0,0 +1,85 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/ingestion-spec" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Ingestion spec reference | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<a href="#timestampspec">primary timestamp</a>, <a href="#dimensionsspec">dimensions</a>, <a href="#metricsspec">metrics</a>, and <a href="#transformspec">transforms and filters</a> (if needed).</li><li><a href="#ioconfig"><code>ioConfig</code></a>, which tells Druid how to connect to the source system and how to parse data. For more information, see the
+documentation for each <a href="/docs/31.0.1/ingestion/#ingestion-methods">ingestion method</a>.</li><li><a href="#tuningconfig"><code>tuningConfig</code></a>, which controls various tuning parameters specific to each
+<a href="/docs/31.0.1/ingestion/#ingestion-methods">ingestion method</a>.</li></ul><p>Example ingestion spec for task type <code>index_parallel</code> (native batch):</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span cl [...]
+For more examples, refer to the documentation for each ingestion method.</p><p>You can also load data visually, without the need to write an ingestion spec, using the &quot;Load data&quot; functionality
+available in Druid&#x27;s <a href="/docs/31.0.1/operations/web-console">web console</a>. Druid&#x27;s visual data loader supports
+<a href="/docs/31.0.1/ingestion/kafka-ingestion">Kafka</a>,
+<a href="/docs/31.0.1/ingestion/kinesis-ingestion">Kinesis</a>, and
+<a href="/docs/31.0.1/ingestion/native-batch">native batch</a> mode.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="dataschema"><code>dataSchema</code><a href="#dataschema" class="hash-link" aria-label="Direct link to dataschema" title="Direct link to dataschema">​</a></h2><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M [...]
+except for <em>Hadoop</em> ingestion. See the <a href="#legacy-dataschema-spec">Legacy <code>dataSchema</code> spec</a> for the old spec.</p></div></div><p>The <code>dataSchema</code> is a holder for the following components:</p><ul><li><a href="#datasource">datasource name</a></li><li><a href="#timestampspec">primary timestamp</a></li><li><a href="#dimensionsspec">dimensions</a></li><li><a href="#metricsspec">metrics</a></li><li><a href="#transformspec">transforms and filters</a> (if ne [...]
+<a href="/docs/31.0.1/design/storage">datasource</a> that data will be written to. An example
+<code>dataSource</code> is:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;dataSource&quot;: &quot;my-first-datasource&quot;</span><br></span></code></pre><div class="buttonGroup__atx"><butt [...]
+configuring the <a href="/docs/31.0.1/ingestion/schema-model#primary-timestamp">primary timestamp</a>. An example <code>timestampSpec</code> is:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quo [...]
+first <a href="/docs/31.0.1/ingestion/data-formats#flattenspec"><code>flattenSpec</code></a> (if any), then <a href="#timestampspec"><code>timestampSpec</code></a>, then <a href="#transformspec"><code>transformSpec</code></a>,
+and finally <a href="#dimensionsspec"><code>dimensionsSpec</code></a> and <a href="#metricsspec"><code>metricsSpec</code></a>. Keep this in mind when writing
+your ingestion spec.</p></div></div><p>A <code>timestampSpec</code> can have the following components:</p><table><thead><tr><th>Field</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>column</td><td>Input row field to read the primary timestamp from.<br><br>Regardless of the name of this input field, the primary timestamp will always be stored as a column named <code>__time</code> in your Druid datasource.</td><td>timestamp</td></tr><tr><td>format</td><td>Timestamp form [...]
+configuring <a href="/docs/31.0.1/ingestion/schema-model#dimensions">dimensions</a>.</p><p>You can either manually specify the dimensions or take advantage of schema auto-discovery where you allow Druid to infer all or some of the schema for your data. This means that you don&#x27;t have to explicitly specify your dimensions and their type. </p><p>To use schema auto-discovery, set <code>useSchemaDiscovery</code> to <code>true</code>. </p><p>Alternatively, you can use the string-based sch [...]
+first <a href="/docs/31.0.1/ingestion/data-formats#flattenspec"><code>flattenSpec</code></a> (if any), then <a href="#timestampspec"><code>timestampSpec</code></a>, then <a href="#transformspec"><code>transformSpec</code></a>,
+and finally <a href="#dimensionsspec"><code>dimensionsSpec</code></a> and <a href="#metricsspec"><code>metricsSpec</code></a>. Keep this in mind when writing
+your ingestion spec.</p></div></div><p>A <code>dimensionsSpec</code> can have the following components:</p><table><thead><tr><th>Field</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>dimensions</code></td><td>A list of <a href="#dimension-objects">dimension names or objects</a>. You cannot include the same column in both <code>dimensions</code> and <code>dimensionExclusions</code>.<br><br>If <code>dimensions</code> and <code>spatialDimensions</code> are both nul [...]
+a <code>string</code> type dimension object with the given name, e.g. <code>&quot;page&quot;</code> is equivalent to <code>{&quot;name&quot;: &quot;page&quot;, &quot;type&quot;: &quot;string&quot;}</code>.</p><p>Dimension objects can have the following components:</p><table><thead><tr><th>Field</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>type</td><td>Either <code>auto</code>, <code>string</code>, <code>long</code>, <code>float</code>, <code>double</code>, or <code [...]
+schemaless dimension interpretation.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metricsspec"><code>metricsSpec</code><a href="#metricsspec" class="hash-link" aria-label="Direct link to metricsspec" title="Direct link to metricsspec">​</a></h3><p>The <code>metricsSpec</code> is located in <code>dataSchema</code> → <code>metricsSpec</code> and is a list of <a href="/docs/31.0.1/querying/aggregations">aggregators</a>
+to apply at ingestion time. This is most useful when <a href="/docs/31.0.1/ingestion/rollup">rollup</a> is enabled, since it&#x27;s how you configure
+ingestion-time aggregation.</p><p>An example <code>metricsSpec</code> is:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;metricsSpec&quot;: [</span><br></span><span class="token-line" style= [...]
+Druid does not do any ingestion-time aggregation, so there is little reason to include an ingestion-time aggregator). However,
+in some cases, it can still make sense to define metrics: for example, if you want to create a complex column as a way of
+pre-computing part of an <a href="/docs/31.0.1/querying/aggregations#approximate-aggregations">approximate aggregation</a>, this can only
+be done by defining a metric in a <code>metricsSpec</code>.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="granularityspec"><code>granularitySpec</code><a href="#granularityspec" class="hash-link" aria-label="Direct link to granularityspec" title="Direct link to granularityspec">​</a></h3><p>The <code>granularitySpec</code>, located in <code>dataSchema</code> → <code>granularitySpec</code>, specifies the following:</p><ol><li><code>segmentGranularity</code> to partitio [...]
+Use the format from <!-- -->[Query granularities]<!-- --> to specify both <code>segmentGranualarity</code> and <code>queryGranularity</code>.</p><p>An example <code>granularitySpec</code> is:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style [...]
+records during ingestion time. It is optional. An example <code>transformSpec</code> is:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;transformSpec&quot;: {</span><br></span><span class="t [...]
+first <a href="/docs/31.0.1/ingestion/data-formats#flattenspec"><code>flattenSpec</code></a> (if any), then <a href="#timestampspec"><code>timestampSpec</code></a>, then <a href="#transformspec"><code>transformSpec</code></a>,
+and finally <a href="#dimensionsspec"><code>dimensionsSpec</code></a> and <a href="#metricsspec"><code>metricsSpec</code></a>. Keep this in mind when writing
+your ingestion spec.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="transforms">Transforms<a href="#transforms" class="hash-link" aria-label="Direct link to Transforms" title="Direct link to Transforms">​</a></h4><p>The <code>transforms</code> list allows you to specify a set of expressions to evaluate on top of input data. Each transform has a
+&quot;name&quot; which can be referred to by your <code>dimensionsSpec</code>, <code>metricsSpec</code>, etc.</p><p>If a transform has the same name as a field in an input row, then it will shadow the original field. Transforms that
+shadow fields may still refer to the fields they shadow. This can be used to transform a field &quot;in-place&quot;.</p><p>Transforms do have some limitations. They can only refer to fields present in the actual input rows; in particular,
+they cannot refer to other transforms. And they cannot remove fields, only add them. However, they can shadow a field
+with another field containing all nulls, which will act similarly to removing the field.</p><p>Druid currently includes one kind of built-in transform, the expression transform. It has the following syntax:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="to [...]
+first <a href="/docs/31.0.1/ingestion/data-formats#flattenspec"><code>flattenSpec</code></a> (if any), then <a href="#timestampspec"><code>timestampSpec</code></a>, then <a href="#transformspec"><code>transformSpec</code></a>,
+and finally <a href="#dimensionsspec"><code>dimensionsSpec</code></a> and <a href="#metricsspec"><code>metricsSpec</code></a>. Keep this in mind when writing
+your ingestion spec.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="filter">Filter<a href="#filter" class="hash-link" aria-label="Direct link to Filter" title="Direct link to Filter">​</a></h4><p>The <code>filter</code> conditionally filters input rows during ingestion. Only rows that pass the filter will be
+ingested. Any of Druid&#x27;s standard <a href="/docs/31.0.1/querying/filters">query filters</a> can be used. Note that within a
+<code>transformSpec</code>, the <code>transforms</code> are applied before the <code>filter</code>, so the filter can refer to a transform.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="legacy-dataschema-spec">Legacy <code>dataSchema</code> spec<a href="#legacy-dataschema-spec" class="hash-link" aria-label="Direct link to legacy-dataschema-spec" title="Direct link to legacy-dataschema-spec">​</a></h3><div class="theme-admonition theme-admonition-info alert alert--info admonition_ [...]
+except for <em>Hadoop</em> ingestion. See <a href="#dataschema"><code>dataSchema</code></a> for the new spec.</p></div></div><p>The legacy <code>dataSchema</code> spec has below two more components in addition to the ones listed in the <a href="#dataschema"><code>dataSchema</code></a> section above.</p><ul><li><a href="#parser-deprecated">input row parser</a>, <a href="#flattenspec">flattening of nested data</a> (if needed)</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="pars [...]
+items related to parsing input records. The <code>parser</code> is deprecated and it is highly recommended to use <code>inputFormat</code> instead.
+For details about <code>inputFormat</code> and supported <code>parser</code> types, see the <a href="/docs/31.0.1/ingestion/data-formats">&quot;Data formats&quot; page</a>.</p><p>For details about major components of the <code>parseSpec</code>, refer to their subsections:</p><ul><li><a href="#timestampspec"><code>timestampSpec</code></a>, responsible for configuring the <a href="/docs/31.0.1/ingestion/schema-model#primary-timestamp">primary timestamp</a>.</li><li><a href="#dimensionsspec [...]
+bridging the gap between potentially nested input data (such as JSON, Avro, etc) and Druid&#x27;s flat data model.
+See <a href="/docs/31.0.1/ingestion/data-formats#flattenspec">Flatten spec</a> for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ioconfig"><code>ioConfig</code><a href="#ioconfig" class="hash-link" aria-label="Direct link to ioconfig" title="Direct link to ioconfig">​</a></h2><p>The <code>ioConfig</code> influences how data is read from a source system, such as Apache Kafka, Amazon S3, a mounted
+filesystem, or any other supported source system. The <code>inputFormat</code> property applies to all
+<a href="/docs/31.0.1/ingestion/#ingestion-methods">ingestion method</a> except for Hadoop ingestion. The Hadoop ingestion still
+uses the <a href="#parser-deprecated"><code>parser</code></a> in the legacy <code>dataSchema</code>.
+The rest of <code>ioConfig</code> is specific to each individual ingestion method.
+An example <code>ioConfig</code> to read JSON data is:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token property">&quot;ioConfig&quot;</span><span class="token operator" style="color:rgb(137, [...]
+Some properties apply to all <a href="/docs/31.0.1/ingestion/#ingestion-methods">ingestion methods</a>, but most are specific to each individual ingestion method.</p><p>The following table lists the common tuning properties shared among ingestion methods:</p><table><thead><tr><th>Field</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>type</td><td>Each ingestion method has its own tuning type code. You must specify the type code that matches your ingestion method. Commo [...]
+For information on defining an <code>indexSpec</code> in a query context, see <a href="/docs/31.0.1/multi-stage-query/reference#context-parameters">SQL-based ingestion reference</a>.</p><table><thead><tr><th>Field</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>bitmap</td><td>Compression format for bitmap indexes. Should be a JSON object with <code>type</code> set to <code>roaring</code> or <code>concise</code>.</td><td><code>{&quot;type&quot;: &quot;roaring&quot;}</c [...]
+Front coding is an incremental encoding strategy that lets you store STRING and <a href="/docs/31.0.1/querying/nested-columns">COMPLEX<!-- -->&lt;<!-- -->json<!-- -->&gt;</a> columns in Druid with minimal performance impact.
+Front-coded dictionaries reduce storage and improve performance by optimizing for strings where the front part looks similar.
+For example, if you are tracking website visits, most URLs start with <code>https://domain.xyz/</code>, and front coding is able to exploit this pattern for more optimal compression when storing such datasets.
+Druid performs the optimization automatically, which means that the performance of string columns is generally not affected when they don&#x27;t match the front-coded pattern.
+Consequently, you can enable this feature universally without having to know the underlying data shapes of the columns.</p><p>You can use front coding with all types of ingestion.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="enable-front-coding">Enable front coding<a href="#enable-front-coding" class="hash-link" aria-label="Direct link to Enable front coding" title="Direct link to Enable front coding">​</a></h5><p>Before you enable front coding for your cluster, review the <a hr [...]
+It contains important information about compatibility with Druid versions preceding 25.0.0.</p><p>To enable front coding, set <code>indexSpec.stringDictionaryEncoding.type</code> to <code>frontCoded</code> in the <code>tuningConfig</code> object of your ingestion spec.</p><p>You can specify the following optional properties:</p><ul><li><code>bucketSize</code>: Number of values to place in a bucket to perform delta encoding. Setting this property instructs indexing tasks to write segments [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/ingestion.html/index.html b/docs/31.0.1/ingestion/ingestion.html/index.html
new file mode 100644
index 000000000..b946c5120
--- /dev/null
+++ b/docs/31.0.1/ingestion/ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/design/">
+    <link rel="canonical" href="/docs/31.0.1/design/" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/design/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/input-sources.html/index.html b/docs/31.0.1/ingestion/input-sources.html/index.html
new file mode 100644
index 000000000..8fce8a7b7
--- /dev/null
+++ b/docs/31.0.1/ingestion/input-sources.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/input-sources">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/input-sources" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/input-sources' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/input-sources/index.html b/docs/31.0.1/ingestion/input-sources/index.html
new file mode 100644
index 000000000..1e1346c5d
--- /dev/null
+++ b/docs/31.0.1/ingestion/input-sources/index.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/input-sources" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Input sources | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ingest [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+all objects contained within the locations.</li></ul><p>The S3 input source is splittable. Therefore, you can use it with the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>. Each worker task of <code>index_parallel</code> reads one or multiple objects.</p><p>Sample specs:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-co [...]
+from Google Cloud Storage. Objects can be specified as list of Google
+Cloud Storage URI strings. The Google Cloud Storage input source is splittable
+and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>, where each worker task of <code>index_parallel</code> will read
+one or multiple objects.</p><p>Sample specs:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token pla [...]
+specify objects as a list of file URI strings or prefixes. You can split the Azure input source for use with <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a> indexing and each worker task reads one chunk of the split data.</p><p>The <code>azureStorage</code> input source is a new schema for Azure input sources that allows you to specify which storage account files should be ingested from. We recommend that you update any specs that use the old <code>azure</code> schema to  [...]
+from HDFS storage. File paths can be specified as an HDFS URI string or a list
+of HDFS URI strings. The HDFS input source is splittable and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>,
+where each worker task of <code>index_parallel</code> will read one or multiple files.</p><p>Sample specs:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span c [...]
+However, if you want to ingest from cloud storage, consider using the service-specific input source for your data storage.
+If you want to use a non-hdfs protocol with the HDFS input source, include the protocol
+in <code>druid.ingestion.hdfs.allowedProtocols</code>. See <a href="/docs/31.0.1/configuration/#hdfs-input-source">HDFS input source security configuration</a> for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="http-input-source">HTTP input source<a href="#http-input-source" class="hash-link" aria-label="Direct link to HTTP input source" title="Direct link to HTTP input source">​</a></h2><p>The HTTP input source is to support reading files directly from remote sites  [...]
+where each worker task of <code>index_parallel</code> will read only one file. This input source does not support Split Hint Spec.</p><p>Sample specs:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span clas [...]
+The <code>http</code> and <code>https</code> protocols are allowed by default. See <a href="/docs/31.0.1/configuration/#http-input-source">HTTP input source security configuration</a> for more details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="inline-input-source">Inline input source<a href="#inline-input-source" class="hash-link" aria-label="Direct link to Inline input source" title="Direct link to Inline input source">​</a></h2><p>The Inline input source can be used to read [...]
+It can be used for demos or for quickly testing out parsing and schema.</p><p>Sample spec:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span class="token-line [...]
+and is mainly intended for proof-of-concept testing.
+The Local input source is <em>splittable</em> and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>,
+where each worker task of <code>index_parallel</code> will read one or multiple files.</p><p>Sample spec:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span cl [...]
+potentially using a new schema and changing the name, dimensions, metrics, rollup, etc. of the segment.
+The Druid input source is <em>splittable</em> and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>.
+This input source has a fixed input format for reading from Druid segments;
+no <code>inputFormat</code> field needs to be specified in the ingestion spec when using this input source.</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Set the value to <code>druid</code>.</td><td>yes</td></tr><tr><td>dataSource</td><td>A String defining the Druid datasource to fetch rows from</td><td>yes</td></tr><tr><td>interval</td><td>A String representing an ISO-8601 interval, which defines the time range to fet [...]
+of milliseconds since the epoch (January 1, 1970 00:00:00 UTC). It is common to use this in the timestampSpec, if you
+want the output timestamp to be equivalent to the input timestamp. In this case, set the timestamp column to <code>__time</code>
+and the format to <code>auto</code> or <code>millis</code>.</p><p>It is OK for the input and output datasources to be the same. In this case, newly generated data will overwrite the
+previous data for the intervals specified in the <code>granularitySpec</code>. Generally, if you are going to do this, it is a good
+idea to test out your reindexing by writing to a separate datasource before overwriting your main one. Alternatively, if
+your goals can be satisfied by <a href="/docs/31.0.1/data-management/compaction">compaction</a>, consider that instead as a simpler
+approach.</p><p>An example task spec is shown below. It reads from a hypothetical raw datasource <code>wikipedia_raw</code> and creates a new
+rolled-up datasource <code>wikipedia_rollup</code> by grouping on hour, &quot;countryName&quot;, and &quot;page&quot;.</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="col [...]
+Set this value in <code>maxNumConcurrentSubTasks</code> in <code>tuningConfig</code> based on the secondary partitioning method:</p><ul><li><code>range</code> or <code>single_dim</code> partitioning: greater than or equal to 1</li><li><code>hashed</code> or <code>dynamic</code> partitioning: greater than or equal to 2</li></ul><p>For more information on the <code>maxNumConcurrentSubTasks</code> field, see <a href="/docs/31.0.1/ingestion/native-batch#implementation-considerations">Impleme [...]
+The SQL input source is <em>splittable</em> and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>, where each worker task will read from one SQL query from the list of queries.
+This input source does not support Split Hint Spec.
+Since this input source has a fixed input format for reading events, no <code>inputFormat</code> field needs to be specified in the ingestion spec when using this input source.
+Please refer to the Recommended practices section below before using this input source.</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Set the value to <code>sql</code>.</td><td>Yes</td></tr><tr><td>database</td><td>Specifies the database connection details. The database type corresponds to the extension that supplies the <code>connectorConfig</code> support. The specified extension must be loaded into Druid:<br><br><ul [...]
+Each of the SQL queries will be run in its own sub-task and thus for the above example, there would be two sub-tasks.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="recommended-practices">Recommended practices<a href="#recommended-practices" class="hash-link" aria-label="Direct link to Recommended practices" title="Direct link to Recommended practices">​</a></h3><p>Compared to the other native batch input sources, SQL input source behaves differently in terms of reading the input  [...]
+It identifies the splits from delegate input sources and uses a worker task to process each split.
+Use the Combining input source only if all the delegates are splittable and can be used by the <a href="/docs/31.0.1/ingestion/native-batch">Parallel task</a>.</p><p>Similar to other input sources, the Combining input source supports a single <code>inputFormat</code>.
+Delegate input sources that require an <code>inputFormat</code> must have the same format for input data.
+If you include the <a href="#druid-input-source">Druid input source</a>, the timestamp column is stored in the <code>__time</code> field.
+To correctly combine the data from the Druid input source with another source, ensure that other delegate input sources also store the timestamp column in <code>__time</code>.</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Set the value to <code>combining</code>.</td><td>Yes</td></tr><tr><td>delegates</td><td>List of splittable input sources to read data from.</td><td>Yes</td></tr></tbody></table><p>The following is an  [...]
+For example, if the warehouse associated with an Iceberg catalog is on S3, you must also load the <a href="/docs/31.0.1/development/extensions-core/s3"><code>druid-s3-extensions</code></a> extension.</p><p>The following is a sample spec for a HDFS warehouse source:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlo [...]
+It is strongly recommended to apply filtering only on Iceberg partition columns. When filtering on non-partition columns, Iceberg filters may return rows that do not fully match the expression. To address this, it may help to define an additional filter in the <a href="/docs/31.0.1/ingestion/ingestion-spec#transformspec"><code>transformSpec</code></a> to remove residual rows.</p><p><code>equals</code> Filter:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr [...]
+the latest snapshot from the configured table. Druid ingests the underlying delta files from the table.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>type</td><td>Set this value to <code>delta</code>.</td><td>None</td></tr><tr><td>tablePath</td><td>The location of the Delta table.</td><td>None</td></tr><tr><td>filter</td><td>The JSON Object that filters data files within a snapshot.</td><td>None</td></tr><tr><td>snapshotVersion</td> [...]
+a Delta table. This input source provides the following filters: <code>and</code>, <code>or</code>, <code>not</code>, <code>=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code>, <code>&lt;=</code>.</p><p>When a filter is applied on non-partitioned columns, the filtering is best-effort as the Delta Kernel solely relies
+on statistics collected when the non-partitioned table is created. In this scenario, this Druid connector may ingest
+data that doesn&#x27;t match the filter. To guarantee that the Delta Kernel prunes out unnecessary column values, only use
+filters on partitioned columns.</p><p><code>and</code> filter:</p><table><thead><tr><th>Property</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>type</td><td>Set this value to <code>and</code>.</td><td>yes</td></tr><tr><td>filters</td><td>List of Delta filter predicates that get evaluated using logical AND where both conditions need to be true. <code>and</code> filter requires two filter predicates.</td><td>yes</td></tr></tbody></table><p><code>or</code> filter:</p>< [...]
+<code>name = &#x27;Employee4&#x27; and age &gt;= 30</code>:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></span><span class="token-line" style="color:#bfc7d5"><span c [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/kafka-ingestion.html/index.html b/docs/31.0.1/ingestion/kafka-ingestion.html/index.html
new file mode 100644
index 000000000..87d01c1ad
--- /dev/null
+++ b/docs/31.0.1/ingestion/kafka-ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kafka-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kafka-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kafka-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/kafka-ingestion/index.html b/docs/31.0.1/ingestion/kafka-ingestion/index.html
new file mode 100644
index 000000000..c0d94f3a3
--- /dev/null
+++ b/docs/31.0.1/ingestion/kafka-ingestion/index.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/kafka-ingestion" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Apache Kafka ingestion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+If you are using an older version, refer to the <a href="https://kafka.apache.org/documentation/#upgrade" target="_blank" rel="noopener noreferrer">Apache Kafka upgrade guide</a>.</p></div></div><p>When you enable the Kafka indexing service, you can configure supervisors on the Overlord to manage the creation and lifetime of Kafka indexing tasks.
+Kafka indexing tasks read events using Kafka partition and offset mechanism to guarantee exactly-once ingestion. The supervisor oversees the state of the indexing tasks to coordinate handoffs, manage failures, and ensure that scalability and replication requirements are maintained.</p><p>This topic contains configuration information for the Kafka indexing service supervisor for Apache Druid.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="setup">Setup<a href="#setup" class="hash-li [...]
+For configuration properties shared across all streaming ingestion methods, refer to <a href="/docs/31.0.1/ingestion/supervisor#io-configuration">Supervisor I/O configuration</a>.</p><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>topic</code></td><td>String</td><td>The Kafka topic to read from. To ingest data from multiple topic, use <code>topicPattern</code>.</td><td>Yes if <code>topicPattern</code>  [...]
+28.0.0 will cause the ingestion for that datasource to fail.</p></div></div><p>You can ingest data from one or multiple topics.
+When ingesting data from multiple topics, Druid assigns partitions based on the hashcode of the topic name and the ID of the partition within that topic. The partition assignment might not be uniform across all the tasks. Druid assumes that partitions across individual topics have similar load. If you want to ingest from both high and low load topics in the same supervisor, it is recommended that you have a higher number of partitions for a high load topic and a lower number of partition [...]
+You pass multiple topics as a regex pattern. For example, to ingest data from clicks and impressions, set <code>topicPattern</code> to <code>clicks|impressions</code>.
+Similarly, you can use <code>metrics-.*</code> as the value for <code>topicPattern</code> if you want to ingest from all the topics that start with <code>metrics-</code>. If you add a new topic that matches the regex to the cluster, Druid automatically starts ingesting from the new topic. Topic names that match partially, such as <code>my-metrics-12</code>, are not included for ingestion.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="consumer-properties">Consumer properties<a hre [...]
+By default, <code>isolation.level</code> is set to <code>read_committed</code>.</p><p>If you use older versions of Kafka servers without transactions support or don&#x27;t want Druid to consume only committed transactions, set <code>isolation.level</code> to <code>read_uncommitted</code>. If you need Druid to consume older versions of Kafka, make sure offsets are sequential, since there is no offset gap check in Druid.</p><p>If your Kafka cluster enables consumer-group based ACLs, you ca [...]
+To parse the Kafka metadata in addition to the payload, use the <code>kafka</code> input format.</p><p>You configure it as follows:</p><ul><li><code>valueFormat</code>: Define how to parse the payload value. Set this to the payload parsing input format (<code>{ &quot;type&quot;: &quot;json&quot; }</code>).</li><li><code>timestampColumnName</code>: Supply a custom name for the Kafka timestamp in the Druid schema to avoid conflicts with columns from the payload. The default is <code>kafka. [...]
+Considering the header from the example, Druid maps the headers to the following columns: <code>kafka.header.env</code>, <code>kafka.header.zone</code>.</li><li><code>keyFormat</code>: Supply an input format to parse the key. Only the first value is used.
+If, as in the example, your key values are simple strings, then you can use the <code>tsv</code> format to parse them.<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:r [...]
+For configuration properties shared across all streaming ingestion methods, refer to <a href="/docs/31.0.1/ingestion/supervisor#tuning-configuration">Supervisor tuning configuration</a>.</p><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>numPersistThreads</code></td><td>Integer</td><td>The number of threads to use to create and persist incremental segments on the disk. Higher ingestion data throughput  [...]
+After 4 hours at 13:10, Druid starts a new set of tasks. The events for the interval 13:00 - 14:00 may be split across existing tasks and the new set of tasks which could result in small segments. To merge them together into new segments of an ideal size (in the range of ~500-700 MB per segment), you can schedule re-indexing tasks, optionally with a different segment granularity.</li></ul><p>For information on how to optimize the segment size, see <a href="/docs/31.0.1/operations/segment [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/kinesis-ingestion.html/index.html b/docs/31.0.1/ingestion/kinesis-ingestion.html/index.html
new file mode 100644
index 000000000..917292d8d
--- /dev/null
+++ b/docs/31.0.1/ingestion/kinesis-ingestion.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/kinesis-ingestion">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/kinesis-ingestion" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/kinesis-ingestion' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/kinesis-ingestion/index.html b/docs/31.0.1/ingestion/kinesis-ingestion/index.html
new file mode 100644
index 000000000..2c8849b5e
--- /dev/null
+++ b/docs/31.0.1/ingestion/kinesis-ingestion/index.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/kinesis-ingestion" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">Amazon Kinesis ingestion | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31 [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+For configuration properties shared across all streaming ingestion methods, refer to <a href="/docs/31.0.1/ingestion/supervisor#io-configuration">Supervisor I/O configuration</a>.</p><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>stream</code></td><td>String</td><td>The Kinesis stream to read.</td><td>Yes</td><td></td></tr><tr><td><code>endpoint</code></td><td>String</td><td>The AWS Kinesis stream end [...]
+For configuration properties shared across all streaming ingestion methods, refer to <a href="/docs/31.0.1/ingestion/supervisor#tuning-configuration">Supervisor tuning configuration</a>.</p><table><thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th><th>Default</th></tr></thead><tbody><tr><td><code>skipSequenceNumberAvailabilityCheck</code></td><td>Boolean</td><td>Whether to enable checking if the current sequence number is still available in a particular Kinesis [...]
+If you use this approach, it takes precedence over all other methods of providing credentials.</p></div></div><p>To ingest data from Kinesis, ensure that the policy attached to your IAM role contains the necessary permissions.
+The required permissions depend on the value of <code>useListShards</code>.</p><p>If the <code>useListShards</code> flag is set to <code>true</code>, you need following permissions:</p><ul><li><code>ListStreams</code> to list your data streams.</li><li><code>Get*</code> required for <code>GetShardIterator</code>.</li><li><code>GetRecords</code> to get data records from a data stream&#x27;s shard.</li><li><code>ListShards</code> to get the shards for a stream of interest.</li></ul><p>The  [...]
+At this point, the task creates a new shard for this segment granularity to contain subsequent events.</p><p>The Kinesis indexing task also performs incremental hand-offs so that the segments created by the task are not held up until the task duration is over.
+When the task reaches one of the <code>maxRowsPerSegment</code>, <code>maxTotalRows</code>, or <code>intermediateHandoffPeriod</code> limits, it hands off all the segments and creates a new set of segments for further events. This allows the task to run for longer durations
+without accumulating old segments locally on Middle Manager services.</p><p>The Kinesis indexing service may still produce some small segments.
+For example, consider the following scenario:</p><ul><li>Task duration is 4 hours</li><li>Segment granularity is set to an HOUR</li><li>The supervisor was started at 9:10</li></ul><p>After 4 hours at 13:10, Druid starts a new set of tasks. The events for the interval 13:00 - 14:00 may be split across existing tasks and the new set of tasks which could result in small segments. To merge them together into new segments of an ideal size (in the range of ~500-700 MB per segment), you can sch [...]
+If <code>fetchThreads</code> is higher than the number of Kinesis shards, the excess threads are unused.
+Each fetch thread fetches up to 10 MB of records at once from a Kinesis shard, with a delay between fetches of <code>fetchDelayMillis</code>.
+The records fetched by each thread are pushed into a shared queue of size <code>recordBufferSizeBytes</code>.</p><p>The default values for these parameters are:</p><ul><li><code>fetchThreads</code>: Twice the number of processors available to the task. The number of processors available to the task
+is the total number of processors on the server, divided by <code>druid.worker.capacity</code> (the number of task slots on that
+particular server). This value is further limited so that the total data record data fetched at a given time does not
+exceed 5% of the max heap configured, assuming that each thread fetches 10 MB of records at once. If the value specified
+for this configuration is higher than this limit, no failure occurs, but a warning is logged, and the value is
+implicitly lowered to the max allowed by this constraint.</li><li><code>fetchDelayMillis</code>: 0 (no delay between fetches).</li><li><code>recordBufferSizeBytes</code>: 100 MB or an estimated 10% of available heap, whichever is smaller.</li><li><code>maxBytesPerPoll</code>: 1000000.</li></ul><p>Kinesis places the following restrictions on calls to fetch records:</p><ul><li>Each data record can be up to 1 MB in size.</li><li>Each shard can support up to 5 transactions per second for rea [...]
+Kinesis tasks pause by <code>fetchDelayMillis</code> or 3 seconds, whichever is larger, and then attempt the call again.</p><p>In most cases, the default settings for fetch parameters are sufficient to achieve good performance without excessive
+memory usage. However, in some cases, you may need to adjust these parameters to control fetch rate
+and memory usage more finely. Optimal values depend on the average size of a record and the number of consumers you
+have reading from a given shard, which will be <code>replicas</code> unless you have other consumers also reading from this
+Kinesis stream.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="deaggregation">Deaggregation<a href="#deaggregation" class="hash-link" aria-label="Direct link to Deaggregation" title="Direct link to Deaggregation">​</a></h2><p>The Kinesis indexing service supports de-aggregation of multiple rows stored within a single <a href="https://docs.aws.amazon.com/streams/latest/dev/introduction.html" target="_blank" rel="noopener noreferrer">Kinesis Data Streams</a> record for more efficien [...]
+with an assignment of closed shards that have been fully read and balances distribution of active shards across tasks.</p><p>This window with early task shutdowns and possible task failures concludes when:</p><ul><li>All closed shards have been fully read and the Kinesis ingestion tasks have published the data from those shards, committing the &quot;closed&quot; state to metadata storage.</li><li>Any remaining tasks that had inactive shards in the assignment have been shut down. These ta [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/locking-and-priority.html/index.html b/docs/31.0.1/ingestion/locking-and-priority.html/index.html
new file mode 100644
index 000000000..2b0f72350
--- /dev/null
+++ b/docs/31.0.1/ingestion/locking-and-priority.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/tasks">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/tasks" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/tasks' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/migrate-from-firehose/index.html b/docs/31.0.1/ingestion/migrate-from-firehose/index.html
new file mode 100644
index 000000000..37b5ac0d7
--- /dev/null
+++ b/docs/31.0.1/ingestion/migrate-from-firehose/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/operations/migrate-from-firehose">
+    <link rel="canonical" href="/docs/31.0.1/operations/migrate-from-firehose" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/operations/migrate-from-firehose' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/misc-tasks.html/index.html b/docs/31.0.1/ingestion/misc-tasks.html/index.html
new file mode 100644
index 000000000..2b0f72350
--- /dev/null
+++ b/docs/31.0.1/ingestion/misc-tasks.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/tasks">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/tasks" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/tasks' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch-firehose.html/index.html b/docs/31.0.1/ingestion/native-batch-firehose.html/index.html
new file mode 100644
index 000000000..dd792c955
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch-firehose.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/native-batch-firehose">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/native-batch-firehose" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/native-batch-firehose' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch-firehose/index.html b/docs/31.0.1/ingestion/native-batch-firehose/index.html
new file mode 100644
index 000000000..82f41e791
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch-firehose/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/native-batch-firehose" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JSON-based batch ingestion with firehose (Deprecated) | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="htt [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch-input-sources.html/index.html b/docs/31.0.1/ingestion/native-batch-input-sources.html/index.html
new file mode 100644
index 000000000..8fce8a7b7
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch-input-sources.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/input-sources">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/input-sources" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/input-sources' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch-simple-task.html/index.html b/docs/31.0.1/ingestion/native-batch-simple-task.html/index.html
new file mode 100644
index 000000000..74aa23143
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch-simple-task.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/native-batch-simple-task">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/native-batch-simple-task" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/native-batch-simple-task' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch-simple-task/index.html b/docs/31.0.1/ingestion/native-batch-simple-task/index.html
new file mode 100644
index 000000000..1ff90fefd
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch-simple-task/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/native-batch-simple-task" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JSON-based batch simple task indexing | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apach [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+methods</a> table to determine which ingestion method is right for you.</p></div></div><p>The simple task (<a href="/docs/31.0.1/ingestion/tasks">task type</a> <code>index</code>) executes single-threaded as a single task within the indexing service. For parallel, scalable options consider using <a href="/docs/31.0.1/ingestion/native-batch"><code>index_parallel</code> tasks</a> or <a href="/docs/31.0.1/multi-stage-query/">SQL-based batch ingestion</a>.</p><h2 class="anchor anchorWithStic [...]
+pass over the data to determine the range to lock when it starts up.  If you specify <code>intervals</code> explicitly, any rows
+outside the specified intervals will be thrown away. We recommend setting <code>intervals</code> explicitly if you know the time
+range of the data because it allows the task to skip the extra pass, and so that you don&#x27;t accidentally replace data outside
+that range if there&#x27;s some stray data with unexpected timestamps.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ioconfig"><code>ioConfig</code><a href="#ioconfig" class="hash-link" aria-label="Direct link to ioconfig" title="Direct link to ioconfig">​</a></h3><table><thead><tr><th>property</th><th>description</th><th>default</th><th>required?</th></tr></thead><tbody><tr><td>type</td><td>The task type, this should always be &quot;index&quot;.</td><td>none</td><td>yes</td></tr [...]
+You should use different partitionsSpec depending on the <a href="/docs/31.0.1/ingestion/rollup">rollup mode</a> you want.
+For perfect rollup, you should use <code>hashed</code>.</p><table><thead><tr><th>property</th><th>description</th><th>default</th><th>required?</th></tr></thead><tbody><tr><td>type</td><td>This should always be <code>hashed</code></td><td>none</td><td>yes</td></tr><tr><td>maxRowsPerSegment</td><td>Used in sharding. Determines how many rows are in each segment.</td><td>5000000</td><td>no</td></tr><tr><td>numShards</td><td>Directly specify the number of shards to create. If this is specifi [...]
+the simple task index supports the following segment pushing modes based upon your type of <a href="/docs/31.0.1/ingestion/rollup">rollup</a>:</p><ul><li>Bulk pushing mode: Used for perfect rollup. Druid pushes every segment at the very end of the index task. Until then, Druid stores created segments in memory and local storage of the service running the index task. This mode can cause problems if you have limited storage capacity, and is not recommended to use in production.
+To enable bulk pushing mode, set <code>forceGuaranteedRollup</code> in your TuningConfig. You can not use bulk pushing with <code>appendToExisting</code> in your IOConfig.</li><li>Incremental pushing mode: Used for best-effort rollup. Druid pushes segments are incrementally during the course of the indexing task. The index task collects data and stores created segments in the memory and disks of the services running the task until the total number of collected rows exceeds <code>maxTotal [...]
+<script src="/assets/js/runtime~main.1f5c1039.js"></script>
+<script src="/assets/js/main.f677fc41.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch.html/index.html b/docs/31.0.1/ingestion/native-batch.html/index.html
new file mode 100644
index 000000000..1fe2eb5cd
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch.html/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/docs/31.0.1/ingestion/native-batch">
+    <link rel="canonical" href="/docs/31.0.1/ingestion/native-batch" />
+  </head>
+  <script>
+    window.location.href = '/docs/31.0.1/ingestion/native-batch' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/31.0.1/ingestion/native-batch/index.html b/docs/31.0.1/ingestion/native-batch/index.html
new file mode 100644
index 000000000..13e4f74c7
--- /dev/null
+++ b/docs/31.0.1/ingestion/native-batch/index.html
@@ -0,0 +1,101 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-ingestion/native-batch" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.4.3">
+<title data-rh="true">JSON-based batch | Apache® Druid</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" name="twitter:image" content="https://druid.apache.org/img/druid_nav.png"><meta data-rh="true" property="og:url" content="https://druid.apache.org/docs/31.0.1/ing [...]
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
+<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-131010415-1",{})</script>
+
+
+
+
+
+<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script><link rel="stylesheet" href="/assets/css/styles.60a7f877.css">
+<link rel="preload" href="/assets/js/runtime~main.1f5c1039.js" as="script">
+<link rel="preload" href="/assets/js/main.f677fc41.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbar--dark"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" strok [...]
+the whole indexing process. The supervisor task splits the input data and creates worker tasks to process the individual portions of data.</p><p>Druid issues the worker tasks to the Overlord. The Overlord schedules and runs the workers on Middle Managers or Indexers. After a worker task successfully processes the assigned input portion, it reports the resulting segment list to the Supervisor task.</p><p>The Supervisor task periodically checks the status of worker tasks. If a task fails,  [...]
+See <a href="#partitionsspec"><code>partitionsSpec</code></a> for details about how partitioning affects data volume for tasks.</p><p>For the tasks that read data from the <code>inputSource</code>, you can set the <a href="#split-hint-spec">Split hint spec</a> in the <code>tuningConfig</code>.
+For the task that merge shuffled segments, you can set the <code>totalNumMergeTasks</code> in the <code>tuningConfig</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="number-of-running-tasks">Number of running tasks<a href="#number-of-running-tasks" class="hash-link" aria-label="Direct link to Number of running tasks" title="Direct link to Number of running tasks">​</a></h4><p>The <code>maxNumConcurrentSubTasks</code> in the <code>tuningConfig</code> determines the number of  [...]
+<code>maxRowsPerSegment</code>.</li><li>When the total number of rows in all segments across all time chunks reaches to <code>maxTotalRows</code>. At this point the task pushes all segments created so far to the deep storage and creates new ones.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="hash-based-partitioning">Hash-based partitioning<a href="#hash-based-partitioning" class="hash-link" aria-label="Direct link to Hash-based partitioning" title="Direct link to Hash-based [...]
+The task runs in up to three phases: <code>partial dimension cardinality</code>, <code>partial segment generation</code> and <code>partial segment merge</code>.</p><p>The <code>partial dimension cardinality</code> phase is an optional phase that only runs if <code>numShards</code> is not specified.
+The Parallel task splits the input data and assigns them to worker tasks based on the split hint spec.
+Each worker task (type <code>partial_dimension_cardinality</code>) gathers estimates of partitioning dimensions cardinality for
+each time chunk. The Parallel task will aggregate these estimates from the worker tasks and determine the highest
+cardinality across all of the time chunks in the input data, dividing this cardinality by <code>targetRowsPerSegment</code> to
+automatically determine <code>numShards</code>.</p><p>In the <code>partial segment generation</code> phase, just like the Map phase in MapReduce,
+the Parallel task splits the input data based on the split hint spec
+and assigns each split to a worker task. Each worker task (type <code>partial_index_generate</code>) reads the assigned split, and partitions rows by the time chunk from <code>segmentGranularity</code> (primary partition key) in the <code>granularitySpec</code>
+and then by the hash value of <code>partitionDimensions</code> (secondary partition key) in the <code>partitionsSpec</code>.
+The partitioned data is stored in local storage of
+the <a href="/docs/31.0.1/design/middlemanager">middle Manager</a> or the <a href="/docs/31.0.1/design/indexer">indexer</a>.</p><p>The <code>partial segment merge</code> phase is similar to the Reduce phase in MapReduce.
+The Parallel task spawns a new set of worker tasks (type <code>partial_index_generic_merge</code>) to merge the partitioned data created in the previous phase. Here, the partitioned data is shuffled based on
+the time chunk and the hash value of <code>partitionDimensions</code> to be merged; each worker task reads the data falling in the same time chunk and the same hash value from multiple Middle Manager/Indexer processes and merges them to create the final segments. Finally, they push the final segments to the deep storage at once.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="hash-partition-function">Hash partition function<a href="#hash-partition-function" class="hash-link" aria-l [...]
+performance.</p><p>The Parallel task will use one subtask when you set <code>maxNumConcurrentSubTasks</code> to 1.</p><p>When you use this technique to partition your data, segment sizes may be unequally distributed if the data in your <code>partitionDimension</code> is also unequally distributed.  Therefore, to avoid imbalance in data layout, review the distribution of values in your source data before deciding on a partitioning strategy.</p><p>Range partitioning is not possible on mult [...]
+<code>partitionDimension</code> is multi-value, your ingestion job will report an error.</p><table><thead><tr><th>Property</th><th>Description</th><th>Default</th><th>Required</th></tr></thead><tbody><tr><td><code>type</code></td><td>Set the value to <code>single_dim</code>.</td><td>none</td><td>yes</td></tr><tr><td><code>partitionDimension</code></td><td>The dimension to partition on. Only rows with a single dimension value are allowed.</td><td>none</td><td>yes</td></tr><tr><td><code>ta [...]
+i.e., <code>partial dimension distribution</code>, <code>partial segment generation</code>, and <code>partial segment merge</code>.
+The first phase is to collect some statistics to find
+the best partitioning and the other 2 phases are to create partial segments
+and to merge them, respectively, as in hash-based partitioning.</p><p>In the <code>partial dimension distribution</code> phase, the Parallel task splits the input data and
+assigns them to worker tasks based on the split hint spec. Each worker task (type <code>partial_dimension_distribution</code>) reads
+the assigned split and builds a histogram for <code>partitionDimension</code>.
+The Parallel task collects those histograms from worker tasks and finds
+the best range partitioning based on <code>partitionDimension</code> to evenly
+distribute rows across partitions. Note that either <code>targetRowsPerSegment</code>
+or <code>maxRowsPerSegment</code> will be used to find the best partitioning.</p><p>In the <code>partial segment generation</code> phase, the Parallel task spawns new worker tasks (type <code>partial_range_index_generate</code>)
+to create partitioned data. Each worker task reads a split created as in the previous phase,
+partitions rows by the time chunk from the <code>segmentGranularity</code> (primary partition key) in the <code>granularitySpec</code>
+and then by the range partitioning found in the previous phase.
+The partitioned data is stored in local storage of
+the <a href="/docs/31.0.1/design/middlemanager">Middle Manager</a> or the <a href="/docs/31.0.1/design/indexer">indexer</a>.</p><p>In the <code>partial segment merge</code> phase, the parallel index task spawns a new set of worker tasks (type <code>partial_index_generic_merge</code>) to merge the partitioned
+data created in the previous phase. Here, the partitioned data is shuffled based on
+the time chunk and the value of <code>partitionDimension</code>; each worker task reads the segments
+falling in the same partition of the same range from multiple Middle Manager/Indexer processes and merges
+them to create the final segments. Finally, they push the final segments to the deep storage.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></pat [...]
... 16191 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org