Skip to content

Commit

Permalink
chore(cubesql): Additional wide table benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
paveltiunov committed Dec 22, 2023
1 parent aa6c08b commit 591dc9b
Show file tree
Hide file tree
Showing 16 changed files with 1,417 additions and 273 deletions.
101 changes: 100 additions & 1 deletion rust/cubesql/cubesql/benches/benchmarks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,108 @@ pub fn power_bi_wrap(c: &mut Criterion) {
bench_func!("power_bi_wrap", get_power_bi_wrap(), c);
}

fn get_power_bi_sum_wrap() -> String {
r#"select
"_"."dim1",
"_"."a0",
"_"."a1",
"_"."a2",
"_"."a3"
from
(
select
"rows"."dim1" as "dim1",
sum(cast("rows"."measure1" as decimal)) as "a0",
sum(cast("rows"."measure2" as decimal)) as "a1",
sum(
cast("rows"."measure3" as decimal)
) as "a2",
sum(cast("rows"."measure4" as decimal)) as "a3"
from
(
select
"_"."dim0",
"_"."measure1",
"_"."measure2",
"_"."measure3",
"_"."measure4",
"_"."measure5",
"_"."measure6",
"_"."measure7",
"_"."measure8",
"_"."measure9",
"_"."measure10",
"_"."measure11",
"_"."measure12",
"_"."measure13",
"_"."measure14",
"_"."measure15",
"_"."measure16",
"_"."measure17",
"_"."measure18",
"_"."measure19",
"_"."measure20",
"_"."dim1",
"_"."dim2",
"_"."dim3",
"_"."dim4",
"_"."dim5",
"_"."dim6",
"_"."dim7",
"_"."dim8",
"_"."dim9",
"_"."dim10",
"_"."dim11",
"_"."dim12",
"_"."dim13",
"_"."dim14",
"_"."dim15",
"_"."dim16",
"_"."dim17",
"_"."dim18",
"_"."dim19",
"_"."dim20",
"_"."dim21",
"_"."dim22",
"_"."dim23",
"_"."dim24",
"_"."dim25",
"_"."dim26",
"_"."dim27",
"_"."dim28",
"_"."dim29",
"_"."dim30",
"_"."__user",
"_"."__cubeJoinField"
from
"public"."WideCube" "_"
where
"_"."dim1" = 'Jewelry'
) "rows"
group by
"dim1"
) "_"
where
(
not "_"."a0" is null
or not "_"."a1" is null
)
or (
not "_"."a2" is null
or not "_"."a3" is null
)
limit
1000001"#
.to_string()
}

pub fn power_bi_sum_wrap(c: &mut Criterion) {
bench_func!("power_bi_sum_wrap", get_power_bi_sum_wrap(), c);
}

criterion_group! {
name = benches;
config = Criterion::default().measurement_time(std::time::Duration::from_secs(30)).sample_size(10);
targets = split_query, split_query_count_distinct, wrapped_query, power_bi_wrap
targets = split_query, split_query_count_distinct, wrapped_query, power_bi_wrap, power_bi_sum_wrap
}
criterion_main!(benches);
155 changes: 155 additions & 0 deletions rust/cubesql/cubesql/src/compile/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3994,6 +3994,161 @@ ORDER BY \"COUNT(count)\" DESC"
);
}

#[tokio::test]
async fn powerbi_sum_wrap() {
init_logger();

let query_plan = convert_select_to_query_plan(
r#"select
"_"."dim1",
"_"."a0",
"_"."a1",
"_"."a2",
"_"."a3"
from
(
select
"rows"."dim1" as "dim1",
sum(cast("rows"."measure1" as decimal)) as "a0",
sum(cast("rows"."measure2" as decimal)) as "a1",
sum(
cast("rows"."measure3" as decimal)
) as "a2",
sum(cast("rows"."measure4" as decimal)) as "a3"
from
(
select
"_"."dim0",
"_"."measure1",
"_"."measure2",
"_"."measure3",
"_"."measure4",
"_"."measure5",
"_"."measure6",
"_"."measure7",
"_"."measure8",
"_"."measure9",
"_"."measure10",
"_"."measure11",
"_"."measure12",
"_"."measure13",
"_"."measure14",
"_"."measure15",
"_"."measure16",
"_"."measure17",
"_"."measure18",
"_"."measure19",
"_"."measure20",
"_"."dim1",
"_"."dim2",
"_"."dim3",
"_"."dim4",
"_"."dim5",
"_"."dim6",
"_"."dim7",
"_"."dim8",
"_"."dim9",
"_"."dim10",
"_"."dim11",
"_"."dim12",
"_"."dim13",
"_"."dim14",
"_"."dim15",
"_"."dim16",
"_"."dim17",
"_"."dim18",
"_"."__user",
"_"."__cubeJoinField"
from
"public"."WideCube" "_"
where
"_"."dim1" = 'Jewelry'
) "rows"
group by
"dim1"
) "_"
where
(
not "_"."a0" is null
or not "_"."a1" is null
)
or (
not "_"."a2" is null
or not "_"."a3" is null
)
limit
1000001"#
.to_string(),
DatabaseProtocol::PostgreSQL,
)
.await;

let logical_plan = query_plan.as_logical_plan();
assert_eq!(
logical_plan.find_cube_scan().request,
V1LoadRequestQuery {
measures: Some(vec![
"WideCube.measure1".to_string(),
"WideCube.measure2".to_string(),
"WideCube.measure3".to_string(),
"WideCube.measure4".to_string(),
]),
dimensions: Some(vec!["WideCube.dim1".to_string()]),
segments: Some(vec![]),
time_dimensions: None,
order: None,
limit: Some(1000001),
offset: None,
filters: Some(vec![
V1LoadRequestQueryFilterItem {
member: Some("WideCube.dim1".to_string()),
operator: Some("equals".to_string()),
values: Some(vec!["Jewelry".to_string()]),
or: None,
and: None,
},
V1LoadRequestQueryFilterItem {
member: None,
operator: None,
values: None,
or: Some(vec![
json!(V1LoadRequestQueryFilterItem {
member: Some("WideCube.measure1".to_string()),
operator: Some("set".to_string()),
values: None,
or: None,
and: None,
}),
json!(V1LoadRequestQueryFilterItem {
member: Some("WideCube.measure2".to_string()),
operator: Some("set".to_string()),
values: None,
or: None,
and: None,
}),
json!(V1LoadRequestQueryFilterItem {
member: Some("WideCube.measure3".to_string()),
operator: Some("set".to_string()),
values: None,
or: None,
and: None,
}),
json!(V1LoadRequestQueryFilterItem {
member: Some("WideCube.measure4".to_string()),
operator: Some("set".to_string()),
values: None,
or: None,
and: None,
})
]),
and: None,
},
]),
ungrouped: None,
}
);
}

#[tokio::test]
async fn powerbi_inner_decimal_cast() {
init_logger();
Expand Down
31 changes: 5 additions & 26 deletions rust/cubesql/cubesql/src/compile/rewrite/analysis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use crate::{
engine::provider::CubeContext,
rewrite::{
converter::{is_expr_node, node_to_expr, LogicalPlanToLanguageConverter},
expr_column_name, AggregateFunctionExprFun, AggregateUDFExprFun, AliasExprAlias,
AllMembersAlias, AllMembersCube, ChangeUserCube, ColumnExprColumn, DimensionName,
FilterMemberMember, FilterMemberOp, LiteralExprValue, LiteralMemberRelation,
LiteralMemberValue, LogicalPlanLanguage, MeasureName, ScalarFunctionExprFun,
SegmentName, TableScanSourceTableName, TimeDimensionDateRange,
expr_column_name, AggregateFunctionExprDistinct, AggregateFunctionExprFun,
AggregateUDFExprFun, AliasExprAlias, AllMembersAlias, AllMembersCube, ChangeUserCube,
ColumnExprColumn, DimensionName, FilterMemberMember, FilterMemberOp, LiteralExprValue,
LiteralMemberRelation, LiteralMemberValue, LogicalPlanLanguage, MeasureName,
ScalarFunctionExprFun, SegmentName, TableScanSourceTableName, TimeDimensionDateRange,
TimeDimensionGranularity, TimeDimensionName, VirtualFieldCube, VirtualFieldName,
},
},
Expand Down Expand Up @@ -317,34 +317,13 @@ impl LogicalPlanAnalysis {
None
}
}
LogicalPlanLanguage::AggregateFunctionExprFun(AggregateFunctionExprFun(fun)) => {
if matches!(
*fun,
AggregateFunction::Count
| AggregateFunction::Sum
| AggregateFunction::Avg
| AggregateFunction::Min
| AggregateFunction::Max
) {
Some(0)
} else {
None
}
}
LogicalPlanLanguage::AggregateUDFExpr(params) => {
let mut trivial = 0;
for id in params.iter() {
trivial = trivial_push_down(*id)?.max(trivial);
}
Some(trivial + 1)
}
LogicalPlanLanguage::AggregateFunctionExpr(params) => {
let mut trivial = 0;
for id in params.iter() {
trivial = trivial_push_down(*id)?.max(trivial);
}
Some(trivial + 1)
}
_ => None,
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ expression: "execute_query(\"\n SELECT\n 'db'
| db | public | KibanaSampleDataEcommerce | User | ovr | 18000 | NULL | true | false | -1 | NULL | 15 | false | NULL | NULL |
| db | public | Logs | User | ovr | 18018 | NULL | true | false | -1 | NULL | 7 | false | NULL | NULL |
| db | public | NumberCube | User | ovr | 18028 | NULL | true | false | -1 | NULL | 3 | false | NULL | NULL |
| db | public | WideCube | User | ovr | 18034 | NULL | true | false | -1 | NULL | 107 | false | NULL | NULL |
| db | public | WideCube | User | ovr | 18034 | NULL | true | false | -1 | NULL | 207 | false | NULL | NULL |
+----------+--------+---------------------------+-----------+---------+-------+------+---------+--------------+-----------+---------+--------------+----------------+------------+-------------------------+
Loading

0 comments on commit 591dc9b

Please sign in to comment.