Skip to content

Commit 6a8ca2e

Browse files
authored
feat(tesseract): Support custom granularities in pre-aggregations with allow_non_strict_date_range_match=true (#10092)
* fix granularity_from_interval helper * cargo lock update * fix td match for allow_non_strict_date_range_match case
1 parent 4f4a0b4 commit 6a8ca2e

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

rust/cubeorchestrator/Cargo.lock

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/dimension_matcher.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,11 @@ impl<'a> DimensionMatcher<'a> {
185185
add_to_matched_dimension: bool,
186186
) -> Result<MatchState, CubeError> {
187187
let granularity = if self.pre_aggregation.allow_non_strict_date_range_match {
188-
time_dimension.granularity().clone()
188+
if let Some(granularity) = time_dimension.granularity_obj() {
189+
granularity.min_granularity()?
190+
} else {
191+
time_dimension.granularity().clone()
192+
}
189193
} else {
190194
time_dimension.rollup_granularity(self.query_tools.clone())?
191195
};

rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/granularity_helper.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,22 @@ impl GranularityHelper {
8080

8181
pub fn granularity_from_interval(interval: &Option<String>) -> Option<String> {
8282
if let Some(interval) = interval {
83-
if interval.contains("day") {
83+
if interval.contains("second") {
84+
Some("second".to_string())
85+
} else if interval.contains("minute") {
86+
Some("minute".to_string())
87+
} else if interval.contains("hour") {
88+
Some("hour".to_string())
89+
} else if interval.contains("day") {
90+
Some("day".to_string())
91+
} else if interval.contains("week") {
8492
Some("day".to_string())
8593
} else if interval.contains("month") {
8694
Some("month".to_string())
95+
} else if interval.contains("quarter") {
96+
Some("month".to_string())
8797
} else if interval.contains("year") {
8898
Some("year".to_string())
89-
} else if interval.contains("week") {
90-
Some("week".to_string())
91-
} else if interval.contains("hour") {
92-
Some("hour".to_string())
9399
} else {
94100
None
95101
}

0 commit comments

Comments
 (0)