From 039822b649e3642a423343aa261a03f541e41d77 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Thu, 29 Jul 2021 12:46:48 -0400 Subject: [PATCH 1/6] =?UTF-8?q?=E5=87=86=E5=A4=87=E5=AF=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=96=B9=E9=9D=A2=E7=9A=84=E6=96=87=E6=A1=A3=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _sidebar.md | 12 ++++++ operations/single-server.md | 74 ++++++++----------------------------- tutorials/index.md | 10 ++--- 3 files changed, 33 insertions(+), 63 deletions(-) diff --git a/_sidebar.md b/_sidebar.md index 159d913..a6ddcdb 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -34,7 +34,19 @@ - 摄取(Ingestion) - [面试问题和经验](interview/index.md) - [算法题](algorithm/index.md) + - 查询(Querying) + - [Druid SQL](querying/sql.md) + - [原生查询](querying/querying.md) + - [查询执行](querying/query-execution.md) + - 概念 + - [数据源](querying/datasource.md) + - [连接(joins)](querying/joins.md) + - 原生查询类型 + - [Timeseries 查询](querying/timeseriesquery.md) + - [TopN 查询](querying/topnquery.md) + - [GroupBy 查询](querying/groupbyquery.md) + - 开发(Development) - [在 Druid 中进行开发](development/index.md) diff --git a/operations/single-server.md b/operations/single-server.md index b93031f..adb2c7a 100644 --- a/operations/single-server.md +++ b/operations/single-server.md @@ -1,5 +1,6 @@ +## 独立服务器部署 -Druid includes a set of reference configurations and launch scripts for single-machine deployments: +Druid 包含有一组可用的参考配置和用于单机部署的启动脚本: - `nano-quickstart` - `micro-quickstart` @@ -8,7 +9,7 @@ Druid includes a set of reference configurations and launch scripts for single-m - `large` - `xlarge` -The `micro-quickstart` is sized for small machines like laptops and is intended for quick evaluation use-cases. +`micro-quickstart` 适合于笔记本电脑等小型计算机,主要用于能够快速评估 Druid 的使用场景。 The `nano-quickstart` is an even smaller configuration, targeting a machine with 1 CPU and 4GiB memory. It is meant for limited evaluations in resource constrained environments, such as small Docker containers. @@ -20,50 +21,39 @@ The example configurations run the Druid Coordinator and Overlord together in a While example configurations are provided for very large single machines, at higher scales we recommend running Druid in a [clustered deployment](../tutorials/cluster.md), for fault-tolerance and reduced resource contention. -## Single server reference configurations + ### Nano-Quickstart: 1 CPU, 4GiB RAM -- Launch command: `bin/start-nano-quickstart` -- Configuration directory: `conf/druid/single-server/nano-quickstart` +- 启动命令: `bin/start-nano-quickstart` +- 配置目录: `conf/druid/single-server/nano-quickstart` ### Micro-Quickstart: 4 CPU, 16GiB RAM -- Launch command: `bin/start-micro-quickstart` -- Configuration directory: `conf/druid/single-server/micro-quickstart` +- 启动命令: `bin/start-micro-quickstart` +- 配置目录: `conf/druid/single-server/micro-quickstart` ### Small: 8 CPU, 64GiB RAM (~i3.2xlarge) -- Launch command: `bin/start-small` -- Configuration directory: `conf/druid/single-server/small` +- 启动命令: `bin/start-small` +- 配置目录: `conf/druid/single-server/small` ### Medium: 16 CPU, 128GiB RAM (~i3.4xlarge) -- Launch command: `bin/start-medium` -- Configuration directory: `conf/druid/single-server/medium` +- 启动命令: `bin/start-medium` +- 配置目录: `conf/druid/single-server/medium` ### Large: 32 CPU, 256GiB RAM (~i3.8xlarge) -- Launch command: `bin/start-large` -- Configuration directory: `conf/druid/single-server/large` +- 启动命令: `bin/start-large` +- 配置目录: `conf/druid/single-server/large` ### X-Large: 64 CPU, 512GiB RAM (~i3.16xlarge) -- Launch command: `bin/start-xlarge` -- Configuration directory: `conf/druid/single-server/xlarge` +- 启动命令: `bin/start-xlarge` +- 配置目录: `conf/druid/single-server/xlarge` -### 单服务器部署 - -Druid包括一组参考配置和用于单机部署的启动脚本: - -* `nano-quickstart` -* `micro-quickstart` -* `small` -* `medium` -* `large` -* `large` -* `xlarge` `micro-quickstart`适合于笔记本电脑等小型机器,旨在用于快速评估测试使用场景。 @@ -76,35 +66,3 @@ Druid包括一组参考配置和用于单机部署的启动脚本: 通过[Coordinator配置文档](../../Configuration/configuration.md#Coordinator)中描述的可选配置`druid.coordinator.asOverlord.enabled = true`可以在单个进程中同时运行Druid Coordinator和Overlord。 虽然为大型单台计算机提供了示例配置,但在更高规模下,我们建议在集群部署中运行Druid,以实现容错和减少资源争用。 - -#### 单服务器参考配置 -##### Nano-Quickstart: 1 CPU, 4GB 内存 - -* 启动命令: `bin/start-nano-quickstart` -* 配置目录: `conf/druid/single-server/nano-quickstart` - -##### Micro-Quickstart: 4 CPU, 16GB 内存 - -* 启动命令: `bin/start-micro-quickstart` -* 配置目录: `conf/druid/single-server/micro-quickstart` - -##### Small: 8 CPU, 64GB 内存 (~i3.2xlarge) - -* 启动命令: `bin/start-small` -* 配置目录: `conf/druid/single-server/small` - -##### Medium: 16 CPU, 128GB 内存 (~i3.4xlarge) - -* 启动命令: `bin/start-medium` -* 配置目录: `conf/druid/single-server/medium` - -##### Large: 32 CPU, 256GB 内存 (~i3.8xlarge) - -* 启动命令: `bin/start-large` -* 配置目录: `conf/druid/single-server/large` - -##### X-Large: 64 CPU, 512GB 内存 (~i3.16xlarge) - -* 启动命令: `bin/start-xlarge` -* 配置目录: `conf/druid/single-server/xlarge` - diff --git a/tutorials/index.md b/tutorials/index.md index 45439ea..edab33a 100644 --- a/tutorials/index.md +++ b/tutorials/index.md @@ -208,7 +208,7 @@ Druid 是通过读取和存储有关导入数据的摘要(schema)来完成 2. 但一个数据源显示为可用的时候,针对这个数据源打开 Actions (![Actions](../assets/datasources-action-button.png)) 菜单,然后选择 **使用 SQL 进行查询(Query with SQL)**。 - ![Datasource view](../assets/tutorial-batch-data-loader-10.png "Datasource view") + ![Datasource view](../assets/tutorial-batch-data-loader-10.png ':size=690') > 请注意,你还可以对数据源进行一些其他的操作,包括有配置,保留时间规则,压缩等。 @@ -222,13 +222,13 @@ Druid 是通过读取和存储有关导入数据的摘要(schema)来完成 ## 下一步 -在完成上面步骤中的快速导航后,请查看 [query 教程](./tutorial-query.md) 页面中的内容来了解如何在 Druid 的控制台中使用查询语句。 +在完成上面步骤中的快速导航后,请查看 [query 教程](../tutorials/tutorial-query.md) 页面中的内容来了解如何在 Druid 的控制台中使用查询语句。 还有,如果你还希望从其他的数据导入方式中导入数据到 Druid,请参考下面的页面链接: -- [从 Apache Kafka 中加载流式数据](./tutorial-kafka.md) – 如何从 Kafka 的主题中加载流式数据。 -- [使用 Apache Hadoop 载入一个文件](./tutorial-batch-hadoop.md) – 如何使用远程 Hadoop 集群执行批处理文件加载 -- [编写一个你自己的数据导入规范](./tutorial-ingestion-spec.md) – 如何编写新的数据导入规范并使用它来加载数据 +- [从 Apache Kafka 中加载流式数据](../tutorials/tutorial-kafka.md) – 如何从 Kafka 的主题中加载流式数据。 +- [使用 Apache Hadoop 载入一个文件](../tutorials/tutorial-batch-hadoop.md) – 如何使用远程 Hadoop 集群执行批处理文件加载 +- [编写一个你自己的数据导入规范](../tutorials/tutorial-ingestion-spec.md) – 如何编写新的数据导入规范并使用它来加载数据 请注意,当你停止了 Druid 的服务后,可以通过删除 Druid 根目录下的 `var` 目录,并且再次运行 `bin/start-micro-quickstart` 脚本来让 Druid 启动一个完全新的实例 。 From 8cb62cd32bed5c1c8140b414da1dd144a79219e5 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Thu, 29 Jul 2021 12:47:06 -0400 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- querying/groupbyquery.md | 449 +++++++++++++ querying/query-execution.md | 118 ++++ querying/querying.md | 125 ++++ querying/sql.md | 1270 +++++++++++++++++++++++++++++++++++ querying/topnquery.md | 261 +++++++ 5 files changed, 2223 insertions(+) create mode 100644 querying/groupbyquery.md create mode 100644 querying/query-execution.md create mode 100644 querying/querying.md create mode 100644 querying/sql.md create mode 100644 querying/topnquery.md diff --git a/querying/groupbyquery.md b/querying/groupbyquery.md new file mode 100644 index 0000000..d130fa4 --- /dev/null +++ b/querying/groupbyquery.md @@ -0,0 +1,449 @@ +# GroupBy 查询 + +> Apache Druid supports two query languages: [Druid SQL](sql.md) and [native queries](querying.md). +> This document describes a query +> type in the native language. For information about when Druid SQL will use this query type, refer to the +> [SQL documentation](sql.md#query-types). + +These types of Apache Druid queries take a groupBy query object and return an array of JSON objects where each object represents a +grouping asked for by the query. + +> Note: If you are doing aggregations with time as your only grouping, or an ordered groupBy over a single dimension, +> consider [Timeseries](timeseriesquery.md) and [TopN](topnquery.md) queries as well as +> groupBy. Their performance may be better in some cases. See [Alternatives](#alternatives) below for more details. + +一个分组查询(groupBy query)对象的查询脚本如下示例: + +``` json +{ + "queryType": "groupBy", + "dataSource": "sample_datasource", + "granularity": "day", + "dimensions": ["country", "device"], + "limitSpec": { "type": "default", "limit": 5000, "columns": ["country", "data_transfer"] }, + "filter": { + "type": "and", + "fields": [ + { "type": "selector", "dimension": "carrier", "value": "AT&T" }, + { "type": "or", + "fields": [ + { "type": "selector", "dimension": "make", "value": "Apple" }, + { "type": "selector", "dimension": "make", "value": "Samsung" } + ] + } + ] + }, + "aggregations": [ + { "type": "longSum", "name": "total_usage", "fieldName": "user_count" }, + { "type": "doubleSum", "name": "data_transfer", "fieldName": "data_transfer" } + ], + "postAggregations": [ + { "type": "arithmetic", + "name": "avg_usage", + "fn": "/", + "fields": [ + { "type": "fieldAccess", "fieldName": "data_transfer" }, + { "type": "fieldAccess", "fieldName": "total_usage" } + ] + } + ], + "intervals": [ "2012-01-01T00:00:00.000/2012-01-03T00:00:00.000" ], + "having": { + "type": "greaterThan", + "aggregation": "total_usage", + "value": 100 + } +} +``` + +Following are main parts to a groupBy query: + +|property|description|required?| +|--------|-----------|---------| +|queryType|This String should always be "groupBy"; this is the first thing Druid looks at to figure out how to interpret the query|yes| +|dataSource|A String or Object defining the data source to query, very similar to a table in a relational database. See [DataSource](../querying/datasource.md) for more information.|yes| +|dimensions|A JSON list of dimensions to do the groupBy over; or see [DimensionSpec](../querying/dimensionspecs.md) for ways to extract dimensions. |yes| +|limitSpec|See [LimitSpec](../querying/limitspec.md).|no| +|having|See [Having](../querying/having.md).|no| +|granularity|Defines the granularity of the query. See [Granularities](../querying/granularities.md)|yes| +|filter|See [Filters](../querying/filters.md)|no| +|aggregations|See [Aggregations](../querying/aggregations.md)|no| +|postAggregations|See [Post Aggregations](../querying/post-aggregations.md)|no| +|intervals|A JSON Object representing ISO-8601 Intervals. This defines the time ranges to run the query over.|yes| +|subtotalsSpec| A JSON array of arrays to return additional result sets for groupings of subsets of top level `dimensions`. It is [described later](groupbyquery.md#more-on-subtotalsspec) in more detail.|no| +|context|An additional JSON Object which can be used to specify certain flags.|no| + +To pull it all together, the above query would return *n\*m* data points, up to a maximum of 5000 points, where n is the cardinality of the `country` dimension, m is the cardinality of the `device` dimension, each day between 2012-01-01 and 2012-01-03, from the `sample_datasource` table. Each data point contains the (long) sum of `total_usage` if the value of the data point is greater than 100, the (double) sum of `data_transfer` and the (double) result of `total_usage` divided by `data_transfer` for the filter set for a particular grouping of `country` and `device`. The output looks like this: + +```json +[ + { + "version" : "v1", + "timestamp" : "2012-01-01T00:00:00.000Z", + "event" : { + "country" : , + "device" : , + "total_usage" : , + "data_transfer" :, + "avg_usage" : + } + }, + { + "version" : "v1", + "timestamp" : "2012-01-01T00:00:12.000Z", + "event" : { + "dim1" : , + "dim2" : , + "sample_name1" : , + "sample_name2" :, + "avg_usage" : + } + }, +... +] +``` + +## Behavior on multi-value dimensions + +groupBy queries can group on multi-value dimensions. When grouping on a multi-value dimension, _all_ values +from matching rows will be used to generate one group per value. It's possible for a query to return more groups than +there are rows. For example, a groupBy on the dimension `tags` with filter `"t1" AND "t3"` would match only row1, and +generate a result with three groups: `t1`, `t2`, and `t3`. If you only need to include values that match +your filter, you can use a [filtered dimensionSpec](dimensionspecs.md#filtered-dimensionspecs). This can also +improve performance. + +See [Multi-value dimensions](multi-value-dimensions.md) for more details. + +## More on subtotalsSpec + +The subtotals feature allows computation of multiple sub-groupings in a single query. To use this feature, add a "subtotalsSpec" to your query as a list of subgroup dimension sets. It should contain the `outputName` from dimensions in your `dimensions` attribute, in the same order as they appear in the `dimensions` attribute (although, of course, you may skip some). + +For example, consider a groupBy query like this one: + +```json +{ +"type": "groupBy", + ... + ... +"dimensions": [ + { + "type" : "default", + "dimension" : "d1col", + "outputName": "D1" + }, + { + "type" : "extraction", + "dimension" : "d2col", + "outputName" : "D2", + "extractionFn" : extraction_func + }, + { + "type":"lookup", + "dimension":"d3col", + "outputName":"D3", + "name":"my_lookup" + } +], +... +... +"subtotalsSpec":[ ["D1", "D2", D3"], ["D1", "D3"], ["D3"]], +.. + +} +``` + +The result of the subtotalsSpec would be equivalent to concatenating the result of three groupBy queries, with the "dimensions" field being `["D1", "D2", D3"]`, `["D1", "D3"]` and `["D3"]`, given the `DimensionSpec` shown above. +The response for the query above would look something like: + +```json +[ + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": "..", "D2": "..", "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": "..", "D2": "..", "D3": ".." } + } + }, + ... + ... + + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": "..", "D2": null, "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": "..", "D2": null, "D3": ".." } + } + }, + ... + ... + + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": null, "D2": null, "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": null, "D2": null, "D3": ".." } + } + }, +... +] +``` + +> Notice that dimensions that are not included in an individual subtotalsSpec grouping are returned with a `null` value. This response format represents a behavior change as of Apache Druid 0.18.0. +> In release 0.17.0 and earlier, such dimensions were entirely excluded from the result. If you were relying on this old behavior to determine whether a particular dimension was not part of +> a subtotal grouping, you can now use [Grouping aggregator](aggregations.md#grouping-aggregator) instead. + + +## Implementation details + +### Strategies + +GroupBy queries can be executed using two different strategies. The default strategy for a cluster is determined by the +"druid.query.groupBy.defaultStrategy" runtime property on the Broker. This can be overridden using "groupByStrategy" in +the query context. If neither the context field nor the property is set, the "v2" strategy will be used. + +- "v2", the default, is designed to offer better performance and memory management. This strategy generates +per-segment results using a fully off-heap map. Data processes merge the per-segment results using a fully off-heap +concurrent facts map combined with an on-heap string dictionary. This may optionally involve spilling to disk. Data +processes return sorted results to the Broker, which merges result streams using an N-way merge. The broker materializes +the results if necessary (e.g. if the query sorts on columns other than its dimensions). Otherwise, it streams results +back as they are merged. + +- "v1", a legacy engine, generates per-segment results on data processes (Historical, realtime, MiddleManager) using a map which +is partially on-heap (dimension keys and the map itself) and partially off-heap (the aggregated values). Data processes then +merge the per-segment results using Druid's indexing mechanism. This merging is multi-threaded by default, but can +optionally be single-threaded. The Broker merges the final result set using Druid's indexing mechanism again. The broker +merging is always single-threaded. Because the Broker merges results using the indexing mechanism, it must materialize +the full result set before returning any results. On both the data processes and the Broker, the merging index is fully +on-heap by default, but it can optionally store aggregated values off-heap. + +### Differences between v1 and v2 + +Query API and results are compatible between the two engines; however, there are some differences from a cluster +configuration perspective: + +- groupBy v1 controls resource usage using a row-based limit (maxResults) whereas groupBy v2 uses bytes-based limits. +In addition, groupBy v1 merges results on-heap, whereas groupBy v2 merges results off-heap. These factors mean that +memory tuning and resource limits behave differently between v1 and v2. In particular, due to this, some queries +that can complete successfully in one engine may exceed resource limits and fail with the other engine. See the +"Memory tuning and resource limits" section for more details. +- groupBy v1 imposes no limit on the number of concurrently running queries, whereas groupBy v2 controls memory usage +by using a finite-sized merge buffer pool. By default, the number of merge buffers is 1/4 the number of processing +threads. You can adjust this as necessary to balance concurrency and memory usage. +- groupBy v1 supports caching on either the Broker or Historical processes, whereas groupBy v2 only supports caching on +Historical processes. +- groupBy v2 supports both array-based aggregation and hash-based aggregation. The array-based aggregation is used only +when the grouping key is a single indexed string column. In array-based aggregation, the dictionary-encoded value is used +as the index, so the aggregated values in the array can be accessed directly without finding buckets based on hashing. + +### Memory tuning and resource limits + +When using groupBy v2, three parameters control resource usage and limits: + +- `druid.processing.buffer.sizeBytes`: size of the off-heap hash table used for aggregation, per query, in bytes. At +most `druid.processing.numMergeBuffers` of these will be created at once, which also serves as an upper limit on the +number of concurrently running groupBy queries. +- `druid.query.groupBy.maxMergingDictionarySize`: size of the on-heap dictionary used when grouping on strings, per query, +in bytes. Note that this is based on a rough estimate of the dictionary size, not the actual size. +- `druid.query.groupBy.maxOnDiskStorage`: amount of space on disk used for aggregation, per query, in bytes. By default, +this is 0, which means aggregation will not use disk. + +If `maxOnDiskStorage` is 0 (the default) then a query that exceeds either the on-heap dictionary limit, or the off-heap +aggregation table limit, will fail with a "Resource limit exceeded" error describing the limit that was exceeded. + +If `maxOnDiskStorage` is greater than 0, queries that exceed the in-memory limits will start using disk for aggregation. +In this case, when either the on-heap dictionary or off-heap hash table fills up, partially aggregated records will be +sorted and flushed to disk. Then, both in-memory structures will be cleared out for further aggregation. Queries that +then go on to exceed `maxOnDiskStorage` will fail with a "Resource limit exceeded" error indicating that they ran out of +disk space. + +With groupBy v2, cluster operators should make sure that the off-heap hash tables and on-heap merging dictionaries +will not exceed available memory for the maximum possible concurrent query load (given by +`druid.processing.numMergeBuffers`). See the [basic cluster tuning guide](../operations/basic-cluster-tuning.md) +for more details about direct memory usage, organized by Druid process type. + +Brokers do not need merge buffers for basic groupBy queries. Queries with subqueries (using a `query` dataSource) require one merge buffer if there is a single subquery, or two merge buffers if there is more than one layer of nested subqueries. Queries with [subtotals](groupbyquery.md#more-on-subtotalsspec) need one merge buffer. These can stack on top of each other: a groupBy query with multiple layers of nested subqueries, and that also uses subtotals, will need three merge buffers. + +Historicals and ingestion tasks need one merge buffer for each groupBy query, unless [parallel combination](groupbyquery.md#parallel-combine) is enabled, in which case they need two merge buffers per query. + +When using groupBy v1, all aggregation is done on-heap, and resource limits are done through the parameter +`druid.query.groupBy.maxResults`. This is a cap on the maximum number of results in a result set. Queries that exceed +this limit will fail with a "Resource limit exceeded" error indicating they exceeded their row limit. Cluster +operators should make sure that the on-heap aggregations will not exceed available JVM heap space for the expected +concurrent query load. + +### Performance tuning for groupBy v2 + +#### Limit pushdown optimization + +Druid pushes down the `limit` spec in groupBy queries to the segments on Historicals wherever possible to early prune unnecessary intermediate results and minimize the amount of data transferred to Brokers. By default, this technique is applied only when all fields in the `orderBy` spec is a subset of the grouping keys. This is because the `limitPushDown` doesn't guarantee the exact results if the `orderBy` spec includes any fields that are not in the grouping keys. However, you can enable this technique even in such cases if you can sacrifice some accuracy for fast query processing like in topN queries. See `forceLimitPushDown` in [advanced groupBy v2 configurations](#groupby-v2-configurations). + + +#### Optimizing hash table + +The groupBy v2 engine uses an open addressing hash table for aggregation. The hash table is initialized with a given initial bucket number and gradually grows on buffer full. On hash collisions, the linear probing technique is used. + +The default number of initial buckets is 1024 and the default max load factor of the hash table is 0.7. If you can see too many collisions in the hash table, you can adjust these numbers. See `bufferGrouperInitialBuckets` and `bufferGrouperMaxLoadFactor` in [Advanced groupBy v2 configurations](#groupby-v2-configurations). + + +#### Parallel combine + +Once a Historical finishes aggregation using the hash table, it sorts the aggregated results and merges them before sending to the +Broker for N-way merge aggregation in the broker. By default, Historicals use all their available processing threads +(configured by `druid.processing.numThreads`) for aggregation, but use a single thread for sorting and merging +aggregates which is an http thread to send data to Brokers. + +This is to prevent some heavy groupBy queries from blocking other queries. In Druid, the processing threads are shared +between all submitted queries and they are _not interruptible_. It means, if a heavy query takes all available +processing threads, all other queries might be blocked until the heavy query is finished. GroupBy queries usually take +longer time than timeseries or topN queries, they should release processing threads as soon as possible. + +However, you might care about the performance of some really heavy groupBy queries. Usually, the performance bottleneck +of heavy groupBy queries is merging sorted aggregates. In such cases, you can use processing threads for it as well. +This is called _parallel combine_. To enable parallel combine, see `numParallelCombineThreads` in +[Advanced groupBy v2 configurations](#groupby-v2-configurations). Note that parallel combine can be enabled only when +data is actually spilled (see [Memory tuning and resource limits](#memory-tuning-and-resource-limits)). + +Once parallel combine is enabled, the groupBy v2 engine can create a combining tree for merging sorted aggregates. Each +intermediate node of the tree is a thread merging aggregates from the child nodes. The leaf node threads read and merge +aggregates from hash tables including spilled ones. Usually, leaf processes are slower than intermediate nodes because they +need to read data from disk. As a result, less threads are used for intermediate nodes by default. You can change the +degree of intermediate nodes. See `intermediateCombineDegree` in [Advanced groupBy v2 configurations](#groupby-v2-configurations). + +Please note that each Historical needs two merge buffers to process a groupBy v2 query with parallel combine: one for +computing intermediate aggregates from each segment and another for combining intermediate aggregates in parallel. + + +### Alternatives + +There are some situations where other query types may be a better choice than groupBy. + +- For queries with no "dimensions" (i.e. grouping by time only) the [Timeseries query](timeseriesquery.md) will +generally be faster than groupBy. The major differences are that it is implemented in a fully streaming manner (taking +advantage of the fact that segments are already sorted on time) and does not need to use a hash table for merging. + +- For queries with a single "dimensions" element (i.e. grouping by one string dimension), the [TopN query](topnquery.md) +will sometimes be faster than groupBy. This is especially true if you are ordering by a metric and find approximate +results acceptable. + +### Nested groupBys + +Nested groupBys (dataSource of type "query") are performed differently for "v1" and "v2". The Broker first runs the +inner groupBy query in the usual way. "v1" strategy then materializes the inner query's results on-heap with Druid's +indexing mechanism, and runs the outer query on these materialized results. "v2" strategy runs the outer query on the +inner query's results stream with off-heap fact map and on-heap string dictionary that can spill to disk. Both +strategy perform the outer query on the Broker in a single-threaded fashion. + +### Configurations + +This section describes the configurations for groupBy queries. You can set the runtime properties in the `runtime.properties` file on Broker, Historical, and MiddleManager processes. You can set the query context parameters through the [query context](query-context.md). + +#### Configurations for groupBy v2 + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.maxMergingDictionarySize`|Maximum amount of heap space (approximately) to use for the string dictionary during merging. When the dictionary exceeds this size, a spill to disk will be triggered.|100000000| +|`druid.query.groupBy.maxOnDiskStorage`|Maximum amount of disk space to use, per-query, for spilling result sets to disk when either the merging buffer or the dictionary fills up. Queries that exceed this limit will fail. Set to zero to disable disk spilling.|0 (disabled)| + +Supported query contexts: + +|Key|Description| +|---|-----------| +|`maxMergingDictionarySize`|Can be used to lower the value of `druid.query.groupBy.maxMergingDictionarySize` for this query.| +|`maxOnDiskStorage`|Can be used to lower the value of `druid.query.groupBy.maxOnDiskStorage` for this query.| + + +### Advanced configurations + +#### Common configurations for all groupBy strategies + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.defaultStrategy`|Default groupBy query strategy.|v2| +|`druid.query.groupBy.singleThreaded`|Merge results using a single thread.|false| + +Supported query contexts: + +|Key|Description| +|---|-----------| +|`groupByStrategy`|Overrides the value of `druid.query.groupBy.defaultStrategy` for this query.| +|`groupByIsSingleThreaded`|Overrides the value of `druid.query.groupBy.singleThreaded` for this query.| + + +#### GroupBy v2 configurations + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.bufferGrouperInitialBuckets`|Initial number of buckets in the off-heap hash table used for grouping results. Set to 0 to use a reasonable default (1024).|0| +|`druid.query.groupBy.bufferGrouperMaxLoadFactor`|Maximum load factor of the off-heap hash table used for grouping results. When the load factor exceeds this size, the table will be grown or spilled to disk. Set to 0 to use a reasonable default (0.7).|0| +|`druid.query.groupBy.forceHashAggregation`|Force to use hash-based aggregation.|false| +|`druid.query.groupBy.intermediateCombineDegree`|Number of intermediate nodes combined together in the combining tree. Higher degrees will need less threads which might be helpful to improve the query performance by reducing the overhead of too many threads if the server has sufficiently powerful cpu cores.|8| +|`druid.query.groupBy.numParallelCombineThreads`|Hint for the number of parallel combining threads. This should be larger than 1 to turn on the parallel combining feature. The actual number of threads used for parallel combining is min(`druid.query.groupBy.numParallelCombineThreads`, `druid.processing.numThreads`).|1 (disabled)| +|`druid.query.groupBy.applyLimitPushDownToSegment`|If Broker pushes limit down to queryable data server (historicals, peons) then limit results during segment scan. If typically there are a large number of segments taking part in a query on a data server, this setting may counterintuitively reduce performance if enabled.|false (disabled)| + +Supported query contexts: + +|Key|Description|Default| +|---|-----------|-------| +|`bufferGrouperInitialBuckets`|Overrides the value of `druid.query.groupBy.bufferGrouperInitialBuckets` for this query.|None| +|`bufferGrouperMaxLoadFactor`|Overrides the value of `druid.query.groupBy.bufferGrouperMaxLoadFactor` for this query.|None| +|`forceHashAggregation`|Overrides the value of `druid.query.groupBy.forceHashAggregation`|None| +|`intermediateCombineDegree`|Overrides the value of `druid.query.groupBy.intermediateCombineDegree`|None| +|`numParallelCombineThreads`|Overrides the value of `druid.query.groupBy.numParallelCombineThreads`|None| +|`sortByDimsFirst`|Sort the results first by dimension values and then by timestamp.|false| +|`forceLimitPushDown`|When all fields in the orderby are part of the grouping key, the Broker will push limit application down to the Historical processes. When the sorting order uses fields that are not in the grouping key, applying this optimization can result in approximate results with unknown accuracy, so this optimization is disabled by default in that case. Enabling this context flag turns on limit push down for limit/orderbys that contain non-grouping key columns.|false| +|`applyLimitPushDownToSegment`|If Broker pushes limit down to queryable nodes (historicals, peons) then limit results during segment scan. This context value can be used to override `druid.query.groupBy.applyLimitPushDownToSegment`.|true| + + +#### GroupBy v1 configurations + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.maxIntermediateRows`|Maximum number of intermediate rows for the per-segment grouping engine. This is a tuning parameter that does not impose a hard limit; rather, it potentially shifts merging work from the per-segment engine to the overall merging index. Queries that exceed this limit will not fail.|50000| +|`druid.query.groupBy.maxResults`|Maximum number of results. Queries that exceed this limit will fail.|500000| + +Supported query contexts: + +|Key|Description|Default| +|---|-----------|-------| +|`maxIntermediateRows`|Can be used to lower the value of `druid.query.groupBy.maxIntermediateRows` for this query.|None| +|`maxResults`|Can be used to lower the value of `druid.query.groupBy.maxResults` for this query.|None| +|`useOffheap`|Set to true to store aggregations off-heap when merging results.|false| + +#### Array based result rows + +Internally Druid always uses an array based representation of groupBy result rows, but by default this is translated +into a map based result format at the Broker. To reduce the overhead of this translation, results may also be returned +from the Broker directly in the array based format if `resultAsArray` is set to `true` on the query context. + +Each row is positional, and has the following fields, in order: + +* Timestamp (optional; only if granularity != ALL) +* Dimensions (in order) +* Aggregators (in order) +* Post-aggregators (optional; in order, if present) + +This schema is not available on the response, so it must be computed from the issued query in order to properly read +the results. diff --git a/querying/query-execution.md b/querying/query-execution.md new file mode 100644 index 0000000..811a6ef --- /dev/null +++ b/querying/query-execution.md @@ -0,0 +1,118 @@ +--- +id: query-execution +title: "Query execution" +--- + + + +> This document describes how Druid executes [native queries](querying.md), but since [Druid SQL](sql.md) queries +> are translated to native queries, this document applies to the SQL runtime as well. Refer to the SQL +> [Query translation](sql.md#query-translation) page for information about how SQL queries are translated to native +> queries. + +Druid's approach to query execution varies depending on the kind of [datasource](datasource.md) you are querying. + +## Datasource type + +### `table` + +Queries that operate directly on [table datasources](datasource.md#table) are executed using a scatter-gather approach +led by the Broker process. The process looks like this: + +1. The Broker identifies which [segments](../design/segments.md) are relevant to the query based on the `"intervals"` +parameter. Segments are always partitioned by time, so any segment whose interval overlaps the query interval is +potentially relevant. + +2. The Broker may additionally further prune the segment list based on the `"filter"`, if the input data was partitioned +by range using the [`single_dim` partitionsSpec](../ingestion/native-batch.md#partitionsspec), and if the filter matches +the dimension used for partitioning. + +3. The Broker, having pruned the list of segments for the query, forwards the query to data servers (like Historicals +and tasks running on MiddleManagers) that are currently serving those segments. + +4. For all query types except [Scan](scan-query.md), data servers process each segment in parallel and generate partial +results for each segment. The specific processing that is done depends on the query type. These partial results may be +cached if [query caching](caching.md) is enabled. For Scan queries, segments are processed in order by a single thread, +and results are not cached. + +5. The Broker receives partial results from each data server, merges them into the final result set, and returns them +to the caller. For Timeseries and Scan queries, and for GroupBy queries where there is no sorting, the Broker is able to +do this in a streaming fashion. Otherwise, the Broker fully computes the result set before returning anything. + +### `lookup` + +Queries that operate directly on [lookup datasources](datasource.md#lookup) (without a join) are executed on the Broker +that received the query, using its local copy of the lookup. All registered lookup tables are preloaded in-memory on the +Broker. The query runs single-threaded. + +Execution of queries that use lookups as right-hand inputs to a join are executed in a way that depends on their +"base" (bottom-leftmost) datasource, as described in the [join](#join) section below. + +### `union` + +Queries that operate directly on [union datasources](datasource.md#union) are split up on the Broker into a separate +query for each table that is part of the union. Each of these queries runs separately, and the Broker merges their +results together. + +### `inline` + +Queries that operate directly on [inline datasources](datasource.md#inline) are executed on the Broker that received the +query. The query runs single-threaded. + +Execution of queries that use inline datasources as right-hand inputs to a join are executed in a way that depends on +their "base" (bottom-leftmost) datasource, as described in the [join](#join) section below. + +### `query` + +[Query datasources](datasource.md#query) are subqueries. Each subquery is executed as if it was its own query and +the results are brought back to the Broker. Then, the Broker continues on with the rest of the query as if the subquery +was replaced with an inline datasource. + +In most cases, subquery results are fully buffered in memory on the Broker before the rest of the query proceeds, +meaning subqueries execute sequentially. The total number of rows buffered across all subqueries of a given query +in this way cannot exceed the [`druid.server.http.maxSubqueryRows` property](../configuration/index.md). + +There is one exception: if the outer query and all subqueries are the [groupBy](groupbyquery.md) type, then subquery +results can be processed in a streaming fashion and the `druid.server.http.maxSubqueryRows` limit does not apply. + +### `join` + +[Join datasources](datasource.md#join) are handled using a broadcast hash-join approach. + +1. The Broker executes any subqueries that are inputs the join, as described in the [query](#query) section, and +replaces them with inline datasources. + +2. The Broker flattens a join tree, if present, into a "base" datasource (the bottom-leftmost one) and other leaf +datasources (the rest). + +3. Query execution proceeds using the same structure that the base datasource would use on its own. If the base +datasource is a [table](#table), segments are pruned based on `"intervals"` as usual, and the query is executed on the +cluster by forwarding it to all relevant data servers in parallel. If the base datasource is a [lookup](#lookup) or +[inline](#inline) datasource (including an inline datasource that was the result of inlining a subquery), the query is +executed on the Broker itself. The base query cannot be a union, because unions are not currently supported as inputs to +a join. + +4. Before beginning to process the base datasource, the server(s) that will execute the query first inspect all the +non-base leaf datasources to determine if a new hash table needs to be built for the upcoming hash join. Currently, +lookups do not require new hash tables to be built (because they are preloaded), but inline datasources do. + +5. Query execution proceeds again using the same structure that the base datasource would use on its own, with one +addition: while processing the base datasource, Druid servers will use the hash tables built from the other join inputs +to produce the join result row-by-row, and query engines will operate on the joined rows rather than the base rows. diff --git a/querying/querying.md b/querying/querying.md new file mode 100644 index 0000000..ba05285 --- /dev/null +++ b/querying/querying.md @@ -0,0 +1,125 @@ +# 原生查询 + +> Apache Druid supports two query languages: [Druid SQL](../querying/sql.md) and [native queries](../querying/querying.md). +> This document describes the +> native query language. For information about how Druid SQL chooses which native query types to use when +> it runs a SQL query, refer to the [SQL documentation](../querying/sql.md#query-types). + +Native queries in Druid are JSON objects and are typically issued to the Broker or Router processes. Queries can be +posted like this: + +```bash +curl -X POST ':/druid/v2/?pretty' -H 'Content-Type:application/json' -H 'Accept:application/json' -d @ +``` + +> Replace `:` with the appropriate address and port for your system. For example, if running the quickstart configuration, replace `:` with localhost:8888. + +You can also enter them directly in the Druid console's Query view. Simply pasting a native query into the console switches the editor into JSON mode. + +![Native query](../assets/native-queries-01.png "Native query") + +Druid's native query language is JSON over HTTP, although many members of the community have contributed different +[client libraries](https://druid.apache.org/libraries.html) in other languages to query Druid. + +The Content-Type/Accept Headers can also take 'application/x-jackson-smile'. + +```bash +curl -X POST ':/druid/v2/?pretty' -H 'Content-Type:application/json' -H 'Accept:application/x-jackson-smile' -d @ +``` + +> If the Accept header is not provided, it defaults to the value of 'Content-Type' header. + +Druid's native query is relatively low level, mapping closely to how computations are performed internally. Druid queries +are designed to be lightweight and complete very quickly. This means that for more complex analysis, or to build +more complex visualizations, multiple Druid queries may be required. + +Even though queries are typically made to Brokers or Routers, they can also be accepted by +[Historical](../design/historical.md) processes and by [Peons (task JVMs)](../design/peons.md)) that are running +stream ingestion tasks. This may be valuable if you want to query results for specific segments that are served by +specific processes. + +## Available queries + +Druid has numerous query types for various use cases. Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The documentation for the various query types describe all the JSON properties that can be set. + +### Aggregation queries + +* [Timeseries](../querying/timeseriesquery.md) +* [TopN](../querying/topnquery.md) +* [GroupBy](../querying/groupbyquery.md) + +### Metadata queries + +* [TimeBoundary](../querying/timeboundaryquery.md) +* [SegmentMetadata](../querying/segmentmetadataquery.md) +* [DatasourceMetadata](../querying/datasourcemetadataquery.md) + +### Other queries + +* [Scan](../querying/scan-query.md) +* [Search](../querying/searchquery.md) + +## Which query type should I use? + +For aggregation queries, if more than one would satisfy your needs, we generally recommend using Timeseries or TopN +whenever possible, as they are specifically optimized for their use cases. If neither is a good fit, you should use +the GroupBy query, which is the most flexible. + +## Query cancellation + +Queries can be cancelled explicitly using their unique identifier. If the +query identifier is set at the time of query, or is otherwise known, the following +endpoint can be used on the Broker or Router to cancel the query. + +```sh +DELETE /druid/v2/{queryId} +``` + +For example, if the query ID is `abc123`, the query can be cancelled as follows: + +```sh +curl -X DELETE "http://host:port/druid/v2/abc123" +``` + +## Query errors + +### Authentication and authorization failures + +For [secured](../design/auth.md) Druid clusters, query requests respond with an HTTP 401 response code in case of an authentication failure. For authorization failures, an HTTP 403 response code is returned. + +### Query execution failures + +If a query fails, Druid returns a response with an HTTP response code and a JSON object with the following structure: + +```json +{ + "error" : "Query timeout", + "errorMessage" : "Timeout waiting for task.", + "errorClass" : "java.util.concurrent.TimeoutException", + "host" : "druid1.example.com:8083" +} +``` + +The fields in the response are: + +|field|description| +|-----|-----------| +|error|A well-defined error code (see below).| +|errorMessage|A free-form message with more information about the error. May be null.| +|errorClass|The class of the exception that caused this error. May be null.| +|host|The host on which this error occurred. May be null.| + +Possible Druid error codes for the `error` field include: + +|Error code|HTTP response code|description| +|----|-----------|-----------| +|`SQL parse failed`|400|Only for SQL queries. The SQL query failed to parse.| +|`Plan validation failed`|400|Only for SQL queries. The SQL query failed to validate.| +|`Resource limit exceeded`|400|The query exceeded a configured resource limit (e.g. groupBy maxResults).| +|`Query capacity exceeded`|429|The query failed to execute because of the lack of resources available at the time when the query was submitted. The resources could be any runtime resources such as [query scheduler lane capacity](../configuration/index.md#query-prioritization-and-laning), merge buffers, and so on. The error message should have more details about the failure.| +|`Unsupported operation`|501|The query attempted to perform an unsupported operation. This may occur when using undocumented features or when using an incompletely implemented extension.| +|`Query timeout`|504|The query timed out.| +|`Query interrupted`|500|The query was interrupted, possibly due to JVM shutdown.| +|`Query cancelled`|500|The query was cancelled through the query cancellation API.| +|`Truncated response context`|500|An intermediate response context for the query exceeded the built-in limit of 7KiB.

The response context is an internal data structure that Druid servers use to share out-of-band information when sending query results to each other. It is serialized in an HTTP header with a maximum length of 7KiB. This error occurs when an intermediate response context sent from a data server (like a Historical) to the Broker exceeds this limit.

The response context is used for a variety of purposes, but the one most likely to generate a large context is sharing details about segments that move during a query. That means this error can potentially indicate that a very large number of segments moved in between the time a Broker issued a query and the time it was processed on Historicals. This should rarely, if ever, occur during normal operation.| +|`Unknown exception`|500|Some other exception occurred. Check errorMessage and errorClass for details, although keep in mind that the contents of those fields are free-form and may change from release to release.| \ No newline at end of file diff --git a/querying/sql.md b/querying/sql.md new file mode 100644 index 0000000..fd5903d --- /dev/null +++ b/querying/sql.md @@ -0,0 +1,1270 @@ +--- +id: sql +title: "SQL" +sidebar_label: "Druid SQL" +--- + + + + + + +> Apache Druid supports two query languages: Druid SQL and [native queries](querying.md). +> This document describes the SQL language. + +Druid SQL is a built-in SQL layer and an alternative to Druid's native JSON-based query language, and is powered by a +parser and planner based on [Apache Calcite](https://calcite.apache.org/). Druid SQL translates SQL into native Druid +queries on the query Broker (the first process you query), which are then passed down to data processes as native Druid +queries. Other than the (slight) overhead of [translating](#query-translation) SQL on the Broker, there isn't an +additional performance penalty versus native queries. + +## Query syntax + +Druid SQL supports SELECT queries with the following structure: + +``` +[ EXPLAIN PLAN FOR ] +[ WITH tableName [ ( column1, column2, ... ) ] AS ( query ) ] +SELECT [ ALL | DISTINCT ] { * | exprs } +FROM { | () | [ INNER | LEFT ] JOIN ON condition } +[ WHERE expr ] +[ GROUP BY [ exprs | GROUPING SETS ( (exprs), ... ) | ROLLUP (exprs) | CUBE (exprs) ] ] +[ HAVING expr ] +[ ORDER BY expr [ ASC | DESC ], expr [ ASC | DESC ], ... ] +[ LIMIT limit ] +[ OFFSET offset ] +[ UNION ALL ] +``` + +### FROM + +The FROM clause can refer to any of the following: + +- [Table datasources](datasource.md#table) from the `druid` schema. This is the default schema, so Druid table +datasources can be referenced as either `druid.dataSourceName` or simply `dataSourceName`. +- [Lookups](datasource.md#lookup) from the `lookup` schema, for example `lookup.countries`. Note that lookups can +also be queried using the [`LOOKUP` function](#string-functions). +- [Subqueries](datasource.md#query). +- [Joins](datasource.md#join) between anything in this list, except between native datasources (table, lookup, +query) and system tables. The join condition must be an equality between expressions from the left- and right-hand side +of the join. +- [Metadata tables](#metadata-tables) from the `INFORMATION_SCHEMA` or `sys` schemas. Unlike the other options for the +FROM clause, metadata tables are not considered datasources. They exist only in the SQL layer. + +For more information about table, lookup, query, and join datasources, refer to the [Datasources](datasource.md) +documentation. + +### WHERE + +The WHERE clause refers to columns in the FROM table, and will be translated to [native filters](filters.md). The +WHERE clause can also reference a subquery, like `WHERE col1 IN (SELECT foo FROM ...)`. Queries like this are executed +as a join on the subquery, described below in the [Query translation](#subqueries) section. + +### GROUP BY + +The GROUP BY clause refers to columns in the FROM table. Using GROUP BY, DISTINCT, or any aggregation functions will +trigger an aggregation query using one of Druid's [three native aggregation query types](#query-types). GROUP BY +can refer to an expression or a select clause ordinal position (like `GROUP BY 2` to group by the second selected +column). + +The GROUP BY clause can also refer to multiple grouping sets in three ways. The most flexible is GROUP BY GROUPING SETS, +for example `GROUP BY GROUPING SETS ( (country, city), () )`. This example is equivalent to a `GROUP BY country, city` +followed by `GROUP BY ()` (a grand total). With GROUPING SETS, the underlying data is only scanned one time, leading to +better efficiency. Second, GROUP BY ROLLUP computes a grouping set for each level of the grouping expressions. For +example `GROUP BY ROLLUP (country, city)` is equivalent to `GROUP BY GROUPING SETS ( (country, city), (country), () )` +and will produce grouped rows for each country / city pair, along with subtotals for each country, along with a grand +total. Finally, GROUP BY CUBE computes a grouping set for each combination of grouping expressions. For example, +`GROUP BY CUBE (country, city)` is equivalent to `GROUP BY GROUPING SETS ( (country, city), (country), (city), () )`. + +Grouping columns that do not apply to a particular row will contain `NULL`. For example, when computing +`GROUP BY GROUPING SETS ( (country, city), () )`, the grand total row corresponding to `()` will have `NULL` for the +"country" and "city" columns. Column may also be `NULL` if it was `NULL` in the data itself. To differentiate such rows, +you can use `GROUPING` aggregation. + +When using GROUP BY GROUPING SETS, GROUP BY ROLLUP, or GROUP BY CUBE, be aware that results may not be generated in the +order that you specify your grouping sets in the query. If you need results to be generated in a particular order, use +the ORDER BY clause. + +### HAVING + +The HAVING clause refers to columns that are present after execution of GROUP BY. It can be used to filter on either +grouping expressions or aggregated values. It can only be used together with GROUP BY. + +### ORDER BY + +The ORDER BY clause refers to columns that are present after execution of GROUP BY. It can be used to order the results +based on either grouping expressions or aggregated values. ORDER BY can refer to an expression or a select clause +ordinal position (like `ORDER BY 2` to order by the second selected column). For non-aggregation queries, ORDER BY +can only order by the `__time` column. For aggregation queries, ORDER BY can order by any column. + +### LIMIT + +The LIMIT clause limits the number of rows returned. In some situations Druid will push down this limit to data servers, +which boosts performance. Limits are always pushed down for queries that run with the native Scan or TopN query types. +With the native GroupBy query type, it is pushed down when ordering on a column that you are grouping by. If you notice +that adding a limit doesn't change performance very much, then it's possible that Druid wasn't able to push down the +limit for your query. + +### OFFSET + +The OFFSET clause skips a certain number of rows when returning results. + +If both LIMIT and OFFSET are provided, then OFFSET will be applied first, followed by LIMIT. For example, using +LIMIT 100 OFFSET 10 will return 100 rows, starting from row number 10. + +Together, LIMIT and OFFSET can be used to implement pagination. However, note that if the underlying datasource is +modified between page fetches, then the different pages will not necessarily align with each other. + +There are two important factors that can affect the performance of queries that use OFFSET: + +- Skipped rows still need to be generated internally and then discarded, meaning that raising offsets to high values + can cause queries to use additional resources. +- OFFSET is only supported by the Scan and GroupBy [native query types](#query-types). Therefore, a query with OFFSET + will use one of those two types, even if it might otherwise have run as a Timeseries or TopN. Switching query engines + in this way can affect performance. + +### UNION ALL + +The "UNION ALL" operator fuses multiple queries together. Druid SQL supports the UNION ALL operator in two situations: +top-level and table-level. Queries that use UNION ALL in any other way will not be able to execute. + +#### Top-level + +UNION ALL can be used at the very top outer layer of a SQL query (not in a subquery, and not in the FROM clause). In +this case, the underlying queries will be run separately, back to back. Their results will be concatenated together +and appear one after the other. + +For example: + +``` +SELECT COUNT(*) FROM tbl WHERE my_column = 'value1' +UNION ALL +SELECT COUNT(*) FROM tbl WHERE my_column = 'value2' +``` + +With top-level UNION ALL, no further processing can be done after the UNION ALL. For example, the results of the +UNION ALL cannot have GROUP BY, ORDER BY, or any other operators applied to them. + +#### Table-level + +UNION ALL can be used to query multiple tables at the same time. In this case, it must appear in a subquery in the +FROM clause, and the lower-level subqueries that are inputs to the UNION ALL operator must be simple table SELECTs. +Features like expressions, column aliasing, JOIN, GROUP BY, ORDER BY, and so on cannot be used. The query will run +natively using a [union datasource](datasource.md#union). + +The same columns must be selected from each table in the same order, and those columns must either have the same types, +or types that can be implicitly cast to each other (such as different numeric types). For this reason, it is generally +more robust to write your queries to select specific columns. If you use `SELECT *`, you will need to modify your +queries if a new column is added to one of the tables but not to the others. + +For example: + +``` +SELECT col1, COUNT(*) +FROM ( + SELECT col1, col2, col3 FROM tbl1 + UNION ALL + SELECT col1, col2, col3 FROM tbl2 +) +GROUP BY col1 +``` + +With table-level UNION ALL, the rows from the unioned tables are not guaranteed to be processed in +any particular order. They may be processed in an interleaved fashion. If you need a particular result ordering, +use [ORDER BY](#order-by) on the outer query. + +### EXPLAIN PLAN + +Add "EXPLAIN PLAN FOR" to the beginning of any query to get information about how it will be translated. In this case, +the query will not actually be executed. Refer to the [Query translation](#query-translation) documentation for help +interpreting EXPLAIN PLAN output. + +### Identifiers and literals + +Identifiers like datasource and column names can optionally be quoted using double quotes. To escape a double quote +inside an identifier, use another double quote, like `"My ""very own"" identifier"`. All identifiers are case-sensitive +and no implicit case conversions are performed. + +Literal strings should be quoted with single quotes, like `'foo'`. Literal strings with Unicode escapes can be written +like `U&'fo\00F6'`, where character codes in hex are prefixed by a backslash. Literal numbers can be written in forms +like `100` (denoting an integer), `100.0` (denoting a floating point value), or `1.0e5` (scientific notation). Literal +timestamps can be written like `TIMESTAMP '2000-01-01 00:00:00'`. Literal intervals, used for time arithmetic, can be +written like `INTERVAL '1' HOUR`, `INTERVAL '1 02:03' DAY TO MINUTE`, `INTERVAL '1-2' YEAR TO MONTH`, and so on. + +### Dynamic parameters + +Druid SQL supports dynamic parameters using question mark (`?`) syntax, where parameters are bound to `?` placeholders +at execution time. To use dynamic parameters, replace any literal in the query with a `?` character and provide a +corresponding parameter value when you execute the query. Parameters are bound to the placeholders in the order in +which they are passed. Parameters are supported in both the [HTTP POST](#http-post) and [JDBC](#jdbc) APIs. + +In certain cases, using dynamic parameters in expressions can cause type inference issues which cause your query to fail, for example: + +```sql +SELECT * FROM druid.foo WHERE dim1 like CONCAT('%', ?, '%') +``` + +To solve this issue, explicitly provide the type of the dynamic parameter using the `CAST` keyword. Consider the fix for the preceding example: + +``` +SELECT * FROM druid.foo WHERE dim1 like CONCAT('%', CAST (? AS VARCHAR), '%') +``` + +## Data types + +### Standard types + +Druid natively supports five basic column types: "long" (64 bit signed int), "float" (32 bit float), "double" (64 bit +float) "string" (UTF-8 encoded strings and string arrays), and "complex" (catch-all for more exotic data types like +hyperUnique and approxHistogram columns). + +Timestamps (including the `__time` column) are treated by Druid as longs, with the value being the number of +milliseconds since 1970-01-01 00:00:00 UTC, not counting leap seconds. Therefore, timestamps in Druid do not carry any +timezone information, but only carry information about the exact moment in time they represent. See the +[Time functions](#time-functions) section for more information about timestamp handling. + +The following table describes how Druid maps SQL types onto native types at query runtime. Casts between two SQL types +that have the same Druid runtime type will have no effect, other than exceptions noted in the table. Casts between two +SQL types that have different Druid runtime types will generate a runtime cast in Druid. If a value cannot be properly +cast to another value, as in `CAST('foo' AS BIGINT)`, the runtime will substitute a default value. NULL values cast +to non-nullable types will also be substituted with a default value (for example, nulls cast to numbers will be +converted to zeroes). + +|SQL type|Druid runtime type|Default value|Notes| +|--------|------------------|-------------|-----| +|CHAR|STRING|`''`|| +|VARCHAR|STRING|`''`|Druid STRING columns are reported as VARCHAR. Can include [multi-value strings](#multi-value-strings) as well.| +|DECIMAL|DOUBLE|`0.0`|DECIMAL uses floating point, not fixed point math| +|FLOAT|FLOAT|`0.0`|Druid FLOAT columns are reported as FLOAT| +|REAL|DOUBLE|`0.0`|| +|DOUBLE|DOUBLE|`0.0`|Druid DOUBLE columns are reported as DOUBLE| +|BOOLEAN|LONG|`false`|| +|TINYINT|LONG|`0`|| +|SMALLINT|LONG|`0`|| +|INTEGER|LONG|`0`|| +|BIGINT|LONG|`0`|Druid LONG columns (except `__time`) are reported as BIGINT| +|TIMESTAMP|LONG|`0`, meaning 1970-01-01 00:00:00 UTC|Druid's `__time` column is reported as TIMESTAMP. Casts between string and timestamp types assume standard SQL formatting, e.g. `2000-01-02 03:04:05`, _not_ ISO8601 formatting. For handling other formats, use one of the [time functions](#time-functions)| +|DATE|LONG|`0`, meaning 1970-01-01|Casting TIMESTAMP to DATE rounds down the timestamp to the nearest day. Casts between string and date types assume standard SQL formatting, e.g. `2000-01-02`. For handling other formats, use one of the [time functions](#time-functions)| +|OTHER|COMPLEX|none|May represent various Druid column types such as hyperUnique, approxHistogram, etc| + +### Multi-value strings + +Druid's native type system allows strings to potentially have multiple values. These +[multi-value string dimensions](multi-value-dimensions.md) will be reported in SQL as `VARCHAR` typed, and can be +syntactically used like any other VARCHAR. Regular string functions that refer to multi-value string dimensions will be +applied to all values for each row individually. Multi-value string dimensions can also be treated as arrays via special +[multi-value string functions](#multi-value-string-functions), which can perform powerful array-aware operations. + +Grouping by a multi-value expression will observe the native Druid multi-value aggregation behavior, which is similar to +the `UNNEST` functionality available in some other SQL dialects. Refer to the documentation on +[multi-value string dimensions](multi-value-dimensions.md) for additional details. + +> Because multi-value dimensions are treated by the SQL planner as `VARCHAR`, there are some inconsistencies between how +> they are handled in Druid SQL and in native queries. For example, expressions involving multi-value dimensions may be +> incorrectly optimized by the Druid SQL planner: `multi_val_dim = 'a' AND multi_val_dim = 'b'` will be optimized to +> `false`, even though it is possible for a single row to have both "a" and "b" as values for `multi_val_dim`. The +> SQL behavior of multi-value dimensions will change in a future release to more closely align with their behavior +> in native queries. + +### NULL values + +The `druid.generic.useDefaultValueForNull` [runtime property](../configuration/index.md#sql-compatible-null-handling) +controls Druid's NULL handling mode. + +In the default value mode (`true`), Druid treats NULLs and empty strings interchangeably, rather than according to the SQL +standard. In this mode Druid SQL only has partial support for NULLs. For example, the expressions `col IS NULL` and +`col = ''` are equivalent, and both will evaluate to true if `col` contains an empty string. Similarly, the expression +`COALESCE(col1, col2)` will return `col2` if `col1` is an empty string. While the `COUNT(*)` aggregator counts all rows, +the `COUNT(expr)` aggregator will count the number of rows where expr is neither null nor the empty string. Numeric +columns in this mode are not nullable; any null or missing values will be treated as zeroes. + +In SQL compatible mode (`false`), NULLs are treated more closely to the SQL standard. The property affects both storage +and querying, so for correct behavior, it should be set on all Druid service types to be available at both ingestion +time and query time. There is some overhead associated with the ability to handle NULLs; see +the [segment internals](../design/segments.md#sql-compatible-null-handling) documentation for more details. + +## Aggregation functions + +Aggregation functions can appear in the SELECT clause of any query. Any aggregator can be filtered using syntax +like `AGG(expr) FILTER(WHERE whereExpr)`. Filtered aggregators will only aggregate rows that match their filter. It's +possible for two aggregators in the same SQL query to have different filters. + +When no rows are selected, aggregate functions will return their initial value. This can occur when filtering results in +no matches while aggregating values across an entire table without a grouping, or, when using filtered aggregations +within a grouping. What this value is exactly varies per aggregator, but COUNT, and the various approximate count +distinct sketch functions, will always return 0. + +Only the COUNT and ARRAY_AGG aggregations can accept the DISTINCT keyword. + +> The order of aggregation operations across segments is not deterministic. This means that non-commutative aggregation +> functions can produce inconsistent results across the same query. +> +> Functions that operate on an input type of "float" or "double" may also see these differences in aggregation +> results across multiple query runs because of this. If precisely the same value is desired across multiple query runs, +> consider using the `ROUND` function to smooth out the inconsistencies between queries. + +|Function|Notes|Default| +|--------|-----|-------| +|`COUNT(*)`|Counts the number of rows.|`0`| +|`COUNT(DISTINCT expr)`|Counts distinct values of expr, which can be string, numeric, or hyperUnique. By default this is approximate, using a variant of [HyperLogLog](http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf). To get exact counts set "useApproximateCountDistinct" to "false". If you do this, expr must be string or numeric, since exact counts are not possible using hyperUnique columns. See also `APPROX_COUNT_DISTINCT(expr)`. In exact mode, only one distinct count per query is permitted unless `useGroupingSetForExactDistinct` is set to true in query contexts or broker configurations.|`0`| +|`SUM(expr)`|Sums numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`MIN(expr)`|Takes the minimum of numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `9223372036854775807` (maximum LONG value)| +|`MAX(expr)`|Takes the maximum of numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `-9223372036854775808` (minimum LONG value)| +|`AVG(expr)`|Averages numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`APPROX_COUNT_DISTINCT(expr)`|Counts distinct values of expr, which can be a regular column or a hyperUnique column. This is always approximate, regardless of the value of "useApproximateCountDistinct". This uses Druid's built-in "cardinality" or "hyperUnique" aggregators. See also `COUNT(DISTINCT expr)`.|`0`| +|`APPROX_COUNT_DISTINCT_DS_HLL(expr, [lgK, tgtHllType])`|Counts distinct values of expr, which can be a regular column or an [HLL sketch](../development/extensions-core/datasketches-hll.md) column. The `lgK` and `tgtHllType` parameters are described in the HLL sketch documentation. This is always approximate, regardless of the value of "useApproximateCountDistinct". See also `COUNT(DISTINCT expr)`. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`0`| +|`APPROX_COUNT_DISTINCT_DS_THETA(expr, [size])`|Counts distinct values of expr, which can be a regular column or a [Theta sketch](../development/extensions-core/datasketches-theta.md) column. The `size` parameter is described in the Theta sketch documentation. This is always approximate, regardless of the value of "useApproximateCountDistinct". See also `COUNT(DISTINCT expr)`. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`0`| +|`DS_HLL(expr, [lgK, tgtHllType])`|Creates an [HLL sketch](../development/extensions-core/datasketches-hll.md) on the values of expr, which can be a regular column or a column containing HLL sketches. The `lgK` and `tgtHllType` parameters are described in the HLL sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0'` (STRING)| +|`DS_THETA(expr, [size])`|Creates a [Theta sketch](../development/extensions-core/datasketches-theta.md) on the values of expr, which can be a regular column or a column containing Theta sketches. The `size` parameter is described in the Theta sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0.0'` (STRING)| +|`APPROX_QUANTILE(expr, probability, [resolution])`|Computes approximate quantiles on numeric or [approxHistogram](../development/extensions-core/approximate-histograms.md#approximate-histogram-aggregator) exprs. The "probability" should be between 0 and 1 (exclusive). The "resolution" is the number of centroids to use for the computation. Higher resolutions will give more precise results but also have higher overhead. If not provided, the default resolution is 50. The [approximate histogram extension](../development/extensions-core/approximate-histograms.md) must be loaded to use this function.|`NaN`| +|`APPROX_QUANTILE_DS(expr, probability, [k])`|Computes approximate quantiles on numeric or [Quantiles sketch](../development/extensions-core/datasketches-quantiles.md) exprs. The "probability" should be between 0 and 1 (exclusive). The `k` parameter is described in the Quantiles sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`NaN`| +|`APPROX_QUANTILE_FIXED_BUCKETS(expr, probability, numBuckets, lowerLimit, upperLimit, [outlierHandlingMode])`|Computes approximate quantiles on numeric or [fixed buckets histogram](../development/extensions-core/approximate-histograms.md#fixed-buckets-histogram) exprs. The "probability" should be between 0 and 1 (exclusive). The `numBuckets`, `lowerLimit`, `upperLimit`, and `outlierHandlingMode` parameters are described in the fixed buckets histogram documentation. The [approximate histogram extension](../development/extensions-core/approximate-histograms.md) must be loaded to use this function.|`0.0`| +|`DS_QUANTILES_SKETCH(expr, [k])`|Creates a [Quantiles sketch](../development/extensions-core/datasketches-quantiles.md) on the values of expr, which can be a regular column or a column containing quantiles sketches. The `k` parameter is described in the Quantiles sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0'` (STRING)| +|`BLOOM_FILTER(expr, numEntries)`|Computes a bloom filter from values produced by `expr`, with `numEntries` maximum number of distinct values before false positive rate increases. See [bloom filter extension](../development/extensions-core/bloom-filter.md) documentation for additional details.|Empty base64 encoded bloom filter STRING| +|`TDIGEST_QUANTILE(expr, quantileFraction, [compression])`|Builds a T-Digest sketch on values produced by `expr` and returns the value for the quantile. Compression parameter (default value 100) determines the accuracy and size of the sketch. Higher compression means higher accuracy but more space to store sketches. See [t-digest extension](../development/extensions-contrib/tdigestsketch-quantiles.md) documentation for additional details.|`Double.NaN`| +|`TDIGEST_GENERATE_SKETCH(expr, [compression])`|Builds a T-Digest sketch on values produced by `expr`. Compression parameter (default value 100) determines the accuracy and size of the sketch Higher compression means higher accuracy but more space to store sketches. See [t-digest extension](../development/extensions-contrib/tdigestsketch-quantiles.md) documentation for additional details.|Empty base64 encoded T-Digest sketch STRING| +|`VAR_POP(expr)`|Computes variance population of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`VAR_SAMP(expr)`|Computes variance sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`VARIANCE(expr)`|Computes variance sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV_POP(expr)`|Computes standard deviation population of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV_SAMP(expr)`|Computes standard deviation sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV(expr)`|Computes standard deviation sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`EARLIEST(expr)`|Returns the earliest value of `expr`, which must be numeric. If `expr` comes from a relation with a timestamp column (like a Druid datasource) then "earliest" is the value first encountered with the minimum overall timestamp of all values being aggregated. If `expr` does not come from a relation with a timestamp, then it is simply the first value encountered.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`EARLIEST(expr, maxBytesPerString)`|Like `EARLIEST(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`LATEST(expr)`|Returns the latest value of `expr`, which must be numeric. If `expr` comes from a relation with a timestamp column (like a Druid datasource) then "latest" is the value last encountered with the maximum overall timestamp of all values being aggregated. If `expr` does not come from a relation with a timestamp, then it is simply the last value encountered.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`LATEST(expr, maxBytesPerString)`|Like `LATEST(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`ANY_VALUE(expr)`|Returns any value of `expr` including null. `expr` must be numeric. This aggregator can simplify and optimize the performance by returning the first encountered value (including null)|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`ANY_VALUE(expr, maxBytesPerString)`|Like `ANY_VALUE(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`GROUPING(expr, expr...)`|Returns a number to indicate which groupBy dimension is included in a row, when using `GROUPING SETS`. Refer to [additional documentation](aggregations.md#grouping-aggregator) on how to infer this number.|N/A| +|`ARRAY_AGG(expr, [size])`|Collects all values of `expr` into an ARRAY, including null values, with `size` in bytes limit on aggregation size (default of 1024 bytes). Use of `ORDER BY` within the `ARRAY_AGG` expression is not currently supported, and the ordering of results within the output array may vary depending on processing order.|`null`| +|`ARRAY_AGG(DISTINCT expr, [size])`|Collects all distinct values of `expr` into an ARRAY, including null values, with `size` in bytes limit on aggregation size (default of 1024 bytes) per aggregate. Use of `ORDER BY` within the `ARRAY_AGG` expression is not currently supported, and the ordering of results within the output array may vary depending on processing order.|`null`| +|`BIT_AND(expr)`|Performs a bitwise AND operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`BIT_OR(expr)`|Performs a bitwise OR operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`BIT_XOR(expr)`|Performs a bitwise XOR operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| + +For advice on choosing approximate aggregation functions, check out our [approximate aggregations documentation](aggregations.md#approx). + +## Scalar functions + +### Numeric functions + +For mathematical operations, Druid SQL will use integer math if all operands involved in an expression are integers. +Otherwise, Druid will switch to floating point math. You can force this to happen by casting one of your operands +to FLOAT. At runtime, Druid will widen 32-bit floats to 64-bit for most expressions. + +|Function|Notes| +|--------|-----| +|`ABS(expr)`|Absolute value.| +|`CEIL(expr)`|Ceiling.| +|`EXP(expr)`|e to the power of expr.| +|`FLOOR(expr)`|Floor.| +|`LN(expr)`|Logarithm (base e).| +|`LOG10(expr)`|Logarithm (base 10).| +|`POWER(expr, power)`|expr to a power.| +|`SQRT(expr)`|Square root.| +|`TRUNCATE(expr[, digits])`|Truncate expr to a specific number of decimal digits. If digits is negative, then this truncates that many places to the left of the decimal point. Digits defaults to zero if not specified.| +|`TRUNC(expr[, digits])`|Synonym for `TRUNCATE`.| +|`ROUND(expr[, digits])`|`ROUND(x, y)` would return the value of the x rounded to the y decimal places. While x can be an integer or floating-point number, y must be an integer. The type of the return value is specified by that of x. y defaults to 0 if omitted. When y is negative, x is rounded on the left side of the y decimal points. If `expr` evaluates to either `NaN`, `expr` will be converted to 0. If `expr` is infinity, `expr` will be converted to the nearest finite double. | +|`x + y`|Addition.| +|`x - y`|Subtraction.| +|`x * y`|Multiplication.| +|`x / y`|Division.| +|`MOD(x, y)`|Modulo (remainder of x divided by y).| +|`SIN(expr)`|Trigonometric sine of an angle expr.| +|`COS(expr)`|Trigonometric cosine of an angle expr.| +|`TAN(expr)`|Trigonometric tangent of an angle expr.| +|`COT(expr)`|Trigonometric cotangent of an angle expr.| +|`ASIN(expr)`|Arc sine of expr.| +|`ACOS(expr)`|Arc cosine of expr.| +|`ATAN(expr)`|Arc tangent of expr.| +|`ATAN2(y, x)`|Angle theta from the conversion of rectangular coordinates (x, y) to polar * coordinates (r, theta).| +|`DEGREES(expr)`|Converts an angle measured in radians to an approximately equivalent angle measured in degrees| +|`RADIANS(expr)`|Converts an angle measured in degrees to an approximately equivalent angle measured in radians| +|`BITWISE_AND(expr1, expr2)`|Returns the result of `expr1 & expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_COMPLEMENT(expr)`|Returns the result of `~expr`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_CONVERT_DOUBLE_TO_LONG_BITS(expr)`|Converts the bits of an IEEE 754 floating-point double value to a long. If the input is not a double, it is implicitly cast to a double prior to conversion| +|`BITWISE_CONVERT_LONG_BITS_TO_DOUBLE(expr)`|Converts a long to the IEEE 754 floating-point double specified by the bits stored in the long. If the input is not a long, it is implicitly cast to a long prior to conversion| +|`BITWISE_OR(expr1, expr2)`|Returns the result of `expr1 [PIPE] expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_SHIFT_LEFT(expr1, expr2)`|Returns the result of `expr1 << expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_SHIFT_RIGHT(expr1, expr2)`|Returns the result of `expr1 >> expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_XOR(expr1, expr2)`|Returns the result of `expr1 ^ expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| + +### String functions + +String functions accept strings, and return a type appropriate to the function. + +|Function|Notes| +|--------|-----| +|x || y|Concat strings x and y.| +|`CONCAT(expr, expr...)`|Concats a list of expressions.| +|`TEXTCAT(expr, expr)`|Two argument version of CONCAT.| +|`STRING_FORMAT(pattern[, args...])`|Returns a string formatted in the manner of Java's [String.format](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-).| +|`LENGTH(expr)`|Length of expr in UTF-16 code units.| +|`CHAR_LENGTH(expr)`|Synonym for `LENGTH`.| +|`CHARACTER_LENGTH(expr)`|Synonym for `LENGTH`.| +|`STRLEN(expr)`|Synonym for `LENGTH`.| +|`LOOKUP(expr, lookupName)`|Look up expr in a registered [query-time lookup table](lookups.md). Note that lookups can also be queried directly using the [`lookup` schema](#from).| +|`LOWER(expr)`|Returns expr in all lowercase.| +|`PARSE_LONG(string[, radix])`|Parses a string into a long (BIGINT) with the given radix, or 10 (decimal) if a radix is not provided.| +|`POSITION(needle IN haystack [FROM fromIndex])`|Returns the index of needle within haystack, with indexes starting from 1. The search will begin at fromIndex, or 1 if fromIndex is not specified. If the needle is not found, returns 0.| +|`REGEXP_EXTRACT(expr, pattern, [index])`|Apply regular expression `pattern` to `expr` and extract a capture group, or `NULL` if there is no match. If index is unspecified or zero, returns the first substring that matched the pattern. The pattern may match anywhere inside `expr`; if you want to match the entire string instead, use the `^` and `$` markers at the start and end of your pattern. Note: when `druid.generic.useDefaultValueForNull = true`, it is not possible to differentiate an empty-string match from a non-match (both will return `NULL`).| +|`REGEXP_LIKE(expr, pattern)`|Returns whether `expr` matches regular expression `pattern`. The pattern may match anywhere inside `expr`; if you want to match the entire string instead, use the `^` and `$` markers at the start and end of your pattern. Similar to [`LIKE`](#comparison-operators), but uses regexps instead of LIKE patterns. Especially useful in WHERE clauses.| +|`CONTAINS_STRING(, str)`|Returns true if the `str` is a substring of `expr`.| +|`ICONTAINS_STRING(, str)`|Returns true if the `str` is a substring of `expr`. The match is case-insensitive.| +|`REPLACE(expr, pattern, replacement)`|Replaces pattern with replacement in expr, and returns the result.| +|`STRPOS(haystack, needle)`|Returns the index of needle within haystack, with indexes starting from 1. If the needle is not found, returns 0.| +|`SUBSTRING(expr, index, [length])`|Returns a substring of expr starting at index, with a max length, both measured in UTF-16 code units.| +|`RIGHT(expr, [length])`|Returns the rightmost length characters from expr.| +|`LEFT(expr, [length])`|Returns the leftmost length characters from expr.| +|`SUBSTR(expr, index, [length])`|Synonym for SUBSTRING.| +|TRIM([BOTH | LEADING | TRAILING] [ FROM] expr)|Returns expr with characters removed from the leading, trailing, or both ends of "expr" if they are in "chars". If "chars" is not provided, it defaults to " " (a space). If the directional argument is not provided, it defaults to "BOTH".| +|`BTRIM(expr[, chars])`|Alternate form of `TRIM(BOTH FROM )`.| +|`LTRIM(expr[, chars])`|Alternate form of `TRIM(LEADING FROM )`.| +|`RTRIM(expr[, chars])`|Alternate form of `TRIM(TRAILING FROM )`.| +|`UPPER(expr)`|Returns expr in all uppercase.| +|`REVERSE(expr)`|Reverses expr.| +|`REPEAT(expr, [N])`|Repeats expr N times| +|`LPAD(expr, length[, chars])`|Returns a string of `length` from `expr` left-padded with `chars`. If `length` is shorter than the length of `expr`, the result is `expr` which is truncated to `length`. The result will be null if either `expr` or `chars` is null. If `chars` is an empty string, no padding is added, however `expr` may be trimmed if necessary.| +|`RPAD(expr, length[, chars])`|Returns a string of `length` from `expr` right-padded with `chars`. If `length` is shorter than the length of `expr`, the result is `expr` which is truncated to `length`. The result will be null if either `expr` or `chars` is null. If `chars` is an empty string, no padding is added, however `expr` may be trimmed if necessary.| + + +### Time functions + +Time functions can be used with Druid's `__time` column, with any column storing millisecond timestamps through use +of the `MILLIS_TO_TIMESTAMP` function, or with any column storing string timestamps through use of the `TIME_PARSE` +function. By default, time operations use the UTC time zone. You can change the time zone by setting the connection +context parameter "sqlTimeZone" to the name of another time zone, like "America/Los_Angeles", or to an offset like +"-08:00". If you need to mix multiple time zones in the same query, or if you need to use a time zone other than +the connection time zone, some functions also accept time zones as parameters. These parameters always take precedence +over the connection time zone. + +Literal timestamps in the connection time zone can be written using `TIMESTAMP '2000-01-01 00:00:00'` syntax. The +simplest way to write literal timestamps in other time zones is to use TIME_PARSE, like +`TIME_PARSE('2000-02-01 00:00:00', NULL, 'America/Los_Angeles')`. + +|Function|Notes| +|--------|-----| +|`CURRENT_TIMESTAMP`|Current timestamp in the connection's time zone.| +|`CURRENT_DATE`|Current date in the connection's time zone.| +|`DATE_TRUNC(, )`|Rounds down a timestamp, returning it as a new timestamp. Unit can be 'milliseconds', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year', 'decade', 'century', or 'millennium'.| +|`TIME_CEIL(, , [, []])`|Rounds up a timestamp, returning it as a new timestamp. Period can be any ISO8601 period, like P3M (quarters) or PT12H (half-days). The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `CEIL` but is more flexible.| +|`TIME_FLOOR(, , [, []])`|Rounds down a timestamp, returning it as a new timestamp. Period can be any ISO8601 period, like P3M (quarters) or PT12H (half-days). The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `FLOOR` but is more flexible.| +|`TIME_SHIFT(, , , [])`|Shifts a timestamp by a period (step times), returning it as a new timestamp. Period can be any ISO8601 period. Step may be negative. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00".| +|`TIME_EXTRACT(, [, []])`|Extracts a time part from expr, returning it as a number. Unit can be EPOCH, SECOND, MINUTE, HOUR, DAY (day of month), DOW (day of week), DOY (day of year), WEEK (week of [week year](https://en.wikipedia.org/wiki/ISO_week_date)), MONTH (1 through 12), QUARTER (1 through 4), or YEAR. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `EXTRACT` but is more flexible. Unit and time zone must be literals, and must be provided quoted, like `TIME_EXTRACT(__time, 'HOUR')` or `TIME_EXTRACT(__time, 'HOUR', 'America/Los_Angeles')`.| +|`TIME_PARSE(, [, []])`|Parses a string into a timestamp using a given [Joda DateTimeFormat pattern](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html), or ISO8601 (e.g. `2000-01-02T03:04:05Z`) if the pattern is not provided. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00", and will be used as the time zone for strings that do not include a time zone offset. Pattern and time zone must be literals. Strings that cannot be parsed as timestamps will be returned as NULL.| +|`TIME_FORMAT(, [, []])`|Formats a timestamp as a string with a given [Joda DateTimeFormat pattern](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html), or ISO8601 (e.g. `2000-01-02T03:04:05Z`) if the pattern is not provided. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". Pattern and time zone must be literals.| +|`MILLIS_TO_TIMESTAMP(millis_expr)`|Converts a number of milliseconds since the epoch into a timestamp.| +|`TIMESTAMP_TO_MILLIS(timestamp_expr)`|Converts a timestamp into a number of milliseconds since the epoch.| +|`EXTRACT( FROM timestamp_expr)`|Extracts a time part from expr, returning it as a number. Unit can be EPOCH, MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY (day of month), DOW (day of week), ISODOW (ISO day of week), DOY (day of year), WEEK (week of year), MONTH, QUARTER, YEAR, ISOYEAR, DECADE, CENTURY or MILLENNIUM. Units must be provided unquoted, like `EXTRACT(HOUR FROM __time)`.| +|`FLOOR(timestamp_expr TO )`|Rounds down a timestamp, returning it as a new timestamp. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|`CEIL(timestamp_expr TO )`|Rounds up a timestamp, returning it as a new timestamp. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|`TIMESTAMPADD(, , )`|Equivalent to `timestamp + count * INTERVAL '1' UNIT`.| +|`TIMESTAMPDIFF(, , )`|Returns the (signed) number of `unit` between `timestamp1` and `timestamp2`. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|timestamp_expr { + | - } |Add or subtract an amount of time from a timestamp. interval_expr can include interval literals like `INTERVAL '2' HOUR`, and may include interval arithmetic as well. This operator treats days as uniformly 86400 seconds long, and does not take into account daylight savings time. To account for daylight savings time, use TIME_SHIFT instead.| + + +### Reduction functions + +Reduction functions operate on zero or more expressions and return a single expression. If no expressions are passed as +arguments, then the result is `NULL`. The expressions must all be convertible to a common data type, which will be the +type of the result: +* If all argument are `NULL`, the result is `NULL`. Otherwise, `NULL` arguments are ignored. +* If the arguments comprise a mix of numbers and strings, the arguments are interpreted as strings. +* If all arguments are integer numbers, the arguments are interpreted as longs. +* If all arguments are numbers and at least one argument is a double, the arguments are interpreted as doubles. + +|Function|Notes| +|--------|-----| +|`GREATEST([expr1, ...])`|Evaluates zero or more expressions and returns the maximum value based on comparisons as described above.| +|`LEAST([expr1, ...])`|Evaluates zero or more expressions and returns the minimum value based on comparisons as described above.| + + +### IP address functions + +For the IPv4 address functions, the `address` argument can either be an IPv4 dotted-decimal string +(e.g., '192.168.0.1') or an IP address represented as an integer (e.g., 3232235521). The `subnet` +argument should be a string formatted as an IPv4 address subnet in CIDR notation (e.g., +'192.168.0.0/16'). + +|Function|Notes| +|---|---| +|`IPV4_MATCH(address, subnet)`|Returns true if the `address` belongs to the `subnet` literal, else false. If `address` is not a valid IPv4 address, then false is returned. This function is more efficient if `address` is an integer instead of a string.| +|`IPV4_PARSE(address)`|Parses `address` into an IPv4 address stored as an integer . If `address` is an integer that is a valid IPv4 address, then it is passed through. Returns null if `address` cannot be represented as an IPv4 address.| +|`IPV4_STRINGIFY(address)`|Converts `address` into an IPv4 address dotted-decimal string. If `address` is a string that is a valid IPv4 address, then it is passed through. Returns null if `address` cannot be represented as an IPv4 address.| + + +### Comparison operators + +|Function|Notes| +|--------|-----| +|`x = y`|Equals.| +|`x <> y`|Not-equals.| +|`x > y`|Greater than.| +|`x >= y`|Greater than or equal to.| +|`x < y`|Less than.| +|`x <= y`|Less than or equal to.| +|`x BETWEEN y AND z`|Equivalent to `x >= y AND x <= z`.| +|`x NOT BETWEEN y AND z`|Equivalent to `x < y OR x > z`.| +|`x LIKE pattern [ESCAPE esc]`|True if x matches a SQL LIKE pattern (with an optional escape).| +|`x NOT LIKE pattern [ESCAPE esc]`|True if x does not match a SQL LIKE pattern (with an optional escape).| +|`x IS NULL`|True if x is NULL or empty string.| +|`x IS NOT NULL`|True if x is neither NULL nor empty string.| +|`x IS TRUE`|True if x is true.| +|`x IS NOT TRUE`|True if x is not true.| +|`x IS FALSE`|True if x is false.| +|`x IS NOT FALSE`|True if x is not false.| +|`x IN (values)`|True if x is one of the listed values.| +|`x NOT IN (values)`|True if x is not one of the listed values.| +|`x IN (subquery)`|True if x is returned by the subquery. This will be translated into a join; see [Query translation](#query-translation) for details.| +|`x NOT IN (subquery)`|True if x is not returned by the subquery. This will be translated into a join; see [Query translation](#query-translation) for details.| +|`x AND y`|Boolean AND.| +|`x OR y`|Boolean OR.| +|`NOT x`|Boolean NOT.| + +### Sketch functions + +These functions operate on expressions or columns that return sketch objects. + +#### HLL sketch functions + +The following functions operate on [DataSketches HLL sketches](../development/extensions-core/datasketches-hll.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`HLL_SKETCH_ESTIMATE(expr, [round])`|Returns the distinct count estimate from an HLL sketch. `expr` must return an HLL sketch. The optional `round` boolean parameter will round the estimate if set to `true`, with a default of `false`.| +|`HLL_SKETCH_ESTIMATE_WITH_ERROR_BOUNDS(expr, [numStdDev])`|Returns the distinct count estimate and error bounds from an HLL sketch. `expr` must return an HLL sketch. An optional `numStdDev` argument can be provided.| +|`HLL_SKETCH_UNION([lgK, tgtHllType], expr0, expr1, ...)`|Returns a union of HLL sketches, where each input expression must return an HLL sketch. The `lgK` and `tgtHllType` can be optionally specified as the first parameter; if provided, both optional parameters must be specified.| +|`HLL_SKETCH_TO_STRING(expr)`|Returns a human-readable string representation of an HLL sketch for debugging. `expr` must return an HLL sketch.| + +#### Theta sketch functions + +The following functions operate on [theta sketches](../development/extensions-core/datasketches-theta.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`THETA_SKETCH_ESTIMATE(expr)`|Returns the distinct count estimate from a theta sketch. `expr` must return a theta sketch.| +|`THETA_SKETCH_ESTIMATE_WITH_ERROR_BOUNDS(expr, errorBoundsStdDev)`|Returns the distinct count estimate and error bounds from a theta sketch. `expr` must return a theta sketch.| +|`THETA_SKETCH_UNION([size], expr0, expr1, ...)`|Returns a union of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| +|`THETA_SKETCH_INTERSECT([size], expr0, expr1, ...)`|Returns an intersection of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| +|`THETA_SKETCH_NOT([size], expr0, expr1, ...)`|Returns a set difference of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| + +#### Quantiles sketch functions + +The following functions operate on [quantiles sketches](../development/extensions-core/datasketches-quantiles.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`DS_GET_QUANTILE(expr, fraction)`|Returns the quantile estimate corresponding to `fraction` from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_GET_QUANTILES(expr, fraction0, fraction1, ...)`|Returns a string representing an array of quantile estimates corresponding to a list of fractions from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_HISTOGRAM(expr, splitPoint0, splitPoint1, ...)`|Returns a string representing an approximation to the histogram given a list of split points that define the histogram bins from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_CDF(expr, splitPoint0, splitPoint1, ...)`|Returns a string representing approximation to the Cumulative Distribution Function given a list of split points that define the edges of the bins from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_RANK(expr, value)`|Returns an approximation to the rank of a given value that is the fraction of the distribution less than that value from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_QUANTILE_SUMMARY(expr)`|Returns a string summary of a quantiles sketch, useful for debugging. `expr` must return a quantiles sketch.| + +### Other scalar functions + +|Function|Notes| +|--------|-----| +|`CAST(value AS TYPE)`|Cast value to another type. See [Data types](#data-types) for details about how Druid SQL handles CAST.| +|`CASE expr WHEN value1 THEN result1 \[ WHEN value2 THEN result2 ... \] \[ ELSE resultN \] END`|Simple CASE.| +|`CASE WHEN boolean_expr1 THEN result1 \[ WHEN boolean_expr2 THEN result2 ... \] \[ ELSE resultN \] END`|Searched CASE.| +|`NULLIF(value1, value2)`|Returns NULL if value1 and value2 match, else returns value1.| +|`COALESCE(value1, value2, ...)`|Returns the first value that is neither NULL nor empty string.| +|`NVL(expr,expr-for-null)`|Returns 'expr-for-null' if 'expr' is null (or empty string for string type).| +|`BLOOM_FILTER_TEST(, )`|Returns true if the value is contained in a Base64-serialized bloom filter. See the [Bloom filter extension](../development/extensions-core/bloom-filter.md) documentation for additional details.| + +## Multi-value string functions + +All 'array' references in the multi-value string function documentation can refer to multi-value string columns or +`ARRAY` literals. + +|Function|Notes| +|--------|-----| +| `ARRAY[expr1,expr ...]` | constructs a SQL ARRAY literal from the expression arguments, using the type of the first argument as the output array type | +| `MV_LENGTH(arr)` | returns length of array expression | +| `MV_OFFSET(arr,long)` | returns the array element at the 0 based index supplied, or null for an out of range index| +| `MV_ORDINAL(arr,long)` | returns the array element at the 1 based index supplied, or null for an out of range index | +| `MV_CONTAINS(arr,expr)` | returns 1 if the array contains the element specified by expr, or contains all elements specified by expr if expr is an array, else 0 | +| `MV_OVERLAP(arr1,arr2)` | returns 1 if arr1 and arr2 have any elements in common, else 0 | +| `MV_OFFSET_OF(arr,expr)` | returns the 0 based index of the first occurrence of expr in the array, or `-1` or `null` if `druid.generic.useDefaultValueForNull=false` if no matching elements exist in the array. | +| `MV_ORDINAL_OF(arr,expr)` | returns the 1 based index of the first occurrence of expr in the array, or `-1` or `null` if `druid.generic.useDefaultValueForNull=false` if no matching elements exist in the array. | +| `MV_PREPEND(expr,arr)` | adds expr to arr at the beginning, the resulting array type determined by the type of the array | +| `MV_APPEND(arr1,expr)` | appends expr to arr, the resulting array type determined by the type of the first array | +| `MV_CONCAT(arr1,arr2)` | concatenates 2 arrays, the resulting array type determined by the type of the first array | +| `MV_SLICE(arr,start,end)` | return the subarray of arr from the 0 based index start(inclusive) to end(exclusive), or `null`, if start is less than 0, greater than length of arr or less than end| +| `MV_TO_STRING(arr,str)` | joins all elements of arr by the delimiter specified by str | +| `STRING_TO_MV(str1,str2)` | splits str1 into an array on the delimiter specified by str2 | + +## Query translation + +Druid SQL translates SQL queries to [native queries](querying.md) before running them, and understanding how this +translation works is key to getting good performance. + +### Best practices + +Consider this (non-exhaustive) list of things to look out for when looking into the performance implications of +how your SQL queries are translated to native queries. + +1. If you wrote a filter on the primary time column `__time`, make sure it is being correctly translated to an +`"intervals"` filter, as described in the [Time filters](#time-filters) section below. If not, you may need to change +the way you write the filter. + +2. Try to avoid subqueries underneath joins: they affect both performance and scalability. This includes implicit +subqueries generated by conditions on mismatched types, and implicit subqueries generated by conditions that use +expressions to refer to the right-hand side. + +3. Currently, Druid does not support pushing down predicates (condition and filter) past a Join (i.e. into +Join's children). Druid only supports pushing predicates into the join if they originated from +above the join. Hence, the location of predicates and filters in your Druid SQL is very important. +Also, as a result of this, comma joins should be avoided. + +4. Read through the [Query execution](query-execution.md) page to understand how various types of native queries +will be executed. + +5. Be careful when interpreting EXPLAIN PLAN output, and use request logging if in doubt. Request logs will show the +exact native query that was run. See the [next section](#interpreting-explain-plan-output) for more details. + +6. If you encounter a query that could be planned better, feel free to +[raise an issue on GitHub](https://github.com/apache/druid/issues/new/choose). A reproducible test case is always +appreciated. + +### Interpreting EXPLAIN PLAN output + +The [EXPLAIN PLAN](#explain-plan) functionality can help you understand how a given SQL query will +be translated to native. For simple queries that do not involve subqueries or joins, the output of EXPLAIN PLAN +is easy to interpret. The native query that will run is embedded as JSON inside a "DruidQueryRel" line: + +``` +> EXPLAIN PLAN FOR SELECT COUNT(*) FROM wikipedia + +DruidQueryRel(query=[{"queryType":"timeseries","dataSource":"wikipedia","intervals":"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z","granularity":"all","aggregations":[{"type":"count","name":"a0"}]}], signature=[{a0:LONG}]) +``` + +For more complex queries that do involve subqueries or joins, EXPLAIN PLAN is somewhat more difficult to interpret. +For example, consider this query: + +``` +> EXPLAIN PLAN FOR +> SELECT +> channel, +> COUNT(*) +> FROM wikipedia +> WHERE channel IN (SELECT page FROM wikipedia GROUP BY page ORDER BY COUNT(*) DESC LIMIT 10) +> GROUP BY channel + +DruidJoinQueryRel(condition=[=($1, $3)], joinType=[inner], query=[{"queryType":"groupBy","dataSource":{"type":"table","name":"__join__"},"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"granularity":"all","dimensions":["channel"],"aggregations":[{"type":"count","name":"a0"}]}], signature=[{d0:STRING, a0:LONG}]) + DruidQueryRel(query=[{"queryType":"scan","dataSource":{"type":"table","name":"wikipedia"},"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"resultFormat":"compactedList","columns":["__time","channel","page"],"granularity":"all"}], signature=[{__time:LONG, channel:STRING, page:STRING}]) + DruidQueryRel(query=[{"queryType":"topN","dataSource":{"type":"table","name":"wikipedia"},"dimension":"page","metric":{"type":"numeric","metric":"a0"},"threshold":10,"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"granularity":"all","aggregations":[{"type":"count","name":"a0"}]}], signature=[{d0:STRING}]) +``` + +Here, there is a join with two inputs. The way to read this is to consider each line of the EXPLAIN PLAN output as +something that might become a query, or might just become a simple datasource. The `query` field they all have is +called a "partial query" and represents what query would be run on the datasource represented by that line, if that +line ran by itself. In some cases — like the "scan" query in the second line of this example — the query does not +actually run, and it ends up being translated to a simple table datasource. See the [Join translation](#joins) section +for more details about how this works. + +We can see this for ourselves using Druid's [request logging](../configuration/index.md#request-logging) feature. After +enabling logging and running this query, we can see that it actually runs as the following native query. + +```json +{ + "queryType": "groupBy", + "dataSource": { + "type": "join", + "left": "wikipedia", + "right": { + "type": "query", + "query": { + "queryType": "topN", + "dataSource": "wikipedia", + "dimension": {"type": "default", "dimension": "page", "outputName": "d0"}, + "metric": {"type": "numeric", "metric": "a0"}, + "threshold": 10, + "intervals": "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z", + "granularity": "all", + "aggregations": [ + { "type": "count", "name": "a0"} + ] + } + }, + "rightPrefix": "j0.", + "condition": "(\"page\" == \"j0.d0\")", + "joinType": "INNER" + }, + "intervals": "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z", + "granularity": "all", + "dimensions": [ + {"type": "default", "dimension": "channel", "outputName": "d0"} + ], + "aggregations": [ + { "type": "count", "name": "a0"} + ] +} +``` + +### Query types + +Druid SQL uses four different native query types. + +- [Scan](scan-query.md) is used for queries that do not aggregate (no GROUP BY, no DISTINCT). + +- [Timeseries](timeseriesquery.md) is used for queries that GROUP BY `FLOOR(__time TO )` or `TIME_FLOOR(__time, +period)`, have no other grouping expressions, no HAVING or LIMIT clauses, no nesting, and either no ORDER BY, or an +ORDER BY that orders by same expression as present in GROUP BY. It also uses Timeseries for "grand total" queries that +have aggregation functions but no GROUP BY. This query type takes advantage of the fact that Druid segments are sorted +by time. + +- [TopN](topnquery.md) is used by default for queries that group by a single expression, do have ORDER BY and LIMIT +clauses, do not have HAVING clauses, and are not nested. However, the TopN query type will deliver approximate ranking +and results in some cases; if you want to avoid this, set "useApproximateTopN" to "false". TopN results are always +computed in memory. See the TopN documentation for more details. + +- [GroupBy](groupbyquery.md) is used for all other aggregations, including any nested aggregation queries. Druid's +GroupBy is a traditional aggregation engine: it delivers exact results and rankings and supports a wide variety of +features. GroupBy aggregates in memory if it can, but it may spill to disk if it doesn't have enough memory to complete +your query. Results are streamed back from data processes through the Broker if you ORDER BY the same expressions in your +GROUP BY clause, or if you don't have an ORDER BY at all. If your query has an ORDER BY referencing expressions that +don't appear in the GROUP BY clause (like aggregation functions) then the Broker will materialize a list of results in +memory, up to a max of your LIMIT, if any. See the GroupBy documentation for details about tuning performance and memory +use. + +### Time filters + +For all native query types, filters on the `__time` column will be translated into top-level query "intervals" whenever +possible, which allows Druid to use its global time index to quickly prune the set of data that must be scanned. +Consider this (non-exhaustive) list of time filters that will be recognized and translated to "intervals": + +- `__time >= TIMESTAMP '2000-01-01 00:00:00'` (comparison to absolute time) +- `__time >= CURRENT_TIMESTAMP - INTERVAL '8' HOUR` (comparison to relative time) +- `FLOOR(__time TO DAY) = TIMESTAMP '2000-01-01 00:00:00'` (specific day) + +Refer to the [Interpreting EXPLAIN PLAN output](#interpreting-explain-plan-output) section for details on confirming +that time filters are being translated as you expect. + +### Joins + +SQL join operators are translated to native join datasources as follows: + +1. Joins that the native layer can handle directly are translated literally, to a [join datasource](datasource.md#join) +whose `left`, `right`, and `condition` are faithful translations of the original SQL. This includes any SQL join where +the right-hand side is a lookup or subquery, and where the condition is an equality where one side is an expression based +on the left-hand table, the other side is a simple column reference to the right-hand table, and both sides of the +equality are the same data type. + +2. If a join cannot be handled directly by a native [join datasource](datasource.md#join) as written, Druid SQL +will insert subqueries to make it runnable. For example, `foo INNER JOIN bar ON foo.abc = LOWER(bar.def)` cannot be +directly translated, because there is an expression on the right-hand side instead of a simple column access. A subquery +will be inserted that effectively transforms this clause to +`foo INNER JOIN (SELECT LOWER(def) AS def FROM bar) t ON foo.abc = t.def`. + +3. Druid SQL does not currently reorder joins to optimize queries. + +Refer to the [Interpreting EXPLAIN PLAN output](#interpreting-explain-plan-output) section for details on confirming +that joins are being translated as you expect. + +Refer to the [Query execution](query-execution.md#join) page for information about how joins are executed. + +### Subqueries + +Subqueries in SQL are generally translated to native query datasources. Refer to the +[Query execution](query-execution.md#query) page for information about how subqueries are executed. + +> Note: Subqueries in the WHERE clause, like `WHERE col1 IN (SELECT foo FROM ...)` are translated to inner joins. + +### Approximations + +Druid SQL will use approximate algorithms in some situations: + +- The `COUNT(DISTINCT col)` aggregation functions by default uses a variant of +[HyperLogLog](http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf), a fast approximate distinct counting +algorithm. Druid SQL will switch to exact distinct counts if you set "useApproximateCountDistinct" to "false", either +through query context or through Broker configuration. + +- GROUP BY queries over a single column with ORDER BY and LIMIT may be executed using the TopN engine, which uses an +approximate algorithm. Druid SQL will switch to an exact grouping algorithm if you set "useApproximateTopN" to "false", +either through query context or through Broker configuration. + +- Aggregation functions that are labeled as using sketches or approximations, such as APPROX_COUNT_DISTINCT, are always +approximate, regardless of configuration. + +### Unsupported features + +Druid does not support all SQL features. In particular, the following features are not supported. + +- JOIN between native datasources (table, lookup, subquery) and [system tables](#metadata-tables). +- JOIN conditions that are not an equality between expressions from the left- and right-hand sides. +- JOIN conditions containing a constant value inside the condition. +- JOIN conditions on a column which contains a multi-value dimension. +- OVER clauses, and analytic functions such as `LAG` and `LEAD`. +- ORDER BY for a non-aggregating query, except for `ORDER BY __time` or `ORDER BY __time DESC`, which are supported. + This restriction only applies to non-aggregating queries; you can ORDER BY any column in an aggregating query. +- DDL and DML. +- Using Druid-specific functions like `TIME_PARSE` and `APPROX_QUANTILE_DS` on [system tables](#metadata-tables). + +Additionally, some Druid native query features are not supported by the SQL language. Some unsupported Druid features +include: + +- [Inline datasources](datasource.md#inline). +- [Spatial filters](../development/geo.md). +- [Query cancellation](querying.md#query-cancellation). +- [Multi-value dimensions](#multi-value-strings) are only partially implemented in Druid SQL. There are known +inconsistencies between their behavior in SQL queries and in native queries due to how they are currently treated by +the SQL planner. + +## Client APIs + + + +### HTTP POST + +You can make Druid SQL queries using HTTP via POST to the endpoint `/druid/v2/sql/`. The request should +be a JSON object with a "query" field, like `{"query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar'"}`. + +##### Request + +|Property|Description|Default| +|--------|----|-----------| +|`query`|SQL query string.| none (required)| +|`resultFormat`|Format of query results. See [Responses](#responses) for details.|`"object"`| +|`header`|Whether or not to include a header. See [Responses] for details.|`false`| +|`context`|JSON object containing [connection context parameters](#connection-context).|`{}` (empty)| +|`parameters`|List of query parameters for parameterized queries. Each parameter in the list should be a JSON object like `{"type": "VARCHAR", "value": "foo"}`. The type should be a SQL type; see [Data types](#data-types) for a list of supported SQL types.|`[]` (empty)| + +You can use _curl_ to send SQL queries from the command-line: + +```bash +$ cat query.json +{"query":"SELECT COUNT(*) AS TheCount FROM data_source"} + +$ curl -XPOST -H'Content-Type: application/json' http://BROKER:8082/druid/v2/sql/ -d @query.json +[{"TheCount":24433}] +``` + +There are a variety of [connection context parameters](#connection-context) you can provide by adding a "context" map, +like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "context" : { + "sqlTimeZone" : "America/Los_Angeles" + } +} +``` + +Parameterized SQL queries are also supported: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = ? AND __time > ?", + "parameters": [ + { "type": "VARCHAR", "value": "bar"}, + { "type": "TIMESTAMP", "value": "2000-01-01 00:00:00" } + ] +} +``` + +Metadata is available over HTTP POST by querying [metadata tables](#metadata-tables). + +#### Responses + +Druid SQL's HTTP POST API supports a variety of result formats. You can specify these by adding a "resultFormat" +parameter, like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "resultFormat" : "object" +} +``` + +The supported result formats are: + +|Format|Description|Content-Type| +|------|-----------|------------| +|`object`|The default, a JSON array of JSON objects. Each object's field names match the columns returned by the SQL query, and are provided in the same order as the SQL query.|application/json| +|`array`|JSON array of JSON arrays. Each inner array has elements matching the columns returned by the SQL query, in order.|application/json| +|`objectLines`|Like "object", but the JSON objects are separated by newlines instead of being wrapped in a JSON array. This can make it easier to parse the entire response set as a stream, if you do not have ready access to a streaming JSON parser. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/plain| +|`arrayLines`|Like "array", but the JSON arrays are separated by newlines instead of being wrapped in a JSON array. This can make it easier to parse the entire response set as a stream, if you do not have ready access to a streaming JSON parser. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/plain| +|`csv`|Comma-separated values, with one row per line. Individual field values may be escaped by being surrounded in double quotes. If double quotes appear in a field value, they will be escaped by replacing them with double-double-quotes like `""this""`. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/csv| + +You can additionally request a header by setting "header" to true in your request, like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "resultFormat" : "arrayLines", + "header" : true +} +``` + +In this case, the first result returned will be a header. For the `csv`, `array`, and `arrayLines` formats, the header +will be a list of column names. For the `object` and `objectLines` formats, the header will be an object where the +keys are column names, and the values are null. + +Errors that occur before the response body is sent will be reported in JSON, with an HTTP 500 status code, in the +same format as [native Druid query errors](../querying/querying.md#query-errors). If an error occurs while the response body is +being sent, at that point it is too late to change the HTTP status code or report a JSON error, so the response will +simply end midstream and an error will be logged by the Druid server that was handling your request. + +As a caller, it is important that you properly handle response truncation. This is easy for the "object" and "array" +formats, since truncated responses will be invalid JSON. For the line-oriented formats, you should check the +trailer they all include: one blank line at the end of the result set. If you detect a truncated response, either +through a JSON parsing error or through a missing trailing newline, you should assume the response was not fully +delivered due to an error. + +### JDBC + +You can make Druid SQL queries using the [Avatica JDBC driver](https://calcite.apache.org/avatica/downloads/). We recommend using Avatica JDBC driver version 1.17.0 or later. Note that as of the time of this writing, Avatica 1.17.0, the latest version, does not support passing connection string parameters from the URL to Druid, so you must pass them using a `Properties` object. Once you've downloaded the Avatica client jar, add it to your classpath and use the connect string `jdbc:avatica:remote:url=http://BROKER:8082/druid/v2/sql/avatica/`. + +Example code: + +```java +// Connect to /druid/v2/sql/avatica/ on your Broker. +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica/"; + +// Set any connection context parameters you need here (see "Connection context" below). +// Or leave empty for default behavior. +Properties connectionProperties = new Properties(); + +try (Connection connection = DriverManager.getConnection(url, connectionProperties)) { + try ( + final Statement statement = connection.createStatement(); + final ResultSet resultSet = statement.executeQuery(query) + ) { + while (resultSet.next()) { + // process result set + } + } +} +``` + +It is also possible to use a protocol buffers JDBC connection with Druid, this offer reduced bloat and potential performance +improvements for larger result sets. To use it apply the following connection url instead, everything else remains the same +``` +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica-protobuf/;serialization=protobuf"; +``` + +> The protobuf endpoint is also known to work with the official [Golang Avatica driver](https://github.com/apache/calcite-avatica-go) + +Table metadata is available over JDBC using `connection.getMetaData()` or by querying the +["INFORMATION_SCHEMA" tables](#metadata-tables). + +#### Connection stickiness + +Druid's JDBC server does not share connection state between Brokers. This means that if you're using JDBC and have +multiple Druid Brokers, you should either connect to a specific Broker, or use a load balancer with sticky sessions +enabled. The Druid Router process provides connection stickiness when balancing JDBC requests, and can be used to achieve +the necessary stickiness even with a normal non-sticky load balancer. Please see the +[Router](../design/router.md) documentation for more details. + +Note that the non-JDBC [JSON over HTTP](#http-post) API is stateless and does not require stickiness. + +### Dynamic Parameters + +You can also use parameterized queries in JDBC code, as in this example; + +```java +PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) AS cnt FROM druid.foo WHERE dim1 = ? OR dim1 = ?"); +statement.setString(1, "abc"); +statement.setString(2, "def"); +final ResultSet resultSet = statement.executeQuery(); +``` + +### Connection context + +Druid SQL supports setting connection parameters on the client. The parameters in the table below affect SQL planning. +All other context parameters you provide will be attached to Druid queries and can affect how they run. See +[Query context](query-context.md) for details on the possible options. + +```java +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica/"; + +// Set any query context parameters you need here. +Properties connectionProperties = new Properties(); +connectionProperties.setProperty("sqlTimeZone", "America/Los_Angeles"); +connectionProperties.setProperty("useCache", "false"); + +try (Connection connection = DriverManager.getConnection(url, connectionProperties)) { + // create and execute statements, process result sets, etc +} +``` + +Note that to specify an unique identifier for SQL query, use `sqlQueryId` instead of `queryId`. Setting `queryId` for a SQL +request has no effect, all native queries underlying SQL will use auto-generated queryId. + +Connection context can be specified as JDBC connection properties or as a "context" object in the JSON API. + +|Parameter|Description|Default value| +|---------|-----------|-------------| +|`sqlQueryId`|Unique identifier given to this SQL query. For HTTP client, it will be returned in `X-Druid-SQL-Query-Id` header.|auto-generated| +|`sqlTimeZone`|Sets the time zone for this connection, which will affect how time functions and timestamp literals behave. Should be a time zone name like "America/Los_Angeles" or offset like "-08:00".|druid.sql.planner.sqlTimeZone on the Broker (default: UTC)| +|`sqlStringifyArrays`|When set to true, result columns which return array values will be serialized into a JSON string in the response instead of as an array (default: true, except for JDBC connections, where it is always false)| +|`useApproximateCountDistinct`|Whether to use an approximate cardinality algorithm for `COUNT(DISTINCT foo)`.|druid.sql.planner.useApproximateCountDistinct on the Broker (default: true)| +|`useGroupingSetForExactDistinct`|Whether to use grouping sets to execute queries with multiple exact distinct aggregations.|druid.sql.planner.useGroupingSetForExactDistinct on the Broker (default: false)| +|`useApproximateTopN`|Whether to use approximate [TopN queries](topnquery.md) when a SQL query could be expressed as such. If false, exact [GroupBy queries](groupbyquery.md) will be used instead.|druid.sql.planner.useApproximateTopN on the Broker (default: true)| + +## Metadata tables + +Druid Brokers infer table and column metadata for each datasource from segments loaded in the cluster, and use this to +plan SQL queries. This metadata is cached on Broker startup and also updated periodically in the background through +[SegmentMetadata queries](segmentmetadataquery.md). Background metadata refreshing is triggered by +segments entering and exiting the cluster, and can also be throttled through configuration. + +Druid exposes system information through special system tables. There are two such schemas available: Information Schema and Sys Schema. +Information schema provides details about table and column types. The "sys" schema provides information about Druid internals like segments/tasks/servers. + +### INFORMATION SCHEMA + +You can access table and column metadata through JDBC using `connection.getMetaData()`, or through the +INFORMATION_SCHEMA tables described below. For example, to retrieve metadata for the Druid +datasource "foo", use the query: + +```sql +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'druid' AND TABLE_NAME = 'foo' +``` + +> Note: INFORMATION_SCHEMA tables do not currently support Druid-specific functions like `TIME_PARSE` and +> `APPROX_QUANTILE_DS`. Only standard SQL functions can be used. + +#### SCHEMATA table +`INFORMATION_SCHEMA.SCHEMATA` provides a list of all known schemas, which include `druid` for standard [Druid Table datasources](datasource.md#table), `lookup` for [Lookups](datasource.md#lookup), `sys` for the virtual [System metadata tables](#system-schema), and `INFORMATION_SCHEMA` for these virtual tables. Tables are allowed to have the same name across different schemas, so the schema may be included in an SQL statement to distinguish them, e.g. `lookup.table` vs `druid.table`. + +|Column|Notes| +|------|-----| +|CATALOG_NAME|Always set as `druid`| +|SCHEMA_NAME|`druid`, `lookup`, `sys`, or `INFORMATION_SCHEMA`| +|SCHEMA_OWNER|Unused| +|DEFAULT_CHARACTER_SET_CATALOG|Unused| +|DEFAULT_CHARACTER_SET_SCHEMA|Unused| +|DEFAULT_CHARACTER_SET_NAME|Unused| +|SQL_PATH|Unused| + +#### TABLES table +`INFORMATION_SCHEMA.TABLES` provides a list of all known tables and schemas. + +|Column|Notes| +|------|-----| +|TABLE_CATALOG|Always set as `druid`| +|TABLE_SCHEMA|The 'schema' which the table falls under, see [SCHEMATA table for details](#schemata-table)| +|TABLE_NAME|Table name. For the `druid` schema, this is the `dataSource`.| +|TABLE_TYPE|"TABLE" or "SYSTEM_TABLE"| +|IS_JOINABLE|If a table is directly joinable if on the right hand side of a `JOIN` statement, without performing a subquery, this value will be set to `YES`, otherwise `NO`. Lookups are always joinable because they are globally distributed among Druid query processing nodes, but Druid datasources are not, and will use a less efficient subquery join.| +|IS_BROADCAST|If a table is 'broadcast' and distributed among all Druid query processing nodes, this value will be set to `YES`, such as lookups and Druid datasources which have a 'broadcast' load rule, else `NO`.| + +#### COLUMNS table +`INFORMATION_SCHEMA.COLUMNS` provides a list of all known columns across all tables and schema. + +|Column|Notes| +|------|-----| +|TABLE_CATALOG|Always set as `druid`| +|TABLE_SCHEMA|The 'schema' which the table column falls under, see [SCHEMATA table for details](#schemata-table)| +|TABLE_NAME|The 'table' which the column belongs to, see [TABLES table for details](#tables-table)| +|COLUMN_NAME|The column name| +|ORDINAL_POSITION|The order in which the column is stored in a table| +|COLUMN_DEFAULT|Unused| +|IS_NULLABLE|| +|DATA_TYPE|| +|CHARACTER_MAXIMUM_LENGTH|Unused| +|CHARACTER_OCTET_LENGTH|Unused| +|NUMERIC_PRECISION|| +|NUMERIC_PRECISION_RADIX|| +|NUMERIC_SCALE|| +|DATETIME_PRECISION|| +|CHARACTER_SET_NAME|| +|COLLATION_NAME|| +|JDBC_TYPE|Type code from java.sql.Types (Druid extension)| + +### SYSTEM SCHEMA + +The "sys" schema provides visibility into Druid segments, servers and tasks. + +> Note: "sys" tables do not currently support Druid-specific functions like `TIME_PARSE` and +> `APPROX_QUANTILE_DS`. Only standard SQL functions can be used. + +#### SEGMENTS table + +Segments table provides details on all Druid segments, whether they are published yet or not. + +|Column|Type|Notes| +|------|-----|-----| +|segment_id|STRING|Unique segment identifier| +|datasource|STRING|Name of datasource| +|start|STRING|Interval start time (in ISO 8601 format)| +|end|STRING|Interval end time (in ISO 8601 format)| +|size|LONG|Size of segment in bytes| +|version|STRING|Version string (generally an ISO8601 timestamp corresponding to when the segment set was first started). Higher version means the more recently created segment. Version comparing is based on string comparison.| +|partition_num|LONG|Partition number (an integer, unique within a datasource+interval+version; may not necessarily be contiguous)| +|num_replicas|LONG|Number of replicas of this segment currently being served| +|num_rows|LONG|Number of rows in current segment, this value could be null if unknown to Broker at query time| +|is_published|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 represents this segment has been published to the metadata store with `used=1`. See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|is_available|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is currently being served by any process(Historical or realtime). See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|is_realtime|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is _only_ served by realtime tasks, and 0 if any historical process is serving this segment.| +|is_overshadowed|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is published and is _fully_ overshadowed by some other published segments. Currently, is_overshadowed is always false for unpublished segments, although this may change in the future. You can filter for segments that "should be published" by filtering for `is_published = 1 AND is_overshadowed = 0`. Segments can briefly be both published and overshadowed if they were recently replaced, but have not been unpublished yet. See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|shard_spec|STRING|JSON-serialized form of the segment `ShardSpec`| +|dimensions|STRING|JSON-serialized form of the segment dimensions| +|metrics|STRING|JSON-serialized form of the segment metrics| +|last_compaction_state|STRING|JSON-serialized form of the compaction task's config (compaction task which created this segment). May be null if segment was not created by compaction task.| + +For example to retrieve all segments for datasource "wikipedia", use the query: + +```sql +SELECT * FROM sys.segments WHERE datasource = 'wikipedia' +``` + +Another example to retrieve segments total_size, avg_size, avg_num_rows and num_segments per datasource: + +```sql +SELECT + datasource, + SUM("size") AS total_size, + CASE WHEN SUM("size") = 0 THEN 0 ELSE SUM("size") / (COUNT(*) FILTER(WHERE "size" > 0)) END AS avg_size, + CASE WHEN SUM(num_rows) = 0 THEN 0 ELSE SUM("num_rows") / (COUNT(*) FILTER(WHERE num_rows > 0)) END AS avg_num_rows, + COUNT(*) AS num_segments +FROM sys.segments +GROUP BY 1 +ORDER BY 2 DESC +``` + +If you want to retrieve segment that was compacted (ANY compaction): + +```sql +SELECT * FROM sys.segments WHERE last_compaction_state is not null +``` + +or if you want to retrieve segment that was compacted only by a particular compaction spec (such as that of the auto compaction): + +```sql +SELECT * FROM sys.segments WHERE last_compaction_state == 'SELECT * FROM sys.segments where last_compaction_state = 'CompactionState{partitionsSpec=DynamicPartitionsSpec{maxRowsPerSegment=5000000, maxTotalRows=9223372036854775807}, indexSpec={bitmap={type=roaring, compressRunOnSerialization=true}, dimensionCompression=lz4, metricCompression=lz4, longEncoding=longs, segmentLoader=null}}' +``` + +*Caveat:* Note that a segment can be served by more than one stream ingestion tasks or Historical processes, in that case it would have multiple replicas. These replicas are weakly consistent with each other when served by multiple ingestion tasks, until a segment is eventually served by a Historical, at that point the segment is immutable. Broker prefers to query a segment from Historical over an ingestion task. But if a segment has multiple realtime replicas, for e.g.. Kafka index tasks, and one task is slower than other, then the sys.segments query results can vary for the duration of the tasks because only one of the ingestion tasks is queried by the Broker and it is not guaranteed that the same task gets picked every time. The `num_rows` column of segments table can have inconsistent values during this period. There is an open [issue](https://github.com/apache/druid/issues/5915) about this inconsistency with stream ingestion tasks. + +#### SERVERS table + +Servers table lists all discovered servers in the cluster. + +|Column|Type|Notes| +|------|-----|-----| +|server|STRING|Server name in the form host:port| +|host|STRING|Hostname of the server| +|plaintext_port|LONG|Unsecured port of the server, or -1 if plaintext traffic is disabled| +|tls_port|LONG|TLS port of the server, or -1 if TLS is disabled| +|server_type|STRING|Type of Druid service. Possible values include: COORDINATOR, OVERLORD, BROKER, ROUTER, HISTORICAL, MIDDLE_MANAGER or PEON.| +|tier|STRING|Distribution tier see [druid.server.tier](../configuration/index.md#historical-general-configuration). Only valid for HISTORICAL type, for other types it's null| +|current_size|LONG|Current size of segments in bytes on this server. Only valid for HISTORICAL type, for other types it's 0| +|max_size|LONG|Max size in bytes this server recommends to assign to segments see [druid.server.maxSize](../configuration/index.md#historical-general-configuration). Only valid for HISTORICAL type, for other types it's 0| +|is_leader|LONG|1 if the server is currently the 'leader' (for services which have the concept of leadership), otherwise 0 if the server is not the leader, or the default long value (0 or null depending on `druid.generic.useDefaultValueForNull`) if the server type does not have the concept of leadership| + +To retrieve information about all servers, use the query: + +```sql +SELECT * FROM sys.servers; +``` + +#### SERVER_SEGMENTS table + +SERVER_SEGMENTS is used to join servers with segments table + +|Column|Type|Notes| +|------|-----|-----| +|server|STRING|Server name in format host:port (Primary key of [servers table](#servers-table))| +|segment_id|STRING|Segment identifier (Primary key of [segments table](#segments-table))| + +JOIN between "servers" and "segments" can be used to query the number of segments for a specific datasource, +grouped by server, example query: + +```sql +SELECT count(segments.segment_id) as num_segments from sys.segments as segments +INNER JOIN sys.server_segments as server_segments +ON segments.segment_id = server_segments.segment_id +INNER JOIN sys.servers as servers +ON servers.server = server_segments.server +WHERE segments.datasource = 'wikipedia' +GROUP BY servers.server; +``` + +#### TASKS table + +The tasks table provides information about active and recently-completed indexing tasks. For more information +check out the documentation for [ingestion tasks](../ingestion/tasks.md). + +|Column|Type|Notes| +|------|-----|-----| +|task_id|STRING|Unique task identifier| +|group_id|STRING|Task group ID for this task, the value depends on the task `type`. For example, for native index tasks, it's same as `task_id`, for sub tasks, this value is the parent task's ID| +|type|STRING|Task type, for example this value is "index" for indexing tasks. See [tasks-overview](../ingestion/tasks.md)| +|datasource|STRING|Datasource name being indexed| +|created_time|STRING|Timestamp in ISO8601 format corresponding to when the ingestion task was created. Note that this value is populated for completed and waiting tasks. For running and pending tasks this value is set to 1970-01-01T00:00:00Z| +|queue_insertion_time|STRING|Timestamp in ISO8601 format corresponding to when this task was added to the queue on the Overlord| +|status|STRING|Status of a task can be RUNNING, FAILED, SUCCESS| +|runner_status|STRING|Runner status of a completed task would be NONE, for in-progress tasks this can be RUNNING, WAITING, PENDING| +|duration|LONG|Time it took to finish the task in milliseconds, this value is present only for completed tasks| +|location|STRING|Server name where this task is running in the format host:port, this information is present only for RUNNING tasks| +|host|STRING|Hostname of the server where task is running| +|plaintext_port|LONG|Unsecured port of the server, or -1 if plaintext traffic is disabled| +|tls_port|LONG|TLS port of the server, or -1 if TLS is disabled| +|error_msg|STRING|Detailed error message in case of FAILED tasks| + +For example, to retrieve tasks information filtered by status, use the query + +```sql +SELECT * FROM sys.tasks WHERE status='FAILED'; +``` + +#### SUPERVISORS table + +The supervisors table provides information about supervisors. + +|Column|Type|Notes| +|------|-----|-----| +|supervisor_id|STRING|Supervisor task identifier| +|state|STRING|Basic state of the supervisor. Available states: `UNHEALTHY_SUPERVISOR`, `UNHEALTHY_TASKS`, `PENDING`, `RUNNING`, `SUSPENDED`, `STOPPING`. Check [Kafka Docs](../development/extensions-core/kafka-ingestion.md#operations) for details.| +|detailed_state|STRING|Supervisor specific state. (See documentation of the specific supervisor for details, e.g. [Kafka](../development/extensions-core/kafka-ingestion.md) or [Kinesis](../development/extensions-core/kinesis-ingestion.md))| +|healthy|LONG|Boolean represented as long type where 1 = true, 0 = false. 1 indicates a healthy supervisor| +|type|STRING|Type of supervisor, e.g. `kafka`, `kinesis` or `materialized_view`| +|source|STRING|Source of the supervisor, e.g. Kafka topic or Kinesis stream| +|suspended|LONG|Boolean represented as long type where 1 = true, 0 = false. 1 indicates supervisor is in suspended state| +|spec|STRING|JSON-serialized supervisor spec| + +For example, to retrieve supervisor tasks information filtered by health status, use the query + +```sql +SELECT * FROM sys.supervisors WHERE healthy=0; +``` + +## Server configuration + +Druid SQL planning occurs on the Broker and is configured by +[Broker runtime properties](../configuration/index.md#sql). + +## Security + +Please see [Defining SQL permissions](../operations/security-user-auth.md#sql-permissions) in the +basic security documentation for information on permissions needed for making SQL queries. diff --git a/querying/topnquery.md b/querying/topnquery.md new file mode 100644 index 0000000..f802785 --- /dev/null +++ b/querying/topnquery.md @@ -0,0 +1,261 @@ +--- +id: topnquery +title: "TopN queries" +sidebar_label: "TopN" +--- + + + +> Apache Druid supports two query languages: [Druid SQL](sql.md) and [native queries](querying.md). +> This document describes a query +> type in the native language. For information about when Druid SQL will use this query type, refer to the +> [SQL documentation](sql.md#query-types). + +Apache Druid TopN queries return a sorted set of results for the values in a given dimension according to some criteria. Conceptually, they can be thought of as an approximate [GroupByQuery](../querying/groupbyquery.md) over a single dimension with an [Ordering](../querying/limitspec.md) spec. TopNs are much faster and resource efficient than GroupBys for this use case. These types of queries take a topN query object and return an array of JSON objects where each object represents a value asked for by the topN query. + +TopNs are approximate in that each data process will rank their top K results and only return those top K results to the Broker. K, by default in Druid, is `max(1000, threshold)`. In practice, this means that if you ask for the top 1000 items ordered, the correctness of the first ~900 items will be 100%, and the ordering of the results after that is not guaranteed. TopNs can be made more accurate by increasing the threshold. + +A topN query object looks like: + +```json +{ + "queryType": "topN", + "dataSource": "sample_data", + "dimension": "sample_dim", + "threshold": 5, + "metric": "count", + "granularity": "all", + "filter": { + "type": "and", + "fields": [ + { + "type": "selector", + "dimension": "dim1", + "value": "some_value" + }, + { + "type": "selector", + "dimension": "dim2", + "value": "some_other_val" + } + ] + }, + "aggregations": [ + { + "type": "longSum", + "name": "count", + "fieldName": "count" + }, + { + "type": "doubleSum", + "name": "some_metric", + "fieldName": "some_metric" + } + ], + "postAggregations": [ + { + "type": "arithmetic", + "name": "average", + "fn": "/", + "fields": [ + { + "type": "fieldAccess", + "name": "some_metric", + "fieldName": "some_metric" + }, + { + "type": "fieldAccess", + "name": "count", + "fieldName": "count" + } + ] + } + ], + "intervals": [ + "2013-08-31T00:00:00.000/2013-09-03T00:00:00.000" + ] +} +``` + +There are 11 parts to a topN query. + +|property|description|required?| +|--------|-----------|---------| +|queryType|This String should always be "topN"; this is the first thing Druid looks at to figure out how to interpret the query|yes| +|dataSource|A String or Object defining the data source to query, very similar to a table in a relational database. See [DataSource](../querying/datasource.md) for more information.|yes| +|intervals|A JSON Object representing ISO-8601 Intervals. This defines the time ranges to run the query over.|yes| +|granularity|Defines the granularity to bucket query results. See [Granularities](../querying/granularities.md)|yes| +|filter|See [Filters](../querying/filters.md)|no| +|aggregations|See [Aggregations](../querying/aggregations.md)|for numeric metricSpec, aggregations or postAggregations should be specified. Otherwise no.| +|postAggregations|See [Post Aggregations](../querying/post-aggregations.md)|for numeric metricSpec, aggregations or postAggregations should be specified. Otherwise no.| +|dimension|A String or JSON object defining the dimension that you want the top taken for. For more info, see [DimensionSpecs](../querying/dimensionspecs.md)|yes| +|threshold|An integer defining the N in the topN (i.e. how many results you want in the top list)|yes| +|metric|A String or JSON object specifying the metric to sort by for the top list. For more info, see [TopNMetricSpec](../querying/topnmetricspec.md).|yes| +|context|See [Context](../querying/query-context.md)|no| + +Please note the context JSON object is also available for topN queries and should be used with the same caution as the timeseries case. +The format of the results would look like so: + +```json +[ + { + "timestamp": "2013-08-31T00:00:00.000Z", + "result": [ + { + "dim1": "dim1_val", + "count": 111, + "some_metrics": 10669, + "average": 96.11711711711712 + }, + { + "dim1": "another_dim1_val", + "count": 88, + "some_metrics": 28344, + "average": 322.09090909090907 + }, + { + "dim1": "dim1_val3", + "count": 70, + "some_metrics": 871, + "average": 12.442857142857143 + }, + { + "dim1": "dim1_val4", + "count": 62, + "some_metrics": 815, + "average": 13.14516129032258 + }, + { + "dim1": "dim1_val5", + "count": 60, + "some_metrics": 2787, + "average": 46.45 + } + ] + } +] +``` + +## Behavior on multi-value dimensions + +topN queries can group on multi-value dimensions. When grouping on a multi-value dimension, _all_ values +from matching rows will be used to generate one group per value. It's possible for a query to return more groups than +there are rows. For example, a topN on the dimension `tags` with filter `"t1" AND "t3"` would match only row1, and +generate a result with three groups: `t1`, `t2`, and `t3`. If you only need to include values that match +your filter, you can use a [filtered dimensionSpec](dimensionspecs.md#filtered-dimensionspecs). This can also +improve performance. + +See [Multi-value dimensions](multi-value-dimensions.md) for more details. + +## Aliasing + +The current TopN algorithm is an approximate algorithm. The top 1000 local results from each segment are returned for merging to determine the global topN. As such, the topN algorithm is approximate in both rank and results. Approximate results *ONLY APPLY WHEN THERE ARE MORE THAN 1000 DIM VALUES*. A topN over a dimension with fewer than 1000 unique dimension values can be considered accurate in rank and accurate in aggregates. + +The threshold can be modified from its default 1000 via the server parameter `druid.query.topN.minTopNThreshold`, which needs a restart of the servers to take effect, or via `minTopNThreshold` in the query context, which takes effect per query. + +If you are wanting the top 100 of a high cardinality, uniformly distributed dimension ordered by some low-cardinality, uniformly distributed dimension, you are potentially going to get aggregates back that are missing data. + +To put it another way, the best use cases for topN are when you can have confidence that the overall results are uniformly in the top. For example, if a particular site ID is in the top 10 for some metric for every hour of every day, then it will probably be accurate in the topN over multiple days. But if a site is barely in the top 1000 for any given hour, but over the whole query granularity is in the top 500 (example: a site which gets highly uniform traffic co-mingling in the dataset with sites with highly periodic data), then a top500 query may not have that particular site at the exact rank, and may not be accurate for that particular site's aggregates. + +Before continuing in this section, please consider if you really need exact results. Getting exact results is a very resource intensive process. For the vast majority of "useful" data results, an approximate topN algorithm supplies plenty of accuracy. + +Users wishing to get an *exact rank and exact aggregates* topN over a dimension with greater than 1000 unique values should issue a groupBy query and sort the results themselves. This is very computationally expensive for high-cardinality dimensions. + +Users who can tolerate *approximate rank* topN over a dimension with greater than 1000 unique values, but require *exact aggregates* can issue two queries. One to get the approximate topN dimension values, and another topN with dimension selection filters which only use the topN results of the first. + +### Example First query + +```json +{ + "aggregations": [ + { + "fieldName": "L_QUANTITY_longSum", + "name": "L_QUANTITY_", + "type": "longSum" + } + ], + "dataSource": "tpch_year", + "dimension":"l_orderkey", + "granularity": "all", + "intervals": [ + "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z" + ], + "metric": "L_QUANTITY_", + "queryType": "topN", + "threshold": 2 +} +``` + +### Example second query + +```json +{ + "aggregations": [ + { + "fieldName": "L_TAX_doubleSum", + "name": "L_TAX_", + "type": "doubleSum" + }, + { + "fieldName": "L_DISCOUNT_doubleSum", + "name": "L_DISCOUNT_", + "type": "doubleSum" + }, + { + "fieldName": "L_EXTENDEDPRICE_doubleSum", + "name": "L_EXTENDEDPRICE_", + "type": "doubleSum" + }, + { + "fieldName": "L_QUANTITY_longSum", + "name": "L_QUANTITY_", + "type": "longSum" + }, + { + "name": "count", + "type": "count" + } + ], + "dataSource": "tpch_year", + "dimension":"l_orderkey", + "filter": { + "fields": [ + { + "dimension": "l_orderkey", + "type": "selector", + "value": "103136" + }, + { + "dimension": "l_orderkey", + "type": "selector", + "value": "1648672" + } + ], + "type": "or" + }, + "granularity": "all", + "intervals": [ + "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z" + ], + "metric": "L_QUANTITY_", + "queryType": "topN", + "threshold": 2 +} +``` From 0c38388103572ca4d3d84bf819eed67ac1433b95 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Sat, 31 Jul 2021 17:43:32 -0400 Subject: [PATCH 3/6] =?UTF-8?q?=E5=87=86=E5=A4=87=20Roll-up=20=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=9A=84=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _sidebar.md | 2 +- tutorials/chapter-5.md | 179 ----------------------- tutorials/img-3/tutorial-query-01.png | Bin 152011 -> 0 bytes tutorials/img-3/tutorial-query-02.png | Bin 144750 -> 0 bytes tutorials/img-3/tutorial-query-03.png | Bin 141293 -> 0 bytes tutorials/img-3/tutorial-query-04.png | Bin 66423 -> 0 bytes tutorials/img-3/tutorial-query-05.png | Bin 51855 -> 0 bytes tutorials/img-3/tutorial-query-06.png | Bin 82211 -> 0 bytes tutorials/img-3/tutorial-query-07.png | Bin 78633 -> 0 bytes tutorials/tutorial-rollup.md | 195 ++++++++++++++++++++++---- 10 files changed, 170 insertions(+), 206 deletions(-) delete mode 100644 tutorials/chapter-5.md delete mode 100644 tutorials/img-3/tutorial-query-01.png delete mode 100644 tutorials/img-3/tutorial-query-02.png delete mode 100644 tutorials/img-3/tutorial-query-03.png delete mode 100644 tutorials/img-3/tutorial-query-04.png delete mode 100644 tutorials/img-3/tutorial-query-05.png delete mode 100644 tutorials/img-3/tutorial-query-06.png delete mode 100644 tutorials/img-3/tutorial-query-07.png diff --git a/_sidebar.md b/_sidebar.md index 159d913..347ca42 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -14,7 +14,7 @@ - [从 Apache Kafka 载入数据](tutorials/tutorial-kafka.md) - [从 Apache Hadoop 载入数据](tutorials/tutorial-batch-hadoop.md) - [查询数据](tutorials/tutorial-query.md) - - [回滚](tutorials/tutorial-rollup.md) + - [Roll-up](tutorials/tutorial-rollup.md) - [配置数据保存时间](tutorials/tutorial-retention.md) - [更新已经存在的数据](tutorials/tutorial-update-data.md) - [压缩段](tutorials/tutorial-compaction.md) diff --git a/tutorials/chapter-5.md b/tutorials/chapter-5.md deleted file mode 100644 index 6136ee0..0000000 --- a/tutorials/chapter-5.md +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -## Roll-up - -Apache Druid可以通过roll-up在数据摄取阶段对原始数据进行汇总。 Roll-up是对选定列集的一级聚合操作,它可以减小存储数据的大小。 - -本教程中将讨论在一个示例数据集上进行roll-up的结果。 - -本教程我们假设您已经按照[单服务器部署](../GettingStarted/chapter-3.md)中描述下载了Druid,并运行在本地机器上。 - -完成[加载本地文件](tutorial-batch.md)和[数据查询](./chapter-4.md)两部分内容也是非常有帮助的。 - -### 示例数据 - -对于本教程,我们将使用一个网络流事件数据的小样本,表示在特定时间内从源到目标IP地址的流量的数据包和字节计数。 - -```json -{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024} -{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133} -{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780} -{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289} -{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971} -{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204} -{"timestamp":"2018-01-02T21:33:14Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":38,"bytes":6289} -{"timestamp":"2018-01-02T21:33:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":123,"bytes":93999} -{"timestamp":"2018-01-02T21:35:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":12,"bytes":2818} -``` -位于 `quickstart/tutorial/rollup-data.json` 的文件包含了样例输入数据 - -我们将使用 `quickstart/tutorial/rollup-index.json` 的摄入数据规范来摄取数据 - -```json -{ - "type" : "index_parallel", - "spec" : { - "dataSchema" : { - "dataSource" : "rollup-tutorial", - "dimensionsSpec" : { - "dimensions" : [ - "srcIP", - "dstIP" - ] - }, - "timestampSpec": { - "column": "timestamp", - "format": "iso" - }, - "metricsSpec" : [ - { "type" : "count", "name" : "count" }, - { "type" : "longSum", "name" : "packets", "fieldName" : "packets" }, - { "type" : "longSum", "name" : "bytes", "fieldName" : "bytes" } - ], - "granularitySpec" : { - "type" : "uniform", - "segmentGranularity" : "week", - "queryGranularity" : "minute", - "intervals" : ["2018-01-01/2018-01-03"], - "rollup" : true - } - }, - "ioConfig" : { - "type" : "index_parallel", - "inputSource" : { - "type" : "local", - "baseDir" : "quickstart/tutorial", - "filter" : "rollup-data.json" - }, - "inputFormat" : { - "type" : "json" - }, - "appendToExisting" : false - }, - "tuningConfig" : { - "type" : "index_parallel", - "maxRowsPerSegment" : 5000000, - "maxRowsInMemory" : 25000 - } - } -} -``` - -通过在 `granularitySpec` 选项中设置 `rollup : true` 来启用Roll-up - -注意,我们将`srcIP`和`dstIP`定义为**维度**,将`packets`和`bytes`列定义为了`longSum`类型的**指标**,并将 `queryGranularity` 配置定义为 `minute`。 - -加载这些数据后,我们将看到如何使用这些定义。 - -### 加载示例数据 - -在Druid的根目录下运行以下命令: - -```json -bin/post-index-task --file quickstart/tutorial/rollup-index.json --url http://localhost:8081 -``` - -脚本运行完成以后,我们将查询数据。 - -### 查询示例数据 - -现在运行 `bin/dsql` 然后执行查询 `select * from "rollup-tutorial";` 来查看已经被摄入的数据。 - -```json -$ bin/dsql -Welcome to dsql, the command-line client for Druid SQL. -Type "\h" for help. -dsql> select * from "rollup-tutorial"; -┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ -│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ -├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ -│ 2018-01-01T01:01:00.000Z │ 35937 │ 3 │ 2.2.2.2 │ 286 │ 1.1.1.1 │ -│ 2018-01-01T01:02:00.000Z │ 366260 │ 2 │ 2.2.2.2 │ 415 │ 1.1.1.1 │ -│ 2018-01-01T01:03:00.000Z │ 10204 │ 1 │ 2.2.2.2 │ 49 │ 1.1.1.1 │ -│ 2018-01-02T21:33:00.000Z │ 100288 │ 2 │ 8.8.8.8 │ 161 │ 7.7.7.7 │ -│ 2018-01-02T21:35:00.000Z │ 2818 │ 1 │ 8.8.8.8 │ 12 │ 7.7.7.7 │ -└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ -Retrieved 5 rows in 1.18s. - -dsql> -``` - -我们来看发生在 `2018-01-01T01:01` 的三条原始数据: - -```json -{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024} -{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133} -{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780} -``` -这三条数据已经被roll up为以下一行数据: - -```json -┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ -│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ -├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ -│ 2018-01-01T01:01:00.000Z │ 35937 │ 3 │ 2.2.2.2 │ 286 │ 1.1.1.1 │ -└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ -``` - -这输入的数据行已经被按照时间列和维度列 `{timestamp, srcIP, dstIP}` 在指标列 `{packages, bytes}` 上做求和聚合 - -在进行分组之前,原始输入数据的时间戳按分钟进行标记/布局,这是由于摄取规范中的 `"queryGranularity":"minute"` 设置造成的。 -同样,`2018-01-01T01:02` 期间发生的这两起事件也已经汇总。 - -```json -{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289} -{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971} -``` -```json -┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ -│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ -├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ -│ 2018-01-01T01:02:00.000Z │ 366260 │ 2 │ 2.2.2.2 │ 415 │ 1.1.1.1 │ -└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ -``` - -对于记录1.1.1.1和2.2.2.2之间流量的最后一个事件没有发生汇总,因为这是 `2018-01-01T01:03` 期间发生的唯一事件 - -```json -{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204} -``` -```json -┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ -│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ -├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ -│ 2018-01-01T01:03:00.000Z │ 10204 │ 1 │ 2.2.2.2 │ 49 │ 1.1.1.1 │ -└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ -``` - -请注意,`计数指标 count` 显示原始输入数据中有多少行贡献给最终的"roll up"行。 \ No newline at end of file diff --git a/tutorials/img-3/tutorial-query-01.png b/tutorials/img-3/tutorial-query-01.png deleted file mode 100644 index 8884d9bc8c47fbc5dc8db1f95b2fe04cf7721a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152011 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 HasPh-7W<4J diff --git a/tutorials/img-3/tutorial-query-06.png b/tutorials/img-3/tutorial-query-06.png deleted file mode 100644 index 60b4e1addacd715823f0b83a7b9bea6baa1c0f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82211 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

^v1a1tO^-AuYiD1=5cN(!A{kKhxM1l$&FFX1g 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 diff --git a/tutorials/img-3/tutorial-query-07.png b/tutorials/img-3/tutorial-query-07.png deleted file mode 100644 index d2e5a85b4f62ec0e20b8560e54f329f4579601a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78633 zcmbTdbzD?y`#y@T2$&#^w6v6@umvQC96F_?yGy0JVQ3K;7!XjpN4h~;TBKx%p>r6{ zgTDLwp6~gc&-vpl-P^@l!;1U4pXwYFwNkIx9mlPKV2M1q9T0#W}=lU-koU2Q> zuYx0NHux{VKiAD)$-lzE`5Ju}V|WAn{M1-lMIHyolK}_kT>uWwDLC}*Hx7==a~vGh z8yp-#7!J-8`}8_xVQ}K6k(`tS&c)@QkB#~9;FCBq60cOJJ`Vx$~0Q2;KKtsB^%_U|@MB zs*nF@Eh369vkhlnbmge?(KNBbvg-VJ(dX}Lw6kkG9(x{{`LEfVcfeCzZrlO4ga7W~ z+=pKIyZ1jkoP_^5_3zIAocW)ff6w6jyYu%<2h&q(Mw*=GTzhj*VwH(wV*K66asGbB z%vrLL>S`e;of^)&l*dqG?hL;1s8~6Drn#FS4qkIUDpI@%#4n#)I4~y8v9Eh~*26E{ zbT;b!TrJlfL;Krwz!=yo*3EMDccDBZm;*+fL*` zL4-GwkOb=eEQf2?K?J0AkfxOc#BW5G!e{VCBL|IFLq$cE>j$KXd(Lgd#pE?mAvCMZ)PBY(CpWzZp%iseeM^y?HZ49m<0e|gVUzf7 zp)$#di%{hmrI+Kpu_CUGZRr6j0G6tuE(Nzr6*_!*XtLMZ@IBS7%PO3Zgk zA*>_o%QR`U*D6dRz*PEqYkzVNN**6DV*BL|#;bc1<%yZxW$ULM%&}ORx`#Q^4@1!U zWwfA!WE?xCe$ZN*zFH+R zL6lh8Bt4>99v|MzCJDKLLyf${`_1csEcHvYyw^QXseInem(s3P7U<@Wxw^Zfe)`^L z19628Q+_M`(Nk1DaEtk7^Eu30t{(1@so#7rM)GRL7g|d{b6~R;o1e&MR-W%9#P|m9 z9XoLttdBKfR_aaqayg=Wyq1dWq|bDy%S5m!vA+j1W?y{{BK?b95$-;qU|8z^i` z?eFr=X5SN~^2p>so~`YlgwyujPt!YIlCwMRFsqrN=X6;j=Usv>Agr8yu6>Z3aPDln z5D>|KJL-ZxI?>?fQ~kx)pV2;goc;;zD>7Gvo;bkYN1Y)rmX8uXl%H@&3-Fv4Ko!(?yB~oaQ-WF;g#Vp~aNj_a)0(ka4Mp6n(6P zGTPid^?pk~+*(8qQD=j?H9Sdt1s;P)KJ;5DNJa^aG_evp<|aZ%<@77q;6i%-3kfIT zPb_On({A%nL7&(nhN17pl57QLv99U;&%`41+#I`cZNS_s`QDnSsS5PR9jN>n0j?rQ z$}KF+^IGj-p`1gpOua$yJtV0iQ=G88?X?_>Eq8RzV8ryiufxXli1{EA3<*Q{#leJu z_?%dfgx2C@K-+pX&7!tlsZ6N`z!%YTPfVA_Jj4e=fuZ(Z_RndFRz#i{p3y2s&p

Vpwpx1UCBdTSyJ;+fKBY~5 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 diff --git a/tutorials/tutorial-rollup.md b/tutorials/tutorial-rollup.md index cc93997..4c1a5be 100644 --- a/tutorials/tutorial-rollup.md +++ b/tutorials/tutorial-rollup.md @@ -1,29 +1,4 @@ ---- -id: tutorial-rollup -title: "Tutorial: Roll-up" -sidebar_label: "Roll-up" ---- - - - - +# Roll-up Apache Druid can summarize raw data at ingestion time using a process we refer to as "roll-up". Roll-up is a first-level aggregation operation over a selected set of columns that reduces the size of stored data. This tutorial will demonstrate the effects of roll-up on an example dataset. @@ -194,3 +169,171 @@ For the last event recording traffic between 1.1.1.1 and 2.2.2.2, no roll-up too ``` Note that the `count` metric shows how many rows in the original input data contributed to the final "rolled up" row. + + +## Roll-up + +Apache Druid可以通过roll-up在数据摄取阶段对原始数据进行汇总。 Roll-up是对选定列集的一级聚合操作,它可以减小存储数据的大小。 + +本教程中将讨论在一个示例数据集上进行roll-up的结果。 + +本教程我们假设您已经按照[单服务器部署](../GettingStarted/chapter-3.md)中描述下载了Druid,并运行在本地机器上。 + +完成[加载本地文件](tutorial-batch.md)和[数据查询](./chapter-4.md)两部分内容也是非常有帮助的。 + +### 示例数据 + +对于本教程,我们将使用一个网络流事件数据的小样本,表示在特定时间内从源到目标IP地址的流量的数据包和字节计数。 + +```json +{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024} +{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133} +{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780} +{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289} +{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971} +{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204} +{"timestamp":"2018-01-02T21:33:14Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":38,"bytes":6289} +{"timestamp":"2018-01-02T21:33:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":123,"bytes":93999} +{"timestamp":"2018-01-02T21:35:45Z","srcIP":"7.7.7.7", "dstIP":"8.8.8.8","packets":12,"bytes":2818} +``` +位于 `quickstart/tutorial/rollup-data.json` 的文件包含了样例输入数据 + +我们将使用 `quickstart/tutorial/rollup-index.json` 的摄入数据规范来摄取数据 + +```json +{ + "type" : "index_parallel", + "spec" : { + "dataSchema" : { + "dataSource" : "rollup-tutorial", + "dimensionsSpec" : { + "dimensions" : [ + "srcIP", + "dstIP" + ] + }, + "timestampSpec": { + "column": "timestamp", + "format": "iso" + }, + "metricsSpec" : [ + { "type" : "count", "name" : "count" }, + { "type" : "longSum", "name" : "packets", "fieldName" : "packets" }, + { "type" : "longSum", "name" : "bytes", "fieldName" : "bytes" } + ], + "granularitySpec" : { + "type" : "uniform", + "segmentGranularity" : "week", + "queryGranularity" : "minute", + "intervals" : ["2018-01-01/2018-01-03"], + "rollup" : true + } + }, + "ioConfig" : { + "type" : "index_parallel", + "inputSource" : { + "type" : "local", + "baseDir" : "quickstart/tutorial", + "filter" : "rollup-data.json" + }, + "inputFormat" : { + "type" : "json" + }, + "appendToExisting" : false + }, + "tuningConfig" : { + "type" : "index_parallel", + "maxRowsPerSegment" : 5000000, + "maxRowsInMemory" : 25000 + } + } +} +``` + +通过在 `granularitySpec` 选项中设置 `rollup : true` 来启用Roll-up + +注意,我们将`srcIP`和`dstIP`定义为**维度**,将`packets`和`bytes`列定义为了`longSum`类型的**指标**,并将 `queryGranularity` 配置定义为 `minute`。 + +加载这些数据后,我们将看到如何使用这些定义。 + +### 加载示例数据 + +在Druid的根目录下运行以下命令: + +```json +bin/post-index-task --file quickstart/tutorial/rollup-index.json --url http://localhost:8081 +``` + +脚本运行完成以后,我们将查询数据。 + +### 查询示例数据 + +现在运行 `bin/dsql` 然后执行查询 `select * from "rollup-tutorial";` 来查看已经被摄入的数据。 + +```json +$ bin/dsql +Welcome to dsql, the command-line client for Druid SQL. +Type "\h" for help. +dsql> select * from "rollup-tutorial"; +┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ +│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ +├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ +│ 2018-01-01T01:01:00.000Z │ 35937 │ 3 │ 2.2.2.2 │ 286 │ 1.1.1.1 │ +│ 2018-01-01T01:02:00.000Z │ 366260 │ 2 │ 2.2.2.2 │ 415 │ 1.1.1.1 │ +│ 2018-01-01T01:03:00.000Z │ 10204 │ 1 │ 2.2.2.2 │ 49 │ 1.1.1.1 │ +│ 2018-01-02T21:33:00.000Z │ 100288 │ 2 │ 8.8.8.8 │ 161 │ 7.7.7.7 │ +│ 2018-01-02T21:35:00.000Z │ 2818 │ 1 │ 8.8.8.8 │ 12 │ 7.7.7.7 │ +└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ +Retrieved 5 rows in 1.18s. + +dsql> +``` + +我们来看发生在 `2018-01-01T01:01` 的三条原始数据: + +```json +{"timestamp":"2018-01-01T01:01:35Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":20,"bytes":9024} +{"timestamp":"2018-01-01T01:01:51Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":255,"bytes":21133} +{"timestamp":"2018-01-01T01:01:59Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":11,"bytes":5780} +``` +这三条数据已经被roll up为以下一行数据: + +```json +┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ +│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ +├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ +│ 2018-01-01T01:01:00.000Z │ 35937 │ 3 │ 2.2.2.2 │ 286 │ 1.1.1.1 │ +└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ +``` + +这输入的数据行已经被按照时间列和维度列 `{timestamp, srcIP, dstIP}` 在指标列 `{packages, bytes}` 上做求和聚合 + +在进行分组之前,原始输入数据的时间戳按分钟进行标记/布局,这是由于摄取规范中的 `"queryGranularity":"minute"` 设置造成的。 +同样,`2018-01-01T01:02` 期间发生的这两起事件也已经汇总。 + +```json +{"timestamp":"2018-01-01T01:02:14Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":38,"bytes":6289} +{"timestamp":"2018-01-01T01:02:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":377,"bytes":359971} +``` +```json +┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ +│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ +├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ +│ 2018-01-01T01:02:00.000Z │ 366260 │ 2 │ 2.2.2.2 │ 415 │ 1.1.1.1 │ +└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ +``` + +对于记录1.1.1.1和2.2.2.2之间流量的最后一个事件没有发生汇总,因为这是 `2018-01-01T01:03` 期间发生的唯一事件 + +```json +{"timestamp":"2018-01-01T01:03:29Z","srcIP":"1.1.1.1", "dstIP":"2.2.2.2","packets":49,"bytes":10204} +``` +```json +┌──────────────────────────┬────────┬───────┬─────────┬─────────┬─────────┐ +│ __time │ bytes │ count │ dstIP │ packets │ srcIP │ +├──────────────────────────┼────────┼───────┼─────────┼─────────┼─────────┤ +│ 2018-01-01T01:03:00.000Z │ 10204 │ 1 │ 2.2.2.2 │ 49 │ 1.1.1.1 │ +└──────────────────────────┴────────┴───────┴─────────┴─────────┴─────────┘ +``` + +请注意,`计数指标 count` 显示原始输入数据中有多少行贡献给最终的"roll up"行。 \ No newline at end of file From a125246e3c737373bc1d838c6a8429afd4e2a346 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Thu, 29 Jul 2021 12:46:48 -0400 Subject: [PATCH 4/6] =?UTF-8?q?=E5=87=86=E5=A4=87=E5=AF=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=96=B9=E9=9D=A2=E7=9A=84=E6=96=87=E6=A1=A3=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _sidebar.md | 12 ++++++ operations/single-server.md | 74 ++++++++----------------------------- tutorials/index.md | 10 ++--- 3 files changed, 33 insertions(+), 63 deletions(-) diff --git a/_sidebar.md b/_sidebar.md index 347ca42..fc98518 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -34,7 +34,19 @@ - 摄取(Ingestion) - [面试问题和经验](interview/index.md) - [算法题](algorithm/index.md) + - 查询(Querying) + - [Druid SQL](querying/sql.md) + - [原生查询](querying/querying.md) + - [查询执行](querying/query-execution.md) + - 概念 + - [数据源](querying/datasource.md) + - [连接(joins)](querying/joins.md) + - 原生查询类型 + - [Timeseries 查询](querying/timeseriesquery.md) + - [TopN 查询](querying/topnquery.md) + - [GroupBy 查询](querying/groupbyquery.md) + - 开发(Development) - [在 Druid 中进行开发](development/index.md) diff --git a/operations/single-server.md b/operations/single-server.md index b93031f..adb2c7a 100644 --- a/operations/single-server.md +++ b/operations/single-server.md @@ -1,5 +1,6 @@ +## 独立服务器部署 -Druid includes a set of reference configurations and launch scripts for single-machine deployments: +Druid 包含有一组可用的参考配置和用于单机部署的启动脚本: - `nano-quickstart` - `micro-quickstart` @@ -8,7 +9,7 @@ Druid includes a set of reference configurations and launch scripts for single-m - `large` - `xlarge` -The `micro-quickstart` is sized for small machines like laptops and is intended for quick evaluation use-cases. +`micro-quickstart` 适合于笔记本电脑等小型计算机,主要用于能够快速评估 Druid 的使用场景。 The `nano-quickstart` is an even smaller configuration, targeting a machine with 1 CPU and 4GiB memory. It is meant for limited evaluations in resource constrained environments, such as small Docker containers. @@ -20,50 +21,39 @@ The example configurations run the Druid Coordinator and Overlord together in a While example configurations are provided for very large single machines, at higher scales we recommend running Druid in a [clustered deployment](../tutorials/cluster.md), for fault-tolerance and reduced resource contention. -## Single server reference configurations + ### Nano-Quickstart: 1 CPU, 4GiB RAM -- Launch command: `bin/start-nano-quickstart` -- Configuration directory: `conf/druid/single-server/nano-quickstart` +- 启动命令: `bin/start-nano-quickstart` +- 配置目录: `conf/druid/single-server/nano-quickstart` ### Micro-Quickstart: 4 CPU, 16GiB RAM -- Launch command: `bin/start-micro-quickstart` -- Configuration directory: `conf/druid/single-server/micro-quickstart` +- 启动命令: `bin/start-micro-quickstart` +- 配置目录: `conf/druid/single-server/micro-quickstart` ### Small: 8 CPU, 64GiB RAM (~i3.2xlarge) -- Launch command: `bin/start-small` -- Configuration directory: `conf/druid/single-server/small` +- 启动命令: `bin/start-small` +- 配置目录: `conf/druid/single-server/small` ### Medium: 16 CPU, 128GiB RAM (~i3.4xlarge) -- Launch command: `bin/start-medium` -- Configuration directory: `conf/druid/single-server/medium` +- 启动命令: `bin/start-medium` +- 配置目录: `conf/druid/single-server/medium` ### Large: 32 CPU, 256GiB RAM (~i3.8xlarge) -- Launch command: `bin/start-large` -- Configuration directory: `conf/druid/single-server/large` +- 启动命令: `bin/start-large` +- 配置目录: `conf/druid/single-server/large` ### X-Large: 64 CPU, 512GiB RAM (~i3.16xlarge) -- Launch command: `bin/start-xlarge` -- Configuration directory: `conf/druid/single-server/xlarge` +- 启动命令: `bin/start-xlarge` +- 配置目录: `conf/druid/single-server/xlarge` -### 单服务器部署 - -Druid包括一组参考配置和用于单机部署的启动脚本: - -* `nano-quickstart` -* `micro-quickstart` -* `small` -* `medium` -* `large` -* `large` -* `xlarge` `micro-quickstart`适合于笔记本电脑等小型机器,旨在用于快速评估测试使用场景。 @@ -76,35 +66,3 @@ Druid包括一组参考配置和用于单机部署的启动脚本: 通过[Coordinator配置文档](../../Configuration/configuration.md#Coordinator)中描述的可选配置`druid.coordinator.asOverlord.enabled = true`可以在单个进程中同时运行Druid Coordinator和Overlord。 虽然为大型单台计算机提供了示例配置,但在更高规模下,我们建议在集群部署中运行Druid,以实现容错和减少资源争用。 - -#### 单服务器参考配置 -##### Nano-Quickstart: 1 CPU, 4GB 内存 - -* 启动命令: `bin/start-nano-quickstart` -* 配置目录: `conf/druid/single-server/nano-quickstart` - -##### Micro-Quickstart: 4 CPU, 16GB 内存 - -* 启动命令: `bin/start-micro-quickstart` -* 配置目录: `conf/druid/single-server/micro-quickstart` - -##### Small: 8 CPU, 64GB 内存 (~i3.2xlarge) - -* 启动命令: `bin/start-small` -* 配置目录: `conf/druid/single-server/small` - -##### Medium: 16 CPU, 128GB 内存 (~i3.4xlarge) - -* 启动命令: `bin/start-medium` -* 配置目录: `conf/druid/single-server/medium` - -##### Large: 32 CPU, 256GB 内存 (~i3.8xlarge) - -* 启动命令: `bin/start-large` -* 配置目录: `conf/druid/single-server/large` - -##### X-Large: 64 CPU, 512GB 内存 (~i3.16xlarge) - -* 启动命令: `bin/start-xlarge` -* 配置目录: `conf/druid/single-server/xlarge` - diff --git a/tutorials/index.md b/tutorials/index.md index 45439ea..edab33a 100644 --- a/tutorials/index.md +++ b/tutorials/index.md @@ -208,7 +208,7 @@ Druid 是通过读取和存储有关导入数据的摘要(schema)来完成 2. 但一个数据源显示为可用的时候,针对这个数据源打开 Actions (![Actions](../assets/datasources-action-button.png)) 菜单,然后选择 **使用 SQL 进行查询(Query with SQL)**。 - ![Datasource view](../assets/tutorial-batch-data-loader-10.png "Datasource view") + ![Datasource view](../assets/tutorial-batch-data-loader-10.png ':size=690') > 请注意,你还可以对数据源进行一些其他的操作,包括有配置,保留时间规则,压缩等。 @@ -222,13 +222,13 @@ Druid 是通过读取和存储有关导入数据的摘要(schema)来完成 ## 下一步 -在完成上面步骤中的快速导航后,请查看 [query 教程](./tutorial-query.md) 页面中的内容来了解如何在 Druid 的控制台中使用查询语句。 +在完成上面步骤中的快速导航后,请查看 [query 教程](../tutorials/tutorial-query.md) 页面中的内容来了解如何在 Druid 的控制台中使用查询语句。 还有,如果你还希望从其他的数据导入方式中导入数据到 Druid,请参考下面的页面链接: -- [从 Apache Kafka 中加载流式数据](./tutorial-kafka.md) – 如何从 Kafka 的主题中加载流式数据。 -- [使用 Apache Hadoop 载入一个文件](./tutorial-batch-hadoop.md) – 如何使用远程 Hadoop 集群执行批处理文件加载 -- [编写一个你自己的数据导入规范](./tutorial-ingestion-spec.md) – 如何编写新的数据导入规范并使用它来加载数据 +- [从 Apache Kafka 中加载流式数据](../tutorials/tutorial-kafka.md) – 如何从 Kafka 的主题中加载流式数据。 +- [使用 Apache Hadoop 载入一个文件](../tutorials/tutorial-batch-hadoop.md) – 如何使用远程 Hadoop 集群执行批处理文件加载 +- [编写一个你自己的数据导入规范](../tutorials/tutorial-ingestion-spec.md) – 如何编写新的数据导入规范并使用它来加载数据 请注意,当你停止了 Druid 的服务后,可以通过删除 Druid 根目录下的 `var` 目录,并且再次运行 `bin/start-micro-quickstart` 脚本来让 Druid 启动一个完全新的实例 。 From dcca822ecbeb4c0f83be5252a6a3cb3a6d7b20b7 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Thu, 29 Jul 2021 12:47:06 -0400 Subject: [PATCH 5/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- querying/groupbyquery.md | 449 +++++++++++++ querying/query-execution.md | 118 ++++ querying/querying.md | 125 ++++ querying/sql.md | 1270 +++++++++++++++++++++++++++++++++++ querying/topnquery.md | 261 +++++++ 5 files changed, 2223 insertions(+) create mode 100644 querying/groupbyquery.md create mode 100644 querying/query-execution.md create mode 100644 querying/querying.md create mode 100644 querying/sql.md create mode 100644 querying/topnquery.md diff --git a/querying/groupbyquery.md b/querying/groupbyquery.md new file mode 100644 index 0000000..d130fa4 --- /dev/null +++ b/querying/groupbyquery.md @@ -0,0 +1,449 @@ +# GroupBy 查询 + +> Apache Druid supports two query languages: [Druid SQL](sql.md) and [native queries](querying.md). +> This document describes a query +> type in the native language. For information about when Druid SQL will use this query type, refer to the +> [SQL documentation](sql.md#query-types). + +These types of Apache Druid queries take a groupBy query object and return an array of JSON objects where each object represents a +grouping asked for by the query. + +> Note: If you are doing aggregations with time as your only grouping, or an ordered groupBy over a single dimension, +> consider [Timeseries](timeseriesquery.md) and [TopN](topnquery.md) queries as well as +> groupBy. Their performance may be better in some cases. See [Alternatives](#alternatives) below for more details. + +一个分组查询(groupBy query)对象的查询脚本如下示例: + +``` json +{ + "queryType": "groupBy", + "dataSource": "sample_datasource", + "granularity": "day", + "dimensions": ["country", "device"], + "limitSpec": { "type": "default", "limit": 5000, "columns": ["country", "data_transfer"] }, + "filter": { + "type": "and", + "fields": [ + { "type": "selector", "dimension": "carrier", "value": "AT&T" }, + { "type": "or", + "fields": [ + { "type": "selector", "dimension": "make", "value": "Apple" }, + { "type": "selector", "dimension": "make", "value": "Samsung" } + ] + } + ] + }, + "aggregations": [ + { "type": "longSum", "name": "total_usage", "fieldName": "user_count" }, + { "type": "doubleSum", "name": "data_transfer", "fieldName": "data_transfer" } + ], + "postAggregations": [ + { "type": "arithmetic", + "name": "avg_usage", + "fn": "/", + "fields": [ + { "type": "fieldAccess", "fieldName": "data_transfer" }, + { "type": "fieldAccess", "fieldName": "total_usage" } + ] + } + ], + "intervals": [ "2012-01-01T00:00:00.000/2012-01-03T00:00:00.000" ], + "having": { + "type": "greaterThan", + "aggregation": "total_usage", + "value": 100 + } +} +``` + +Following are main parts to a groupBy query: + +|property|description|required?| +|--------|-----------|---------| +|queryType|This String should always be "groupBy"; this is the first thing Druid looks at to figure out how to interpret the query|yes| +|dataSource|A String or Object defining the data source to query, very similar to a table in a relational database. See [DataSource](../querying/datasource.md) for more information.|yes| +|dimensions|A JSON list of dimensions to do the groupBy over; or see [DimensionSpec](../querying/dimensionspecs.md) for ways to extract dimensions. |yes| +|limitSpec|See [LimitSpec](../querying/limitspec.md).|no| +|having|See [Having](../querying/having.md).|no| +|granularity|Defines the granularity of the query. See [Granularities](../querying/granularities.md)|yes| +|filter|See [Filters](../querying/filters.md)|no| +|aggregations|See [Aggregations](../querying/aggregations.md)|no| +|postAggregations|See [Post Aggregations](../querying/post-aggregations.md)|no| +|intervals|A JSON Object representing ISO-8601 Intervals. This defines the time ranges to run the query over.|yes| +|subtotalsSpec| A JSON array of arrays to return additional result sets for groupings of subsets of top level `dimensions`. It is [described later](groupbyquery.md#more-on-subtotalsspec) in more detail.|no| +|context|An additional JSON Object which can be used to specify certain flags.|no| + +To pull it all together, the above query would return *n\*m* data points, up to a maximum of 5000 points, where n is the cardinality of the `country` dimension, m is the cardinality of the `device` dimension, each day between 2012-01-01 and 2012-01-03, from the `sample_datasource` table. Each data point contains the (long) sum of `total_usage` if the value of the data point is greater than 100, the (double) sum of `data_transfer` and the (double) result of `total_usage` divided by `data_transfer` for the filter set for a particular grouping of `country` and `device`. The output looks like this: + +```json +[ + { + "version" : "v1", + "timestamp" : "2012-01-01T00:00:00.000Z", + "event" : { + "country" : , + "device" : , + "total_usage" : , + "data_transfer" :, + "avg_usage" : + } + }, + { + "version" : "v1", + "timestamp" : "2012-01-01T00:00:12.000Z", + "event" : { + "dim1" : , + "dim2" : , + "sample_name1" : , + "sample_name2" :, + "avg_usage" : + } + }, +... +] +``` + +## Behavior on multi-value dimensions + +groupBy queries can group on multi-value dimensions. When grouping on a multi-value dimension, _all_ values +from matching rows will be used to generate one group per value. It's possible for a query to return more groups than +there are rows. For example, a groupBy on the dimension `tags` with filter `"t1" AND "t3"` would match only row1, and +generate a result with three groups: `t1`, `t2`, and `t3`. If you only need to include values that match +your filter, you can use a [filtered dimensionSpec](dimensionspecs.md#filtered-dimensionspecs). This can also +improve performance. + +See [Multi-value dimensions](multi-value-dimensions.md) for more details. + +## More on subtotalsSpec + +The subtotals feature allows computation of multiple sub-groupings in a single query. To use this feature, add a "subtotalsSpec" to your query as a list of subgroup dimension sets. It should contain the `outputName` from dimensions in your `dimensions` attribute, in the same order as they appear in the `dimensions` attribute (although, of course, you may skip some). + +For example, consider a groupBy query like this one: + +```json +{ +"type": "groupBy", + ... + ... +"dimensions": [ + { + "type" : "default", + "dimension" : "d1col", + "outputName": "D1" + }, + { + "type" : "extraction", + "dimension" : "d2col", + "outputName" : "D2", + "extractionFn" : extraction_func + }, + { + "type":"lookup", + "dimension":"d3col", + "outputName":"D3", + "name":"my_lookup" + } +], +... +... +"subtotalsSpec":[ ["D1", "D2", D3"], ["D1", "D3"], ["D3"]], +.. + +} +``` + +The result of the subtotalsSpec would be equivalent to concatenating the result of three groupBy queries, with the "dimensions" field being `["D1", "D2", D3"]`, `["D1", "D3"]` and `["D3"]`, given the `DimensionSpec` shown above. +The response for the query above would look something like: + +```json +[ + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": "..", "D2": "..", "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": "..", "D2": "..", "D3": ".." } + } + }, + ... + ... + + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": "..", "D2": null, "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": "..", "D2": null, "D3": ".." } + } + }, + ... + ... + + { + "version" : "v1", + "timestamp" : "t1", + "event" : { "D1": null, "D2": null, "D3": ".." } + } + }, + { + "version" : "v1", + "timestamp" : "t2", + "event" : { "D1": null, "D2": null, "D3": ".." } + } + }, +... +] +``` + +> Notice that dimensions that are not included in an individual subtotalsSpec grouping are returned with a `null` value. This response format represents a behavior change as of Apache Druid 0.18.0. +> In release 0.17.0 and earlier, such dimensions were entirely excluded from the result. If you were relying on this old behavior to determine whether a particular dimension was not part of +> a subtotal grouping, you can now use [Grouping aggregator](aggregations.md#grouping-aggregator) instead. + + +## Implementation details + +### Strategies + +GroupBy queries can be executed using two different strategies. The default strategy for a cluster is determined by the +"druid.query.groupBy.defaultStrategy" runtime property on the Broker. This can be overridden using "groupByStrategy" in +the query context. If neither the context field nor the property is set, the "v2" strategy will be used. + +- "v2", the default, is designed to offer better performance and memory management. This strategy generates +per-segment results using a fully off-heap map. Data processes merge the per-segment results using a fully off-heap +concurrent facts map combined with an on-heap string dictionary. This may optionally involve spilling to disk. Data +processes return sorted results to the Broker, which merges result streams using an N-way merge. The broker materializes +the results if necessary (e.g. if the query sorts on columns other than its dimensions). Otherwise, it streams results +back as they are merged. + +- "v1", a legacy engine, generates per-segment results on data processes (Historical, realtime, MiddleManager) using a map which +is partially on-heap (dimension keys and the map itself) and partially off-heap (the aggregated values). Data processes then +merge the per-segment results using Druid's indexing mechanism. This merging is multi-threaded by default, but can +optionally be single-threaded. The Broker merges the final result set using Druid's indexing mechanism again. The broker +merging is always single-threaded. Because the Broker merges results using the indexing mechanism, it must materialize +the full result set before returning any results. On both the data processes and the Broker, the merging index is fully +on-heap by default, but it can optionally store aggregated values off-heap. + +### Differences between v1 and v2 + +Query API and results are compatible between the two engines; however, there are some differences from a cluster +configuration perspective: + +- groupBy v1 controls resource usage using a row-based limit (maxResults) whereas groupBy v2 uses bytes-based limits. +In addition, groupBy v1 merges results on-heap, whereas groupBy v2 merges results off-heap. These factors mean that +memory tuning and resource limits behave differently between v1 and v2. In particular, due to this, some queries +that can complete successfully in one engine may exceed resource limits and fail with the other engine. See the +"Memory tuning and resource limits" section for more details. +- groupBy v1 imposes no limit on the number of concurrently running queries, whereas groupBy v2 controls memory usage +by using a finite-sized merge buffer pool. By default, the number of merge buffers is 1/4 the number of processing +threads. You can adjust this as necessary to balance concurrency and memory usage. +- groupBy v1 supports caching on either the Broker or Historical processes, whereas groupBy v2 only supports caching on +Historical processes. +- groupBy v2 supports both array-based aggregation and hash-based aggregation. The array-based aggregation is used only +when the grouping key is a single indexed string column. In array-based aggregation, the dictionary-encoded value is used +as the index, so the aggregated values in the array can be accessed directly without finding buckets based on hashing. + +### Memory tuning and resource limits + +When using groupBy v2, three parameters control resource usage and limits: + +- `druid.processing.buffer.sizeBytes`: size of the off-heap hash table used for aggregation, per query, in bytes. At +most `druid.processing.numMergeBuffers` of these will be created at once, which also serves as an upper limit on the +number of concurrently running groupBy queries. +- `druid.query.groupBy.maxMergingDictionarySize`: size of the on-heap dictionary used when grouping on strings, per query, +in bytes. Note that this is based on a rough estimate of the dictionary size, not the actual size. +- `druid.query.groupBy.maxOnDiskStorage`: amount of space on disk used for aggregation, per query, in bytes. By default, +this is 0, which means aggregation will not use disk. + +If `maxOnDiskStorage` is 0 (the default) then a query that exceeds either the on-heap dictionary limit, or the off-heap +aggregation table limit, will fail with a "Resource limit exceeded" error describing the limit that was exceeded. + +If `maxOnDiskStorage` is greater than 0, queries that exceed the in-memory limits will start using disk for aggregation. +In this case, when either the on-heap dictionary or off-heap hash table fills up, partially aggregated records will be +sorted and flushed to disk. Then, both in-memory structures will be cleared out for further aggregation. Queries that +then go on to exceed `maxOnDiskStorage` will fail with a "Resource limit exceeded" error indicating that they ran out of +disk space. + +With groupBy v2, cluster operators should make sure that the off-heap hash tables and on-heap merging dictionaries +will not exceed available memory for the maximum possible concurrent query load (given by +`druid.processing.numMergeBuffers`). See the [basic cluster tuning guide](../operations/basic-cluster-tuning.md) +for more details about direct memory usage, organized by Druid process type. + +Brokers do not need merge buffers for basic groupBy queries. Queries with subqueries (using a `query` dataSource) require one merge buffer if there is a single subquery, or two merge buffers if there is more than one layer of nested subqueries. Queries with [subtotals](groupbyquery.md#more-on-subtotalsspec) need one merge buffer. These can stack on top of each other: a groupBy query with multiple layers of nested subqueries, and that also uses subtotals, will need three merge buffers. + +Historicals and ingestion tasks need one merge buffer for each groupBy query, unless [parallel combination](groupbyquery.md#parallel-combine) is enabled, in which case they need two merge buffers per query. + +When using groupBy v1, all aggregation is done on-heap, and resource limits are done through the parameter +`druid.query.groupBy.maxResults`. This is a cap on the maximum number of results in a result set. Queries that exceed +this limit will fail with a "Resource limit exceeded" error indicating they exceeded their row limit. Cluster +operators should make sure that the on-heap aggregations will not exceed available JVM heap space for the expected +concurrent query load. + +### Performance tuning for groupBy v2 + +#### Limit pushdown optimization + +Druid pushes down the `limit` spec in groupBy queries to the segments on Historicals wherever possible to early prune unnecessary intermediate results and minimize the amount of data transferred to Brokers. By default, this technique is applied only when all fields in the `orderBy` spec is a subset of the grouping keys. This is because the `limitPushDown` doesn't guarantee the exact results if the `orderBy` spec includes any fields that are not in the grouping keys. However, you can enable this technique even in such cases if you can sacrifice some accuracy for fast query processing like in topN queries. See `forceLimitPushDown` in [advanced groupBy v2 configurations](#groupby-v2-configurations). + + +#### Optimizing hash table + +The groupBy v2 engine uses an open addressing hash table for aggregation. The hash table is initialized with a given initial bucket number and gradually grows on buffer full. On hash collisions, the linear probing technique is used. + +The default number of initial buckets is 1024 and the default max load factor of the hash table is 0.7. If you can see too many collisions in the hash table, you can adjust these numbers. See `bufferGrouperInitialBuckets` and `bufferGrouperMaxLoadFactor` in [Advanced groupBy v2 configurations](#groupby-v2-configurations). + + +#### Parallel combine + +Once a Historical finishes aggregation using the hash table, it sorts the aggregated results and merges them before sending to the +Broker for N-way merge aggregation in the broker. By default, Historicals use all their available processing threads +(configured by `druid.processing.numThreads`) for aggregation, but use a single thread for sorting and merging +aggregates which is an http thread to send data to Brokers. + +This is to prevent some heavy groupBy queries from blocking other queries. In Druid, the processing threads are shared +between all submitted queries and they are _not interruptible_. It means, if a heavy query takes all available +processing threads, all other queries might be blocked until the heavy query is finished. GroupBy queries usually take +longer time than timeseries or topN queries, they should release processing threads as soon as possible. + +However, you might care about the performance of some really heavy groupBy queries. Usually, the performance bottleneck +of heavy groupBy queries is merging sorted aggregates. In such cases, you can use processing threads for it as well. +This is called _parallel combine_. To enable parallel combine, see `numParallelCombineThreads` in +[Advanced groupBy v2 configurations](#groupby-v2-configurations). Note that parallel combine can be enabled only when +data is actually spilled (see [Memory tuning and resource limits](#memory-tuning-and-resource-limits)). + +Once parallel combine is enabled, the groupBy v2 engine can create a combining tree for merging sorted aggregates. Each +intermediate node of the tree is a thread merging aggregates from the child nodes. The leaf node threads read and merge +aggregates from hash tables including spilled ones. Usually, leaf processes are slower than intermediate nodes because they +need to read data from disk. As a result, less threads are used for intermediate nodes by default. You can change the +degree of intermediate nodes. See `intermediateCombineDegree` in [Advanced groupBy v2 configurations](#groupby-v2-configurations). + +Please note that each Historical needs two merge buffers to process a groupBy v2 query with parallel combine: one for +computing intermediate aggregates from each segment and another for combining intermediate aggregates in parallel. + + +### Alternatives + +There are some situations where other query types may be a better choice than groupBy. + +- For queries with no "dimensions" (i.e. grouping by time only) the [Timeseries query](timeseriesquery.md) will +generally be faster than groupBy. The major differences are that it is implemented in a fully streaming manner (taking +advantage of the fact that segments are already sorted on time) and does not need to use a hash table for merging. + +- For queries with a single "dimensions" element (i.e. grouping by one string dimension), the [TopN query](topnquery.md) +will sometimes be faster than groupBy. This is especially true if you are ordering by a metric and find approximate +results acceptable. + +### Nested groupBys + +Nested groupBys (dataSource of type "query") are performed differently for "v1" and "v2". The Broker first runs the +inner groupBy query in the usual way. "v1" strategy then materializes the inner query's results on-heap with Druid's +indexing mechanism, and runs the outer query on these materialized results. "v2" strategy runs the outer query on the +inner query's results stream with off-heap fact map and on-heap string dictionary that can spill to disk. Both +strategy perform the outer query on the Broker in a single-threaded fashion. + +### Configurations + +This section describes the configurations for groupBy queries. You can set the runtime properties in the `runtime.properties` file on Broker, Historical, and MiddleManager processes. You can set the query context parameters through the [query context](query-context.md). + +#### Configurations for groupBy v2 + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.maxMergingDictionarySize`|Maximum amount of heap space (approximately) to use for the string dictionary during merging. When the dictionary exceeds this size, a spill to disk will be triggered.|100000000| +|`druid.query.groupBy.maxOnDiskStorage`|Maximum amount of disk space to use, per-query, for spilling result sets to disk when either the merging buffer or the dictionary fills up. Queries that exceed this limit will fail. Set to zero to disable disk spilling.|0 (disabled)| + +Supported query contexts: + +|Key|Description| +|---|-----------| +|`maxMergingDictionarySize`|Can be used to lower the value of `druid.query.groupBy.maxMergingDictionarySize` for this query.| +|`maxOnDiskStorage`|Can be used to lower the value of `druid.query.groupBy.maxOnDiskStorage` for this query.| + + +### Advanced configurations + +#### Common configurations for all groupBy strategies + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.defaultStrategy`|Default groupBy query strategy.|v2| +|`druid.query.groupBy.singleThreaded`|Merge results using a single thread.|false| + +Supported query contexts: + +|Key|Description| +|---|-----------| +|`groupByStrategy`|Overrides the value of `druid.query.groupBy.defaultStrategy` for this query.| +|`groupByIsSingleThreaded`|Overrides the value of `druid.query.groupBy.singleThreaded` for this query.| + + +#### GroupBy v2 configurations + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.bufferGrouperInitialBuckets`|Initial number of buckets in the off-heap hash table used for grouping results. Set to 0 to use a reasonable default (1024).|0| +|`druid.query.groupBy.bufferGrouperMaxLoadFactor`|Maximum load factor of the off-heap hash table used for grouping results. When the load factor exceeds this size, the table will be grown or spilled to disk. Set to 0 to use a reasonable default (0.7).|0| +|`druid.query.groupBy.forceHashAggregation`|Force to use hash-based aggregation.|false| +|`druid.query.groupBy.intermediateCombineDegree`|Number of intermediate nodes combined together in the combining tree. Higher degrees will need less threads which might be helpful to improve the query performance by reducing the overhead of too many threads if the server has sufficiently powerful cpu cores.|8| +|`druid.query.groupBy.numParallelCombineThreads`|Hint for the number of parallel combining threads. This should be larger than 1 to turn on the parallel combining feature. The actual number of threads used for parallel combining is min(`druid.query.groupBy.numParallelCombineThreads`, `druid.processing.numThreads`).|1 (disabled)| +|`druid.query.groupBy.applyLimitPushDownToSegment`|If Broker pushes limit down to queryable data server (historicals, peons) then limit results during segment scan. If typically there are a large number of segments taking part in a query on a data server, this setting may counterintuitively reduce performance if enabled.|false (disabled)| + +Supported query contexts: + +|Key|Description|Default| +|---|-----------|-------| +|`bufferGrouperInitialBuckets`|Overrides the value of `druid.query.groupBy.bufferGrouperInitialBuckets` for this query.|None| +|`bufferGrouperMaxLoadFactor`|Overrides the value of `druid.query.groupBy.bufferGrouperMaxLoadFactor` for this query.|None| +|`forceHashAggregation`|Overrides the value of `druid.query.groupBy.forceHashAggregation`|None| +|`intermediateCombineDegree`|Overrides the value of `druid.query.groupBy.intermediateCombineDegree`|None| +|`numParallelCombineThreads`|Overrides the value of `druid.query.groupBy.numParallelCombineThreads`|None| +|`sortByDimsFirst`|Sort the results first by dimension values and then by timestamp.|false| +|`forceLimitPushDown`|When all fields in the orderby are part of the grouping key, the Broker will push limit application down to the Historical processes. When the sorting order uses fields that are not in the grouping key, applying this optimization can result in approximate results with unknown accuracy, so this optimization is disabled by default in that case. Enabling this context flag turns on limit push down for limit/orderbys that contain non-grouping key columns.|false| +|`applyLimitPushDownToSegment`|If Broker pushes limit down to queryable nodes (historicals, peons) then limit results during segment scan. This context value can be used to override `druid.query.groupBy.applyLimitPushDownToSegment`.|true| + + +#### GroupBy v1 configurations + +Supported runtime properties: + +|Property|Description|Default| +|--------|-----------|-------| +|`druid.query.groupBy.maxIntermediateRows`|Maximum number of intermediate rows for the per-segment grouping engine. This is a tuning parameter that does not impose a hard limit; rather, it potentially shifts merging work from the per-segment engine to the overall merging index. Queries that exceed this limit will not fail.|50000| +|`druid.query.groupBy.maxResults`|Maximum number of results. Queries that exceed this limit will fail.|500000| + +Supported query contexts: + +|Key|Description|Default| +|---|-----------|-------| +|`maxIntermediateRows`|Can be used to lower the value of `druid.query.groupBy.maxIntermediateRows` for this query.|None| +|`maxResults`|Can be used to lower the value of `druid.query.groupBy.maxResults` for this query.|None| +|`useOffheap`|Set to true to store aggregations off-heap when merging results.|false| + +#### Array based result rows + +Internally Druid always uses an array based representation of groupBy result rows, but by default this is translated +into a map based result format at the Broker. To reduce the overhead of this translation, results may also be returned +from the Broker directly in the array based format if `resultAsArray` is set to `true` on the query context. + +Each row is positional, and has the following fields, in order: + +* Timestamp (optional; only if granularity != ALL) +* Dimensions (in order) +* Aggregators (in order) +* Post-aggregators (optional; in order, if present) + +This schema is not available on the response, so it must be computed from the issued query in order to properly read +the results. diff --git a/querying/query-execution.md b/querying/query-execution.md new file mode 100644 index 0000000..811a6ef --- /dev/null +++ b/querying/query-execution.md @@ -0,0 +1,118 @@ +--- +id: query-execution +title: "Query execution" +--- + + + +> This document describes how Druid executes [native queries](querying.md), but since [Druid SQL](sql.md) queries +> are translated to native queries, this document applies to the SQL runtime as well. Refer to the SQL +> [Query translation](sql.md#query-translation) page for information about how SQL queries are translated to native +> queries. + +Druid's approach to query execution varies depending on the kind of [datasource](datasource.md) you are querying. + +## Datasource type + +### `table` + +Queries that operate directly on [table datasources](datasource.md#table) are executed using a scatter-gather approach +led by the Broker process. The process looks like this: + +1. The Broker identifies which [segments](../design/segments.md) are relevant to the query based on the `"intervals"` +parameter. Segments are always partitioned by time, so any segment whose interval overlaps the query interval is +potentially relevant. + +2. The Broker may additionally further prune the segment list based on the `"filter"`, if the input data was partitioned +by range using the [`single_dim` partitionsSpec](../ingestion/native-batch.md#partitionsspec), and if the filter matches +the dimension used for partitioning. + +3. The Broker, having pruned the list of segments for the query, forwards the query to data servers (like Historicals +and tasks running on MiddleManagers) that are currently serving those segments. + +4. For all query types except [Scan](scan-query.md), data servers process each segment in parallel and generate partial +results for each segment. The specific processing that is done depends on the query type. These partial results may be +cached if [query caching](caching.md) is enabled. For Scan queries, segments are processed in order by a single thread, +and results are not cached. + +5. The Broker receives partial results from each data server, merges them into the final result set, and returns them +to the caller. For Timeseries and Scan queries, and for GroupBy queries where there is no sorting, the Broker is able to +do this in a streaming fashion. Otherwise, the Broker fully computes the result set before returning anything. + +### `lookup` + +Queries that operate directly on [lookup datasources](datasource.md#lookup) (without a join) are executed on the Broker +that received the query, using its local copy of the lookup. All registered lookup tables are preloaded in-memory on the +Broker. The query runs single-threaded. + +Execution of queries that use lookups as right-hand inputs to a join are executed in a way that depends on their +"base" (bottom-leftmost) datasource, as described in the [join](#join) section below. + +### `union` + +Queries that operate directly on [union datasources](datasource.md#union) are split up on the Broker into a separate +query for each table that is part of the union. Each of these queries runs separately, and the Broker merges their +results together. + +### `inline` + +Queries that operate directly on [inline datasources](datasource.md#inline) are executed on the Broker that received the +query. The query runs single-threaded. + +Execution of queries that use inline datasources as right-hand inputs to a join are executed in a way that depends on +their "base" (bottom-leftmost) datasource, as described in the [join](#join) section below. + +### `query` + +[Query datasources](datasource.md#query) are subqueries. Each subquery is executed as if it was its own query and +the results are brought back to the Broker. Then, the Broker continues on with the rest of the query as if the subquery +was replaced with an inline datasource. + +In most cases, subquery results are fully buffered in memory on the Broker before the rest of the query proceeds, +meaning subqueries execute sequentially. The total number of rows buffered across all subqueries of a given query +in this way cannot exceed the [`druid.server.http.maxSubqueryRows` property](../configuration/index.md). + +There is one exception: if the outer query and all subqueries are the [groupBy](groupbyquery.md) type, then subquery +results can be processed in a streaming fashion and the `druid.server.http.maxSubqueryRows` limit does not apply. + +### `join` + +[Join datasources](datasource.md#join) are handled using a broadcast hash-join approach. + +1. The Broker executes any subqueries that are inputs the join, as described in the [query](#query) section, and +replaces them with inline datasources. + +2. The Broker flattens a join tree, if present, into a "base" datasource (the bottom-leftmost one) and other leaf +datasources (the rest). + +3. Query execution proceeds using the same structure that the base datasource would use on its own. If the base +datasource is a [table](#table), segments are pruned based on `"intervals"` as usual, and the query is executed on the +cluster by forwarding it to all relevant data servers in parallel. If the base datasource is a [lookup](#lookup) or +[inline](#inline) datasource (including an inline datasource that was the result of inlining a subquery), the query is +executed on the Broker itself. The base query cannot be a union, because unions are not currently supported as inputs to +a join. + +4. Before beginning to process the base datasource, the server(s) that will execute the query first inspect all the +non-base leaf datasources to determine if a new hash table needs to be built for the upcoming hash join. Currently, +lookups do not require new hash tables to be built (because they are preloaded), but inline datasources do. + +5. Query execution proceeds again using the same structure that the base datasource would use on its own, with one +addition: while processing the base datasource, Druid servers will use the hash tables built from the other join inputs +to produce the join result row-by-row, and query engines will operate on the joined rows rather than the base rows. diff --git a/querying/querying.md b/querying/querying.md new file mode 100644 index 0000000..ba05285 --- /dev/null +++ b/querying/querying.md @@ -0,0 +1,125 @@ +# 原生查询 + +> Apache Druid supports two query languages: [Druid SQL](../querying/sql.md) and [native queries](../querying/querying.md). +> This document describes the +> native query language. For information about how Druid SQL chooses which native query types to use when +> it runs a SQL query, refer to the [SQL documentation](../querying/sql.md#query-types). + +Native queries in Druid are JSON objects and are typically issued to the Broker or Router processes. Queries can be +posted like this: + +```bash +curl -X POST ':/druid/v2/?pretty' -H 'Content-Type:application/json' -H 'Accept:application/json' -d @ +``` + +> Replace `:` with the appropriate address and port for your system. For example, if running the quickstart configuration, replace `:` with localhost:8888. + +You can also enter them directly in the Druid console's Query view. Simply pasting a native query into the console switches the editor into JSON mode. + +![Native query](../assets/native-queries-01.png "Native query") + +Druid's native query language is JSON over HTTP, although many members of the community have contributed different +[client libraries](https://druid.apache.org/libraries.html) in other languages to query Druid. + +The Content-Type/Accept Headers can also take 'application/x-jackson-smile'. + +```bash +curl -X POST ':/druid/v2/?pretty' -H 'Content-Type:application/json' -H 'Accept:application/x-jackson-smile' -d @ +``` + +> If the Accept header is not provided, it defaults to the value of 'Content-Type' header. + +Druid's native query is relatively low level, mapping closely to how computations are performed internally. Druid queries +are designed to be lightweight and complete very quickly. This means that for more complex analysis, or to build +more complex visualizations, multiple Druid queries may be required. + +Even though queries are typically made to Brokers or Routers, they can also be accepted by +[Historical](../design/historical.md) processes and by [Peons (task JVMs)](../design/peons.md)) that are running +stream ingestion tasks. This may be valuable if you want to query results for specific segments that are served by +specific processes. + +## Available queries + +Druid has numerous query types for various use cases. Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The documentation for the various query types describe all the JSON properties that can be set. + +### Aggregation queries + +* [Timeseries](../querying/timeseriesquery.md) +* [TopN](../querying/topnquery.md) +* [GroupBy](../querying/groupbyquery.md) + +### Metadata queries + +* [TimeBoundary](../querying/timeboundaryquery.md) +* [SegmentMetadata](../querying/segmentmetadataquery.md) +* [DatasourceMetadata](../querying/datasourcemetadataquery.md) + +### Other queries + +* [Scan](../querying/scan-query.md) +* [Search](../querying/searchquery.md) + +## Which query type should I use? + +For aggregation queries, if more than one would satisfy your needs, we generally recommend using Timeseries or TopN +whenever possible, as they are specifically optimized for their use cases. If neither is a good fit, you should use +the GroupBy query, which is the most flexible. + +## Query cancellation + +Queries can be cancelled explicitly using their unique identifier. If the +query identifier is set at the time of query, or is otherwise known, the following +endpoint can be used on the Broker or Router to cancel the query. + +```sh +DELETE /druid/v2/{queryId} +``` + +For example, if the query ID is `abc123`, the query can be cancelled as follows: + +```sh +curl -X DELETE "http://host:port/druid/v2/abc123" +``` + +## Query errors + +### Authentication and authorization failures + +For [secured](../design/auth.md) Druid clusters, query requests respond with an HTTP 401 response code in case of an authentication failure. For authorization failures, an HTTP 403 response code is returned. + +### Query execution failures + +If a query fails, Druid returns a response with an HTTP response code and a JSON object with the following structure: + +```json +{ + "error" : "Query timeout", + "errorMessage" : "Timeout waiting for task.", + "errorClass" : "java.util.concurrent.TimeoutException", + "host" : "druid1.example.com:8083" +} +``` + +The fields in the response are: + +|field|description| +|-----|-----------| +|error|A well-defined error code (see below).| +|errorMessage|A free-form message with more information about the error. May be null.| +|errorClass|The class of the exception that caused this error. May be null.| +|host|The host on which this error occurred. May be null.| + +Possible Druid error codes for the `error` field include: + +|Error code|HTTP response code|description| +|----|-----------|-----------| +|`SQL parse failed`|400|Only for SQL queries. The SQL query failed to parse.| +|`Plan validation failed`|400|Only for SQL queries. The SQL query failed to validate.| +|`Resource limit exceeded`|400|The query exceeded a configured resource limit (e.g. groupBy maxResults).| +|`Query capacity exceeded`|429|The query failed to execute because of the lack of resources available at the time when the query was submitted. The resources could be any runtime resources such as [query scheduler lane capacity](../configuration/index.md#query-prioritization-and-laning), merge buffers, and so on. The error message should have more details about the failure.| +|`Unsupported operation`|501|The query attempted to perform an unsupported operation. This may occur when using undocumented features or when using an incompletely implemented extension.| +|`Query timeout`|504|The query timed out.| +|`Query interrupted`|500|The query was interrupted, possibly due to JVM shutdown.| +|`Query cancelled`|500|The query was cancelled through the query cancellation API.| +|`Truncated response context`|500|An intermediate response context for the query exceeded the built-in limit of 7KiB.

The response context is an internal data structure that Druid servers use to share out-of-band information when sending query results to each other. It is serialized in an HTTP header with a maximum length of 7KiB. This error occurs when an intermediate response context sent from a data server (like a Historical) to the Broker exceeds this limit.

The response context is used for a variety of purposes, but the one most likely to generate a large context is sharing details about segments that move during a query. That means this error can potentially indicate that a very large number of segments moved in between the time a Broker issued a query and the time it was processed on Historicals. This should rarely, if ever, occur during normal operation.| +|`Unknown exception`|500|Some other exception occurred. Check errorMessage and errorClass for details, although keep in mind that the contents of those fields are free-form and may change from release to release.| \ No newline at end of file diff --git a/querying/sql.md b/querying/sql.md new file mode 100644 index 0000000..fd5903d --- /dev/null +++ b/querying/sql.md @@ -0,0 +1,1270 @@ +--- +id: sql +title: "SQL" +sidebar_label: "Druid SQL" +--- + + + + + + +> Apache Druid supports two query languages: Druid SQL and [native queries](querying.md). +> This document describes the SQL language. + +Druid SQL is a built-in SQL layer and an alternative to Druid's native JSON-based query language, and is powered by a +parser and planner based on [Apache Calcite](https://calcite.apache.org/). Druid SQL translates SQL into native Druid +queries on the query Broker (the first process you query), which are then passed down to data processes as native Druid +queries. Other than the (slight) overhead of [translating](#query-translation) SQL on the Broker, there isn't an +additional performance penalty versus native queries. + +## Query syntax + +Druid SQL supports SELECT queries with the following structure: + +``` +[ EXPLAIN PLAN FOR ] +[ WITH tableName [ ( column1, column2, ... ) ] AS ( query ) ] +SELECT [ ALL | DISTINCT ] { * | exprs } +FROM {

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 GdF4NAYaZ4B diff --git a/tutorials/img-3/tutorial-query-02.png b/tutorials/img-3/tutorial-query-02.png deleted file mode 100644 index cf407e3c631eca2a357768857e6ba0fdf6bf52f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144750 zcmdSBWmH^C(>5FkNstf**Wm7i00RMnySuvuf((#AaA$D0;O+!>XRzQ-&@d2OgZsO4 zp8K5peD?hR)`G=iv!}Yd>Zs#l!S}x>y|es(`}2Q3==TH-(u(>2B?EX#h#6!=!HP$IO7XwE z^hd~x|K;!hzZU{0@iiNa?ds`y%9y}78gZ|Sp_My94h9oEJUpzr(R+COZ3vV|Ko=-> zgI~J;WfJHjl2pLy*;)8voP*EAi)YWO2)3T=b&CFv-FySY$!7z>359giDW2syWvHl# zr0=UrSa?kSZ8ss@>oO1(22jl&YWIO+ZOO<<~6FMVr2OwlGcEx6}=Gia;6q-ga1dj)brQ9@;C5cvG{ zZ>=_D>(yc8vD6n`;-TFP^q`QrvcO%Kbm=YU9J@Y|J(9;O*p^T~_N~=NHp7m(q1GnV zf28=JfZrhC!9Ongg6M?2f5g5{LO&ePCTJ|vHKaSx;f(X%sh9##Lc<>@Q@0j3o*i9ZI zG~WKK(hqF>{T@d=mO7;B@)(78FTb=$B#lx}Pdmyd_QmVx{r{Obc|9`ywWkTi=;zXI zk+cIXN5#J_ya9rqijc^wV6DfFenpuHly%%>DIHx3=~(|==Y7Bk8zh1X=TnCWKpc8Z z;wz>mziuiy=Gx34Ji%dAd-9{&LcH(gjyS&kYFm&0iztU*3!ef40<;!c8fp-H=e4|v zU&gik1r#uj@BWYK(ABy;>9}pL#XJN-_Xk7-giOd|mngsM)p&N_>!jzo8pSK4%mYVM~Biy)G zK_dne3jLSys^6eyivq8_v)f-}Wyva^%PuCr zo;LH%HXmD=NOUe85j~FfhL?NU0ETu9Y_wKqq!jUEicDVc)Bfz4aL%g=9-=4n6z#^HbGClAD@<}HX0$M z5}!o>lqx#bkt9q$vKRlElf=zV1GW{Lkcj7Tw zzI`X|kEB-9RZ(072iBN{-jpdsdLQYRHGC&*rt55-mYN#J^NKcNeQ5-w0ZvIKetep%Oqq*mb+G%bEzgxfcyLLG5v-LnnkH9{4feBBJ zQ>e9>6SIsb(%1=5CH)p=P^23 z$!s|Km2@2KOm-ByKOz9gi-ot0ii%d%S8$u2psQFqHY_smldTz>oY$38I)#ulyQLB%~WP0AYmqKPJ<{ zctRIvowmtnS+>1O44?jz!Id1N@ZJuxC__JgUuMXYr?~Eqz4d_EFBc0_4gWOwbp#n1 zRpfvXH|NasL&eQ1Q`3a{B->2FX{CtWyOv8*rRnpGx-f^w3GB0Lme};1S2!9g4PI4R z{i}WQaWjrx(;UYqG7%C7?mA_e9G*mP?Ujhp62D0rDeYTs)NS49rnL$`ldk2s^cUBg zV-5d093YlrIc8|G6#mThZog^2=i*@YRd8fxU&rHe+;R{TBb5;v1*=ovO9I{^{5R%O zFA`*EDh9_4TDz~bPa&5Nrshu_qZjgJJ)&B9YrN&PGGC_G>*moTD~?s_Q7)x7U5?PyONll9_nr&2FwYrzSR|!(XI(!)j_Nh_afPD;zk60%yf_ZudxWou zuD63U%T2WJ7E00h&hO=8pn1+Lax)EEH&Yx5jk(`3;gdJ6rssFX;JdjG`|m$v5l$8$ za15tY5vQf6jl0Zi{pem;V_~ZFTC`&}XdBc3H<3L>>xdTr{+(cB_5oL>U+jE64J7H$ZGJ65sjqZyEj3vltc|zvYT=vByV?T*SROHh zxf~Y_jL->%hN+%K)*>ZhQ9^_y0mxFIk3_P~LME%rFQV8_y-UMKg{^BKTY_<)m~D}0 zc$yP$-gtmMOlKLy)0)}ISXb9hqWPdhL-BKVKvu&coijfh>VWb zQ|yG#Zagcp{PgEh$6a_%AS!uP;fst8j|g1i`nCCDCldmLVil7cGSL{;h$t&r3{fto z1fCC=TN@hzC_OK-lpZ{k5KP+i^!0w0TVl?&8r!}tQCDv)^*TH4&o-s2vO1@AwqHez z*i*w7VQgdZKDj~XJ0tarXNWZ&{wX*R!^NqlpwQ@aL}9_I7x^M8lTjN{`_n<)!(F0z~g}q79AU%o+j|F~;1$jaN z0y9sMoF`S^CR*dHOzrHWaaEIMN5s8-g}cC>4~PZBGX{;tFLxHvf63zF?~&cnAj!^t z?2hyd?sYL^aK2sf49|EYshP?AZf8lq%8My+^eg#FK)zzq^Oa&%jM^Ub$epfoRL zU6nIwr>rmbi%wGRBjgb4X(O}q5#)v7+N2i|UjrJB-b0UcdCH^QW|%_m#XP_LXhwT? z`8uYKZC_hDB!MKI_yrG3kH4hixb08m<;ve1!;vD_r$$qeo=T-N196;8eJ>B`Hf8pt z*`&NO*|Ck+)^g;xX5}Y}6h3vG-1jSj9nJzO#S&&cAA@K_=I^VVr6KyR=bJ1y7-Uh> zRL{G3Ox;cvE4^+>KhD?pQ@StEQ9ZxtYc6k@sI^0HY-vGZs_gQX>$?wDzJ&QF&wO1avS`YwqTwwo7a?I6jm+sPl;Ft_?W z0fJ|zzuvgpEtm-2cn-8xNZW3pLiX@S#D3>V=OEXfwJ4wWzX3xw$yz<```}*`-LKD9 z@s(R0gk9a-psO7@fv34%sibhd?8$0~ey#27lLL1QOm|N!SY24zF{0oLle^*TMu%TP zMK<$>{-57deSpIVCL2l{6RoGMm%bb$cSL5qyg_d;2mCru4XO$^k#UOE(_yJ2ewT;w z#!@b-y@w9jM&kaB3*3SFtZup?yeW$&eay)p3v-)U6Qg?Zr zMe+F1hQ%ivqk+a9K>z7wzl1iFA5mgvZNu z7Xm;uvQ|Al(wDZ&&Ca1F{AP-!jbH{?;KdOW7AG~)g?s#c7B1YHT)M%|;&Sl&dpe{0 zNKcDZrC2SVR&NY78`2MLl?mKiYaQVh$_a5oUF>M3#>CRYxu%n%S;bgWA1h?+oPT9F z^bN~Jq{M8F#1X4AX@*ahlW3|tiRgt;KI8D3XQK?l5%BRaB+qO_e$D?`rt$6h?h+BY zwMK7m>DYygsx;T+IA$Ae=C2{s#VVm_F@~L%I5(_Ou0{ooVtsn5l6RBXzhsj- z>E3%ou;qAQ)W^}}Vim>CHT+*Tj9OjKiRi{2{3mI`C{=Hqtrkx;^Q1Cx%2TIbM0~l- zHf{9W61*T22r;jrL#?uWjOqBfzaRenmn@p^x4CEz$0VW80`6rU`~G{{@{`XLM==u3 zFfHj}6CC~bvt%@(I3hE&2Z2{rroTKW3JwKbUv8{Or6qk^4HXEE%r%JkZZ%aaXt&xH z)xl=i^BsM0A?q}?uZ}d(?d5SFQ)V`^alD)qM(!YI- z-k+Php=;O{&_<1xS!USsZ4|qaSY9A23R=r6(%${YawKife5nk%w7o4>y}nKT7fKx# z=F??*!cef~Lp$^hO&E%1A)fwiSc66BraZz)quY8S$T<}6J6nJO7G=JtB;xFZ>XuTW zj(Fb5g-BdvTlr`7+S-af=H>7ZJDC75A8klHb&!6?IT>F00>KDexoqV77as{K5wvkp zc5Rb%L2pbdx-p3a)cjugP-pq9PgE`nryGzbazLA2)wJ4=+RLR z1lNCD#v>8{2}0!(Mpu;rFIEVfz5$+5=xh zuS5C@PQ{EiP?gfoWw;l1zRk0A;+y*sgI3hAf+%cb-uit(^3kvxt`g{K1IN^+j{lSy zF>uzKMTUH`*6=ShP~o`uMSAwk__BR~00x`@d#C!Kd&gNEs<|V3g+X;ng)-01h&hB| zSt;*7AkBVUj_{OJ2yGTe`z88Valme|zz;+$f+-qLCa)BYK?8M){Mty&*d*k;Z>V9TGV>18P5q+N0 zlKKuv$_ktiW_T827PkA-=zK?4SIH<0MV{+Bga@MBhuERFk=O@AIc_2wY zU8$z(i8pz%LWL)1wcB5<2Lt1?CWys*z#lhFItQh*jO3uHZ}0Ha=Pj9o(yE?0i&2cS zbEi>vOXD+r4aTvWPzt9~|2ixV6oj!I(q&3Z#lDTUDM#X4^QhN-gk6VUA5>Qw!h=>2(D;-%2^9^|%_=*VUt8s) zHn$`lEdS)B+oj0~+2%QxtQ7e|+om_zbw97N;LYaO8_}xntK$hpejH^&j>@FU0czjD zS@A*t$R$(V=FT0%fiv%=?bSrR^vkMwEpYEVV-=0#tarhRYEdz1oBd}jQEp(NHwe74n}D?R=5inruHIloG1txsUg zWqb-dKD(B6-hZc-2$G~EKF}Qu4ZC^y@+D&LOzg#M8KkGm^bvEZ@t$l`k(5f$nQrtU z^UBL;Orc1*xD}eNRp#JjysMz0Pi+*VrG6Nk)97$suxz3XS(JX5EO(mG)eo(202@g@7thf3NuumF7oWOu#}d1Z4;nQ6BB0{!>0M!xQgFuT1>AA zqIbdAoSIc$U5(sY1}#KRBrh!!MsK) z&5L5UvANl3C%g)LI%cj<=D0a5l13t<7mUL08z9n|2BH%<9lwt?Ly;V-Z?LmrDPsmu zpO(MsQJwfrw;W4C@mjSNS|E}^a%N(H1s`5^k-i)=D-wCmq_(YH;<|>o{l*B)S7+^q z7qJ_41NJD6k`d)w_JEsqth$ovRGKZ z2js)c@&-abtc9YBY~%)Sy)NC9Tzqjx8*-u8HoI(w0-63sjg+#hYC?em+i;Yrg2D{W z&xA^F208415RvdgG_-!iaM20GPx;SJa;2IIEEci!@`j>omVS@ov*{^hGeFfmEY1x^ zUh~5OO9ko;@1$k7ReDXlqzIQ4c{)Q;l`9vLqa4sU(sE(i_4`v!nD%-wl}$l-(VRr; zPSO&L0R>H4s6Z}81bSL9KUF0K&2G%mzu$Wz6fa@g^2JR=iH! zCBTLc>n}2MkW)mW9_;j%@|buAq_TTj>@L;5m9XhZii1k+E`BX5j)xU0)X5a-Rm4|r z(?Z%6!dQ!RbE|)}NgnPy>rbr?y?wP{PdysP^f}IrYrIV#?WEi9f>FPv-2){AD>cZg zv|_1|h8Y}jPN(e`$Fy7i?y}PD^c6+uLNicssg{6p)&gICQ<+hKL-p>TxL$2Efx2JH zrZfIJQSDhst~cU66!0+7fDV1-rCNAfOy_04oe_i@QskUbw$h4*;Oi>_CFX`Cf>!c= z%SK($C-WpZc$e#B<1BF5_!#!fsmIqP1cG&s%nqXfM{1Poj0H(LP2sN%EXr1BnJPeQ zoWB`91jDab6%|eTAKYAD5B&%V1 z`~BMW;Ww_^D^lCIU%;+pw;VJgk~`ke&6!rVRHu&0FbV{H;Tiii#M~5BhRlG$O1fo$0_(&0Q@7M~W zK+cX=nm%zFzjis z;ChDR_3+T`8M}lrxI3B*qBAGWb7cn_C*nF}Y-@eA0ZQdCgQkM%I;ZoC&cuX8qy~c_PXTU|7dX{KB1Dm4-5>!v**az zkWq{f4La@k;7x9`DJSAU##>3(J`^Vld-9e!w_vnu;n`Gg8Uv_8O)5F7A>alNLhQ2N z`>0{fq6n1EcFL(yARjzhN2=+JGXuc)KW}1XTNx-KBMEi)%y;hM33{j1XOe+EYQZ8B z0R=J{LEBdOVWGHzl{Tf=DXuJJUwJ=)Yi3?6pJ&!7sRGk3D{<7lxnldsd{@z zCL&irhIN1PQ;^>74qvh1Kz@P=CDC5g?o62;X@s>VHr_Uli0{(ACChYk)k4Yt_=)Np zg(eY_rqoHUlG|?!FK`#8;?qLmHRp%ZSTtccB9EBZCo~(SAoy7vPdvTK6HmT6yo%zc z8cX5R=XC)?mBy~I`oWQ5`0~^+<^2XrHiNx_SgKMs3H1GtlrW7P;fU{2DU^h6uLw)c zN{lEJFj*^xfukuu9rr4dFXU<^poK7;N-5II;etqZ1&)_Xab`b@Q=_{>3yRg|R#9du4Jr&`@g83uOzG?Ky+ zhTJZX5rb3uaj@)Uf*J1h@G0Iwe5OhJH8?coaY}Gn$>B2XM-5DuLSayRBpxJL(L(j& zye~r6CEynKnWz1uYA(HoH1*Ht&z?zQ!s`!tpiZ!8fPSXKrJi(p|v0YOoVYRjhI7C9y8D0sHlkvy^r&L zQV>am)vKPkWXyol2^6#g5;6*dTMiNAu>$sfBKZBy1<j*1p;twie=}7X)xt<8^$x z%z!?M;5ngbmf;7JSHvTUtR^J*@k||2YkLx1NUrB0aRBuh{KWo^hepRy9BRc3wJkSW zrp*gHcz7?A(;Syh6S_B3MdL-UgY1;_t>=e#Mb@Xd<|5@PW}whR18<8xH*OHlMQSkT z>_@S={UKZ1AsnkDDUude8YVUEus{8US-U~qL(!K0`DWY}8&IIy zsI{qjecZ6H%2CzKgo@V&Xx#pj&IuiQVxK6f0I z8W>|rChk%?2ZvaG_gY@eRhS7S;4!)BwRiz-4CDdOdS^b>m^rsm*RylGN%Zcw(2ZPsK1zN6q8py1g zD<(P5cSFmT=_572W%sQTOkSRCy6h~lG{as}*M72_K@teQGj=|p&W;d!TWvMTM!m0G zP?q-Njbs%pcU?*Up1C9*I7EWZ+%$Y zUqM|Nzc~Hs%(vm`?LqGi%h6Ju!e{ok4|1lg$1x9$V>LPRQTU+|l_|)E#NFH(^C^{q z!me+ARS54B&RM2O-P>=5vaJY7v0PHDA8=e#SF9VXRTLXBWGaebnJer|t)4GVlfL!0 zy@(R~$PtRk^|{m;0!T9$Zw7qe!Uy)iMO zpLGmH?3j9CcS#PaM9ikVv5lQ))P_w6<`8_W!7sL@}Ydz zfi0354>FpB`ch)E9r&9Tj^#?H6CGd31pWxq43*1|Pl%q4F&S?Aa%%vq&b9I7rBJ9| zpzJbU%2xZ=$WPm4*ey&Z?>JzjD**V+2UGsK0Ny+XH97ar<6hdt$? ziL;t(MF{maR5BCIdvbh1f8*EUtT1#xJnfq2szGfs#n13TycoWU#-qsBPftsx-=R5{ z%2+L4zEJzxupH@LKsVeLE~qUuqW)H@$)J7?_b|3kesk^$}r*3Lf(t`^0`>h zT(&q>t+fi-Uc*6OhNyS8#V<#o94upxRldv=Btn8R2-Ij^>vD4s3B9-3{no~ptJCY) z{X1;72k`HMtC6}I&G1GpGV}qdZRK-*z;iZ+NDC9-oSeNh*sM|dG#Ul=_kTc zpsY4{ACjvDo8YqP+Q6iYJCBLmf*q+nvf2ig@+X+@HH3^64->spJ6>!*LRKl1iv&ti zK7JOmgG6`=gft5=1TMELPiw8Th#6vO#50Z8W8T{<#EIxNaLX&#n<-b#I%mp+6vpG= z!Q;o_%|MX_=7K15m>NG#V+UlHm;MNDgM>SmX{{#1_nWHB%8sw|MaIZh42s1sRGTm2 zKrY)?A8Ic3&k*BV8;deW-d*~(qSNQ{5x#aNE0RAJW%IeHnCjzib6hukNrZcyGmf`s z_uXbxZPk%~i#cLQZJ5{Ea*#3-K0h?U$Q;o%e+lWMRM5{Q@+0C77;14jCg4H%nl(_C zvr$3BZc4-5!!DOb~;i#9N3 zHr|kQ9{Y!@Cnw`_hX{033o!}0r*2%mqVENqx6!QnVp)~$*Y2B5XCF1-uHWTTixj^UF&cgyH zQig2ACNvciTDMB-`oxRpAthXliP+uD<}hka)6l09cKv1vqW0MXH!-LOEN;<>dg_B% zj!Tsf&7LABNvInmfdau%Xme`S$+=Z7_cU*AIS)=g0Eaq+7@6ZFwr)m?mB~7|eRKP` zXl*<~{H9b6CC!^Gk;Hg23dvJC3Gei4U9(q_Hu=sWM-w%sHki7~e1#0GE5|5Pkb?ql z0@gO>oyEFzuqE`q<&tdT=n?|Ikqt^A2#+u}2QWD=YjN3^fK(VtS=$B!eZYRHL@{SC)6HQ7b5&!$^&fPaBE8jT5N(>{TUa*@z7XA% zBMfMv!)=}&w@)?0wBBi@Ta)uy)rEtcqf{nY@;m?L3o6Hvr97!^9~fH!}qzc!JLNX!X3$(e!&-?%t?eVwwxuF4ne# zbV8^CJF`}^V^lYPKI9e-q%jBtT^v##Y8H(T1^og#k^6zA^y;nbZuR!QU8aR=*F!wY zk)mu?g^?uG2DBGs9MUJTm7qcbLY_Z-4^nKU-}@zbtQ0m=We5vg_5=~6%MEjOKYHP9 zf&x@ZSkK=4&I(^Hunmu;8ZRW0{(i?R*O`DkA+RwiS^_dlRZu2;5zBoT?^@f#6BFa+h@-%8$&PIGM27JARs!;KXfamM@uD%ye- zeZ<~4V#kZ|VZpb3bsed=X6!pEY=wMrb_$^1e-Sr``90rF4QQ@!qte&hIT8qdoDA_) z$u#qnG|f%5FOH4|eu`*7BKR(1{Ku?b1I=I!GO=&jlW1ykkyt{GvgkT$?X|&W z&FL2?fyJtYZ=3M*f(1<7qXL+)0uS1vHp-efNM!|clR@c9l^Dq_J_z3&Kq zr4@1meUrYDhIUbp3W}u;$T0o zf{akVy1;_x35dSjZpef~W5mni4>Y|Md!3I64;3A4>B4kq=1`k6ChFoy3HFtNY9B)# zwB~awal?SiL7}_sZ!hxfH!hK7+gGYoX<&DR$1u=cK8I_*g6}2Som}5`cAmW2ws}~Z z3c0<)%flJ%R-u(o+ibk@InzMDkK>KqAJQs6ZPvyQb!mN?fpB1d7>HU>XF?t$W6-by z8n=No_tEbQpso`tRnFdGY>0z41M{aSf$;40Iolce!D#atnlSM1=-hF2vjYhZxD<7q zNgtt?1zH&RgOSW(uIz_}siLvo~ z1`Q+x&s&PYuUrlb-kl}u(Y-0z?~2u5|HzIJ=quQen8Q=8o_qEk&r}xb3A?zV6YE1U z9+mMLKKlae!ys;B$dHKYukf01n-@MMYKpWawAaY-`SKz1QT1f zsQ$&hD%HrRRH0V1!;Mq)@&dbFC9B&OV`_hoK^tGZBr8AcQRzWgUI>+2Gn4*d{!=QB zjd5yvk5k|cpPBSSo^WCw` z4iLvnGJX$ancdD_K13O>OrZZg8$o?on-gAahTCd>NzuvXE?6rIZ_DYBz^L91@csAmt$RMm{n%3~xhlNV-?YW4IhLx2_@2_)^a-I5 zm1tDZe-x~H^AZ4L-XMU?%j>kk_cxREFOu*H6reEI>&gM--Tqkjze&jC z!JRyq@M*3Rsxm3e z#{Z=-3-MET0=!u~pj5b6wUP1HP{6nY6vws!jS}dXi9CvVAeTMvw0b*i@8F9gw1~pO ztA^d>ci;}s7f8>#cHrVZ4Bg(+KFAOtE)G!8fpGv(`O|EdI*hy zJpJ1ye}wwl%lp8<7#JA!;WZ`{16ZtJaI!du z5*XSOc0>aR8~Pr} zgnGJ)9^acAaV+3ppuj}Zg07eUwe(6l1VTg-H2Vv^Cx@vhU{-`5l&{eoBU_;SZ~mos zdg`q2$u&>jKV=N)oB3j^#2YJWBd+ zc25xgr52DblG+zpH8rm-0^Qv8_5Y!mGl-I0e^WyJn#z3)K$! zIFriCQI1-2LUYn~@y6W4aIua}j;H@6@n`ZMi5fsi;g}1O>;=r2MqvbB(>dBL;V8|U z=&3a@Psn!c$5@0|FdYk}_=t5L^Ct?LJVJLaKK+0jA{OPMkNmr?puRbDC5P(AWmEBS}+LVLU;D|PZjJ!-19X_*XgzcB$LS0m3e3+7@P zD`5TFKy^$kU)Ktct1Hs``|`pcA6oSR^tJkgk1Y02lSQTz6;ojhm9+p-@2#v|6pN|2AeGVAX=R}|dWg=^_ zb&F&F9OlnOt77?n`8**3mLFUE3|6QPZ(>Ji!Hjl46z4rUBMR}>sZ^y=ynqH^^p&p< zOtSob0*JP)Ycl<}=!id}MTcJh5$%mk4_bQ(?-Ivc%P~`n_|0D~D!!IIeU`;?nQh3w zSOdrNz91T-R=`vm00@Zt%dx^ zff(zjWsyM*D29W|h#V%qZJ=zcOBwrypfP6`-YKngn4dwHXM_@;e z_3m=OOP~^+0WHPKDvScz!_v<*Ej2qC;GF3al8)`|=IPI)S^BC#{qN%c6;dK4{@`90 zlN19O?Uh7lBeJA_xCeMvb{KTxBNsI~Ar40GZhzjxna`7!7i{|?l?CHZN7-Ifs9b|; zdtJA&@yip1m_*07M2?yftbHjCsu321{U%Ed+RB2AfXKhs6^?C05$W>$&y!AO1OW=x zP@CejS|-H+sw3r3+xV{3iX)UHM_@qL;aKDxtn)_#X?obgTj$oZZ&+2rr+ULo@zq!K z|CRC=p)csVjo2n{!_EqFGI3d1Wm{>)jIy`LPp1hrB z;1~-a$u4PqJ|SZpi~g71xG9bq#@z(M1Hq}x2rk`7a5lgfYHe)zU;AAk%$FfcuEw=6 zHl;uF46=Fi?W#rF)dHA1ELo`N@tvz1EoK#5jWKq40}7eIARb|l>}@3YhVJs8J?*bW zh5$fo#Rt||N$eZI3@gr(sE+TFN;^aId#b;7v=vgRw1qqyqd_0jgi$x^pkvGmUxmLX zD(aa*e)TGV7y#*F=@JJv6a%UKro%s2(ge(_nxS4D8W&r-tJ}9jqD)n`I?u=|SSB#$ z`_HPN@BRdtcQ(CL=7^9;A1YKx{C3t@r7^vFHvgTVr^pWAy4LwHnTGZwRb?8os^xnW=gmAZz{0jSiC}9;fgXUVx4$ z9>mu{ar1RhSk->-xQ$rRUTrpjFJDeFeDSlP)j?*!eT9ZWL<5p2F84!Z-F$QT%sN=hIs8cPb+ zmCU#N!nB~Lh=zAk(9?h#PVH6eb=VFPmy=0a5$;S#MqncWGZK&aKj=>OAp{bdlZ!v- zwnHM3hn7y&qUd}+4A)QP&h|+7?(i8>7bdP3(I*Ka-3;|#91^!IMNql+z!OBqG|w z?tQOwiwq$`XPn`E5e3V1a8?vY@|+zbDXrtf#Dn0D!Y^k0bbunVI3}UW&YBkX2TYg7 z%1S8OD^!UboR66OmPCLn7od1tpW%^akakllAVXq=;kACmJC3mtX~uZ!^`YzK!0!Ba zhUBY70fex{F!{%pR7V9!R-v~|QRS3+Q8z!%DsvJ@Z_riR7XFw)q7 znu)dhcJj@}y$A##Pj!0-k%njfnFOGRr+}S)JfU>y0=7R0B8mbO8_#wjmSa&Dhu-ZO zV*-(IrYii-Fc1@Go3^%b+5m^@uxyrwD+h(<6WFO12LKIfZ-vQ04e~3w08U9%O1*N4 zN)UXWD`AWa(7YTrsG>L{WNkmsPeKb86J{-@LST&EuK{WG{?{Ci%Ta(-v0T$9Y77a^ z@yEMk+BbKJBD>$;y~uP{#KhYSTE88F%SM+fK;2#G@G}IZuww+&{X2zRtfqA?XUJ?a zaR-S;Nf-hgxS9&8LHJRMxEVy)l_&^UaDIAi|G1i2bgr-Nz~IlHX+Y9yyJ%&5{$Swm z@FFA$g#4A4e-IKOJv?eX+rFGWSIpq=4Gc^A zxwU24(AN29uQc*T1b8J`1Q1r8B(>j431U2s?sM9`J1vEi=Q2zU;tw4uFH3-#KA;Us z{&&xS|4ESH=f8h%BzHCdCy%tmj+&b1GsLf9sY&fuTWSX7;%N#{fFK!03Hv}9(3pix zp+H4rQ)vJ#)oY>*#bvSnEUMS&fGHVCdRw0w6g3Lid5+`mdt4! zqIaHq-*G+ej+GCmozGSBG*ie6%mm|Et@VWn}q+bJ~{GNm_SFoLSc&5YN|X{*^g;+tY?K~5od~v7B=(I zO^W)%_>L3N&)(CIjUL>E>|)Z=c#vOXepqjzeAbgIYRJe^AydK9^wU54ziwrBYX+36 zBcnk2h6)cGA1iC&CxklP%Z-qy?iYtqlZppAT+#2ny_PNUSq)$@REaF>U%89W$HWeE z^v9DxdM#gwU5*5N7CPlM2ebBONK$XOgqbDdY9GKCW*|8#xkwMq!Giahl8Ki=oF55`_aO&I2c8xHG0~5g`Sc zQn1>Uy^jLY*#Gz&lo$zK2GXokc_v51gLV4QfD@Kf9*KF7ds|N-9=fqTNN<5=B(WI;uo;Scbi|RwhJSp+;I9yl0#W)9J-Nq;Mfczr z4br^wlnH0+s>sP_?8Z>v3oSX9=5m%z5L7Fb9-i8c<#NrFE44z!!LD%UIcQcvLAef1 zsj&$2#%I#N@$!0TbiZT;u8dB6vp=HuWYcOKFd1%)yX6ks`b5;B8jv7oqy&2YAgBO! zoQ;28SDGyuJZm+PAEiujI3}GN!>jsy+UAG0bBEO?(#B96nqh}mVB8qN@x zI>?2-bEte?`y9CZB$8XdY##CP9{#>+?3La{!c;Xk5xoSd{k({a?UVl*llM$ z;@*qDJkzxR^pTl#-grZiNqO`@(-31%Z0q8p8WLAOjn`D;X)rt+#qARt3=G2yT@tAYl z=XJ$VeYndkyU`o;LXv{YZp09(!qi}@76<1@=yXZ{Q0Yzj z3T1b~)Nq8qyOHxhcHr{!f4WvYPWgvqy>=J};}#v_Es^}8#?l+gNo#=18jaypc;{OV z5D*uZ#OIqna~QOGM3DTbL6)tp=1MhMEx?^`HN{9QTcHn{ZWlMLwbCP-Nv#z>*iB$B z($u`ux}-bNPpW^PtzHx40Qrok@zDz*GltI`6(BqKE&LQ*<}kV<1ADK97G+Xb(Uqt( zMy(f)t~nWzM;_=!o#L~Zc2-JhYLxJppDD$&YQId_Yryf##-bQqN-nZ@{BbbbPQ#By zBVwgRa6tmj!7d&Uv7ZgV9LQinduz@0=k5hZoaGwOZBKsp5Wq)ZV%Vi z3q_o%(K-ingE|)%(WJ5IBo^MT9AjLC|Jvg=UauD*m@h>mnyz5gBkJky?&Z60vU=9{ z^0m(-O{iZ5A)8@a*V&gahl|W1aJ|#(rKKg9AWft?QEjLNre)-dgD72>!?jz#)vl?Y zr(=fg-2sHB4!>?XB0p7yQ{|!ngrg{!1MQreF@j_WQSBfRJ%yB;zr%w-82=$<6;NFzJ~WQl`YodKD|AkZYmi4%J=G7 z`%v)H;HVtowgm?lC(#hcnM&7{muADsr0UjOv)N;@yx6nfbi&nbxQ!0G^ON}?Z)K90 zeJ62kLirpcw~Y1%dW;b@Ft=Aq@u_9OJ+Gv~b=fT=)$e5@w4iaM#^(Wz$a}meA%qQT z(g9PbkhLo;9Hc0bDq*JAWGNqtYJkz=FW`%!k1Pp1~8*M%Gh!jyGgvbD$ zPY(NCtvfzzM1{;2kU0@e7;fKLRY&gSPs~Q=^Ma2+FF85S6!`xJSOED!Sz`|Uj7%P{C@5jq`A7m8m{-7EIOYKf)mgRdVUOQZ%w8Ml(K1zX8N+; z2O)DfjRlz_Km2}nnp7citwN);f9of5r_<(jC&>Al)Dx0@B?`*SCGX_nhUJ~0ZS?6$vJ(4}27IE-+idL7}3#0?t< zQM$hxb?SNpu93q$02N|)5ADRSb}>eNpK~-D4|`7@D`-a-xd9~@NYh32^54=n7lo(5 zz%{8`nM8!N3JZspo!i{7xwT!+|CGT0|Kf|4pa5!%R?bS1;5Ykc>zh)`tuLTI+avHX z;$-#?D*J&=93%J?cA0v{Q+|GauD5%rOD@Mzq{NzC0|V&qMl|PN4`s0N&6Vo~9=Bc_ zkKUGOwb*l_5sbz_3K+tGRYw~E)ij2~RPYUIN@0l&1sCn65)q!tALt%#;NAH$N`yo( z^jZWphw8+0r0XyXqG^UmH5FQ}glywG0vz$yxVM@Oau(m{P54m*>qVD$wlDjpJrkS- z0zo%hcj#Y_IHb9(n??2Jotb}K7xfowRU(RtiAi|W{6xDYDUJXqLv4s6NoJ7mF1Bzr zjHtWI7whm|bgK=t=AY&|i$Kj}0&YZz#M)`)`hRH)ADcnHZ%Do|_i7VO|E=y(&NW}B zGZCz_;dp$6`&DB_Zj>WsymbcCNnQhZg4tisAzIbmrA(Bzli^NU9ky(G`uZZ!93ay6 z{dHSva;Cku?p+ldcyDuJe7*t*XoIAsw&y!m&h<0(isy=>KpPiZY^W)1PoKr!3cCAaz74Yk6lTo>wZFsd z2LL!8ERBK>Gs-~pTm^1gD%Q9fuA(T{@GYBLa7$ZX-jZERQMQ z$jER#fj%U6#b}&E9eYtO%xSKraO%}Z*Or^LIQweqob9c}PFD8|rj>O z@LR(`#Pn}fel66RvxC`*qEQKYiuGaXRL@ht`Ichxc#0XwDH{K;E(0ngU)>E;4OOLW zW^JC9^N`V#8N=<*pGjsq33S-40>^$k8$WJ+Z&}?PON}I#!HuBlRj*hC0eZy!1A4rT zEi%O&_GTg+>0dy7mA9SD*t;)4D5cf=G0B;_Fi?lGmypIvsfI9-#wzx{!l0R7^36fS z3$r0rSz9C;taWa4rWu{L^nFb#gHF>Y_W79(0p8q??K;Iut>2+Lv{wYUBus(a4kk}f z7lp`F+`Hex_+LhL6?(#*(yCl%B_Hd}@<51ue@Q~+2&YU=W`wG|ZoI!S7$CSg?22#S zGoM{q6VDw z>U4futpAj%erENDOj%EL8wJLO&xE(kb-ZB3j?Sdr3+QomIIQw(W%2?Ef;vVbI>e;V zBY0}itmkt-;sU(&bD9YQx}8$Hf1&&HXO3lZre1m;*}VC8l;g8~^1VUR2Np}*u=r>i z=X{0GJS&{ODL}EW%x6=kkH2Bu09{V~-)iF@m_T9>n#S{)X*iiVD)R|x9bi4QR5x0$ zq5x4k9MU@}ran29m{(S%LaA_a?n=z+cPmVh(^9xYA4}e`SkwJ7O{>@X6;erxcHOQVX;8*IzSaI1JJ)U-=x#)y9N`9nRYP4pE*K6~75uwhd zr~n>x3k9}mHrmsmjviF-d!{+U{&G$~l2}klD~`+dw|-M$D$WM=Yx|je!rQ~YZgLMM z+-O@PQ58?YKe<#T-yFZxO1DvJ_a3h_k%)+N?FpFT8g#gmN`%(-1_W`JvIs~LOM*A* zXka?Z3V9snCY0k1ZOvT&m3wK4{ag=fG75Oeg9Wr`wHRaUF#YQ9%K6~7EUi|eCXxh7 zhU)9!GUCwxQopZeDpYuD!Y-MdkIsw|7 z1Di+Zn;Oh9tdu7MM3u4c2GGr^=T#51^SX}@zn|TFWO>xuMEvl@8y>J3;KJ*kWoYwA zfE&2^ENotUy}rmN|9)7*JMip1t>@E0Ac5k_`K<+gp9%YCJV2n8V1hv#rrC`M%~gWD zmPvhYy{u;RSu!Xv3CC>0WOQq>#T_@ndTZ@jI+LlSim3JKkN(zpoW52sM};O1y!S~N zj+^B3lBTIh0XE4aqM~72q%jAl^8yQ<#3KL7iUg_9%d4`L8u(H!>uJ){dBGK>$}j5W z6kz4OCLl&vH~%s-b(1JB5w zwmr9dX`bEw8ATmTF(5`i>jvndlww7K0cRJpd`BxyZvrGEdjR@;*lARAA;8JT#`!Xe z+?+7}onHsVO$Yi6X+1jT!+P(tqyFeNMQ)ZB`|AmRI*I zv?6YEb0DawuzmH;GL)uQ`2$ipq)2`cWC51)kufM)(u7;G!q@H9ZU!w!{?`%kMoKd5<~52G08ZNslG%@jq3HYB3Z zU=A?@t>LJ>$Z)2V(;be<=79Rh^j;eMMLm#cG#4A8tGPN~n0&Pryij zti7cZ?{N(H&-)FLr+@aT2iyy-^v_p9xoh~)_4In;-VIpsdt36C_!s!4Mc|n&Xed~7 z%MK(w2!ttrdp)Z{X+-z=VyjzbRBb3x0A277aSaf|N|wfcl14?NOEdlS38XQaMd^*> zjzwm%ep+j1$_dBTozmI-2{eyxQCkc-; z+}-82NYZFWw@R1VoEpzS1gqN#P;Q~T7GoXPfRM;f0KIaPLCvEj`ZCX@`BFQ8%8#?b zpym@+#$#yQ*Osd!73d962SZ1W|W_d=2O@!R2Z}ZmkQb< zkotNNb|-TFW2x%LOM?u|RPIEI3`#E|6#e5kgccYBKw z;O?kZ76&Scyxae;A)et2;0S{xah&Qhv!J-E8R5`8(>E>om`gNAsg^gN zH{k!LuLm&8(uLDO8~GeEaggsQ{ZIE}e0?L5)ix>xGGS6NS;Mx(37bQLD4M2l=PABa z=&&J`!rt`RQekL>P@^TrOH7hJbriEYE+rHqTWAVybW^9a*-%9rLBJ41ZbI?Eb&!|O z+Go~aVWKAUblkxZj#G)TKmUrq+@6R~pT-}Up!(L?dJw9oGpj_!^q0}o)3JYZrCSwX zl28;Pd=({07Z2sCd5#(UP9zbEv%dKkn}c{P-SRC}G*S_P8Ec`*_VxcvAdt*S7b9$Z z10^dFgzb(YY%si*!rS1-_Sl$EFO8-CsPZ^hN=vrfY{g*==!Ly&klgq5Yi~UQz14yB z_Np^qiKldZ9URElIJMbr!4k(=FH+iii@oLFuFD2=)USr^#b{#BPzG@TY={VOkF@hS zi~K(}#{htJr<;_)$M~c6%ECp{^)|OOqscaH(W@9e+KJg8`*Xq<)c2)>8ol&IY$Cah z+;aV1q~_`HVOYkb2d-}E+uWd#GVoq0prh4Ndyg4X3!y0UMTw~8i6H9?A{%^&k z&ylL*(!;70LL)}g8NA-TSr3f)Au^|S4l~_ZM?g)X9s94IKQZ74I*tTtMh7-^B#u3x z&AjMFJR3{G*bI3NwjzM`y6yv-U*&iX@uqU3mcsjdERk)Umvu*BW6HKTpwD}vN-d8c zI9BQy9%5cE3Gd{J()OXBNm4J8c7zmIJ8QoXm{4K)d0{sI4#o4A_hRjT;Re53d7uWp zZSUacqdAjD<< z_4;UsMr5H+)c#-bwSoH&ahY*A|MXpW8M0Q9Z7t0CkciB1fPjs=7utbZWy6RQWl!}f?7uI*te z2bhSc@NFB1s9qltOKjIo#yBK;S-E!mJ`(#g+2(ew+U?;do&2#g#CIb?!Mu7wu^@sr z&mDi-2^mH*^8awP*Z-Nlu9tC4{2%`T;3xu!cdOL^l^GnS;y+Z<;}siCZ`fP8TqTOH zHVsJhVma4*7}+qm?74oiWTx}47#xu3goFel13^j@4E6OfS&lX~SR}Vc8Rg9o!Up=k z&o?4-!T(>g3J{B$ZrfV;xoFO!0N{_-Fm!r;Q@R-EA|p7L-y(q{FvvS7#%|oME!Wc( zm?M(!zC&+eN2v#cBmE}-VTS$Z$iaRK42`|ufBE&hur)Tor3h+TShn+IqKW+l44VAQ z<<&&i|K3doSRT%4mUkxjOnU`XIozhyaGImPn21LBOT}Mk@ntsOiXZGmub0 zUuUxOfBuJ_0~EhkWdDtl3p0U%DM%8&G)fT`1tyyWI1pfeF4MpNY=rz2U2cR-4E#5y z?g@-AWY)(4tPmyXpWq;F7Z)yE1_KiMc9qR%pO^L3@)z832Ft6eU$KK&)Uuo_w0|^0 z4*{g??NH4&W1mj~08KvLT~bCV65ZaqMs)sZa|@tV%-rbilRdk zot^n$;B~m8vth9cwZy^|pZ)kZg@;qCm)AK))q=dq4t?2f&uHsdnTy*C(4b4W^>yQl zzjpHGblrBVwIkI>izNvzmfUxRLHCo6KZmp*P9GF=p115KdWepH^B7_lV|!2>WgR;6 zG*BHYw#q3P71`QWNGEV&@Cyi>t@lWIy1szd*VoZJV37yo%{8KlGdQVO-Y7nApVBqo zeSAaP(hrB?^8iM{jOMg2nxTJ%g=KEg?niS(49j+WA4QOj8E`*_?9dg;tDs51efR6e zve>Xa>badcsb>st+@gIS8ExI}54?zB*}*JCQIm_i=+b{l=vAuXYYkGdL~hpfHWi9= zEkbQom^|Bn>bNpfVH%FV>cWh*rFQQjSigC~$-7>wicGp;&l`FL9ld&jBL1vGD@>@>m z2t0;Y&SbVybiSq$7oTHvRtYch^f93* zSNQp{SiLlO@fry7y>WR1xTFD$0NAm{jUf2tBPPM0NPC4XXl7}*GigZwgdt;Zb8An# zwv&1MyV>V*6-w(D`r=aopk(GDV0pEB(dRqSg`(YLAU6)267#|8Yu~8YM0d)9bjKW& zK2HS3erL3X_BP`VB90|jqIAkeM&fD`G~HMs^Ls?aI<+3xfR`T{5Jfv6rd{s8IypqT zZd=R~HcS%BABmbT1p4}F7hzYTGWriRHm4LHr(Tua8G-|YEj4*>Twc?u?h9FKtG|8y zdffcwQbONrN%QniVgG&};n{O}+7T=^bWg9oZXrP-^Ths#9@_eEOv?kt&|z5VsN6lUpWidh85HM@i1Ef`i}mW)m`X6bGh+oJmp1z!g=OJ~n+ zE(emL_&{rwaw#w?4V)jN`#BwM1UVjx;^QkT7`8TtVu=uKT(Wh*oAhWy{@9F+%-&8H zOFBthlh%4bIq;9$+eOI&f2)#idj?g6)cMmhr|sy$Q@xe7)rs3D%fYh5pYuxE9<%fr zSbDm1NckLq;pQ)OzU=30FG5+-8rgv1meY?+Z*<$yEwM*%ag#|p>?@wA)^@^U>1A{4 zzLp!{Db-N|{~V~bAcCHWu_^6N)z;mi~1yIqn|TDgq8lq;32X;fmXHP?urWR1K) z{+?;C{7G^h{vKNZ8x{y2dZIT2>Cw&s=QF|K;GM4=#X9I8d@ffYL#I_ohk3FT_H!a@ z(ri!3bRvWJvQQ2vhA_43-v^88O*goJiFP7wtZH-ILVll}z3Dy~Lj>L9nV(H#9O-3| zZp|N$AR)vgKUCAzt=hT*MpVjk?|mxr+#_d!IunkkM#`+y-sgc zt#0M>^K+4NV~JRy&IY@Cy_#&*ukZiK^nY^Ep0Vc9+Fydx2dA>V)wwO$Z(H0$Kd zYC#Mc1fniv61S}}_EvggZR;;B4#e!=j63o5{B=Zk;I!J*com*{%|4 z!E^gvje2%9M91F}YOvE^D5(=7w=Ew>y0j>*-Z&|}2bGzT+Vo_s&6S{nh#1HQS6bME z7${IE4{zuMMMuWDVh1BJfmd&9>{ zof_Bnb`~2IiQc|Hl*l|Ys+UdG)r}R4_4JRvMC}sEK1|ObumQ~~xemhK`TY<10d_lb zO&$+qf}Xb&f*$rSaiICB0@(=hFzg)BZ3oe{7Vm8&|A2t=y>*Uq9^ggWN(>S&m zv%cz_b{hf?OlbY0z$!F4e8-AzLjwgZ2rgomMe!sq{IVtAfCGgwIrx4iv8iT$3VRA^ zHoMIsMv55Skz06U8#7cQc0zkZ$Uf1%SuA#d@JD$_Hs&LOc5;$1CNiCd^=_OFQ>wxg zPo8tx|8N0H2wi7BJVbJW!9`wo_)CrC8)dR?`y#&zY?miqNJCp2 z{e(;WJ=Z0FcEiPfkK^kU-|_u`COwOB|7drMHl1uff;XMw7LgARS$i z4FfFux`4+{3>w**EmyS5osDkghf(rycv?z^EwpM6eRJ|oU*kWh3D^26d2q?O2W<1% zEim#a_u1PCf~z>k7P_M?*HrsN)A{fIR@C>Nsa2S~TfcEAz&FR=r}4sslPEvgLZE`T zk3r}rJ2eGOj!#5|Q7;_o57>si9Cj~6&Y0^9Z8f;=Z(30Olp+{+!zmzYk?vz;COsDy z_BXDU@u3fA^5jpDvTikzNxB*(9PiLo+kFR9wE7 zU0!hrd>C*42(QLq7~Hwo344IHVUa3M^0FPQ-TAyk175R6LkCf)(8(WeRBw*K~(HiCFe)Caplf8D9`pf!ws*UcV$nnbJIsb zZx!~qe2u$n>zQb?SVl?u3!Hk0mCaueA<4=Grv0Mq!NK4w;a9Z>774;uVp@$qDU%1o z_Pr-vabyHiMN3sgns>QPGnw7o6Q_2+hC|cFG=ic9YzfD;8}qSe7*;9{B+@0Re(ogV zWyhjNg*WXgUTn<7EkCAjeC}4tJHc6Q(|gNR=^0faYpJX!_t$cuAmHZ|c6`N&64Mf# zjj3t)$-CwN;2(#^;^yW%XD=;=c}Fzp0`4&mKb?+y=~eZS&&|#4aWxT~EO&(9NGTE; z%%MYRX6GuGdOHp4w7~3k1rcR2%o_?>{2^)c9fF4UACHcYf7KdtK@TvGWc9w(ZYJpN z#)9D~;$&`TR$DRG`W*GY{h&XbiD)V(c3JcCRrpkIdm8N@bYU_Qe2ipaj;09P&joRm zBF>IeNvf)vOiLG6|)kc;{BInJY}J-hkbS85-1apJ%g3_B;Ff$F}=rQyg~g1xm&>c|`gEqswp zDw=60L+C??J$sTa9#ihGWKJ+;4FqOEnn#2=>lo`Cnkmt=)pDqNF-qad11Jnzk%!LJ zIu)J`;&qFfv|c}tzH2b6u8fP{Wm`-ug8z{IDy->^lpFyCoOZHrb3~KKW`B-tLjOXY z1LC#KO6HHKaFz{AF7FsP3AidVRl>T<7IjgYK*G*(*WN=b+5nTTSMktI=xVu~%z z%kFnAi>nsWQJ8HZc-Y%sXNL@BU;MS~_GWgQ&ydB6KA_Huu{b6@q)D5Z3?px03%*3k zBr~aSxsLqaO}r0HM6LV{LRp8>EkQA6M$rB2JeOVk0bcg3d3K9u+G!321Y71Bi3>4L zboP^4@%04`+MVQsB_{{djhqL1J0$Z7OeU%J2P2%GSW=B{Gv zv|x;r`KcnhZRIRR0l4xf&g3u9xU+u8?Y7ncv9aowQGBzyd5bw4C~?8H5|8iXDvnLO z6w{@267`T1S0{#JPS);QYdD=jf>zw!)&o1)xH?7ZmxQF` zxtc~I!#Pp($FL?6g~iGGBHEaxkpwOmlIkJ?*vInelu$<123#Wcl8_$3fwMio{d)hP z=5&hvIkfNs-5iXU_&q_CUWoL)3&NHRoyPIj73o#U;(^ozg>l>f8E;7m24;})wt_HZ z`-(!_lsMspkaFXV#dHMcd8+k23d6Hw%ZUxuVoQt{NEf``mc%^yzqAWsR+& zlCfVRy&#c<77O1msc#3~o{=ov6H&06R>Sh3NZ3k`=Wx_=`y!O{Asu#TL4EU;wWNPb z=P2%5sL4RR`Rcc#l2mNG0mwK*GD`$cgr@O)huGr>rm3T3BY6AEaj!STFCGrEqrc`8 zuwnGgXC+U%>yCdBp7mpEaFf321w_At+ZXY5l26w``(f9w*g_kC6e-h_l6!Ex0#g&>M#xx6RF9_hf#~jsQ(0D#BM2mUqw0`&* z68&Tr%5huOfI5(*ju+QyFYZ4xvjB!2wM7e%iBW5qjQofv>>w}H^Oee(Ew}uuG~1D& zB;<{$d@c%F_`F$Pk`kE267%pn{c9)z0)+Ap?Sg3l1p^T%B4@Uk5(RCOzKaQ4YN`kx zAx>GzumfJC%ai{HJ=MX=zFj|0G6}~)hhLuR`;!$WU&dXB6#qc-1igH170CGT6gGYm zev|z*c7=X(*REX)zruMZyTgxso4pxe-4S0~}@*%zGddq{Xr?Tg@vxwTHP4#!>m=Btnq| z-9DIp2TSd}R$4^bS!Ghh=A_4N2MvNU>W(M8F*?)yHzAyBRO0mvV%45}FR{TG79%a7 zZ*-$R3iJ(!-t%lu)bBQWx5LHuQjzI4(EOBM)i+iSaZn{}-~B-v?7t4aZWh9AjV2PO zD_tCbJkJb3g`Ey5J27$sNU4tk@bKveR7^}Vku~g8mYWIxIz2b_ejS4!E0+RkF!$tn z6qFNF4<&eM<&(Fq7OBC_o|q^JMT9AQ{!A6GT~w?GY{9NH$&@qC)E1wwdi~fG;N)sg z3uj1d0cuKKs0ju!QKLghVm${nHmazY=-G{3=lUH^r`oZ)Cs?ys3&E1h-Jgpk!)O;2 z^z)`+(D0UYwbLnBu5e=#Uaog>!P8HJag8YYiLC#n0^AFRS=h|Q&R`Hm02}QvZzH}G zZ=fYRW4RFzAkp;hp~9%fpEK?mE!9dRk;+>sG!@Lsboq&az}R(}+@eTM@W_@pA45p9CvD*5M8QPu^BI|6TNrZWZni_uSD~+z>dAd3YB=|A&tQIj@IXVu zx8L^P08GT+^0^TK6uOKZj-ms~{De^9H?L^`FAQQ)Q|18A3Dm(ho!3lPEYxt_#)xh$ zaeKSrpE?&9=T1YmcF`Umj>e>pLb+{ITxkhc()PcFH!Z+LOBm^MXCRA^zq@TVpeU;$ zWT7MbI|Mh+@`Wp={afhkxVKZbCoQSg9$uXlj0SZ`m5qP*nw7x=t1}FoCjr)SEan_K zbUSvwWp*CLMdQJFMV=ig5ETUVx=c|7*3#Ap1{XEerN%PmF0+Zc)E4FT@g*tG0XB3a9ez% zF;TAGichE3M8R3H;;%?9R^}GzO;HBZ;)>|i!XYH#gBG+7As>Q7%{Mr( zqz}AJ;rR}UI?8U4WZTU+#la{GMKqIP2L;WRt1! zKmgh#LED+;sEn0y{oCL#v0UQxvhvZAdc<-4%V4mx-~E(Lapj-QIO|lPb;|1kKP8fp z)9i{q>}Z(wtBTh~iGFjY3>S}O)M}W%k!;I9Q{w%Hl8J+ZYBlBUFXYl%W6jjAHCZqB zU67-czY)_m$sFm@UowuGS+9tOV0rUn5wF6yFPE@%Fu=DtD8TNIz-V&blze+J!qNs4 zJLR-d?Gx+>9f_0mOCmiHDZ$-*N+UV*`5cgCDHOyn6MSPwYJXsE3*BI1!d>VvxQU=A z-eyG1GcR$0i7)TQ%r!Z8g_$u7=HXR2$+V%TR`(55!V^5aZ4XW3@)1doHa|+~rPe>X z97%-w_0>Liv#5Sqdn~YmK@H0t+(z%Lu!EzrBF{ouv|7zM@86Jz00rUY<{V1~e6@5W zKn*oOO&a*K0vOFwt3&=!j;L}VzFzW*W!-8!q+GP&}oz# zKhqlURT|!m@2xMs9^-e1@QZ3rhzq5Jn(Wth6isa2m-D^-RmwPH$+0Z(@H0;yJ(6UB zScuCe2Cf3SQ0GZDuGbXF+h}$q@$|)= z{ZJaQpp++=geY9$Sm)gEB(3fcNik;5LdWq3nJ8}n5WS*!0naKohdMc7qH!(AAH~6FRrdk(*P6T;Y9)Foa>jn6wR2vI7Cx4>%-=I-YQ_q0FMTWB1B++e9Vym;CJ4;pWjwJkH<vtvWjM;ASKPOE9|xLL2bTM5=PXTDd?3_P#vB&=XY%a!u^dYs#l5)yw7gD z!PF1$8vcYff*iU}y9T!r&Va~-A=9@!#&3mI7u@c{w8R(f0M38ui*%bO zsj3;(PTwQct;($r?y>a~;favDv086fAjI{G+%MqwJcNOlNNhlU!>m@iWisHwL3^%D zSsz+&Y)GYOYj&hni!g1*;yY2Ty3lNk3dzg;<+Zkla5E@Q@(|Rjf8+O9KYqNzT4t!o ze!74YbvVx%+O*7*QRTRzqSxw#{4#3j@AA6E*6tq6$DvM+>bf!NCYLH0LOxZZFZ<^7 z4|<;W1H7#STA{_5_H_v2ifao91^Nj&P6mCf-UGC-C^}V5Sf^-kA&snjh2|@RST6dy zuOA*{ULT9`H&BBz#CR-|J%U@;1COZDeVosJc>6;-zZ$~nBlG66rZX*Kukq$2CR#Jy zisfJdx}0yPg?xpTr3yshWhXg|yMDr=I14bf;l3)DYFprzy_o`*huP3UOxLelyclSZ)~nbW~6f)x??FV9=i9ABy4pb)7~vs3j*;N%$~(w?08<+)zm zTEKlwv1~e5FwGE_khk(WE+#y5f^AQMW=s30$+QPl3~-{K-h9~)pL7^ZwuxX%`v}2Y z+n+POaaTGPLe%hxb`rqjeP^BBZAx5fHh4gBA8a7|Bo4zxi#2V#la z&aSGx-T{>g_6qVrM~8h4$|Kp5CmXmZ*~V(Fg6pg7>>qL*TYY}MbG4ZTi{gq3=-JUS z{rF8JEB%hf+fstj-Yvq~bq}4Ji0|I)KQwVv`(rjH9m-&0DqvUXWBP|#5OQo^Qxn*KJdC0P4a9T>Eu}!)|~S>g@;^9VNXzg;$+X)D^2s_ ztA<88FSC`x{-x9aj^6@;zh13~{S&LtB_)#zXv1AS=Nu@Jp5D_B9GuZC4ZOn&k0NtF& zJS^YsP`)B%QTGr7Qnvsi=moL2K!=I}(O zR7>!{TUPqHy3Z!*+}=bkwg-awfVZrZyYnH+Zn^?LhPsdzm&Tlk(_OCm-r8bxQ6Wve zf(ggQlt*XEQ5?pV|Mk8VU7JZk&4At@h0`m#`O|Is*fRPziV5tHpK^GxvhNX9UnJ<} zkAinp?Q0tGbUzIxTW`wCy~*HgS3JW)-@tm}8Dfc00%7dzMVjQbDI6Dc0I9tB*g_^fC)m zij=;s?MgZv;wCZ~$2Jw7XgfRtfrLUB0u6eIC4-E=GbAfBtVdvb&WOkxP+ULjIKDNx z?`*OM3aQy%A!v}S{Po%F$aBv&<9wC%th?*!f-gWlUY{VWO%RB|q<|~Le$NG-cO0b9 z()rvo`SbvKykq0NI_hgJ?C^Rb%JaBky=vGXF_Y_cyXu4wQwthnWE6%H>!Y5$@UB4T~-=(L?2wthqUW6=h zV9NM=D4**Q^_SKjvg3n_m?kM}z5Re!J zT_d9XDWW*ON~kW^R?yC3nxMv}e80+Z&2Q1_Cpz{x$VL#nt4x%wdQ zbj}IFD=;CPE~6|7<)+#AYnQ9t4w(fy2GV_>>{_&Df)1|p*x3d%SkT6nRtL6gZJT^X z#@`#7+;9zQt_e6-u*CG2X91-e6C@hLL+ag<+scj)06O>!@vZIW9oY{;rPhs~W2JOI z9Ue@zef`FR;bob*bL3Qfa(`|{!q7L58OEevAuqOympFT7%#|G$=Ksa6Dgg)9?b%Fu zZaqGIt40eIDOK~+PjFIECwp0yUMoIj zt^@bs#>(WMomr!MAbXVQSNj!J9fVXn)%;=83P5?8x2y7KZCqb)*p|&R$ZO$tJm8l} zX0`yq!pbjoL%Dk#U3OX7D>o!-Ee$%ir$StgM{O$)QwhO{^oM$52cUy@M2C-QV)L`A zQ%y)Q-75Ecf@jm7X#T(Ekh-xEbKK4%U)~T9IB$bp`I+7KHKxgU=GtAgG|7&Kh(4k) zQO7#l_3#N_N+RkopNf~GVr~kJxVnF7mEzdxqT&KnH^z!KaOardyMF{@;w`_X3ZuYVD2_4xfdpEILYR$Itb?z_bG zjy6@AW=ye!JUoS<1|7kMG;)1@D`_x*EG(CCZCA59`C9y^8r%-e2F=q0i;N~6x!Iju zw>%jSHrS};M2ViXUtF)%*1KvPKkQ1D;T0V70hb4IGTdpkjXaOI6lwxKtTmjHNiFbN zKZ~M#jOgg-=)JwLkhg4q?#9NS(hg<#hv%u!j3A=>t7KCXy?)H&kOt)eLe4&TO^YcVG@{`_dq{QcLr|EihS@2p0r_8?^UlxfnC%BTfTwkfBA=sF`DB4uA|+;SV|_b+6qS6i;AT)6 zS#Kge@dcxLKA*rLd15EvWn^ZyS!M{zhDuZQjYvqMG>GOAJ+O@16(ZKdi^$-l>;cD! z4wM!bIv+jF*&i_q43?|xSiu9iMhm~B3{c9-U8#^Xuw*XJ**5YEua92=^arJk+1a^o z?8TTycN=YcyySjacUA|xb}A0PC1c8G&)}D3ZcV1c!(*j489u!(qD}<9R3aX+HP@1&bhOcdb%ljDzU4XuvV-pvvmL09*Fm$J38m;!~AAVLRAr zjTUgyx-*k_DKUfx3CV6QAD`BgZEWu_JQ%XtgI_Wtno3>VGD^7t2;_%Y?EH6vCbNJc z6<8h-ze;dS6-t$wiN+;kUa-MnP_Wk8lm%@9OJ1^uhx1WSX)a0?|dm_T6 zxP+w9Vy-$bm;gJty%orh+u!T9Ta#K_+pMiGLc2)riR=MT=U0bn8h2&wo=eiO`=Ps@ zM*p04le9=vqm3UGa?JYr(?GDB7JR`s#0~rZ;R19~-Ea0h2$K;4ou-InreLCa@9rdw z-*-HOtl|>rqRTBElORMY0PZiN88US@4R=?n}dpJ>?(H+m$0?YOyip z$_ufy<@cSsf#jE6Rz2@pj>e^;bLH^+^yJG{1;lR-eb-<_S3cI7;MuIV5ULz2A&285 zmR=O7ttct;uqm6@QX{cj?oO52n|HfGCGfb9BT;;U-M?s5VL8vRY&v5p*k%+O^q9JS z&DI9J_W%!Awp3R;Z=)F;(q30p#pak9uB6GSS~c#gs&1llTtDSg>l*JC3_xjUHUKeN z{!S?K#)o?ycAq(FfNl_dEE)eTQBjtP&5*7!6sSB|Qp zc7^i+b$79ujfp8gO!60DD|dnhAPk&pubzL2&z-$6=av{{Ve@Kn7H?EIc1_mNz=|GX ztk>z0AW5(++lN04A4c-<>bqxdgSSk^EO*-sye%m?YWnP0l=n5vcu(MnfdAU#%eN7~ z^3wCIeaFbm;===-W>Lab*BqPq=VJ9dhDwQnRE{cEyL(f$A4*9su+LTt+g>2xe$5Qzq8n2+x^Gvl{|gKa*>MSh&FQW;ni_11m#m@l6S8B{Nku`3;?0g{*ceR16APb8Ds(i& zIC^hGF5rG!gLrvFFP{^XcRpT3HfR4FMuTg$h6xUa)h3zFSqyWi^u&zcc_VxX3N;zS z)5;56_@KbDzF@^-*!FWNkx@Q3B@SZyTxKzt%!Re&alK)+*bz6&T@&cx!SZ}{uO87P zMNf`;s54S|I7`ue zlNr^m!u{=hvVED%qKj7h{0twBiP^@sR>HQ+deTV$$brAwZh!KpSVw#Q%X5GEZ#w1C zF%WpS)(kx>t)TGB$d{mP^xa(Pb^piY8(Qy)_Xo+SD3R(}UDOL-m6B*bMMI$NTz$(D zB&~*C<=oddtv4r|OZA6HlmnLCiBNr_&oapy=8sQL7#2SYYm6^`xK=|zVS%?7@30S( zM*Dy(rC6;WPho|h>Ss~{**H^TYlo7UC+9b_Y5{(MmbP}TdU8i0bUJ?%TbHWTWPrC_ za-`FnqIYiOW2@OV}*KY(L+QCaE1>eqpRYmDgHQb5!?WmtXYzX*i9cJa{Nav zh{8`xg>dnHu5_=#oT*pw;s$1B)mWg7d9-1on2DQKSq(1wW`RkmEJED^nM79qzYpLX zMx56WVT911SPDOnB=oG;3zK2iidxj^tRl(F-k(itgHH@H-WyB%sFf_D7{`GK6v@{+ z5$5gYkSHmQn%qy`a$2uOCt7i?Er$i%{>c||jpFtaPnV|duH2L~o)9F5_Lea*Z;-g0 z1Y!X{U{5HJ>!0xj+kDQ79Q(v?6LFt6j|D+mNqWxdV&jZv3qERDUl>5q5F=}_(7 zR0(N+G)Xw1AX|Iv8`+zzXCrVPP)y$`DXGre#2-rw3&$Ha?jLRbwEkyP5~D9n)$IJx zR9_7h1M-RCH8$*z5K!N0-VZkAU!N>p9iCkYSR7o_xC2LwsNehOI+@FSR-A8i8VE0s z&qAvdM!l7)_RJd9yMJ3G-6s+V=hIi;n0MHT`HC+$uFGjs!ioE$fd2Ebgmq9-+Cxpa z2n_qHPYWcwt1mx%fQ*liBhg}cm>g9m7+IMFoSR4q7pNFrwa7PlZ*tC6XrbI(>w`#0 z;)Q!zMKtOiB&`2zM|GNw?Rr?s_0n&l&DhN)b)Fo3BMrGZUc1^}NV)A~eJfLZSuS%D(7r596&LY;?C4)O7I{c3j^K)LU`Im!q0tD%yD`^PgRq zN5D&Y!gjrvBEI`Xcnn8cJ>%=`5$yv`?t1rZ1%zR*z!d-Q8^o^uXLECr>h@PxZWjGW zMWdmTAkpn%&C&F6~_Eb<%&H(!Z>hlgi2HXUa?@H_2!NOK)=B!th) zkv!RznA_;Za;w)!_U}(yKi`3e;}IjGLIFY}3FW?_eG7179hETnV4))K73eR5`)lVE zHE^s6koWtty@JfyRM0{drf3t?%_FJG9j8>0T&1;vIpgNw)K(guJ1H)&$odJ>kuK9i z&Np+@)d`5*Mipa3_JSc%&|k5}1RPeFK-X5xL)o9^XQ}F8lu0L9B==FkdHpzuI3sQgP z3R^WzLJgJbHYuS^KS)IK)Q6>pwle!P^8TS3VK^B|Ac_%;h3%+JBO?{BX#_hmi>y9O z))Uem9c)v;$5r;$@2>Q_RuPDu2u)+Z29*|r)@-_bVF3|$AgN=Z=hT&9w|&(ZN&=|% zW)J*!_!KelYGt(e_>gve1ar1|_DwRcdGl(GdfEM0gNG0ujx?EWo&AtfD>~=hO7n)( zUa3x--!b;XvvB_=&vRaR<#V$clx)ct!7>a%N(FGKAyZ*gAkzUMdR`h%KzxYI&eF#U zgpl}=e}IHx`f)LQcr3$(9Tk3MpkMhA%o2G6wmBqm0o2GubtHhUIumy0y4iFAcVZJPI!f1)mQTjFjDJRjFC%j%neCdtX7#Pm$2GWtPSI{EGtVHy6)=znR;sF33dmz53Ydee_^p3*9+mn59Vw~Fv37o{{vBt}4zZn^bS@0Yb< z%y15~sUH}h8Zh(GH$oJ0-ui*bk8WfmUo5kvq$6Sa{geSD)5m22Extb_7Nd&vfd`cI zg{xL`?Z)+bo*aYx+GKO#Ta76t>?Q;BCW<6V;`Nf-x~7C!cg>M2e12NS>aH?unZDMs zii#i8LcC=AZ}G+6jSW`|hVby+*)_^|X%=VOPoiU=4e69wp5e=HbS=!_jg})dq-83g z4t~tc53xxA_7eXD<4`hk~R0Gi;?`?n=A_Ez;p$Fj+j z(XEgDCIiiQjarL&S9C_5_k3fsdl$~FMpY`im9Nu%y~p5tGql{ke2nUB>$p}K6UuG2 zVfRy+eUP8eF&j`uIZv?3c(!b||4aphTnD8a7({3KWmem8*RQvMS>^VThNP<9Ap9I zD=~c66vex#6RnemQvzg^j>Y#eo}BfRicbz-yC}k$OtZ1zrruKRIumd1&7Q(1EUoe zgI6!#V3ej04xgxu^-f@n#VV03u8Dw|-rt93roMzV2P7kt_1(7BlhyLKME68}k~Q!q zjR>IrEV!TVx;N~9gzyxpQ!!G*z2Ew|$;S$XHdFsQ&7S;|IFUAlym0bs07QP5v#d`>BC5G5H*sWrF4RQ>r~pOy_=c=#9bI zwirvR&n-HY`w@4~pJ zIcl7{o~=9G2WlssuB{3X$CqM880Es+??6xmy<(1u?9roEG5e+SUA-J(0g~4Y0Z6g9 zYQ{1D4`m2%z674s=>cg;8d9 z1eW8f!{l_9=H3buk&3~g%y_9_S?~6|TI3l~03`g_zF8toZBT`b0>>hzOA|d;$+!I( zTH3e@bvlus+IKyIqMU{Pa#t zVz9!vOg<&O;6IfF?}pjVeXl(2E^oZj|v4rMA8l$*>5!g*dL|FXLT zS`8L>5|)1?=dxJ|y3Aa&k1~8=v)q8uX39L_IO50(lEMJ?FdhIN0xYF}Y*N37Cu%dk z9^d;PLtc7`lN2GVH#(XJ_=Z2eVWo80pFdZbiQw}vqaDnN3_Y0`DpjBx{pOU!E^vuh zSGEeaIqPowoVHblY^?C6?N#$lwAAsr+Rs$K&pqKM=O{s7NDo-2)p^2BmQP!|SdSaK zA?+(BDYk$aWgMWpY0rpw(J3ZuvB`PYZ4wyBs@k1WDXvkVflk(fu&OIep`oI;abm(^dMwQ}KWjGC4Du%A^p$K!BYxxy zt)H}c_BF}yNgfbrr6m6m5y0LgfW0+l=7a)!g8)|k;w7&A&3(*|4`#F9(%<&8z_=`4 zen?SPjtfID2AKjzO15>~gF?Zifq9OQYN@aD5~9&**mb@88fT#z1BN7`2LJ$K)M;3z zXf_J3x0+VFI?O1b)1eSL93KhcLmc2~058eOY{G^j<|Z-x1N&WV7AXa4GsvD^C_egI)+nTL=CpOej3 zp!2nOm0PSimm{^nv*jNl3F8G_K@)_M{1{nnH{%~E)tO9Z7v{lD+0VT*SP-%M(E7$X zh%20Cyan~+5NeJWzGrSPnnK2KbZ&m18w31yX}m|Z^u%)i6MaX<*!?Hq;pGmpDT_(r z4*#H-S1vZK3y05PkDxscI<0mvlpT~p7udosl5ngsPf`QZ-YT3eOY?c0g3F;$_gI`M zn!IBBEk?cPJ*UQf4cg!)^sM3i?CO5N6G$s7VYk99pDXHc4(|PX)Wt>z@_Z&83H4}B z9f~QZ!|q&ND-f5<4Rt)TE>;yDV}KY#Pybu5tF*R90esYlFJS->WUTPLzN?c}Ku1f{ z@#I)ds>?U$NQmt#c9apl=BU&7D)ve2Wo-&f6#LT)fjvG?lKf%a^_h>^Ko2s{ zmNuC$en2z89-ca_jg#cl8R{3rLWBUXa%px~+%D9)yEqm724sLgDu2`!iA*{*DIhq6VPQ3OyG=$i0}~=qU>@)k ziZna4E}8xfKDBwAg#NMYI68Sza-vuvH>WBAeys<=uwm83}8m&(cKI^PBS{ zF%=bdV8r(u&x}y+ASJ&|Qjg=cv`Rjs!#vz%9v@`eU;{>ugelX(*d-VrIfC#sxw-2G zAhU94*!HVpg$*f4B<*4@>OLgOaMNcHYti;Vhv)dVew9vh5e*y*d0#Kf=WKl4SYkGo zBj`=c5hz*M;<-=0wfG-2&&3T1hh{h0-W0qpU#)11S~@>$Or-K{9hi|H{0`Jt+5tzy zcQN~;N~6{pTj(+g^jxvfRgv9hCNjL<$R_A&@n$UBf$wa03|^McaVyq?_R_YiR`=F* zoidU<2~g?eF1Eji|A;O>@(|%fT>IxC=p170OO5u=W$L|#do_mubZM z41w1ZnRKq!_IQ_&L01xRKV`dX&dj21o+HrI-)?`WJF~M*U|?X#z1wxudi~gxTSH{s z$nUQLMjWJ?w1BU79YFKOs66gP_**YOcwN+Jy%tvZCLl*PjG8O$>j~fbO>2ltp{V+< zW}A+lY^6?Q8-HmeXEG}1gSOIVri$G!pA&!N5WO$5nrRUdg!A5120X2;jxKKVjMn8; zx4^~ZcN0)ZJxCz_^#NpiRIyR$r#ym7UI@?=5C%k#g>$0R_}O9tzjGlD}RpgkCY+V&jI`* z!KQYbBf31TEED*k9i(5Z$)1{#Z~84GFtk?FM@Cp~i^Ocf+SkygKm}I+@U=#hIiDb6 zh{4|IgW2X7_9_Te;N`j9EF%m^Xqs7SE$|<*j@dx|@D7w89cVm8ZmGt^g~Uy>H9PvA zi)P*Zd>;c9m5@od-nUCoknpCxygK{5DAAy|&B6Zcs^CQno~#^PD?H38wms>nb^Ei$ zHZN2|%Er`vEu@|W^cdI&tGv_ZH+k=lj)XG8n1rl!oVB4!S=u)kvIpMMK&iB6IEXXie$3$fTMCJ zYi*}qIHh<9V^iTgb$IEQB1QD-P7@SRANerT8lX}65!-O8&K`|qksTBzN)mj}m zesHn-#c>!2rfkF@u^w+7fBWT$S$;OTRDS|2v;Xl6#V%(5CvenMATf_K$;#?WRD1$z zl3M`WWqx-Hgg@T!!^rfa5%EU&2-r@y{nlcOYO$ZMwa2|dBSUV>XLh~M_&2*NHtmM; zTh2%0$%UmsCr58X#Fz;3@C2C}mxI7i% zA_oWGzA||0pyjxCj47Q<(8Se1D7M%$aeZ`=0FTcV6y_YrEmrr-nUhUF~bglc@t@HoZcqEGim%H?K4z1tR986}tf&o?p| zO-O>0as(FLPhjA#R?|1tJ{ULyhhf3i%~#hI%F59P%f7#UDMX}PAreg$ggywgU=rb_ z(|~63EhWzm=8=K+urN(0eXaoZF7z_!_ zU7&LJPuLGBJ&!gKZ?BS=U9YapNp##k@fr7}ysY;+gi*7Z4U@B8QasIP2qvZl)j$RfdFn`&KNLV9^DgB5%F2*I77;O-NaI*cIl z<2o(OVHd8%kML)wBru(UaWIKHK>WPb&EBh#YrCudiq+nHpf7Eba1RARonL3 zr>9&`&Uhr`?@+C^IXjLX1Sk`vGgS(XZicjhxbixXnOSMe{#Jw%ZGa(QfwpUMXhy|Y+%O8L9 z8R(5P#b7A6mv#Nsm|cV%;AxTLCZ*Rv3)PDv9zTx!67S?7dYyhHAPzu}>^5g%A_#?$ zO__Ci$L{%#jw;9*R2lnLiUoiMlc;!Q?Po%?9Y7US+5L(^f4@Eu?0wEGBlr{|R?nyL znZU)u3LAS&74wgNSoKkVV$0+!MLL|Tv(@L*%-UhvNo9E{%6E|Z3}U#>l5S!v9X&GX zpjis2R;>>_VxNMQh90LM#NicL@BoM2>ijkAkw^T{cZf1QuAQ^f`*YqnUPYQX!*xh< z|H?HgMN(g(N7BHn%HfG^kkKT6(dyneUImmi{a=}=jhemS$VUNHOG6!!y}hdz#*}Ns=)mdx?Mh@#YpyRU ziDs|4@XY&_yxPPhXgs`V2r&+|q8;$d44~|~kvv2~PjOM9i-+;0e*@D(2!4#TP^>s> zE57rx`}-~OW)FkC*h#knHyj}4Gg@ybAoE~NvdN_3AD&bS)ou4kA0qgpLs>J0`<2Zmcq2mVtA`7O+LW6T zw`Yd1u|nZw1sYGkixCM4J{{Tv*#s%zU;nKhzGMIjL&M{HbfR&rt)+S?glcVEySrkr zS6#H@p!5ctY@mS;=HmGKQ-zSQLP4%OExJ z|M=*$PXXlj3>*o#tp{^;tVQh*;A%xFqlb=TJ%kbqM0BCf*y&%1LG5(|W zya=zOW0~w=zr}82Pci-T0C>|V+UMhA$bM7v?*dxbl^~#8oEu@I3?B8DS{8S(<9TQP zr62t!j()dlFnY=?4H@k!#2vEAPSfM6L_IoE8ZU zPM> zocq-)Tz>aOzsGPLZhJZxep@2ld3OjjnBB)Q1tHggk)F6;YjK^vxxr$^AMXh=d0zk)$QZB zWI+d}r_rC2D!`_z3$RD46}|N2ZR##zUXae>JMB)25l5F^VP5^X%MjCA#dz1gD5le= zCtzr784wqOe(Ha@goq~m1qJu`Y>Y~VpwLn+W*npsREG<=3kD~g<1PRHNoQq>>nCyVG*)_jK_5D`1N+|SB zLoM0k_+)Cfn!^cxd*WWgyp!?i?ib5fyv2uZ&e!&OP=$nK2slYB5*SoH0H}=S!uQen zQxLTgygbJg;KaC>z9Cz#fPYU`wy;im(tu#JcJgTyr5#;(H4F6pvr~5!ZS8lp zQ?yBj*OL}7Sy?$pO}3#i%n3?057ezhI0f9}90z#r2RmK#6jFW~?O-zIx9x@@;p|RXu?{zC*kkDopjLSxx_TX@R-F zFf9NoFu;2XB=&HQg8%rBKG6=~fx#cq{0aCZ0SJbR?a z>aN%~*nx_Mr%=Br{9*iX45WUk1>|E$aN zwC-Z!1RAie*{}c6mQYSwFO~QS;LZw9s>aT|Tsrgs(V;uL@ult3% zBab6Y#aP7xsEn?%a!{lk7*>qp`BO&x*?0Dre_TpoxbZIln>iv#PXJo|C;>QlZpnO- z}Z*!E~k_p!{6lEs=DgqUV9W==jwZ7>@Qh?z1$Gou#p zca|lI_wv5mQiK;)_M#y+7?{^RScuM>hJFRV{()Tp*H6^c0ee^vY|Z z{v*Ixxd2W1#pBWJT&%tLsTx|lX@nRrF;Sz%4rZ7{Ah@u`f-)qI&DnN7o*@y4qhzZ+ z^zWwBL#irN!68+!N?%YC3fshfc_3a1*ah-yL4Z7`6U5v)VB6*rn?h%A}2ca znoPEYBnYMoNO}$L)du2;{h>TeKR952W1>%?tY8p;=)XJ++pv4Bfth`K)&aD@o7iY& zQ|cD?j{Wtk^iHQcq2vtRc3D;a(~zQmr!W6Y%3FFT^V+c_PSK+S7{(Ioi6Astktg5* zK$!;%CwWEx+IM0U9Ke-wgNeS10vhJsQ$VL=u?AahdOG>EkKAl+4t}`7VKrz4oAKTS z&p*IlwlV(-(Ig%cCpk!gMQ?v6{1!q@w9bqJQGek0tYa+JFR4+T^1`nm*6#S@ghUXf z`(sA`$HRCAJVz{mBv+n1>BGT{Qn`O`6-F7LS+*c7QeXqZg-@bt!SM=n@Gek_Q9|Vd zwV=-(#Pj;}v<>6rOl&f#A7{l>B9yx=q(QN~ALxy@2j?e@Rzt%(2dOXr6N?Hl%h69ZhJ&`4^$hQ81+K6NFWp8yS_g5yP6g&-WO?4_kLY)9 z?AD=O8rqtMPY)3pHC?_H6Bj3LWyTBtHI>N`mChgTi$Shfw<(Vq-ox#^qeFsV@*X$j zeJlSF&nMW(ohh;Ov|$OtrFsu?ATYdHh8!efr6))}vB|W)a%wgKtA@w=p!J~|09Oh5 zuS{(5Tc`-lo=;hD4C^&pTqf_5(?daxCRY&p{&Ffb@&_HrWvvo*G0bP3V+~M<2P>5lIawl~ zcLDV?ZT>Oru*1$@4b=@rY_UOE()jO)i#yhs*c zkdx~Lae68EAX;CtYkVAbjYeJ`H{n5mH#;OBF-i4P14$wto(>)w5g!Z&+4V8cQvtNw z1g$7T0+^KnMJW_Vrd+qd{;4=Ij$HZgT4;AP!T{P4J)&tNQ_BFLY!Z6d5MJ>JVRkOo zjNor@Fj`zUueaL>Uaj}ZyTeErNO;>-t9O^I)8Gh}>$hSth%rZuzA@_6(M1DVWi)^GmABcn47OPgY+fQM1WCU_P_e=yNKp~$P!KV zuG>?MHXAbs1_yP}H&LlE-{D80U+8FQY4lTIBH8V4l15xP6~3D>d5luColh6Od3lZ* z19?9s1bVVU{vc?+LW5#64FC+lsFcpJ$-eUdXJwEm;X@Y|8dR&qTT1l)-t2?eWq2C*mlizQPU#h zU!!Nzux(kj(|F(-i7@c>kqrpViRpxqC#ifb|2W2|G4Nq~(M2O{#N|gSqPF^L-^Wy! zZB8@xcv>tU&m;5>Y^4>NYx^ATZ;B0}pMh$p!m@Trdh~Kyz%{muR$iep3VF zPm?qG&#KIC4-94^UPFNxROI7BdYAwry76=;t|vMTNs$U8Vzges5fjB|c|821jCiaF z{0o^gW&)r&QO#Rp8iI9wPf(rX1^d%PFd$UfNA)~c3HhVU4ZM(Q0mSD)JIo8wNyukb zYOisxb!YMpIda~a!)@hV_m_w;^nZ0Dq}}BS6xNiPkBaR_p5faNS|1xnlj;6-{%E-o zH&uOSc{Zs;2Za6bfY`)o(|u91tJF*nJcK)ajjY()_kjr7&~8dZ0HO4tIp5r_$tz zo(_pj0KstJQ6h7Agt14do2vWcYn>=6Ah`J5MI8`qu=kSp1IoBxe6O7*F(ba7;eX=g zGh7^f_`bVLxWAZcWWdbK?|Bk0=~uxqq*;vxlqO4DSLV7pP9J!Ml$%WBBXv!{< z)Gj|8DL=BaT3HLI(RMbvALn^WSqcSOp`c0nkk)gDn?aYSHs4na_*$CW;_BBs$}S$LKxFy@=+{R+i6W_rZM#i^o_P zHxQvljV2ew%%*(^9h|W_R@OjaS_o0zV(JOiVOQ-cv%ZERty1B z9LFa$LO}kS{piEUcw>))-TgFafW`-A8fRUB!z+)ZNg+Ed`yUTi+0XxD*c>eZxS{YG zcp$g4q5oR99`Ht9y!J)9LwZv88v{xBr!%EN{Jca}`Eugzsa#hc$5Nmq^n@G1w{S;N@d* z`IENBVM;lN+O|Ghr zRm5BHaA6RpJv10)Z(C3FVcu{`JW#T4u%FwsNk?Pq?dw$=LH8i^SIm_BylNNf1@Q{j zWDjaoP`sbXzMshB{SE`o?HnE3AuwK;&Gx8xr5Yisr>6Y^UH)8F2_AE9)sB4?*!jQs z4Bc7xD2Wp(SsAqQ5W@t1&eu8jy?Ok>?G1f_ZiSZUzYj#wxj#YK=j$9rJ79;uPtB&M?B4EiC1mHJqQY#c1Vdz+xeJ(hnQMjhsn}0i4a}T^#skYo00{{d^_aOE;a@ygvIQp&|aH->u%Nzoo3g>K{E%TbmgI9s8%R@yu zaLbJjwpvNCee}>5o!xTO!mxk8Vshc=pzK%SjW_|OnLt6WxN$Us5KNqs9j==Lk}*z{y}Q*%0`a-qT**?FHY5P4!t7)MZp z)sht$Cj@^?GJiH0FP6r6ulUNM@sgZ|>X;#sIb58L_6JfOfC>0<3lSJeOFMag&1pOD zDwB*CsCyetVQ#T=W-oYEEumU{FptWRD=pplE2s*y-hhzPW+4Ic6*HMxuT^BXbjQa` zx+&*YashCc}<1+4NNlD2D(d2-^y*&XH zbmwkXt4@Eh-(K0!)U;@U>Y#{Or~?AiGPbZV^UeQd!IFB!{%k24(wq-L+{ePppYMwl zyK}`MeeZnXr2hA!*hN<8Hs5S7adS{9(bH{hbba8jwO&p;uj&HD2y;GFjL1iY!E&T{K;JE6puQBBD5z62#Hw2h%CNKNHEWTHl4Zw^UY$z%N9?$)y*qRhv0*%|&6 z%|%58RXK=r9QnL5Ok~NY8V8l_=N@B#NY#gwjjBm=J5lS1D2r5>1S*2;!Ag=j&v)vc zFZkR49&pkueydWH#{ZFS*`rTfaOBYC!0>AJM}GzvbK=mKJP*11Q{vifBt;ITw)5RF z!bsw&knDf}n?t_+;9HSy-B$1C&n0R0j%k&iiw7>w`clx(pIvTXfsC}(nd5ulqcUz} z$;eqhf*)LVikmmaz7pG=)Hx7rCdF*NO8>oi=rU^BZ#E~{UzCzD)!uAURN;QFcCDub zqDA2{%l_F~dQC_ZNyMN`NR{5^`+lr*w%SOrIXJrGI$Yhv-6$cNL7I>jOwl86U1$dU z28=uy&ycB2t0f24RmY(iwe3KCu6U=Lg!3}BR{t?wcXWKe52q(~mR3%M68E!QD#P`u z?eh2&Li@K4BypfFQ*}041Hf;wHe%xf;U5YrUb=Q}@hmJDe3j@8 zeJ;{jqiGMb3dWLqd09WRTjoEc)+L@6qs*+=98aGo}nx~bU20SNrlRZ1L zcb8j4Am|(x@nNA}KrAn{wIGyTxdJ0iiXJESt;jg?Tgp*}jr@O&RMZ)vEl@ z@fmwsMf-Bi_&o36JbR0JGG^OkrQ&+6n|{Ri<$&dKc)~m&+YDpff}fx*Eg?~zJ_C$| z_O$Dtxz+b@^Ok5CTL1wZ3f(@OlO5>%>Vckh)znk|QBeU5+A_0cRyGtzO=AZVtm>c5 zOGM^d3PRBy#VraR$jr0aW~oZ&FwjOzRuoj|E(Kv}qdGdWAKz1Zim|{^){7C@o<<3n zgcV^XgL`IdrN152dNsL-q;AT7$P5AMgWiGiaP6~{*AP~WW_|TOMTse5Dsrf{<>G;8 zOJ6BzpDTY<#k1kSs4!Ye6a&lse3$#l#AFQ4`qiyBJ!1yjYt0=qcK|YJvzs(5 zuA&kj-!0PJ;(m`3;!>Ps-tV7U8`|F!#6~l){WIv*^v<&UeyjiEaZIE}wNc3;^Jt6& z$Q0@21tknHsp7AfU-3&}5aKtT9u%|PF)|EM(G4pc2m6lsUsLr?_r2O*zlt{1L4lm> zHk-k$c8iS!)5j>|f&SAYol~$d$n*wiH}w&_M!UPfK~KCfy9ABXv493&vSy*=6QDc(99f;wq9A` zH}gh_kf-{M9jnbsLkM7D8t)due~PXJstWA(d#xib2^k;Xis|b?SnyvfVQQ-}#e=Oh zk7&+zruCN9fl8`9P~GJ(5HN4-g_pY{5K4Hdureg7ClBF_jjCsKeJ(;S)cb72hLuPO z!o5#se*?154src4bSGXj{9MvUyp2rv$ou!_(Y%CGZIVFG>ys>PeOoIHK@3{?jGh>l zxN%Yt?L`>22QZ$T|9K_`dDl!+Mg+yAM0cpll~17ahcF~w|QWcu1tx}T$CIy1if#R&b7oJ z@&8`l_-Tp8YPkacun{MrAd#sjtp9sU6@F>|ZWxX(C2!sSeE4g=%Z~FV-jjwNG7q#x zJ}H)DpkvZ$pjF|6y@}@ADFs09533&$b3S{`doH$}O?&bn(v7^F>OJ>*W=>t-)4x%F zMohysFin2!j0)OVWBW4WeA0G{#mDUpfNL>9sn#GbX}pkDpHiuiOp}tGs#P1(Sv_}9 zzXpy@@rBr4$<~dRfF_I6L**2mDpcU?_cHR!@HW#UFL9@ZmsNQK_uFzAO&>C$2|M{^?@EHjQiPq^`t=4q{lA1qtj6QnTkWa-X?b*X$W7K%XmYZ+#H%Ced(qJh2{R?cl+AfVx`Fy47lW4;DkTxeg3GLh zGC6q<#5b5N2)EGRRd2r3@_K}2;4ow%`%!}HY#zLs=Xh~G6?-q0nG9@JmD@GUBzgL?#|{R=q0Ixr#*Tfo_pL= zhjT!@w%wg}V`5TnHu96%-8CvFC%wBQ);e=7HCo-jldR+J>Id5qA$bgRt4^c=Z8H2@FknJr z+y_U-8p*Iz?uq5-24M(|>WbQ>5OK>NDCb)P*9g#zyHogX0JG!)o^t*c-Db0_gk=vV zV*GIb$xTigd;rWZ4pj;l7h-YAve;dGSycXU!r849)7}WpO#6dM{NgLS^{Z#PnJ6`o z@G(_JT#q5IYfUswL$#J+J%gdm{l<8s{hDP0P@Nb4$6}5eiD~SU5|!^Pupn7A5IIpgs`v% zy^|^%4T)CBkuq$!zVwmLpfu>U+7ohAaS+n?RNY18o?Te$2nb2$7r<;w=MM06JN+fx zkGHqvgS0YLhDvNntkdNETyL2Qlk9-ScC zir)1-#x`G4o(mx!nlUwzq;zz=iG}G zreAr`DZM;T#k3a@3w3-461ZId!L~$jMzt)LE*R1ogi1Y+zbA{q(48bDIwfHo+G_Md zP0ivu*IHz;r>`gX3rz~13T0P3gGt!9ct0&7Vu)Bow}*H*jx>8K*OF*XV(XgHStLAM z;F}_?hOFki*@@RRG^MH+0ps0X=o2rRzG&U;t8WBCNh&eFUUiPXe~A z9+Oem0@;N|^QCDcHqqAois93D&*K{$9s~M%BgQK2m?xseb8)8lCb#KNGbYAaqC|Hop(lYBZe>G9Vuc})8U>}+>XG7JOW z{G1`bMgOkswliG{-?tbA?7uBuPjO7~s-vWYe>xLrWw*T>+K84421A29M|yh^f>3z7 zfc}-P)#jl)`qLAk^}n2mSzg)Y;0v14F9Cx-uw+j zKw=0cMq|B!9-w*rt?s`)7h63rgf0oiK&JiOmGX^%!|_F}yQi;@@^-;M5`60Dpk4p&3rovX#}PNRv@6}EvZG6(%zCF=o63c72(@C`TO4aCqIXHS z#v20fDA<7IOlWlVQva0#%jhuSc=mF`a*gbhlXhW_Q%B`?0cIE{C-EnHaa!jl3>M>w z>}Y3$BbLCH3xM0_AR#4vV?C}B�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

| () | [ INNER | LEFT ] JOIN ON condition } +[ WHERE expr ] +[ GROUP BY [ exprs | GROUPING SETS ( (exprs), ... ) | ROLLUP (exprs) | CUBE (exprs) ] ] +[ HAVING expr ] +[ ORDER BY expr [ ASC | DESC ], expr [ ASC | DESC ], ... ] +[ LIMIT limit ] +[ OFFSET offset ] +[ UNION ALL ] +``` + +### FROM + +The FROM clause can refer to any of the following: + +- [Table datasources](datasource.md#table) from the `druid` schema. This is the default schema, so Druid table +datasources can be referenced as either `druid.dataSourceName` or simply `dataSourceName`. +- [Lookups](datasource.md#lookup) from the `lookup` schema, for example `lookup.countries`. Note that lookups can +also be queried using the [`LOOKUP` function](#string-functions). +- [Subqueries](datasource.md#query). +- [Joins](datasource.md#join) between anything in this list, except between native datasources (table, lookup, +query) and system tables. The join condition must be an equality between expressions from the left- and right-hand side +of the join. +- [Metadata tables](#metadata-tables) from the `INFORMATION_SCHEMA` or `sys` schemas. Unlike the other options for the +FROM clause, metadata tables are not considered datasources. They exist only in the SQL layer. + +For more information about table, lookup, query, and join datasources, refer to the [Datasources](datasource.md) +documentation. + +### WHERE + +The WHERE clause refers to columns in the FROM table, and will be translated to [native filters](filters.md). The +WHERE clause can also reference a subquery, like `WHERE col1 IN (SELECT foo FROM ...)`. Queries like this are executed +as a join on the subquery, described below in the [Query translation](#subqueries) section. + +### GROUP BY + +The GROUP BY clause refers to columns in the FROM table. Using GROUP BY, DISTINCT, or any aggregation functions will +trigger an aggregation query using one of Druid's [three native aggregation query types](#query-types). GROUP BY +can refer to an expression or a select clause ordinal position (like `GROUP BY 2` to group by the second selected +column). + +The GROUP BY clause can also refer to multiple grouping sets in three ways. The most flexible is GROUP BY GROUPING SETS, +for example `GROUP BY GROUPING SETS ( (country, city), () )`. This example is equivalent to a `GROUP BY country, city` +followed by `GROUP BY ()` (a grand total). With GROUPING SETS, the underlying data is only scanned one time, leading to +better efficiency. Second, GROUP BY ROLLUP computes a grouping set for each level of the grouping expressions. For +example `GROUP BY ROLLUP (country, city)` is equivalent to `GROUP BY GROUPING SETS ( (country, city), (country), () )` +and will produce grouped rows for each country / city pair, along with subtotals for each country, along with a grand +total. Finally, GROUP BY CUBE computes a grouping set for each combination of grouping expressions. For example, +`GROUP BY CUBE (country, city)` is equivalent to `GROUP BY GROUPING SETS ( (country, city), (country), (city), () )`. + +Grouping columns that do not apply to a particular row will contain `NULL`. For example, when computing +`GROUP BY GROUPING SETS ( (country, city), () )`, the grand total row corresponding to `()` will have `NULL` for the +"country" and "city" columns. Column may also be `NULL` if it was `NULL` in the data itself. To differentiate such rows, +you can use `GROUPING` aggregation. + +When using GROUP BY GROUPING SETS, GROUP BY ROLLUP, or GROUP BY CUBE, be aware that results may not be generated in the +order that you specify your grouping sets in the query. If you need results to be generated in a particular order, use +the ORDER BY clause. + +### HAVING + +The HAVING clause refers to columns that are present after execution of GROUP BY. It can be used to filter on either +grouping expressions or aggregated values. It can only be used together with GROUP BY. + +### ORDER BY + +The ORDER BY clause refers to columns that are present after execution of GROUP BY. It can be used to order the results +based on either grouping expressions or aggregated values. ORDER BY can refer to an expression or a select clause +ordinal position (like `ORDER BY 2` to order by the second selected column). For non-aggregation queries, ORDER BY +can only order by the `__time` column. For aggregation queries, ORDER BY can order by any column. + +### LIMIT + +The LIMIT clause limits the number of rows returned. In some situations Druid will push down this limit to data servers, +which boosts performance. Limits are always pushed down for queries that run with the native Scan or TopN query types. +With the native GroupBy query type, it is pushed down when ordering on a column that you are grouping by. If you notice +that adding a limit doesn't change performance very much, then it's possible that Druid wasn't able to push down the +limit for your query. + +### OFFSET + +The OFFSET clause skips a certain number of rows when returning results. + +If both LIMIT and OFFSET are provided, then OFFSET will be applied first, followed by LIMIT. For example, using +LIMIT 100 OFFSET 10 will return 100 rows, starting from row number 10. + +Together, LIMIT and OFFSET can be used to implement pagination. However, note that if the underlying datasource is +modified between page fetches, then the different pages will not necessarily align with each other. + +There are two important factors that can affect the performance of queries that use OFFSET: + +- Skipped rows still need to be generated internally and then discarded, meaning that raising offsets to high values + can cause queries to use additional resources. +- OFFSET is only supported by the Scan and GroupBy [native query types](#query-types). Therefore, a query with OFFSET + will use one of those two types, even if it might otherwise have run as a Timeseries or TopN. Switching query engines + in this way can affect performance. + +### UNION ALL + +The "UNION ALL" operator fuses multiple queries together. Druid SQL supports the UNION ALL operator in two situations: +top-level and table-level. Queries that use UNION ALL in any other way will not be able to execute. + +#### Top-level + +UNION ALL can be used at the very top outer layer of a SQL query (not in a subquery, and not in the FROM clause). In +this case, the underlying queries will be run separately, back to back. Their results will be concatenated together +and appear one after the other. + +For example: + +``` +SELECT COUNT(*) FROM tbl WHERE my_column = 'value1' +UNION ALL +SELECT COUNT(*) FROM tbl WHERE my_column = 'value2' +``` + +With top-level UNION ALL, no further processing can be done after the UNION ALL. For example, the results of the +UNION ALL cannot have GROUP BY, ORDER BY, or any other operators applied to them. + +#### Table-level + +UNION ALL can be used to query multiple tables at the same time. In this case, it must appear in a subquery in the +FROM clause, and the lower-level subqueries that are inputs to the UNION ALL operator must be simple table SELECTs. +Features like expressions, column aliasing, JOIN, GROUP BY, ORDER BY, and so on cannot be used. The query will run +natively using a [union datasource](datasource.md#union). + +The same columns must be selected from each table in the same order, and those columns must either have the same types, +or types that can be implicitly cast to each other (such as different numeric types). For this reason, it is generally +more robust to write your queries to select specific columns. If you use `SELECT *`, you will need to modify your +queries if a new column is added to one of the tables but not to the others. + +For example: + +``` +SELECT col1, COUNT(*) +FROM ( + SELECT col1, col2, col3 FROM tbl1 + UNION ALL + SELECT col1, col2, col3 FROM tbl2 +) +GROUP BY col1 +``` + +With table-level UNION ALL, the rows from the unioned tables are not guaranteed to be processed in +any particular order. They may be processed in an interleaved fashion. If you need a particular result ordering, +use [ORDER BY](#order-by) on the outer query. + +### EXPLAIN PLAN + +Add "EXPLAIN PLAN FOR" to the beginning of any query to get information about how it will be translated. In this case, +the query will not actually be executed. Refer to the [Query translation](#query-translation) documentation for help +interpreting EXPLAIN PLAN output. + +### Identifiers and literals + +Identifiers like datasource and column names can optionally be quoted using double quotes. To escape a double quote +inside an identifier, use another double quote, like `"My ""very own"" identifier"`. All identifiers are case-sensitive +and no implicit case conversions are performed. + +Literal strings should be quoted with single quotes, like `'foo'`. Literal strings with Unicode escapes can be written +like `U&'fo\00F6'`, where character codes in hex are prefixed by a backslash. Literal numbers can be written in forms +like `100` (denoting an integer), `100.0` (denoting a floating point value), or `1.0e5` (scientific notation). Literal +timestamps can be written like `TIMESTAMP '2000-01-01 00:00:00'`. Literal intervals, used for time arithmetic, can be +written like `INTERVAL '1' HOUR`, `INTERVAL '1 02:03' DAY TO MINUTE`, `INTERVAL '1-2' YEAR TO MONTH`, and so on. + +### Dynamic parameters + +Druid SQL supports dynamic parameters using question mark (`?`) syntax, where parameters are bound to `?` placeholders +at execution time. To use dynamic parameters, replace any literal in the query with a `?` character and provide a +corresponding parameter value when you execute the query. Parameters are bound to the placeholders in the order in +which they are passed. Parameters are supported in both the [HTTP POST](#http-post) and [JDBC](#jdbc) APIs. + +In certain cases, using dynamic parameters in expressions can cause type inference issues which cause your query to fail, for example: + +```sql +SELECT * FROM druid.foo WHERE dim1 like CONCAT('%', ?, '%') +``` + +To solve this issue, explicitly provide the type of the dynamic parameter using the `CAST` keyword. Consider the fix for the preceding example: + +``` +SELECT * FROM druid.foo WHERE dim1 like CONCAT('%', CAST (? AS VARCHAR), '%') +``` + +## Data types + +### Standard types + +Druid natively supports five basic column types: "long" (64 bit signed int), "float" (32 bit float), "double" (64 bit +float) "string" (UTF-8 encoded strings and string arrays), and "complex" (catch-all for more exotic data types like +hyperUnique and approxHistogram columns). + +Timestamps (including the `__time` column) are treated by Druid as longs, with the value being the number of +milliseconds since 1970-01-01 00:00:00 UTC, not counting leap seconds. Therefore, timestamps in Druid do not carry any +timezone information, but only carry information about the exact moment in time they represent. See the +[Time functions](#time-functions) section for more information about timestamp handling. + +The following table describes how Druid maps SQL types onto native types at query runtime. Casts between two SQL types +that have the same Druid runtime type will have no effect, other than exceptions noted in the table. Casts between two +SQL types that have different Druid runtime types will generate a runtime cast in Druid. If a value cannot be properly +cast to another value, as in `CAST('foo' AS BIGINT)`, the runtime will substitute a default value. NULL values cast +to non-nullable types will also be substituted with a default value (for example, nulls cast to numbers will be +converted to zeroes). + +|SQL type|Druid runtime type|Default value|Notes| +|--------|------------------|-------------|-----| +|CHAR|STRING|`''`|| +|VARCHAR|STRING|`''`|Druid STRING columns are reported as VARCHAR. Can include [multi-value strings](#multi-value-strings) as well.| +|DECIMAL|DOUBLE|`0.0`|DECIMAL uses floating point, not fixed point math| +|FLOAT|FLOAT|`0.0`|Druid FLOAT columns are reported as FLOAT| +|REAL|DOUBLE|`0.0`|| +|DOUBLE|DOUBLE|`0.0`|Druid DOUBLE columns are reported as DOUBLE| +|BOOLEAN|LONG|`false`|| +|TINYINT|LONG|`0`|| +|SMALLINT|LONG|`0`|| +|INTEGER|LONG|`0`|| +|BIGINT|LONG|`0`|Druid LONG columns (except `__time`) are reported as BIGINT| +|TIMESTAMP|LONG|`0`, meaning 1970-01-01 00:00:00 UTC|Druid's `__time` column is reported as TIMESTAMP. Casts between string and timestamp types assume standard SQL formatting, e.g. `2000-01-02 03:04:05`, _not_ ISO8601 formatting. For handling other formats, use one of the [time functions](#time-functions)| +|DATE|LONG|`0`, meaning 1970-01-01|Casting TIMESTAMP to DATE rounds down the timestamp to the nearest day. Casts between string and date types assume standard SQL formatting, e.g. `2000-01-02`. For handling other formats, use one of the [time functions](#time-functions)| +|OTHER|COMPLEX|none|May represent various Druid column types such as hyperUnique, approxHistogram, etc| + +### Multi-value strings + +Druid's native type system allows strings to potentially have multiple values. These +[multi-value string dimensions](multi-value-dimensions.md) will be reported in SQL as `VARCHAR` typed, and can be +syntactically used like any other VARCHAR. Regular string functions that refer to multi-value string dimensions will be +applied to all values for each row individually. Multi-value string dimensions can also be treated as arrays via special +[multi-value string functions](#multi-value-string-functions), which can perform powerful array-aware operations. + +Grouping by a multi-value expression will observe the native Druid multi-value aggregation behavior, which is similar to +the `UNNEST` functionality available in some other SQL dialects. Refer to the documentation on +[multi-value string dimensions](multi-value-dimensions.md) for additional details. + +> Because multi-value dimensions are treated by the SQL planner as `VARCHAR`, there are some inconsistencies between how +> they are handled in Druid SQL and in native queries. For example, expressions involving multi-value dimensions may be +> incorrectly optimized by the Druid SQL planner: `multi_val_dim = 'a' AND multi_val_dim = 'b'` will be optimized to +> `false`, even though it is possible for a single row to have both "a" and "b" as values for `multi_val_dim`. The +> SQL behavior of multi-value dimensions will change in a future release to more closely align with their behavior +> in native queries. + +### NULL values + +The `druid.generic.useDefaultValueForNull` [runtime property](../configuration/index.md#sql-compatible-null-handling) +controls Druid's NULL handling mode. + +In the default value mode (`true`), Druid treats NULLs and empty strings interchangeably, rather than according to the SQL +standard. In this mode Druid SQL only has partial support for NULLs. For example, the expressions `col IS NULL` and +`col = ''` are equivalent, and both will evaluate to true if `col` contains an empty string. Similarly, the expression +`COALESCE(col1, col2)` will return `col2` if `col1` is an empty string. While the `COUNT(*)` aggregator counts all rows, +the `COUNT(expr)` aggregator will count the number of rows where expr is neither null nor the empty string. Numeric +columns in this mode are not nullable; any null or missing values will be treated as zeroes. + +In SQL compatible mode (`false`), NULLs are treated more closely to the SQL standard. The property affects both storage +and querying, so for correct behavior, it should be set on all Druid service types to be available at both ingestion +time and query time. There is some overhead associated with the ability to handle NULLs; see +the [segment internals](../design/segments.md#sql-compatible-null-handling) documentation for more details. + +## Aggregation functions + +Aggregation functions can appear in the SELECT clause of any query. Any aggregator can be filtered using syntax +like `AGG(expr) FILTER(WHERE whereExpr)`. Filtered aggregators will only aggregate rows that match their filter. It's +possible for two aggregators in the same SQL query to have different filters. + +When no rows are selected, aggregate functions will return their initial value. This can occur when filtering results in +no matches while aggregating values across an entire table without a grouping, or, when using filtered aggregations +within a grouping. What this value is exactly varies per aggregator, but COUNT, and the various approximate count +distinct sketch functions, will always return 0. + +Only the COUNT and ARRAY_AGG aggregations can accept the DISTINCT keyword. + +> The order of aggregation operations across segments is not deterministic. This means that non-commutative aggregation +> functions can produce inconsistent results across the same query. +> +> Functions that operate on an input type of "float" or "double" may also see these differences in aggregation +> results across multiple query runs because of this. If precisely the same value is desired across multiple query runs, +> consider using the `ROUND` function to smooth out the inconsistencies between queries. + +|Function|Notes|Default| +|--------|-----|-------| +|`COUNT(*)`|Counts the number of rows.|`0`| +|`COUNT(DISTINCT expr)`|Counts distinct values of expr, which can be string, numeric, or hyperUnique. By default this is approximate, using a variant of [HyperLogLog](http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf). To get exact counts set "useApproximateCountDistinct" to "false". If you do this, expr must be string or numeric, since exact counts are not possible using hyperUnique columns. See also `APPROX_COUNT_DISTINCT(expr)`. In exact mode, only one distinct count per query is permitted unless `useGroupingSetForExactDistinct` is set to true in query contexts or broker configurations.|`0`| +|`SUM(expr)`|Sums numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`MIN(expr)`|Takes the minimum of numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `9223372036854775807` (maximum LONG value)| +|`MAX(expr)`|Takes the maximum of numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `-9223372036854775808` (minimum LONG value)| +|`AVG(expr)`|Averages numbers.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`APPROX_COUNT_DISTINCT(expr)`|Counts distinct values of expr, which can be a regular column or a hyperUnique column. This is always approximate, regardless of the value of "useApproximateCountDistinct". This uses Druid's built-in "cardinality" or "hyperUnique" aggregators. See also `COUNT(DISTINCT expr)`.|`0`| +|`APPROX_COUNT_DISTINCT_DS_HLL(expr, [lgK, tgtHllType])`|Counts distinct values of expr, which can be a regular column or an [HLL sketch](../development/extensions-core/datasketches-hll.md) column. The `lgK` and `tgtHllType` parameters are described in the HLL sketch documentation. This is always approximate, regardless of the value of "useApproximateCountDistinct". See also `COUNT(DISTINCT expr)`. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`0`| +|`APPROX_COUNT_DISTINCT_DS_THETA(expr, [size])`|Counts distinct values of expr, which can be a regular column or a [Theta sketch](../development/extensions-core/datasketches-theta.md) column. The `size` parameter is described in the Theta sketch documentation. This is always approximate, regardless of the value of "useApproximateCountDistinct". See also `COUNT(DISTINCT expr)`. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`0`| +|`DS_HLL(expr, [lgK, tgtHllType])`|Creates an [HLL sketch](../development/extensions-core/datasketches-hll.md) on the values of expr, which can be a regular column or a column containing HLL sketches. The `lgK` and `tgtHllType` parameters are described in the HLL sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0'` (STRING)| +|`DS_THETA(expr, [size])`|Creates a [Theta sketch](../development/extensions-core/datasketches-theta.md) on the values of expr, which can be a regular column or a column containing Theta sketches. The `size` parameter is described in the Theta sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0.0'` (STRING)| +|`APPROX_QUANTILE(expr, probability, [resolution])`|Computes approximate quantiles on numeric or [approxHistogram](../development/extensions-core/approximate-histograms.md#approximate-histogram-aggregator) exprs. The "probability" should be between 0 and 1 (exclusive). The "resolution" is the number of centroids to use for the computation. Higher resolutions will give more precise results but also have higher overhead. If not provided, the default resolution is 50. The [approximate histogram extension](../development/extensions-core/approximate-histograms.md) must be loaded to use this function.|`NaN`| +|`APPROX_QUANTILE_DS(expr, probability, [k])`|Computes approximate quantiles on numeric or [Quantiles sketch](../development/extensions-core/datasketches-quantiles.md) exprs. The "probability" should be between 0 and 1 (exclusive). The `k` parameter is described in the Quantiles sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`NaN`| +|`APPROX_QUANTILE_FIXED_BUCKETS(expr, probability, numBuckets, lowerLimit, upperLimit, [outlierHandlingMode])`|Computes approximate quantiles on numeric or [fixed buckets histogram](../development/extensions-core/approximate-histograms.md#fixed-buckets-histogram) exprs. The "probability" should be between 0 and 1 (exclusive). The `numBuckets`, `lowerLimit`, `upperLimit`, and `outlierHandlingMode` parameters are described in the fixed buckets histogram documentation. The [approximate histogram extension](../development/extensions-core/approximate-histograms.md) must be loaded to use this function.|`0.0`| +|`DS_QUANTILES_SKETCH(expr, [k])`|Creates a [Quantiles sketch](../development/extensions-core/datasketches-quantiles.md) on the values of expr, which can be a regular column or a column containing quantiles sketches. The `k` parameter is described in the Quantiles sketch documentation. The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use this function.|`'0'` (STRING)| +|`BLOOM_FILTER(expr, numEntries)`|Computes a bloom filter from values produced by `expr`, with `numEntries` maximum number of distinct values before false positive rate increases. See [bloom filter extension](../development/extensions-core/bloom-filter.md) documentation for additional details.|Empty base64 encoded bloom filter STRING| +|`TDIGEST_QUANTILE(expr, quantileFraction, [compression])`|Builds a T-Digest sketch on values produced by `expr` and returns the value for the quantile. Compression parameter (default value 100) determines the accuracy and size of the sketch. Higher compression means higher accuracy but more space to store sketches. See [t-digest extension](../development/extensions-contrib/tdigestsketch-quantiles.md) documentation for additional details.|`Double.NaN`| +|`TDIGEST_GENERATE_SKETCH(expr, [compression])`|Builds a T-Digest sketch on values produced by `expr`. Compression parameter (default value 100) determines the accuracy and size of the sketch Higher compression means higher accuracy but more space to store sketches. See [t-digest extension](../development/extensions-contrib/tdigestsketch-quantiles.md) documentation for additional details.|Empty base64 encoded T-Digest sketch STRING| +|`VAR_POP(expr)`|Computes variance population of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`VAR_SAMP(expr)`|Computes variance sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`VARIANCE(expr)`|Computes variance sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV_POP(expr)`|Computes standard deviation population of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV_SAMP(expr)`|Computes standard deviation sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`STDDEV(expr)`|Computes standard deviation sample of `expr`. See [stats extension](../development/extensions-core/stats.md) documentation for additional details.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`EARLIEST(expr)`|Returns the earliest value of `expr`, which must be numeric. If `expr` comes from a relation with a timestamp column (like a Druid datasource) then "earliest" is the value first encountered with the minimum overall timestamp of all values being aggregated. If `expr` does not come from a relation with a timestamp, then it is simply the first value encountered.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`EARLIEST(expr, maxBytesPerString)`|Like `EARLIEST(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`LATEST(expr)`|Returns the latest value of `expr`, which must be numeric. If `expr` comes from a relation with a timestamp column (like a Druid datasource) then "latest" is the value last encountered with the maximum overall timestamp of all values being aggregated. If `expr` does not come from a relation with a timestamp, then it is simply the last value encountered.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`LATEST(expr, maxBytesPerString)`|Like `LATEST(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`ANY_VALUE(expr)`|Returns any value of `expr` including null. `expr` must be numeric. This aggregator can simplify and optimize the performance by returning the first encountered value (including null)|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`ANY_VALUE(expr, maxBytesPerString)`|Like `ANY_VALUE(expr)`, but for strings. The `maxBytesPerString` parameter determines how much aggregation space to allocate per string. Strings longer than this limit will be truncated. This parameter should be set as low as possible, since high values will lead to wasted memory.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `''`| +|`GROUPING(expr, expr...)`|Returns a number to indicate which groupBy dimension is included in a row, when using `GROUPING SETS`. Refer to [additional documentation](aggregations.md#grouping-aggregator) on how to infer this number.|N/A| +|`ARRAY_AGG(expr, [size])`|Collects all values of `expr` into an ARRAY, including null values, with `size` in bytes limit on aggregation size (default of 1024 bytes). Use of `ORDER BY` within the `ARRAY_AGG` expression is not currently supported, and the ordering of results within the output array may vary depending on processing order.|`null`| +|`ARRAY_AGG(DISTINCT expr, [size])`|Collects all distinct values of `expr` into an ARRAY, including null values, with `size` in bytes limit on aggregation size (default of 1024 bytes) per aggregate. Use of `ORDER BY` within the `ARRAY_AGG` expression is not currently supported, and the ordering of results within the output array may vary depending on processing order.|`null`| +|`BIT_AND(expr)`|Performs a bitwise AND operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`BIT_OR(expr)`|Performs a bitwise OR operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| +|`BIT_XOR(expr)`|Performs a bitwise XOR operation on all input values.|`null` if `druid.generic.useDefaultValueForNull=false`, otherwise `0`| + +For advice on choosing approximate aggregation functions, check out our [approximate aggregations documentation](aggregations.md#approx). + +## Scalar functions + +### Numeric functions + +For mathematical operations, Druid SQL will use integer math if all operands involved in an expression are integers. +Otherwise, Druid will switch to floating point math. You can force this to happen by casting one of your operands +to FLOAT. At runtime, Druid will widen 32-bit floats to 64-bit for most expressions. + +|Function|Notes| +|--------|-----| +|`ABS(expr)`|Absolute value.| +|`CEIL(expr)`|Ceiling.| +|`EXP(expr)`|e to the power of expr.| +|`FLOOR(expr)`|Floor.| +|`LN(expr)`|Logarithm (base e).| +|`LOG10(expr)`|Logarithm (base 10).| +|`POWER(expr, power)`|expr to a power.| +|`SQRT(expr)`|Square root.| +|`TRUNCATE(expr[, digits])`|Truncate expr to a specific number of decimal digits. If digits is negative, then this truncates that many places to the left of the decimal point. Digits defaults to zero if not specified.| +|`TRUNC(expr[, digits])`|Synonym for `TRUNCATE`.| +|`ROUND(expr[, digits])`|`ROUND(x, y)` would return the value of the x rounded to the y decimal places. While x can be an integer or floating-point number, y must be an integer. The type of the return value is specified by that of x. y defaults to 0 if omitted. When y is negative, x is rounded on the left side of the y decimal points. If `expr` evaluates to either `NaN`, `expr` will be converted to 0. If `expr` is infinity, `expr` will be converted to the nearest finite double. | +|`x + y`|Addition.| +|`x - y`|Subtraction.| +|`x * y`|Multiplication.| +|`x / y`|Division.| +|`MOD(x, y)`|Modulo (remainder of x divided by y).| +|`SIN(expr)`|Trigonometric sine of an angle expr.| +|`COS(expr)`|Trigonometric cosine of an angle expr.| +|`TAN(expr)`|Trigonometric tangent of an angle expr.| +|`COT(expr)`|Trigonometric cotangent of an angle expr.| +|`ASIN(expr)`|Arc sine of expr.| +|`ACOS(expr)`|Arc cosine of expr.| +|`ATAN(expr)`|Arc tangent of expr.| +|`ATAN2(y, x)`|Angle theta from the conversion of rectangular coordinates (x, y) to polar * coordinates (r, theta).| +|`DEGREES(expr)`|Converts an angle measured in radians to an approximately equivalent angle measured in degrees| +|`RADIANS(expr)`|Converts an angle measured in degrees to an approximately equivalent angle measured in radians| +|`BITWISE_AND(expr1, expr2)`|Returns the result of `expr1 & expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_COMPLEMENT(expr)`|Returns the result of `~expr`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_CONVERT_DOUBLE_TO_LONG_BITS(expr)`|Converts the bits of an IEEE 754 floating-point double value to a long. If the input is not a double, it is implicitly cast to a double prior to conversion| +|`BITWISE_CONVERT_LONG_BITS_TO_DOUBLE(expr)`|Converts a long to the IEEE 754 floating-point double specified by the bits stored in the long. If the input is not a long, it is implicitly cast to a long prior to conversion| +|`BITWISE_OR(expr1, expr2)`|Returns the result of `expr1 [PIPE] expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_SHIFT_LEFT(expr1, expr2)`|Returns the result of `expr1 << expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_SHIFT_RIGHT(expr1, expr2)`|Returns the result of `expr1 >> expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| +|`BITWISE_XOR(expr1, expr2)`|Returns the result of `expr1 ^ expr2`. Double values will be implicitly cast to longs, use `BITWISE_CONVERT_DOUBLE_TO_LONG_BITS` to perform bitwise operations directly with doubles| + +### String functions + +String functions accept strings, and return a type appropriate to the function. + +|Function|Notes| +|--------|-----| +|x || y|Concat strings x and y.| +|`CONCAT(expr, expr...)`|Concats a list of expressions.| +|`TEXTCAT(expr, expr)`|Two argument version of CONCAT.| +|`STRING_FORMAT(pattern[, args...])`|Returns a string formatted in the manner of Java's [String.format](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-).| +|`LENGTH(expr)`|Length of expr in UTF-16 code units.| +|`CHAR_LENGTH(expr)`|Synonym for `LENGTH`.| +|`CHARACTER_LENGTH(expr)`|Synonym for `LENGTH`.| +|`STRLEN(expr)`|Synonym for `LENGTH`.| +|`LOOKUP(expr, lookupName)`|Look up expr in a registered [query-time lookup table](lookups.md). Note that lookups can also be queried directly using the [`lookup` schema](#from).| +|`LOWER(expr)`|Returns expr in all lowercase.| +|`PARSE_LONG(string[, radix])`|Parses a string into a long (BIGINT) with the given radix, or 10 (decimal) if a radix is not provided.| +|`POSITION(needle IN haystack [FROM fromIndex])`|Returns the index of needle within haystack, with indexes starting from 1. The search will begin at fromIndex, or 1 if fromIndex is not specified. If the needle is not found, returns 0.| +|`REGEXP_EXTRACT(expr, pattern, [index])`|Apply regular expression `pattern` to `expr` and extract a capture group, or `NULL` if there is no match. If index is unspecified or zero, returns the first substring that matched the pattern. The pattern may match anywhere inside `expr`; if you want to match the entire string instead, use the `^` and `$` markers at the start and end of your pattern. Note: when `druid.generic.useDefaultValueForNull = true`, it is not possible to differentiate an empty-string match from a non-match (both will return `NULL`).| +|`REGEXP_LIKE(expr, pattern)`|Returns whether `expr` matches regular expression `pattern`. The pattern may match anywhere inside `expr`; if you want to match the entire string instead, use the `^` and `$` markers at the start and end of your pattern. Similar to [`LIKE`](#comparison-operators), but uses regexps instead of LIKE patterns. Especially useful in WHERE clauses.| +|`CONTAINS_STRING(, str)`|Returns true if the `str` is a substring of `expr`.| +|`ICONTAINS_STRING(, str)`|Returns true if the `str` is a substring of `expr`. The match is case-insensitive.| +|`REPLACE(expr, pattern, replacement)`|Replaces pattern with replacement in expr, and returns the result.| +|`STRPOS(haystack, needle)`|Returns the index of needle within haystack, with indexes starting from 1. If the needle is not found, returns 0.| +|`SUBSTRING(expr, index, [length])`|Returns a substring of expr starting at index, with a max length, both measured in UTF-16 code units.| +|`RIGHT(expr, [length])`|Returns the rightmost length characters from expr.| +|`LEFT(expr, [length])`|Returns the leftmost length characters from expr.| +|`SUBSTR(expr, index, [length])`|Synonym for SUBSTRING.| +|TRIM([BOTH | LEADING | TRAILING] [ FROM] expr)|Returns expr with characters removed from the leading, trailing, or both ends of "expr" if they are in "chars". If "chars" is not provided, it defaults to " " (a space). If the directional argument is not provided, it defaults to "BOTH".| +|`BTRIM(expr[, chars])`|Alternate form of `TRIM(BOTH FROM )`.| +|`LTRIM(expr[, chars])`|Alternate form of `TRIM(LEADING FROM )`.| +|`RTRIM(expr[, chars])`|Alternate form of `TRIM(TRAILING FROM )`.| +|`UPPER(expr)`|Returns expr in all uppercase.| +|`REVERSE(expr)`|Reverses expr.| +|`REPEAT(expr, [N])`|Repeats expr N times| +|`LPAD(expr, length[, chars])`|Returns a string of `length` from `expr` left-padded with `chars`. If `length` is shorter than the length of `expr`, the result is `expr` which is truncated to `length`. The result will be null if either `expr` or `chars` is null. If `chars` is an empty string, no padding is added, however `expr` may be trimmed if necessary.| +|`RPAD(expr, length[, chars])`|Returns a string of `length` from `expr` right-padded with `chars`. If `length` is shorter than the length of `expr`, the result is `expr` which is truncated to `length`. The result will be null if either `expr` or `chars` is null. If `chars` is an empty string, no padding is added, however `expr` may be trimmed if necessary.| + + +### Time functions + +Time functions can be used with Druid's `__time` column, with any column storing millisecond timestamps through use +of the `MILLIS_TO_TIMESTAMP` function, or with any column storing string timestamps through use of the `TIME_PARSE` +function. By default, time operations use the UTC time zone. You can change the time zone by setting the connection +context parameter "sqlTimeZone" to the name of another time zone, like "America/Los_Angeles", or to an offset like +"-08:00". If you need to mix multiple time zones in the same query, or if you need to use a time zone other than +the connection time zone, some functions also accept time zones as parameters. These parameters always take precedence +over the connection time zone. + +Literal timestamps in the connection time zone can be written using `TIMESTAMP '2000-01-01 00:00:00'` syntax. The +simplest way to write literal timestamps in other time zones is to use TIME_PARSE, like +`TIME_PARSE('2000-02-01 00:00:00', NULL, 'America/Los_Angeles')`. + +|Function|Notes| +|--------|-----| +|`CURRENT_TIMESTAMP`|Current timestamp in the connection's time zone.| +|`CURRENT_DATE`|Current date in the connection's time zone.| +|`DATE_TRUNC(, )`|Rounds down a timestamp, returning it as a new timestamp. Unit can be 'milliseconds', 'second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year', 'decade', 'century', or 'millennium'.| +|`TIME_CEIL(, , [, []])`|Rounds up a timestamp, returning it as a new timestamp. Period can be any ISO8601 period, like P3M (quarters) or PT12H (half-days). The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `CEIL` but is more flexible.| +|`TIME_FLOOR(, , [, []])`|Rounds down a timestamp, returning it as a new timestamp. Period can be any ISO8601 period, like P3M (quarters) or PT12H (half-days). The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `FLOOR` but is more flexible.| +|`TIME_SHIFT(, , , [])`|Shifts a timestamp by a period (step times), returning it as a new timestamp. Period can be any ISO8601 period. Step may be negative. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00".| +|`TIME_EXTRACT(, [, []])`|Extracts a time part from expr, returning it as a number. Unit can be EPOCH, SECOND, MINUTE, HOUR, DAY (day of month), DOW (day of week), DOY (day of year), WEEK (week of [week year](https://en.wikipedia.org/wiki/ISO_week_date)), MONTH (1 through 12), QUARTER (1 through 4), or YEAR. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". This function is similar to `EXTRACT` but is more flexible. Unit and time zone must be literals, and must be provided quoted, like `TIME_EXTRACT(__time, 'HOUR')` or `TIME_EXTRACT(__time, 'HOUR', 'America/Los_Angeles')`.| +|`TIME_PARSE(, [, []])`|Parses a string into a timestamp using a given [Joda DateTimeFormat pattern](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html), or ISO8601 (e.g. `2000-01-02T03:04:05Z`) if the pattern is not provided. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00", and will be used as the time zone for strings that do not include a time zone offset. Pattern and time zone must be literals. Strings that cannot be parsed as timestamps will be returned as NULL.| +|`TIME_FORMAT(, [, []])`|Formats a timestamp as a string with a given [Joda DateTimeFormat pattern](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html), or ISO8601 (e.g. `2000-01-02T03:04:05Z`) if the pattern is not provided. The time zone, if provided, should be a time zone name like "America/Los_Angeles" or offset like "-08:00". Pattern and time zone must be literals.| +|`MILLIS_TO_TIMESTAMP(millis_expr)`|Converts a number of milliseconds since the epoch into a timestamp.| +|`TIMESTAMP_TO_MILLIS(timestamp_expr)`|Converts a timestamp into a number of milliseconds since the epoch.| +|`EXTRACT( FROM timestamp_expr)`|Extracts a time part from expr, returning it as a number. Unit can be EPOCH, MICROSECOND, MILLISECOND, SECOND, MINUTE, HOUR, DAY (day of month), DOW (day of week), ISODOW (ISO day of week), DOY (day of year), WEEK (week of year), MONTH, QUARTER, YEAR, ISOYEAR, DECADE, CENTURY or MILLENNIUM. Units must be provided unquoted, like `EXTRACT(HOUR FROM __time)`.| +|`FLOOR(timestamp_expr TO )`|Rounds down a timestamp, returning it as a new timestamp. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|`CEIL(timestamp_expr TO )`|Rounds up a timestamp, returning it as a new timestamp. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|`TIMESTAMPADD(, , )`|Equivalent to `timestamp + count * INTERVAL '1' UNIT`.| +|`TIMESTAMPDIFF(, , )`|Returns the (signed) number of `unit` between `timestamp1` and `timestamp2`. Unit can be SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.| +|timestamp_expr { + | - } |Add or subtract an amount of time from a timestamp. interval_expr can include interval literals like `INTERVAL '2' HOUR`, and may include interval arithmetic as well. This operator treats days as uniformly 86400 seconds long, and does not take into account daylight savings time. To account for daylight savings time, use TIME_SHIFT instead.| + + +### Reduction functions + +Reduction functions operate on zero or more expressions and return a single expression. If no expressions are passed as +arguments, then the result is `NULL`. The expressions must all be convertible to a common data type, which will be the +type of the result: +* If all argument are `NULL`, the result is `NULL`. Otherwise, `NULL` arguments are ignored. +* If the arguments comprise a mix of numbers and strings, the arguments are interpreted as strings. +* If all arguments are integer numbers, the arguments are interpreted as longs. +* If all arguments are numbers and at least one argument is a double, the arguments are interpreted as doubles. + +|Function|Notes| +|--------|-----| +|`GREATEST([expr1, ...])`|Evaluates zero or more expressions and returns the maximum value based on comparisons as described above.| +|`LEAST([expr1, ...])`|Evaluates zero or more expressions and returns the minimum value based on comparisons as described above.| + + +### IP address functions + +For the IPv4 address functions, the `address` argument can either be an IPv4 dotted-decimal string +(e.g., '192.168.0.1') or an IP address represented as an integer (e.g., 3232235521). The `subnet` +argument should be a string formatted as an IPv4 address subnet in CIDR notation (e.g., +'192.168.0.0/16'). + +|Function|Notes| +|---|---| +|`IPV4_MATCH(address, subnet)`|Returns true if the `address` belongs to the `subnet` literal, else false. If `address` is not a valid IPv4 address, then false is returned. This function is more efficient if `address` is an integer instead of a string.| +|`IPV4_PARSE(address)`|Parses `address` into an IPv4 address stored as an integer . If `address` is an integer that is a valid IPv4 address, then it is passed through. Returns null if `address` cannot be represented as an IPv4 address.| +|`IPV4_STRINGIFY(address)`|Converts `address` into an IPv4 address dotted-decimal string. If `address` is a string that is a valid IPv4 address, then it is passed through. Returns null if `address` cannot be represented as an IPv4 address.| + + +### Comparison operators + +|Function|Notes| +|--------|-----| +|`x = y`|Equals.| +|`x <> y`|Not-equals.| +|`x > y`|Greater than.| +|`x >= y`|Greater than or equal to.| +|`x < y`|Less than.| +|`x <= y`|Less than or equal to.| +|`x BETWEEN y AND z`|Equivalent to `x >= y AND x <= z`.| +|`x NOT BETWEEN y AND z`|Equivalent to `x < y OR x > z`.| +|`x LIKE pattern [ESCAPE esc]`|True if x matches a SQL LIKE pattern (with an optional escape).| +|`x NOT LIKE pattern [ESCAPE esc]`|True if x does not match a SQL LIKE pattern (with an optional escape).| +|`x IS NULL`|True if x is NULL or empty string.| +|`x IS NOT NULL`|True if x is neither NULL nor empty string.| +|`x IS TRUE`|True if x is true.| +|`x IS NOT TRUE`|True if x is not true.| +|`x IS FALSE`|True if x is false.| +|`x IS NOT FALSE`|True if x is not false.| +|`x IN (values)`|True if x is one of the listed values.| +|`x NOT IN (values)`|True if x is not one of the listed values.| +|`x IN (subquery)`|True if x is returned by the subquery. This will be translated into a join; see [Query translation](#query-translation) for details.| +|`x NOT IN (subquery)`|True if x is not returned by the subquery. This will be translated into a join; see [Query translation](#query-translation) for details.| +|`x AND y`|Boolean AND.| +|`x OR y`|Boolean OR.| +|`NOT x`|Boolean NOT.| + +### Sketch functions + +These functions operate on expressions or columns that return sketch objects. + +#### HLL sketch functions + +The following functions operate on [DataSketches HLL sketches](../development/extensions-core/datasketches-hll.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`HLL_SKETCH_ESTIMATE(expr, [round])`|Returns the distinct count estimate from an HLL sketch. `expr` must return an HLL sketch. The optional `round` boolean parameter will round the estimate if set to `true`, with a default of `false`.| +|`HLL_SKETCH_ESTIMATE_WITH_ERROR_BOUNDS(expr, [numStdDev])`|Returns the distinct count estimate and error bounds from an HLL sketch. `expr` must return an HLL sketch. An optional `numStdDev` argument can be provided.| +|`HLL_SKETCH_UNION([lgK, tgtHllType], expr0, expr1, ...)`|Returns a union of HLL sketches, where each input expression must return an HLL sketch. The `lgK` and `tgtHllType` can be optionally specified as the first parameter; if provided, both optional parameters must be specified.| +|`HLL_SKETCH_TO_STRING(expr)`|Returns a human-readable string representation of an HLL sketch for debugging. `expr` must return an HLL sketch.| + +#### Theta sketch functions + +The following functions operate on [theta sketches](../development/extensions-core/datasketches-theta.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`THETA_SKETCH_ESTIMATE(expr)`|Returns the distinct count estimate from a theta sketch. `expr` must return a theta sketch.| +|`THETA_SKETCH_ESTIMATE_WITH_ERROR_BOUNDS(expr, errorBoundsStdDev)`|Returns the distinct count estimate and error bounds from a theta sketch. `expr` must return a theta sketch.| +|`THETA_SKETCH_UNION([size], expr0, expr1, ...)`|Returns a union of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| +|`THETA_SKETCH_INTERSECT([size], expr0, expr1, ...)`|Returns an intersection of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| +|`THETA_SKETCH_NOT([size], expr0, expr1, ...)`|Returns a set difference of theta sketches, where each input expression must return a theta sketch. The `size` can be optionally specified as the first parameter.| + +#### Quantiles sketch functions + +The following functions operate on [quantiles sketches](../development/extensions-core/datasketches-quantiles.md). +The [DataSketches extension](../development/extensions-core/datasketches-extension.md) must be loaded to use the following functions. + +|Function|Notes| +|--------|-----| +|`DS_GET_QUANTILE(expr, fraction)`|Returns the quantile estimate corresponding to `fraction` from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_GET_QUANTILES(expr, fraction0, fraction1, ...)`|Returns a string representing an array of quantile estimates corresponding to a list of fractions from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_HISTOGRAM(expr, splitPoint0, splitPoint1, ...)`|Returns a string representing an approximation to the histogram given a list of split points that define the histogram bins from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_CDF(expr, splitPoint0, splitPoint1, ...)`|Returns a string representing approximation to the Cumulative Distribution Function given a list of split points that define the edges of the bins from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_RANK(expr, value)`|Returns an approximation to the rank of a given value that is the fraction of the distribution less than that value from a quantiles sketch. `expr` must return a quantiles sketch.| +|`DS_QUANTILE_SUMMARY(expr)`|Returns a string summary of a quantiles sketch, useful for debugging. `expr` must return a quantiles sketch.| + +### Other scalar functions + +|Function|Notes| +|--------|-----| +|`CAST(value AS TYPE)`|Cast value to another type. See [Data types](#data-types) for details about how Druid SQL handles CAST.| +|`CASE expr WHEN value1 THEN result1 \[ WHEN value2 THEN result2 ... \] \[ ELSE resultN \] END`|Simple CASE.| +|`CASE WHEN boolean_expr1 THEN result1 \[ WHEN boolean_expr2 THEN result2 ... \] \[ ELSE resultN \] END`|Searched CASE.| +|`NULLIF(value1, value2)`|Returns NULL if value1 and value2 match, else returns value1.| +|`COALESCE(value1, value2, ...)`|Returns the first value that is neither NULL nor empty string.| +|`NVL(expr,expr-for-null)`|Returns 'expr-for-null' if 'expr' is null (or empty string for string type).| +|`BLOOM_FILTER_TEST(, )`|Returns true if the value is contained in a Base64-serialized bloom filter. See the [Bloom filter extension](../development/extensions-core/bloom-filter.md) documentation for additional details.| + +## Multi-value string functions + +All 'array' references in the multi-value string function documentation can refer to multi-value string columns or +`ARRAY` literals. + +|Function|Notes| +|--------|-----| +| `ARRAY[expr1,expr ...]` | constructs a SQL ARRAY literal from the expression arguments, using the type of the first argument as the output array type | +| `MV_LENGTH(arr)` | returns length of array expression | +| `MV_OFFSET(arr,long)` | returns the array element at the 0 based index supplied, or null for an out of range index| +| `MV_ORDINAL(arr,long)` | returns the array element at the 1 based index supplied, or null for an out of range index | +| `MV_CONTAINS(arr,expr)` | returns 1 if the array contains the element specified by expr, or contains all elements specified by expr if expr is an array, else 0 | +| `MV_OVERLAP(arr1,arr2)` | returns 1 if arr1 and arr2 have any elements in common, else 0 | +| `MV_OFFSET_OF(arr,expr)` | returns the 0 based index of the first occurrence of expr in the array, or `-1` or `null` if `druid.generic.useDefaultValueForNull=false` if no matching elements exist in the array. | +| `MV_ORDINAL_OF(arr,expr)` | returns the 1 based index of the first occurrence of expr in the array, or `-1` or `null` if `druid.generic.useDefaultValueForNull=false` if no matching elements exist in the array. | +| `MV_PREPEND(expr,arr)` | adds expr to arr at the beginning, the resulting array type determined by the type of the array | +| `MV_APPEND(arr1,expr)` | appends expr to arr, the resulting array type determined by the type of the first array | +| `MV_CONCAT(arr1,arr2)` | concatenates 2 arrays, the resulting array type determined by the type of the first array | +| `MV_SLICE(arr,start,end)` | return the subarray of arr from the 0 based index start(inclusive) to end(exclusive), or `null`, if start is less than 0, greater than length of arr or less than end| +| `MV_TO_STRING(arr,str)` | joins all elements of arr by the delimiter specified by str | +| `STRING_TO_MV(str1,str2)` | splits str1 into an array on the delimiter specified by str2 | + +## Query translation + +Druid SQL translates SQL queries to [native queries](querying.md) before running them, and understanding how this +translation works is key to getting good performance. + +### Best practices + +Consider this (non-exhaustive) list of things to look out for when looking into the performance implications of +how your SQL queries are translated to native queries. + +1. If you wrote a filter on the primary time column `__time`, make sure it is being correctly translated to an +`"intervals"` filter, as described in the [Time filters](#time-filters) section below. If not, you may need to change +the way you write the filter. + +2. Try to avoid subqueries underneath joins: they affect both performance and scalability. This includes implicit +subqueries generated by conditions on mismatched types, and implicit subqueries generated by conditions that use +expressions to refer to the right-hand side. + +3. Currently, Druid does not support pushing down predicates (condition and filter) past a Join (i.e. into +Join's children). Druid only supports pushing predicates into the join if they originated from +above the join. Hence, the location of predicates and filters in your Druid SQL is very important. +Also, as a result of this, comma joins should be avoided. + +4. Read through the [Query execution](query-execution.md) page to understand how various types of native queries +will be executed. + +5. Be careful when interpreting EXPLAIN PLAN output, and use request logging if in doubt. Request logs will show the +exact native query that was run. See the [next section](#interpreting-explain-plan-output) for more details. + +6. If you encounter a query that could be planned better, feel free to +[raise an issue on GitHub](https://github.com/apache/druid/issues/new/choose). A reproducible test case is always +appreciated. + +### Interpreting EXPLAIN PLAN output + +The [EXPLAIN PLAN](#explain-plan) functionality can help you understand how a given SQL query will +be translated to native. For simple queries that do not involve subqueries or joins, the output of EXPLAIN PLAN +is easy to interpret. The native query that will run is embedded as JSON inside a "DruidQueryRel" line: + +``` +> EXPLAIN PLAN FOR SELECT COUNT(*) FROM wikipedia + +DruidQueryRel(query=[{"queryType":"timeseries","dataSource":"wikipedia","intervals":"-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z","granularity":"all","aggregations":[{"type":"count","name":"a0"}]}], signature=[{a0:LONG}]) +``` + +For more complex queries that do involve subqueries or joins, EXPLAIN PLAN is somewhat more difficult to interpret. +For example, consider this query: + +``` +> EXPLAIN PLAN FOR +> SELECT +> channel, +> COUNT(*) +> FROM wikipedia +> WHERE channel IN (SELECT page FROM wikipedia GROUP BY page ORDER BY COUNT(*) DESC LIMIT 10) +> GROUP BY channel + +DruidJoinQueryRel(condition=[=($1, $3)], joinType=[inner], query=[{"queryType":"groupBy","dataSource":{"type":"table","name":"__join__"},"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"granularity":"all","dimensions":["channel"],"aggregations":[{"type":"count","name":"a0"}]}], signature=[{d0:STRING, a0:LONG}]) + DruidQueryRel(query=[{"queryType":"scan","dataSource":{"type":"table","name":"wikipedia"},"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"resultFormat":"compactedList","columns":["__time","channel","page"],"granularity":"all"}], signature=[{__time:LONG, channel:STRING, page:STRING}]) + DruidQueryRel(query=[{"queryType":"topN","dataSource":{"type":"table","name":"wikipedia"},"dimension":"page","metric":{"type":"numeric","metric":"a0"},"threshold":10,"intervals":{"type":"intervals","intervals":["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"]},"granularity":"all","aggregations":[{"type":"count","name":"a0"}]}], signature=[{d0:STRING}]) +``` + +Here, there is a join with two inputs. The way to read this is to consider each line of the EXPLAIN PLAN output as +something that might become a query, or might just become a simple datasource. The `query` field they all have is +called a "partial query" and represents what query would be run on the datasource represented by that line, if that +line ran by itself. In some cases — like the "scan" query in the second line of this example — the query does not +actually run, and it ends up being translated to a simple table datasource. See the [Join translation](#joins) section +for more details about how this works. + +We can see this for ourselves using Druid's [request logging](../configuration/index.md#request-logging) feature. After +enabling logging and running this query, we can see that it actually runs as the following native query. + +```json +{ + "queryType": "groupBy", + "dataSource": { + "type": "join", + "left": "wikipedia", + "right": { + "type": "query", + "query": { + "queryType": "topN", + "dataSource": "wikipedia", + "dimension": {"type": "default", "dimension": "page", "outputName": "d0"}, + "metric": {"type": "numeric", "metric": "a0"}, + "threshold": 10, + "intervals": "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z", + "granularity": "all", + "aggregations": [ + { "type": "count", "name": "a0"} + ] + } + }, + "rightPrefix": "j0.", + "condition": "(\"page\" == \"j0.d0\")", + "joinType": "INNER" + }, + "intervals": "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z", + "granularity": "all", + "dimensions": [ + {"type": "default", "dimension": "channel", "outputName": "d0"} + ], + "aggregations": [ + { "type": "count", "name": "a0"} + ] +} +``` + +### Query types + +Druid SQL uses four different native query types. + +- [Scan](scan-query.md) is used for queries that do not aggregate (no GROUP BY, no DISTINCT). + +- [Timeseries](timeseriesquery.md) is used for queries that GROUP BY `FLOOR(__time TO )` or `TIME_FLOOR(__time, +period)`, have no other grouping expressions, no HAVING or LIMIT clauses, no nesting, and either no ORDER BY, or an +ORDER BY that orders by same expression as present in GROUP BY. It also uses Timeseries for "grand total" queries that +have aggregation functions but no GROUP BY. This query type takes advantage of the fact that Druid segments are sorted +by time. + +- [TopN](topnquery.md) is used by default for queries that group by a single expression, do have ORDER BY and LIMIT +clauses, do not have HAVING clauses, and are not nested. However, the TopN query type will deliver approximate ranking +and results in some cases; if you want to avoid this, set "useApproximateTopN" to "false". TopN results are always +computed in memory. See the TopN documentation for more details. + +- [GroupBy](groupbyquery.md) is used for all other aggregations, including any nested aggregation queries. Druid's +GroupBy is a traditional aggregation engine: it delivers exact results and rankings and supports a wide variety of +features. GroupBy aggregates in memory if it can, but it may spill to disk if it doesn't have enough memory to complete +your query. Results are streamed back from data processes through the Broker if you ORDER BY the same expressions in your +GROUP BY clause, or if you don't have an ORDER BY at all. If your query has an ORDER BY referencing expressions that +don't appear in the GROUP BY clause (like aggregation functions) then the Broker will materialize a list of results in +memory, up to a max of your LIMIT, if any. See the GroupBy documentation for details about tuning performance and memory +use. + +### Time filters + +For all native query types, filters on the `__time` column will be translated into top-level query "intervals" whenever +possible, which allows Druid to use its global time index to quickly prune the set of data that must be scanned. +Consider this (non-exhaustive) list of time filters that will be recognized and translated to "intervals": + +- `__time >= TIMESTAMP '2000-01-01 00:00:00'` (comparison to absolute time) +- `__time >= CURRENT_TIMESTAMP - INTERVAL '8' HOUR` (comparison to relative time) +- `FLOOR(__time TO DAY) = TIMESTAMP '2000-01-01 00:00:00'` (specific day) + +Refer to the [Interpreting EXPLAIN PLAN output](#interpreting-explain-plan-output) section for details on confirming +that time filters are being translated as you expect. + +### Joins + +SQL join operators are translated to native join datasources as follows: + +1. Joins that the native layer can handle directly are translated literally, to a [join datasource](datasource.md#join) +whose `left`, `right`, and `condition` are faithful translations of the original SQL. This includes any SQL join where +the right-hand side is a lookup or subquery, and where the condition is an equality where one side is an expression based +on the left-hand table, the other side is a simple column reference to the right-hand table, and both sides of the +equality are the same data type. + +2. If a join cannot be handled directly by a native [join datasource](datasource.md#join) as written, Druid SQL +will insert subqueries to make it runnable. For example, `foo INNER JOIN bar ON foo.abc = LOWER(bar.def)` cannot be +directly translated, because there is an expression on the right-hand side instead of a simple column access. A subquery +will be inserted that effectively transforms this clause to +`foo INNER JOIN (SELECT LOWER(def) AS def FROM bar) t ON foo.abc = t.def`. + +3. Druid SQL does not currently reorder joins to optimize queries. + +Refer to the [Interpreting EXPLAIN PLAN output](#interpreting-explain-plan-output) section for details on confirming +that joins are being translated as you expect. + +Refer to the [Query execution](query-execution.md#join) page for information about how joins are executed. + +### Subqueries + +Subqueries in SQL are generally translated to native query datasources. Refer to the +[Query execution](query-execution.md#query) page for information about how subqueries are executed. + +> Note: Subqueries in the WHERE clause, like `WHERE col1 IN (SELECT foo FROM ...)` are translated to inner joins. + +### Approximations + +Druid SQL will use approximate algorithms in some situations: + +- The `COUNT(DISTINCT col)` aggregation functions by default uses a variant of +[HyperLogLog](http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf), a fast approximate distinct counting +algorithm. Druid SQL will switch to exact distinct counts if you set "useApproximateCountDistinct" to "false", either +through query context or through Broker configuration. + +- GROUP BY queries over a single column with ORDER BY and LIMIT may be executed using the TopN engine, which uses an +approximate algorithm. Druid SQL will switch to an exact grouping algorithm if you set "useApproximateTopN" to "false", +either through query context or through Broker configuration. + +- Aggregation functions that are labeled as using sketches or approximations, such as APPROX_COUNT_DISTINCT, are always +approximate, regardless of configuration. + +### Unsupported features + +Druid does not support all SQL features. In particular, the following features are not supported. + +- JOIN between native datasources (table, lookup, subquery) and [system tables](#metadata-tables). +- JOIN conditions that are not an equality between expressions from the left- and right-hand sides. +- JOIN conditions containing a constant value inside the condition. +- JOIN conditions on a column which contains a multi-value dimension. +- OVER clauses, and analytic functions such as `LAG` and `LEAD`. +- ORDER BY for a non-aggregating query, except for `ORDER BY __time` or `ORDER BY __time DESC`, which are supported. + This restriction only applies to non-aggregating queries; you can ORDER BY any column in an aggregating query. +- DDL and DML. +- Using Druid-specific functions like `TIME_PARSE` and `APPROX_QUANTILE_DS` on [system tables](#metadata-tables). + +Additionally, some Druid native query features are not supported by the SQL language. Some unsupported Druid features +include: + +- [Inline datasources](datasource.md#inline). +- [Spatial filters](../development/geo.md). +- [Query cancellation](querying.md#query-cancellation). +- [Multi-value dimensions](#multi-value-strings) are only partially implemented in Druid SQL. There are known +inconsistencies between their behavior in SQL queries and in native queries due to how they are currently treated by +the SQL planner. + +## Client APIs + + + +### HTTP POST + +You can make Druid SQL queries using HTTP via POST to the endpoint `/druid/v2/sql/`. The request should +be a JSON object with a "query" field, like `{"query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar'"}`. + +##### Request + +|Property|Description|Default| +|--------|----|-----------| +|`query`|SQL query string.| none (required)| +|`resultFormat`|Format of query results. See [Responses](#responses) for details.|`"object"`| +|`header`|Whether or not to include a header. See [Responses] for details.|`false`| +|`context`|JSON object containing [connection context parameters](#connection-context).|`{}` (empty)| +|`parameters`|List of query parameters for parameterized queries. Each parameter in the list should be a JSON object like `{"type": "VARCHAR", "value": "foo"}`. The type should be a SQL type; see [Data types](#data-types) for a list of supported SQL types.|`[]` (empty)| + +You can use _curl_ to send SQL queries from the command-line: + +```bash +$ cat query.json +{"query":"SELECT COUNT(*) AS TheCount FROM data_source"} + +$ curl -XPOST -H'Content-Type: application/json' http://BROKER:8082/druid/v2/sql/ -d @query.json +[{"TheCount":24433}] +``` + +There are a variety of [connection context parameters](#connection-context) you can provide by adding a "context" map, +like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "context" : { + "sqlTimeZone" : "America/Los_Angeles" + } +} +``` + +Parameterized SQL queries are also supported: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = ? AND __time > ?", + "parameters": [ + { "type": "VARCHAR", "value": "bar"}, + { "type": "TIMESTAMP", "value": "2000-01-01 00:00:00" } + ] +} +``` + +Metadata is available over HTTP POST by querying [metadata tables](#metadata-tables). + +#### Responses + +Druid SQL's HTTP POST API supports a variety of result formats. You can specify these by adding a "resultFormat" +parameter, like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "resultFormat" : "object" +} +``` + +The supported result formats are: + +|Format|Description|Content-Type| +|------|-----------|------------| +|`object`|The default, a JSON array of JSON objects. Each object's field names match the columns returned by the SQL query, and are provided in the same order as the SQL query.|application/json| +|`array`|JSON array of JSON arrays. Each inner array has elements matching the columns returned by the SQL query, in order.|application/json| +|`objectLines`|Like "object", but the JSON objects are separated by newlines instead of being wrapped in a JSON array. This can make it easier to parse the entire response set as a stream, if you do not have ready access to a streaming JSON parser. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/plain| +|`arrayLines`|Like "array", but the JSON arrays are separated by newlines instead of being wrapped in a JSON array. This can make it easier to parse the entire response set as a stream, if you do not have ready access to a streaming JSON parser. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/plain| +|`csv`|Comma-separated values, with one row per line. Individual field values may be escaped by being surrounded in double quotes. If double quotes appear in a field value, they will be escaped by replacing them with double-double-quotes like `""this""`. To make it possible to detect a truncated response, this format includes a trailer of one blank line.|text/csv| + +You can additionally request a header by setting "header" to true in your request, like: + +```json +{ + "query" : "SELECT COUNT(*) FROM data_source WHERE foo = 'bar' AND __time > TIMESTAMP '2000-01-01 00:00:00'", + "resultFormat" : "arrayLines", + "header" : true +} +``` + +In this case, the first result returned will be a header. For the `csv`, `array`, and `arrayLines` formats, the header +will be a list of column names. For the `object` and `objectLines` formats, the header will be an object where the +keys are column names, and the values are null. + +Errors that occur before the response body is sent will be reported in JSON, with an HTTP 500 status code, in the +same format as [native Druid query errors](../querying/querying.md#query-errors). If an error occurs while the response body is +being sent, at that point it is too late to change the HTTP status code or report a JSON error, so the response will +simply end midstream and an error will be logged by the Druid server that was handling your request. + +As a caller, it is important that you properly handle response truncation. This is easy for the "object" and "array" +formats, since truncated responses will be invalid JSON. For the line-oriented formats, you should check the +trailer they all include: one blank line at the end of the result set. If you detect a truncated response, either +through a JSON parsing error or through a missing trailing newline, you should assume the response was not fully +delivered due to an error. + +### JDBC + +You can make Druid SQL queries using the [Avatica JDBC driver](https://calcite.apache.org/avatica/downloads/). We recommend using Avatica JDBC driver version 1.17.0 or later. Note that as of the time of this writing, Avatica 1.17.0, the latest version, does not support passing connection string parameters from the URL to Druid, so you must pass them using a `Properties` object. Once you've downloaded the Avatica client jar, add it to your classpath and use the connect string `jdbc:avatica:remote:url=http://BROKER:8082/druid/v2/sql/avatica/`. + +Example code: + +```java +// Connect to /druid/v2/sql/avatica/ on your Broker. +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica/"; + +// Set any connection context parameters you need here (see "Connection context" below). +// Or leave empty for default behavior. +Properties connectionProperties = new Properties(); + +try (Connection connection = DriverManager.getConnection(url, connectionProperties)) { + try ( + final Statement statement = connection.createStatement(); + final ResultSet resultSet = statement.executeQuery(query) + ) { + while (resultSet.next()) { + // process result set + } + } +} +``` + +It is also possible to use a protocol buffers JDBC connection with Druid, this offer reduced bloat and potential performance +improvements for larger result sets. To use it apply the following connection url instead, everything else remains the same +``` +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica-protobuf/;serialization=protobuf"; +``` + +> The protobuf endpoint is also known to work with the official [Golang Avatica driver](https://github.com/apache/calcite-avatica-go) + +Table metadata is available over JDBC using `connection.getMetaData()` or by querying the +["INFORMATION_SCHEMA" tables](#metadata-tables). + +#### Connection stickiness + +Druid's JDBC server does not share connection state between Brokers. This means that if you're using JDBC and have +multiple Druid Brokers, you should either connect to a specific Broker, or use a load balancer with sticky sessions +enabled. The Druid Router process provides connection stickiness when balancing JDBC requests, and can be used to achieve +the necessary stickiness even with a normal non-sticky load balancer. Please see the +[Router](../design/router.md) documentation for more details. + +Note that the non-JDBC [JSON over HTTP](#http-post) API is stateless and does not require stickiness. + +### Dynamic Parameters + +You can also use parameterized queries in JDBC code, as in this example; + +```java +PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) AS cnt FROM druid.foo WHERE dim1 = ? OR dim1 = ?"); +statement.setString(1, "abc"); +statement.setString(2, "def"); +final ResultSet resultSet = statement.executeQuery(); +``` + +### Connection context + +Druid SQL supports setting connection parameters on the client. The parameters in the table below affect SQL planning. +All other context parameters you provide will be attached to Druid queries and can affect how they run. See +[Query context](query-context.md) for details on the possible options. + +```java +String url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica/"; + +// Set any query context parameters you need here. +Properties connectionProperties = new Properties(); +connectionProperties.setProperty("sqlTimeZone", "America/Los_Angeles"); +connectionProperties.setProperty("useCache", "false"); + +try (Connection connection = DriverManager.getConnection(url, connectionProperties)) { + // create and execute statements, process result sets, etc +} +``` + +Note that to specify an unique identifier for SQL query, use `sqlQueryId` instead of `queryId`. Setting `queryId` for a SQL +request has no effect, all native queries underlying SQL will use auto-generated queryId. + +Connection context can be specified as JDBC connection properties or as a "context" object in the JSON API. + +|Parameter|Description|Default value| +|---------|-----------|-------------| +|`sqlQueryId`|Unique identifier given to this SQL query. For HTTP client, it will be returned in `X-Druid-SQL-Query-Id` header.|auto-generated| +|`sqlTimeZone`|Sets the time zone for this connection, which will affect how time functions and timestamp literals behave. Should be a time zone name like "America/Los_Angeles" or offset like "-08:00".|druid.sql.planner.sqlTimeZone on the Broker (default: UTC)| +|`sqlStringifyArrays`|When set to true, result columns which return array values will be serialized into a JSON string in the response instead of as an array (default: true, except for JDBC connections, where it is always false)| +|`useApproximateCountDistinct`|Whether to use an approximate cardinality algorithm for `COUNT(DISTINCT foo)`.|druid.sql.planner.useApproximateCountDistinct on the Broker (default: true)| +|`useGroupingSetForExactDistinct`|Whether to use grouping sets to execute queries with multiple exact distinct aggregations.|druid.sql.planner.useGroupingSetForExactDistinct on the Broker (default: false)| +|`useApproximateTopN`|Whether to use approximate [TopN queries](topnquery.md) when a SQL query could be expressed as such. If false, exact [GroupBy queries](groupbyquery.md) will be used instead.|druid.sql.planner.useApproximateTopN on the Broker (default: true)| + +## Metadata tables + +Druid Brokers infer table and column metadata for each datasource from segments loaded in the cluster, and use this to +plan SQL queries. This metadata is cached on Broker startup and also updated periodically in the background through +[SegmentMetadata queries](segmentmetadataquery.md). Background metadata refreshing is triggered by +segments entering and exiting the cluster, and can also be throttled through configuration. + +Druid exposes system information through special system tables. There are two such schemas available: Information Schema and Sys Schema. +Information schema provides details about table and column types. The "sys" schema provides information about Druid internals like segments/tasks/servers. + +### INFORMATION SCHEMA + +You can access table and column metadata through JDBC using `connection.getMetaData()`, or through the +INFORMATION_SCHEMA tables described below. For example, to retrieve metadata for the Druid +datasource "foo", use the query: + +```sql +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'druid' AND TABLE_NAME = 'foo' +``` + +> Note: INFORMATION_SCHEMA tables do not currently support Druid-specific functions like `TIME_PARSE` and +> `APPROX_QUANTILE_DS`. Only standard SQL functions can be used. + +#### SCHEMATA table +`INFORMATION_SCHEMA.SCHEMATA` provides a list of all known schemas, which include `druid` for standard [Druid Table datasources](datasource.md#table), `lookup` for [Lookups](datasource.md#lookup), `sys` for the virtual [System metadata tables](#system-schema), and `INFORMATION_SCHEMA` for these virtual tables. Tables are allowed to have the same name across different schemas, so the schema may be included in an SQL statement to distinguish them, e.g. `lookup.table` vs `druid.table`. + +|Column|Notes| +|------|-----| +|CATALOG_NAME|Always set as `druid`| +|SCHEMA_NAME|`druid`, `lookup`, `sys`, or `INFORMATION_SCHEMA`| +|SCHEMA_OWNER|Unused| +|DEFAULT_CHARACTER_SET_CATALOG|Unused| +|DEFAULT_CHARACTER_SET_SCHEMA|Unused| +|DEFAULT_CHARACTER_SET_NAME|Unused| +|SQL_PATH|Unused| + +#### TABLES table +`INFORMATION_SCHEMA.TABLES` provides a list of all known tables and schemas. + +|Column|Notes| +|------|-----| +|TABLE_CATALOG|Always set as `druid`| +|TABLE_SCHEMA|The 'schema' which the table falls under, see [SCHEMATA table for details](#schemata-table)| +|TABLE_NAME|Table name. For the `druid` schema, this is the `dataSource`.| +|TABLE_TYPE|"TABLE" or "SYSTEM_TABLE"| +|IS_JOINABLE|If a table is directly joinable if on the right hand side of a `JOIN` statement, without performing a subquery, this value will be set to `YES`, otherwise `NO`. Lookups are always joinable because they are globally distributed among Druid query processing nodes, but Druid datasources are not, and will use a less efficient subquery join.| +|IS_BROADCAST|If a table is 'broadcast' and distributed among all Druid query processing nodes, this value will be set to `YES`, such as lookups and Druid datasources which have a 'broadcast' load rule, else `NO`.| + +#### COLUMNS table +`INFORMATION_SCHEMA.COLUMNS` provides a list of all known columns across all tables and schema. + +|Column|Notes| +|------|-----| +|TABLE_CATALOG|Always set as `druid`| +|TABLE_SCHEMA|The 'schema' which the table column falls under, see [SCHEMATA table for details](#schemata-table)| +|TABLE_NAME|The 'table' which the column belongs to, see [TABLES table for details](#tables-table)| +|COLUMN_NAME|The column name| +|ORDINAL_POSITION|The order in which the column is stored in a table| +|COLUMN_DEFAULT|Unused| +|IS_NULLABLE|| +|DATA_TYPE|| +|CHARACTER_MAXIMUM_LENGTH|Unused| +|CHARACTER_OCTET_LENGTH|Unused| +|NUMERIC_PRECISION|| +|NUMERIC_PRECISION_RADIX|| +|NUMERIC_SCALE|| +|DATETIME_PRECISION|| +|CHARACTER_SET_NAME|| +|COLLATION_NAME|| +|JDBC_TYPE|Type code from java.sql.Types (Druid extension)| + +### SYSTEM SCHEMA + +The "sys" schema provides visibility into Druid segments, servers and tasks. + +> Note: "sys" tables do not currently support Druid-specific functions like `TIME_PARSE` and +> `APPROX_QUANTILE_DS`. Only standard SQL functions can be used. + +#### SEGMENTS table + +Segments table provides details on all Druid segments, whether they are published yet or not. + +|Column|Type|Notes| +|------|-----|-----| +|segment_id|STRING|Unique segment identifier| +|datasource|STRING|Name of datasource| +|start|STRING|Interval start time (in ISO 8601 format)| +|end|STRING|Interval end time (in ISO 8601 format)| +|size|LONG|Size of segment in bytes| +|version|STRING|Version string (generally an ISO8601 timestamp corresponding to when the segment set was first started). Higher version means the more recently created segment. Version comparing is based on string comparison.| +|partition_num|LONG|Partition number (an integer, unique within a datasource+interval+version; may not necessarily be contiguous)| +|num_replicas|LONG|Number of replicas of this segment currently being served| +|num_rows|LONG|Number of rows in current segment, this value could be null if unknown to Broker at query time| +|is_published|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 represents this segment has been published to the metadata store with `used=1`. See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|is_available|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is currently being served by any process(Historical or realtime). See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|is_realtime|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is _only_ served by realtime tasks, and 0 if any historical process is serving this segment.| +|is_overshadowed|LONG|Boolean is represented as long type where 1 = true, 0 = false. 1 if this segment is published and is _fully_ overshadowed by some other published segments. Currently, is_overshadowed is always false for unpublished segments, although this may change in the future. You can filter for segments that "should be published" by filtering for `is_published = 1 AND is_overshadowed = 0`. Segments can briefly be both published and overshadowed if they were recently replaced, but have not been unpublished yet. See the [Architecture page](../design/architecture.md#segment-lifecycle) for more details.| +|shard_spec|STRING|JSON-serialized form of the segment `ShardSpec`| +|dimensions|STRING|JSON-serialized form of the segment dimensions| +|metrics|STRING|JSON-serialized form of the segment metrics| +|last_compaction_state|STRING|JSON-serialized form of the compaction task's config (compaction task which created this segment). May be null if segment was not created by compaction task.| + +For example to retrieve all segments for datasource "wikipedia", use the query: + +```sql +SELECT * FROM sys.segments WHERE datasource = 'wikipedia' +``` + +Another example to retrieve segments total_size, avg_size, avg_num_rows and num_segments per datasource: + +```sql +SELECT + datasource, + SUM("size") AS total_size, + CASE WHEN SUM("size") = 0 THEN 0 ELSE SUM("size") / (COUNT(*) FILTER(WHERE "size" > 0)) END AS avg_size, + CASE WHEN SUM(num_rows) = 0 THEN 0 ELSE SUM("num_rows") / (COUNT(*) FILTER(WHERE num_rows > 0)) END AS avg_num_rows, + COUNT(*) AS num_segments +FROM sys.segments +GROUP BY 1 +ORDER BY 2 DESC +``` + +If you want to retrieve segment that was compacted (ANY compaction): + +```sql +SELECT * FROM sys.segments WHERE last_compaction_state is not null +``` + +or if you want to retrieve segment that was compacted only by a particular compaction spec (such as that of the auto compaction): + +```sql +SELECT * FROM sys.segments WHERE last_compaction_state == 'SELECT * FROM sys.segments where last_compaction_state = 'CompactionState{partitionsSpec=DynamicPartitionsSpec{maxRowsPerSegment=5000000, maxTotalRows=9223372036854775807}, indexSpec={bitmap={type=roaring, compressRunOnSerialization=true}, dimensionCompression=lz4, metricCompression=lz4, longEncoding=longs, segmentLoader=null}}' +``` + +*Caveat:* Note that a segment can be served by more than one stream ingestion tasks or Historical processes, in that case it would have multiple replicas. These replicas are weakly consistent with each other when served by multiple ingestion tasks, until a segment is eventually served by a Historical, at that point the segment is immutable. Broker prefers to query a segment from Historical over an ingestion task. But if a segment has multiple realtime replicas, for e.g.. Kafka index tasks, and one task is slower than other, then the sys.segments query results can vary for the duration of the tasks because only one of the ingestion tasks is queried by the Broker and it is not guaranteed that the same task gets picked every time. The `num_rows` column of segments table can have inconsistent values during this period. There is an open [issue](https://github.com/apache/druid/issues/5915) about this inconsistency with stream ingestion tasks. + +#### SERVERS table + +Servers table lists all discovered servers in the cluster. + +|Column|Type|Notes| +|------|-----|-----| +|server|STRING|Server name in the form host:port| +|host|STRING|Hostname of the server| +|plaintext_port|LONG|Unsecured port of the server, or -1 if plaintext traffic is disabled| +|tls_port|LONG|TLS port of the server, or -1 if TLS is disabled| +|server_type|STRING|Type of Druid service. Possible values include: COORDINATOR, OVERLORD, BROKER, ROUTER, HISTORICAL, MIDDLE_MANAGER or PEON.| +|tier|STRING|Distribution tier see [druid.server.tier](../configuration/index.md#historical-general-configuration). Only valid for HISTORICAL type, for other types it's null| +|current_size|LONG|Current size of segments in bytes on this server. Only valid for HISTORICAL type, for other types it's 0| +|max_size|LONG|Max size in bytes this server recommends to assign to segments see [druid.server.maxSize](../configuration/index.md#historical-general-configuration). Only valid for HISTORICAL type, for other types it's 0| +|is_leader|LONG|1 if the server is currently the 'leader' (for services which have the concept of leadership), otherwise 0 if the server is not the leader, or the default long value (0 or null depending on `druid.generic.useDefaultValueForNull`) if the server type does not have the concept of leadership| + +To retrieve information about all servers, use the query: + +```sql +SELECT * FROM sys.servers; +``` + +#### SERVER_SEGMENTS table + +SERVER_SEGMENTS is used to join servers with segments table + +|Column|Type|Notes| +|------|-----|-----| +|server|STRING|Server name in format host:port (Primary key of [servers table](#servers-table))| +|segment_id|STRING|Segment identifier (Primary key of [segments table](#segments-table))| + +JOIN between "servers" and "segments" can be used to query the number of segments for a specific datasource, +grouped by server, example query: + +```sql +SELECT count(segments.segment_id) as num_segments from sys.segments as segments +INNER JOIN sys.server_segments as server_segments +ON segments.segment_id = server_segments.segment_id +INNER JOIN sys.servers as servers +ON servers.server = server_segments.server +WHERE segments.datasource = 'wikipedia' +GROUP BY servers.server; +``` + +#### TASKS table + +The tasks table provides information about active and recently-completed indexing tasks. For more information +check out the documentation for [ingestion tasks](../ingestion/tasks.md). + +|Column|Type|Notes| +|------|-----|-----| +|task_id|STRING|Unique task identifier| +|group_id|STRING|Task group ID for this task, the value depends on the task `type`. For example, for native index tasks, it's same as `task_id`, for sub tasks, this value is the parent task's ID| +|type|STRING|Task type, for example this value is "index" for indexing tasks. See [tasks-overview](../ingestion/tasks.md)| +|datasource|STRING|Datasource name being indexed| +|created_time|STRING|Timestamp in ISO8601 format corresponding to when the ingestion task was created. Note that this value is populated for completed and waiting tasks. For running and pending tasks this value is set to 1970-01-01T00:00:00Z| +|queue_insertion_time|STRING|Timestamp in ISO8601 format corresponding to when this task was added to the queue on the Overlord| +|status|STRING|Status of a task can be RUNNING, FAILED, SUCCESS| +|runner_status|STRING|Runner status of a completed task would be NONE, for in-progress tasks this can be RUNNING, WAITING, PENDING| +|duration|LONG|Time it took to finish the task in milliseconds, this value is present only for completed tasks| +|location|STRING|Server name where this task is running in the format host:port, this information is present only for RUNNING tasks| +|host|STRING|Hostname of the server where task is running| +|plaintext_port|LONG|Unsecured port of the server, or -1 if plaintext traffic is disabled| +|tls_port|LONG|TLS port of the server, or -1 if TLS is disabled| +|error_msg|STRING|Detailed error message in case of FAILED tasks| + +For example, to retrieve tasks information filtered by status, use the query + +```sql +SELECT * FROM sys.tasks WHERE status='FAILED'; +``` + +#### SUPERVISORS table + +The supervisors table provides information about supervisors. + +|Column|Type|Notes| +|------|-----|-----| +|supervisor_id|STRING|Supervisor task identifier| +|state|STRING|Basic state of the supervisor. Available states: `UNHEALTHY_SUPERVISOR`, `UNHEALTHY_TASKS`, `PENDING`, `RUNNING`, `SUSPENDED`, `STOPPING`. Check [Kafka Docs](../development/extensions-core/kafka-ingestion.md#operations) for details.| +|detailed_state|STRING|Supervisor specific state. (See documentation of the specific supervisor for details, e.g. [Kafka](../development/extensions-core/kafka-ingestion.md) or [Kinesis](../development/extensions-core/kinesis-ingestion.md))| +|healthy|LONG|Boolean represented as long type where 1 = true, 0 = false. 1 indicates a healthy supervisor| +|type|STRING|Type of supervisor, e.g. `kafka`, `kinesis` or `materialized_view`| +|source|STRING|Source of the supervisor, e.g. Kafka topic or Kinesis stream| +|suspended|LONG|Boolean represented as long type where 1 = true, 0 = false. 1 indicates supervisor is in suspended state| +|spec|STRING|JSON-serialized supervisor spec| + +For example, to retrieve supervisor tasks information filtered by health status, use the query + +```sql +SELECT * FROM sys.supervisors WHERE healthy=0; +``` + +## Server configuration + +Druid SQL planning occurs on the Broker and is configured by +[Broker runtime properties](../configuration/index.md#sql). + +## Security + +Please see [Defining SQL permissions](../operations/security-user-auth.md#sql-permissions) in the +basic security documentation for information on permissions needed for making SQL queries. diff --git a/querying/topnquery.md b/querying/topnquery.md new file mode 100644 index 0000000..f802785 --- /dev/null +++ b/querying/topnquery.md @@ -0,0 +1,261 @@ +--- +id: topnquery +title: "TopN queries" +sidebar_label: "TopN" +--- + + + +> Apache Druid supports two query languages: [Druid SQL](sql.md) and [native queries](querying.md). +> This document describes a query +> type in the native language. For information about when Druid SQL will use this query type, refer to the +> [SQL documentation](sql.md#query-types). + +Apache Druid TopN queries return a sorted set of results for the values in a given dimension according to some criteria. Conceptually, they can be thought of as an approximate [GroupByQuery](../querying/groupbyquery.md) over a single dimension with an [Ordering](../querying/limitspec.md) spec. TopNs are much faster and resource efficient than GroupBys for this use case. These types of queries take a topN query object and return an array of JSON objects where each object represents a value asked for by the topN query. + +TopNs are approximate in that each data process will rank their top K results and only return those top K results to the Broker. K, by default in Druid, is `max(1000, threshold)`. In practice, this means that if you ask for the top 1000 items ordered, the correctness of the first ~900 items will be 100%, and the ordering of the results after that is not guaranteed. TopNs can be made more accurate by increasing the threshold. + +A topN query object looks like: + +```json +{ + "queryType": "topN", + "dataSource": "sample_data", + "dimension": "sample_dim", + "threshold": 5, + "metric": "count", + "granularity": "all", + "filter": { + "type": "and", + "fields": [ + { + "type": "selector", + "dimension": "dim1", + "value": "some_value" + }, + { + "type": "selector", + "dimension": "dim2", + "value": "some_other_val" + } + ] + }, + "aggregations": [ + { + "type": "longSum", + "name": "count", + "fieldName": "count" + }, + { + "type": "doubleSum", + "name": "some_metric", + "fieldName": "some_metric" + } + ], + "postAggregations": [ + { + "type": "arithmetic", + "name": "average", + "fn": "/", + "fields": [ + { + "type": "fieldAccess", + "name": "some_metric", + "fieldName": "some_metric" + }, + { + "type": "fieldAccess", + "name": "count", + "fieldName": "count" + } + ] + } + ], + "intervals": [ + "2013-08-31T00:00:00.000/2013-09-03T00:00:00.000" + ] +} +``` + +There are 11 parts to a topN query. + +|property|description|required?| +|--------|-----------|---------| +|queryType|This String should always be "topN"; this is the first thing Druid looks at to figure out how to interpret the query|yes| +|dataSource|A String or Object defining the data source to query, very similar to a table in a relational database. See [DataSource](../querying/datasource.md) for more information.|yes| +|intervals|A JSON Object representing ISO-8601 Intervals. This defines the time ranges to run the query over.|yes| +|granularity|Defines the granularity to bucket query results. See [Granularities](../querying/granularities.md)|yes| +|filter|See [Filters](../querying/filters.md)|no| +|aggregations|See [Aggregations](../querying/aggregations.md)|for numeric metricSpec, aggregations or postAggregations should be specified. Otherwise no.| +|postAggregations|See [Post Aggregations](../querying/post-aggregations.md)|for numeric metricSpec, aggregations or postAggregations should be specified. Otherwise no.| +|dimension|A String or JSON object defining the dimension that you want the top taken for. For more info, see [DimensionSpecs](../querying/dimensionspecs.md)|yes| +|threshold|An integer defining the N in the topN (i.e. how many results you want in the top list)|yes| +|metric|A String or JSON object specifying the metric to sort by for the top list. For more info, see [TopNMetricSpec](../querying/topnmetricspec.md).|yes| +|context|See [Context](../querying/query-context.md)|no| + +Please note the context JSON object is also available for topN queries and should be used with the same caution as the timeseries case. +The format of the results would look like so: + +```json +[ + { + "timestamp": "2013-08-31T00:00:00.000Z", + "result": [ + { + "dim1": "dim1_val", + "count": 111, + "some_metrics": 10669, + "average": 96.11711711711712 + }, + { + "dim1": "another_dim1_val", + "count": 88, + "some_metrics": 28344, + "average": 322.09090909090907 + }, + { + "dim1": "dim1_val3", + "count": 70, + "some_metrics": 871, + "average": 12.442857142857143 + }, + { + "dim1": "dim1_val4", + "count": 62, + "some_metrics": 815, + "average": 13.14516129032258 + }, + { + "dim1": "dim1_val5", + "count": 60, + "some_metrics": 2787, + "average": 46.45 + } + ] + } +] +``` + +## Behavior on multi-value dimensions + +topN queries can group on multi-value dimensions. When grouping on a multi-value dimension, _all_ values +from matching rows will be used to generate one group per value. It's possible for a query to return more groups than +there are rows. For example, a topN on the dimension `tags` with filter `"t1" AND "t3"` would match only row1, and +generate a result with three groups: `t1`, `t2`, and `t3`. If you only need to include values that match +your filter, you can use a [filtered dimensionSpec](dimensionspecs.md#filtered-dimensionspecs). This can also +improve performance. + +See [Multi-value dimensions](multi-value-dimensions.md) for more details. + +## Aliasing + +The current TopN algorithm is an approximate algorithm. The top 1000 local results from each segment are returned for merging to determine the global topN. As such, the topN algorithm is approximate in both rank and results. Approximate results *ONLY APPLY WHEN THERE ARE MORE THAN 1000 DIM VALUES*. A topN over a dimension with fewer than 1000 unique dimension values can be considered accurate in rank and accurate in aggregates. + +The threshold can be modified from its default 1000 via the server parameter `druid.query.topN.minTopNThreshold`, which needs a restart of the servers to take effect, or via `minTopNThreshold` in the query context, which takes effect per query. + +If you are wanting the top 100 of a high cardinality, uniformly distributed dimension ordered by some low-cardinality, uniformly distributed dimension, you are potentially going to get aggregates back that are missing data. + +To put it another way, the best use cases for topN are when you can have confidence that the overall results are uniformly in the top. For example, if a particular site ID is in the top 10 for some metric for every hour of every day, then it will probably be accurate in the topN over multiple days. But if a site is barely in the top 1000 for any given hour, but over the whole query granularity is in the top 500 (example: a site which gets highly uniform traffic co-mingling in the dataset with sites with highly periodic data), then a top500 query may not have that particular site at the exact rank, and may not be accurate for that particular site's aggregates. + +Before continuing in this section, please consider if you really need exact results. Getting exact results is a very resource intensive process. For the vast majority of "useful" data results, an approximate topN algorithm supplies plenty of accuracy. + +Users wishing to get an *exact rank and exact aggregates* topN over a dimension with greater than 1000 unique values should issue a groupBy query and sort the results themselves. This is very computationally expensive for high-cardinality dimensions. + +Users who can tolerate *approximate rank* topN over a dimension with greater than 1000 unique values, but require *exact aggregates* can issue two queries. One to get the approximate topN dimension values, and another topN with dimension selection filters which only use the topN results of the first. + +### Example First query + +```json +{ + "aggregations": [ + { + "fieldName": "L_QUANTITY_longSum", + "name": "L_QUANTITY_", + "type": "longSum" + } + ], + "dataSource": "tpch_year", + "dimension":"l_orderkey", + "granularity": "all", + "intervals": [ + "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z" + ], + "metric": "L_QUANTITY_", + "queryType": "topN", + "threshold": 2 +} +``` + +### Example second query + +```json +{ + "aggregations": [ + { + "fieldName": "L_TAX_doubleSum", + "name": "L_TAX_", + "type": "doubleSum" + }, + { + "fieldName": "L_DISCOUNT_doubleSum", + "name": "L_DISCOUNT_", + "type": "doubleSum" + }, + { + "fieldName": "L_EXTENDEDPRICE_doubleSum", + "name": "L_EXTENDEDPRICE_", + "type": "doubleSum" + }, + { + "fieldName": "L_QUANTITY_longSum", + "name": "L_QUANTITY_", + "type": "longSum" + }, + { + "name": "count", + "type": "count" + } + ], + "dataSource": "tpch_year", + "dimension":"l_orderkey", + "filter": { + "fields": [ + { + "dimension": "l_orderkey", + "type": "selector", + "value": "103136" + }, + { + "dimension": "l_orderkey", + "type": "selector", + "value": "1648672" + } + ], + "type": "or" + }, + "granularity": "all", + "intervals": [ + "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z" + ], + "metric": "L_QUANTITY_", + "queryType": "topN", + "threshold": 2 +} +``` From 222f234eb15fafaf217e7052ea97abe0d56cf74b Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Sat, 31 Jul 2021 17:52:01 -0400 Subject: [PATCH 6/6] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=88=B0=20Roll-up=20?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tutorials/tutorial-query.md | 4 ++-- tutorials/tutorial-rollup.md | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/tutorials/tutorial-query.md b/tutorials/tutorial-query.md index e5964e6..de613ce 100644 --- a/tutorials/tutorial-query.md +++ b/tutorials/tutorial-query.md @@ -2,8 +2,8 @@ 本教程文档主要为了对如何在 Apache Druid 使用 SQL 进行查询进行说明。 -假设你已经完成了 [快速开始](../tutorials/index.md) 页面中的内容或者下面页面中有关的内容的内容。因为在 Apache Druid 中进行查询之前, -你需要将注入导入到 Druid 后才能够让进行下一步的操作: +假设你已经完成了 [快速开始](../tutorials/index.md) 页面中的内容或者下面页面中有关的内容。因为在 Apache Druid 中进行查询之前, +你需要将数据导入到 Druid 后才能够让进行下一步的操作: * [教程:载入一个文件](../tutorials/tutorial-batch.md) * [教程:从 Kafka 中载入流数据](../tutorials/tutorial-kafka.md) diff --git a/tutorials/tutorial-rollup.md b/tutorials/tutorial-rollup.md index 4c1a5be..f19405f 100644 --- a/tutorials/tutorial-rollup.md +++ b/tutorials/tutorial-rollup.md @@ -1,12 +1,17 @@ # Roll-up -Apache Druid can summarize raw data at ingestion time using a process we refer to as "roll-up". Roll-up is a first-level aggregation operation over a selected set of columns that reduces the size of stored data. -This tutorial will demonstrate the effects of roll-up on an example dataset. +Apache Druid 可以在数据摄取阶段对原始数据进行汇总,这个过程我们称为 "roll-up"。 +Roll-up 是第一级对选定列集的一级聚合操作,通过这个操作我们能够减少存储数据的大小。 -For this tutorial, we'll assume you've already downloaded Druid as described in -the [single-machine quickstart](index.html) and have it running on your local machine. +本教程中将讨论在一个示例数据集上进行 roll-up 的示例。 -It will also be helpful to have finished [Tutorial: Loading a file](../tutorials/tutorial-batch.md) and [Tutorial: Querying data](../tutorials/tutorial-query.md). +假设你已经完成了 [快速开始](../tutorials/index.md) 页面中的内容或者下面页面中有关的内容,并且你的 Druid 实例已经在你的本地的计算机上运行了。 + + +同时,如果你已经完成了下面内容的阅读的话将会更好的帮助你理解 Roll-up 的相关内容 + +* [教程:载入一个文件](../tutorials/tutorial-batch.md) +* [教程:查询数据](../tutorials/tutorial-query.md) ## Example data