This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new fdfecfd996 Improved docs for range partitioning. (#12350)
fdfecfd996 is described below
commit fdfecfd9968dda992cce34b381020b1204bc5f8f
Author: Gian Merlino <[email protected]>
AuthorDate: Mon May 16 09:42:31 2022 -0700
Improved docs for range partitioning. (#12350)
* Improved docs for range partitioning.
1) Clarify the benefits of range partitioning.
2) Clarify which filters support pruning.
3) Include the fact that multi-value dimensions cannot be used for
partitioning.
* Additional clarification.
* Update other section.
* Another adjustment.
* Updates from review.
---
docs/ingestion/native-batch.md | 64 +++++++++++++++++++++++++++++++-----------
1 file changed, 48 insertions(+), 16 deletions(-)
diff --git a/docs/ingestion/native-batch.md b/docs/ingestion/native-batch.md
index 4c528ed850..c441c39aeb 100644
--- a/docs/ingestion/native-batch.md
+++ b/docs/ingestion/native-batch.md
@@ -344,16 +344,17 @@ In hash partitioning, the partition function is used to
compute hash of partitio
#### Single-dimension range partitioning
-> Single dimension range partitioning is currently not supported in the
sequential mode of the Parallel task.
+> Single dimension range partitioning is not supported in the sequential mode
of the `index_parallel` task type.
+
+Range partitioning has [several benefits](#benefits-of-range-partitioning)
related to storage footprint and query
+performance.
The Parallel task will use one subtask when you set `maxNumConcurrentSubTasks`
to 1.
When you use this technique to partition your data, segment sizes may be
unequally distributed if the data in your `partitionDimension` is also
unequally distributed. Therefore, to avoid imbalance in data layout, review
the distribution of values in your source data before deciding on a
partitioning strategy.
-For segment pruning to be effective and translate into better query
performance, you must use
-the `partitionDimension` at query time. You can concatenate values from
multiple
-dimensions into a new dimension to use as the `partitionDimension`. In this
case, you
-must use that new dimension in your native filter `WHERE` clause.
+Range partitioning is not possible on multi-value dimensions. If the provided
+`partitionDimension` is multi-value, your ingestion job will report an error.
|property|description|default|required?|
|--------|-----------|-------|---------|
@@ -392,19 +393,17 @@ them to create the final segments. Finally, they push the
final segments to the
> the task may fail if the input changes in between the two passes.
#### Multi-dimension range partitioning
-> Multiple dimension (multi-dimension) range partitioning is an experimental
feature. Multi-dimension range partitioning is currently not supported in the
sequential mode of the Parallel task.
-When you use multi-dimension partitioning for your data, Druid is able to
distribute segment sizes more evenly than with single dimension partitioning.
+> Multiple dimension (multi-dimension) range partitioning is an experimental
feature.
+> Multi-dimension range partitioning is not supported in the sequential mode
of the
+> `index_parallel` task type.
-For segment pruning to be effective and translate into better query
performance, you must include the first of your `partitionDimensions` in the
`WHERE` clause at query time. For example, given the following
`partitionDimensions`:
-```
- "partitionsSpec": {
- "type": "range",
- "partitionDimensions":["coutryName","cityName"],
- "targetRowsPerSegment" : 5000
-}
-```
-Use "countryName" or both "countryName" and "cityName" in the `WHERE` clause
of your query to take advantage of the performance benefits from
multi-dimension partitioning.
+Range partitioning has [several benefits](#benefits-of-range-partitioning)
related to storage footprint and query
+performance. Multi-dimension range partitioning improves over single-dimension
range partitioning by allowing
+Druid to distribute segment sizes more evenly, and to prune on more dimensions.
+
+Range partitioning is not possible on multi-value dimensions. If one of the
provided
+`partitionDimensions` is multi-value, your ingestion job will report an error.
|property|description|default|required?|
|--------|-----------|-------|---------|
@@ -414,6 +413,39 @@ Use "countryName" or both "countryName" and "cityName" in
the `WHERE` clause of
|maxRowsPerSegment|Soft max for the number of rows to include in a
partition.|none|either this or `targetRowsPerSegment`|
|assumeGrouped|Assume that input data has already been grouped on time and
dimensions. Ingestion will run faster, but may choose sub-optimal partitions if
this assumption is violated.|false|no|
+#### Benefits of range partitioning
+
+Range partitioning, either `single_dim` or `range`, has several benefits:
+
+1. Lower storage footprint due to combining similar data into the same
segments, which improves compressibility.
+2. Better query performance due to Broker-level segment pruning, which removes
segments from
+ consideration when they cannot possibly contain data matching the query
filter.
+
+For Broker-level segment pruning to be effective, you must include partition
dimensions in the `WHERE` clause. Each
+partition dimension can participate in pruning if the prior partition
dimensions (those to its left) are also
+participating, and if the query uses filters that support pruning.
+
+Filters that support pruning include:
+
+- Equality on string literals, like `x = 'foo'` and `x IN ('foo', 'bar')`
where `x` is a string.
+- Comparison between string columns and string literals, like `x < 'foo'` or
other comparisons
+ involving `<`, `>`, `<=`, or `>=`.
+
+For example, if you configure the following `range` partitioning during
ingestion:
+
+```json
+"partitionsSpec": {
+ "type": "range",
+ "partitionDimensions": ["coutryName", "cityName"],
+ "targetRowsPerSegment": 5000
+}
+```
+
+Then, filters like `WHERE countryName = 'United States'` or `WHERE countryName
= 'United States' AND cityName = 'New York'`
+can make use of pruning. However, `WHERE cityName = 'New York'` cannot make
use of pruning, because countryName is not
+involved. The clause `WHERE cityName LIKE 'New%'` cannot make use of pruning
either, because LIKE filters do not
+support pruning.
+
## HTTP status endpoints
The supervisor task provides some HTTP endpoints to get running status.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]