@@ -73,7 +73,7 @@ use crate::metrics::increment_bytes_scanned_in_query_by_date;
7373use crate :: option:: Mode ;
7474use crate :: parseable:: { DEFAULT_TENANT , PARSEABLE } ;
7575use crate :: storage:: { ObjectStorageProvider , ObjectStoreFormat } ;
76- use crate :: utils:: time:: TimeRange ;
76+ use crate :: utils:: time:: { DATE_BIN_EPOCH_ANCHOR , TimeRange , count_api_bin_interval } ;
7777
7878/// Boxed record-batch stream used as the streaming half of query results.
7979type BoxedBatchStream = SendableRecordBatchStream ;
@@ -638,32 +638,13 @@ impl CountsRequest {
638638
639639 let time_range = TimeRange :: parse_human_time ( & self . start_time , & self . end_time ) ?;
640640
641- let dur = time_range. end . signed_duration_since ( time_range. start ) ;
642-
643641 let table_name = & self . stream ;
644642 let start_time_col_name = "_bin_start_time_" ;
645643 let end_time_col_name = "_bin_end_time_" ;
646- let date_bin = if dur. num_minutes ( ) <= 60 * 5 {
647- // less than 5 hour = 1 min bin
648- format ! (
649- "CAST(DATE_BIN('1m', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') AS TEXT) as {start_time_col_name}, DATE_BIN('1m', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') + INTERVAL '1m' as {end_time_col_name}"
650- )
651- } else if dur. num_minutes ( ) <= 60 * 24 {
652- // 1 day = 5 min bin
653- format ! (
654- "CAST(DATE_BIN('5m', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') AS TEXT) as {start_time_col_name}, DATE_BIN('5m', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') + INTERVAL '5m' as {end_time_col_name}"
655- )
656- } else if dur. num_minutes ( ) < 60 * 24 * 10 {
657- // 10 days = 1 hour bin
658- format ! (
659- "CAST(DATE_BIN('1h', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') AS TEXT) as {start_time_col_name}, DATE_BIN('1h', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') + INTERVAL '1h' as {end_time_col_name}"
660- )
661- } else {
662- // 1 day
663- format ! (
664- "CAST(DATE_BIN('1d', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') AS TEXT) as {start_time_col_name}, DATE_BIN('1d', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '1970-01-01 00:00:00+00') + INTERVAL '1d' as {end_time_col_name}"
665- )
666- } ;
644+ let bin_interval = count_api_bin_interval ( & time_range. start , & time_range. end ) ;
645+ let date_bin = format ! (
646+ "CAST(DATE_BIN('{bin_interval}', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '{DATE_BIN_EPOCH_ANCHOR}') AS TEXT) as {start_time_col_name}, DATE_BIN('{bin_interval}', \" {table_name}\" .\" {time_column}\" , TIMESTAMP '{DATE_BIN_EPOCH_ANCHOR}') + INTERVAL '{bin_interval}' as {end_time_col_name}"
647+ ) ;
667648
668649 let group_by_cols = count_conditions
669650 . group_by
0 commit comments