fn read_group_predicate_all_time(c: &mut Criterion, row_group: &RowGroup, rng: &mut ThreadRng) {
    // This benchmark fixes the number of rows in the `RowGroup` (500K), and
    // varies the cardinality of the group keys.
    let time_pred = Predicate::with_time_range(&[], i64::MIN, i64::MAX);
    benchmark_read_group_vary_cardinality(
        c,
        "row_group_read_group_all_time_vary_cardinality",
        row_group,
        &time_pred,
        // grouping columns and expected cardinality
        vec![
            (vec!["env"], 2),
            (vec!["env", "data_centre"], 20),
            (vec!["data_centre", "cluster"], 200),
            (vec!["cluster", "node_id"], 2000),
            (vec!["cluster", "node_id", "pod_id"], 20000),
        ]
        .as_slice(),
    );

    // This benchmark fixes the cardinality of the group keys and varies the
    // number of columns grouped to produce that group key cardinality.
    benchmark_read_group_vary_group_cols(
        c,
        "row_group_read_group_all_time_vary_columns",
        row_group,
        &time_pred,
        // number of cols to group on and expected cardinality
        vec![
            (vec!["pod_id"], 20000),
            (vec!["node_id", "pod_id"], 20000),
            (vec!["cluster", "node_id", "pod_id"], 20000),
            (vec!["data_centre", "cluster", "node_id", "pod_id"], 20000),
        ]
        .as_slice(),
    );

    // This benchmark fixes the cardinality of the group keys and the number of
    // columns grouped on. It then varies the number of rows in the  `RowGroup`
    // to be processed.
    benchmark_read_group_vary_rows(
        c,
        "row_group_read_group_all_time_vary_rows",
        &[250_000, 500_000, 750_000, 1_000_000], //  `RowGroup` row sizes to vary
        &time_pred,
        (vec!["node_id", "pod_id"], 20000),
        rng,
    );
}
// These benchmarks track the performance of read_group using the general
// approach of building up a mapping of group keys. To avoid hitting the
// optimised no predicate implementation we apply a time predicate that covers
// the `RowGroup`.
These benchmarks track the performance of read_group using the general
approach of building up a mapping of group keys. To avoid hitting the
optimised no predicate implementation we apply a time predicate that covers
the `RowGroup`.
These benchmarks track the performance of read_group using the general approach of building up a mapping of group keys . To avoid hitting the optimised no predicate implementation we apply a time predicate that covers the ` RowGroup ` .
fn read_group_predicate_all_time(c: &mut Criterion, row_group: &RowGroup, rng: &mut ThreadRng) {
    // This benchmark fixes the number of rows in the `RowGroup` (500K), and
    // varies the cardinality of the group keys.
    let time_pred = Predicate::with_time_range(&[], i64::MIN, i64::MAX);
    benchmark_read_group_vary_cardinality(
        c,
        "row_group_read_group_all_time_vary_cardinality",
        row_group,
        &time_pred,
        // grouping columns and expected cardinality
        vec![
            (vec!["env"], 2),
            (vec!["env", "data_centre"], 20),
            (vec!["data_centre", "cluster"], 200),
            (vec!["cluster", "node_id"], 2000),
            (vec!["cluster", "node_id", "pod_id"], 20000),
        ]
        .as_slice(),
    );
    // This benchmark fixes the cardinality of the group keys and varies the
    // number of columns grouped to produce that group key cardinality.
    benchmark_read_group_vary_group_cols(
        c,
        "row_group_read_group_all_time_vary_columns",
        row_group,
        &time_pred,
        // number of cols to group on and expected cardinality
        vec![
            (vec!["pod_id"], 20000),
            (vec!["node_id", "pod_id"], 20000),
            (vec!["cluster", "node_id", "pod_id"], 20000),
            (vec!["data_centre", "cluster", "node_id", "pod_id"], 20000),
        ]
        .as_slice(),
    );
    // This benchmark fixes the cardinality of the group keys and the number of
    // columns grouped on. It then varies the number of rows in the  `RowGroup`
    // to be processed.
    benchmark_read_group_vary_rows(
        c,
        "row_group_read_group_all_time_vary_rows",
        &[250_000, 500_000, 750_000, 1_000_000], //  `RowGroup` row sizes to vary
        &time_pred,
        (vec!["node_id", "pod_id"], 20000),
        rng,
    );
}
fn read_group_predicate_all_time ( c : & mut Criterion , row_group : & RowGroup , rng : & mut ThreadRng ) { // This benchmark fixes the number of rows in the `RowGroup` (500K), and // varies the cardinality of the group keys. let time_pred = Predicate :: with_time_range ( & [ ] , i64 :: MIN , i64 :: MAX ) ; benchmark_read_group_vary_cardinality ( c , " " , row_group , & time_pred , // grouping columns and expected cardinality vec ! [ ( vec [ " " ] 2 ) ( vec [ " " " " ] 20 ) ( vec [ " " " " ] 200 ) ( vec [ " " " " ] 2000 ) ( vec [ " " " " " " ] 20000 ) ] . as_slice ( ) , ) ; // This benchmark fixes the cardinality of the group keys and varies the // number of columns grouped to produce that group key cardinality. benchmark_read_group_vary_group_cols ( c , " " , row_group , & time_pred , // number of cols to group on and expected cardinality vec ! [ ( vec [ " " ] 20000 ) ( vec [ " " " " ] 20000 ) ( vec [ " " " " " " ] 20000 ) ( vec [ " " " " " " " " ] 20000 ) ] . as_slice ( ) , ) ; // This benchmark fixes the cardinality of the group keys and the number of // columns grouped on. It then varies the number of rows in the  `RowGroup` // to be processed. benchmark_read_group_vary_rows ( c , " " , & [ 250_000 , 500_000 , 750_000 , 1_000_000 ] , //  `RowGroup` row sizes to vary & time_pred , ( vec ! [ " " " " ] , 20000 ) , rng , ) ; }
These benchmarks track the performance of read_group using the general
approach of building up a mapping of group keys.
These benchmarks track the performance of read_group using the general approach of building up a mapping of group keys .
c
&mut Criterion
row_group
&RowGroup
rng
&mut ThreadRng
c
&mut Criterion
row_group
&RowGroup
rng
&mut ThreadRng